《動手學深度學習》第五天2020-02-16

https://www.boyuai.com/elites/

2) 第二次打卡內容(2月15日-17日)截止打卡時間:2/17-22:00

Task03:過擬合、欠擬合及其解決方案;梯度消失、梯度爆炸;循環(huán)神經網絡進階(1天)

Task04:機器翻譯及相關技術;注意力機制與Seq2seq模型;Transformer(1天)

Task05:卷積神經網絡基礎;leNet;卷積神經網絡進階(1天)


Task04:機器翻譯及相關技術;注意力機制與Seq2seq模型;Transformer(1天)

13、機器翻譯和數據集

數據預處理中分詞(Tokenization)的工作是把字符形式的句子轉化為單詞組成的列表。

Encoder-Decoder常應用于輸入序列和輸出序列的長度是可變的應用,如機器翻譯、對話機器人、語音識別任務,而分類問題的輸出是固定的類別,不需要使用Encoder-Decoder。

Sequence to Sequence模型中,每個batch訓練時encoder和decoder都有固定長度的輸入,每個batch的輸入需要形狀一致。

集束搜索(Beam Search)是一種貪心算法,結合了greedy search和維特比算法,使用beam size參數來限制在每一步保留下來的可能性詞的數量。

14、注意力機制與Seq2seq模型

留坑

注意力機制借鑒了人類的注意力思維方式,以獲得需要重點關注的目標區(qū)域。

在計算注意力權重時,key 和 query 對應的向量維度不一定相等。在Dot-product Attention中,key與query維度需要一致,在MLP Attention中則不需要。

點積注意力層不引入新的模型參數。

注意力掩碼可以用來解決一組變長序列的編碼問題。


對于加入Attention機制的seq2seq模型,

seq2seq模型可以生成無窮長的序列。seq2seq模型的預測需人為設定終止條件,設定最長序列長度或者輸出[EOS]結束符號,若不加以限制則可能生成無窮長度序列。

每個時間步,解碼器輸入的語境向量(context vector)相同。每個位置都會計算各自的attention輸出。

解碼器RNN仍由編碼器最后一個時間步的隱藏狀態(tài)初始化。

引入注意力機制不能加速模型訓練。注意力機制本身有高效的并行性,但引入注意力并不能改變seq2seq內部RNN的迭代機制,因此無法加速。


點積注意力機制,

高維張量的矩陣乘法可用于并行計算多個位置的注意力分數。

計算點積后除以\sqrtu0z1t8osd??以減輕向量維度對注意力權重的影響。

可視化注意力權重的二維矩陣有助于分析序列內部的依賴關系。

對于兩個有效長度不同的輸入序列,若兩組鍵值對完全相同,那么對于同一個query的輸出不一定相同。有效長度不同導致 Attention Mask 不同,屏蔽掉無效位置后進行attention,會導致不同的輸出。參考代碼Dot-Product Attention的測試部分。

15、Transformer

留坑

在訓練和預測過程中,解碼器部分均只需進行一次前向傳播是錯誤的。訓練過程1次,預測過程要進行句子長度次前向傳播。

Transformer 內部的注意力模塊并不均為自注意力模塊,并不都是來自于自編碼器,Decoder 部分的第二個注意力層不是自注意力,key-value來自編碼器而query來自解碼器。

解碼器部分在預測過程中不需要使用 Attention Mask。

自注意力模塊理論上可以捕捉任意距離的依賴關系,因為自注意力會計算句子內任意兩個位置的注意力權重。


在Transformer模型中,注意力頭數為h,嵌入向量和隱藏狀態(tài)維度均為d,那么一個多頭注意力層所含的參數量是:h個注意力頭中,每個的參數量為3d^2,最后的輸出層形狀為hd×d,所以參數量共為4hd^2。


對于層歸一化,

層歸一化有利于加快收斂,減少訓練時間成本。

層歸一化對一個中間層的所有神經元進行歸一化。

層歸一化不是對每個神經元的輸入數據以mini-batch為單位進行匯總。批歸一化(Batch Normalization)才是對每個神經元的輸入數據以mini-batch為單位進行匯總。

層歸一化的效果不會受到batch大小的影響。


3) 第三次打卡內容(2月18日-21日)截止打卡時間:2/21-22:00

直播分享(2月18日)

Task06:批量歸一化和殘差網絡;凸優(yōu)化;梯度下降(1天)

Task07:優(yōu)化算法進階;word2vec;詞嵌入進階(1天)

Task08:文本分類;數據增強;模型微調(1天)

直播分享(2月21日)

Task06:批量歸一化和殘差網絡;凸優(yōu)化;梯度下降(1天)

16、批量歸一化(BatchNormalization)和殘差網絡

16.1 批量歸一化(BatchNormalization)

對輸入的標準化(淺層模型)

處理后的任意一個特征在數據集中所有樣本上的均值為0、標準差為1。

標準化處理輸入數據使各個特征的分布相近。

批量歸一化(深度模型)

利用小批量上的均值和標準差,不斷調整神經網絡中間輸出,從而使整個神經網絡在各層的中間輸出的數值更穩(wěn)定。

使得各個特征的分布相近和各層的中間輸出的數值更穩(wěn)定帶來的好處是什么?歸一化相比未歸一化結果相差多少?


1.對全連接層做批量歸一化


2.對卷積層做批量歸?化

位置:卷積計算之后、應?激活函數之前。

如果卷積計算輸出多個通道,我們需要對這些通道的輸出分別做批量歸一化,且每個通道都擁有獨立的拉伸和偏移參數。 計算:對單通道,batchsize=m,卷積計算輸出=pxq 對該通道中m×p×q個元素同時做批量歸一化,使用相同的均值和方差。

3.預測時的批量歸?化

訓練:以batch為單位,對每個batch計算均值和方差。

預測:用移動平均估算整個訓練數據集的樣本均值和方差。


代碼實現(xiàn)能力才是真本事,是基礎;文本知識的掌握只是必備元素之一。

講解視頻雖然三分之二都在講解代碼,但缺點是大都粗略而過,產生“原本就會的人沒必要看,不會的人看了后收獲不大(比如我)”的情況。視頻中應強調:本節(jié)知識點在函數庫調用中怎么實現(xiàn)及注意事項?有無和之前講到的知識點有聯(lián)系的地方,有的話捎帶復習一遍。可能這就是線上網課的內在固有缺陷(和學生主講視頻有一定關系)。

代碼安排有:從零實現(xiàn)和基于LeNet的應用,很到位了。

通過學習各種網絡結構也更加理解了對于網上調包俠的調侃,確實沒有什么技術含量。。。


16.2?殘差網絡(ResNet)

深度學習的問題:深度CNN網絡達到一定深度后再一味地增加層數并不能帶來進一步地分類性能提高,反而會招致網絡收斂變得更慢,準確率也變得更差。

方法:引入殘差塊,類似于控制中的反饋調節(jié)思想

殘差塊(Residual Block)

恒等映射:

左邊:f(x)=x

右邊:f(x)-x=0 (易于捕捉恒等映射的細微波動)

在殘差塊中,輸?可通過跨層的數據線路更快 地向前傳播。


ResNet模型的代碼實現(xiàn)

卷積(64,7x7,3)

批量一體化

最大池化(3x3,2)

殘差塊x4 (通過步幅為2的殘差塊在每個模塊之間減小高和寬)

全局平均池化

全連接


稠密連接網絡(DenseNet)


主要構建模塊:

稠密塊(dense block): 定義了輸入和輸出是如何連結的。

過渡層(transition layer):用來控制通道數,使之不過大。

1×1卷積層:來減小通道數

步幅為2的平均池化層:減半高和寬

在稠密塊中,假設由3個輸出通道數為8的卷積層組成,稠密塊的輸入通道數是3,那么稠密塊的輸出通道數=輸入通道數+卷積層個數*卷積輸出通道數=27

BN中的拉伸參數和偏移參數為可學習參數。

nn.BatchNorm2d(6)的含義是卷積層的批量歸一化,通道數為6。

nn.BatchNorm2d()表示卷積層的BN,參數為通道數。nn.BatchNorm1d()表示全連接層的BN,參數為輸出神經元個數。


17、凸優(yōu)化

假設A和B都是凸集合,則A和B的交集仍是凸集合,并集不一定。

多維變量的鞍點描述正確的是:鞍點是對所有自變量一階偏導數都為0,且Hessian矩陣特征值有正有負的點。即只是某一個方向上的最小值點。


優(yōu)化在深度學習中面臨的挑戰(zhàn):局部最小值、鞍點、梯度消失

有限制條件的優(yōu)化問題可以用什么方法解決:拉格朗日乘子法、添加懲罰項、投影法。


凸函數的充分必要條件:二階導數大于等于0 ——f″(x)≥0?f(x)?是凸函數

限制條件類函數的處理方法:

\begin{array}{l}{\underset{\mathbf{x}}{\operatorname{minimize}} f(\mathbf{x})} \\ {\text { subject to } c_{i}(\mathbf{x}) \leq 0 \text { for all } i \in\{1, \ldots, N\}}\end{array}

拉格朗日乘子法

L(\mathbf{x}, \alpha)=f(\mathbf{x})+\sum_{i} \alpha_{i} c_{i}(\mathbf{x}) \text { where } \alpha_{i} \geq 0

懲罰項

欲使?ci(x)≤0, 將項?αici(x)?加入目標函數,如多層感知機章節(jié)中的?λ2||w||2

投影法:向目標方向進行投影

\operatorname{Proj}_{X}(\mathbf{x})=\underset{\mathbf{x}^{\prime} \in X}{\operatorname{argmin}}\left\|\mathbf{x}-\mathbf{x}^{\prime}\right\|_{2}


18、梯度下降算法(優(yōu)化方法)

沿梯度反方向移動自變量可以減小函數值

數學公式有點多。。。容易使得注意力分散

程序員的核心能力:會寫子函數

18.2 隨機梯度下降

隨機梯度下降的時間復雜度為O(1)


牛頓法:牛頓法相比梯度下降的一個優(yōu)勢在于:梯度下降“步幅”的確定比較困難,而牛頓法相當于可以通過Hessian矩陣來調整“步幅”。牛頓法需要計算Hessian矩陣的逆,計算量比較大。在牛頓法中,局部極小值也可以通過調整學習率來解決。


動態(tài)學習率:不同區(qū)間賦值? 指數? 復合多項式

\begin{array}{ll}{\eta(t)=\eta_{i} \text { if } t_{i} \leq t \leq t_{i+1}} & {\text { piecewise constant }} \\ {\eta(t)=\eta_{0} \cdot e^{-\lambda t}} & {\text { exponential }} \\ {\eta(t)=\eta_{0} \cdot(\beta t+1)^{-\alpha}} & {\text { polynomial }}\end{array}

動態(tài)學習率的說法:在最開始學習率設計比較大,加速收斂,隨著迭代次數增加減小學習率。學習率可以設計為指數衰減或多項式衰減在優(yōu)化進行一段時間后可以適當減小學習率來避免振蕩。


可以通過修改視頻中?train_sgd?函數的參數__batch_size__來分別使用梯度下降、隨機梯度下降和小批量隨機梯度下降,因為三者的區(qū)別在于每次更新時用的樣本量。

編程實踐:小批量隨機梯度下降從零開始實現(xiàn)和簡潔實現(xiàn)。

用時約3小時,未進行編程實踐。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

相關閱讀更多精彩內容

友情鏈接更多精彩內容