4.建立基于門控循環(huán)單元(GRU)或者長短時記憶(LSTM)的RNN模型
http://neuralnetworksanddeeplearning.com/chap2.html
先來快速回憶一下RNN的基本方程。注意,為了和要引用的文獻保持一致,這里我們把o改成了。
同樣,將損失函數(shù)定義為交叉熵損失函數(shù),如下所示:
在這里,y_t是表示的是時間步t上的正確標(biāo)簽,是我們的預(yù)測。通常我們會將一個完整的句子序列視作一個訓(xùn)練樣本,因此總誤差即為各時間步(單詞)的誤差之和。
▲RNN反向傳播
別忘了,我們的目的是要計算誤差對應(yīng)的參數(shù)U、V和W的梯度,然后借助SDG算法來更新參數(shù)。當(dāng)然,我們統(tǒng)計的不只是誤差,還包括訓(xùn)練樣本在每時間步的梯度:
▲RNN的結(jié)構(gòu)圖
我們借助導(dǎo)數(shù)的鏈?zhǔn)椒▌t來計算梯度。從最后一層將誤差向前傳播的思想,即為反向傳播。本文后續(xù)部分將以E3為例繼續(xù)介紹:
由上可知,z_3 =Vs_3,為兩個矢量的外積。為了讓大家更好理解,這里我省略了幾個步驟,你可以試著自己計算這些導(dǎo)數(shù)。我想強調(diào)的是,
的值僅取決于當(dāng)前時間步的值:
。有了這些值,計算參數(shù)V的梯度就是簡單的矩陣相乘了。
但有所不同。我們列出如前文所示的鏈?zhǔn)椒▌t來解釋原因:
▲鏈?zhǔn)角髮?dǎo)式子1
其中,s_3 = \tanh(Ux_t + Ws_2) 取決于s_2,而s_2則取決于W和s_1,以此類推。因此,如果要推導(dǎo)參數(shù)W,就不能簡單將s_2視作常量,需要再次應(yīng)用鏈?zhǔn)椒▌t,真正得到的是:
▲鏈?zhǔn)角髮?dǎo)式子2
上面的式子用到了復(fù)合函數(shù)的鏈?zhǔn)角髮?dǎo)法則,將每個時間步長對梯度的貢獻相加。換言之,由于參數(shù)W時間步長應(yīng)用于想要的輸出,因此需從t=3開始通過所有網(wǎng)絡(luò)路徑到t=0進行反向傳播梯度:
▲BPTT復(fù)合函數(shù)鏈?zhǔn)角髮?dǎo)
5個時間步梯度的遞歸神經(jīng)網(wǎng)絡(luò)展開圖
請注意,這與我們在深度神經(jīng)網(wǎng)絡(luò)中應(yīng)用的標(biāo)準(zhǔn)反向傳播算法完全一致。主要區(qū)別在于我們對每時間步的參數(shù)W的梯度進行了求和。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)(RNN)中,我們不在層與層之間共享參數(shù),也就無需求和。但就我而言,BPTT不過是標(biāo)準(zhǔn)反向傳播在展開RNN上的別稱。好比在反向傳播算法中,可以定義一個反向傳播的delta矢量,例如:基于z_2 = Ux_2+ Ws_1的。和傳統(tǒng)的反向傳播算法一樣,我們?nèi)匀豢梢远x殘差,然后計算梯度。
直接實現(xiàn)BPTT的代碼如下:
該代碼解釋了難以訓(xùn)練RNN的原因:因為序列(句子)很長,可能由20個或以上單詞組成,因此需反向傳播多層網(wǎng)絡(luò)。在實際操作時,許多人會在反向傳播數(shù)步后進行截斷成比較長的步驟,正如上面代碼中的bptt_truncate參數(shù)定義的那樣。
本教程的前面章節(jié)提到過RNN中,相隔數(shù)步的單詞間難以形成長期依賴的問題。而英文句子的句意通常取決于相隔較遠的單詞,例如“The man who wore a wig on his head went inside”的語意重心在于一個人走進屋里,而非男人戴著假發(fā)。但普通的RNN難以捕獲此類信息。那么不妨通過分析上面計算出的梯度來一探究竟:
別忘了本身為鏈?zhǔn)椒▌t!例如,
。還要注意,我們在對向量函數(shù)的向量求導(dǎo),結(jié)果是一個矩陣(名為雅可比矩陣),所有元素均為逐點的導(dǎo)數(shù)。因此,上述梯度可重寫為:
然而,上述雅克比矩陣中2范數(shù)(可視為絕對值)的上限是1(此處不做證明)。直觀上,tanh激活函數(shù)將所有的值映射到-1到1這個區(qū)間,導(dǎo)數(shù)值也小于等于1(sigmoi函數(shù)的導(dǎo)數(shù)值小于等于1/4):
▲tanh及其導(dǎo)數(shù)。圖片源自:http://nn.readthedocs.org/en/rtd/transfer/
可以看到tanh和sigmoid函數(shù)在兩端的導(dǎo)數(shù)均為0,近乎呈直線狀(導(dǎo)數(shù)為0,函數(shù)圖像為直線),此種情況下可稱相應(yīng)的神經(jīng)元已經(jīng)飽和。兩函數(shù)的梯度為0,使前層的其它梯度也趨近于0。由于矩陣元素數(shù)值較小,且矩陣相乘數(shù)次(t - k次)后,梯度值迅速以指數(shù)形式收縮(意思相近于,小數(shù)相乘,數(shù)值收縮,越來越?。?,最終在幾個時間步長后完全消失。“較遠”的時間步長貢獻的梯度變?yōu)?,這些時間段的狀態(tài)不會對你的學(xué)習(xí)有所貢獻:你最終還是無法學(xué)習(xí)長期依賴。梯度消失不僅存在于循環(huán)神經(jīng)網(wǎng)絡(luò),也出現(xiàn)在深度前饋神經(jīng)網(wǎng)絡(luò)中。區(qū)別在于,循環(huán)神經(jīng)網(wǎng)絡(luò)非常深(本例中,深度與句長相同),因此梯度消失問題更為常見。
不難想象,如果雅克比矩陣的值非常大,參照激活函數(shù)及網(wǎng)絡(luò)參數(shù)可能會出現(xiàn)梯度爆炸,即所謂的梯度爆炸問題。相較于梯度爆炸,梯度消失問題更受關(guān)注,主要有兩個原因:其一,梯度爆炸現(xiàn)象明顯,梯度會變成Nan(而并非數(shù)字),并出現(xiàn)程序崩潰;其二,在預(yù)定義閾值處將梯度截斷(詳情請見本文章)是一種解決梯度爆炸問題簡單有效的方法。而梯度消失問題更為復(fù)雜,因為其現(xiàn)象不明顯,且解決方案尚不明確。
幸運的是,目前有一些方法可解決梯度消失問題。合理初始化矩陣 W可緩解梯度消失現(xiàn)象。還可采用正則化方法。此外,更好的方法是使用 ReLU,而非tanh或sigmoid激活函數(shù)。ReLU函數(shù)的導(dǎo)數(shù)是個常量,0或1,因此不太可能出現(xiàn)梯度消失現(xiàn)象。
更常用的方法是借助LSTM或GRU架構(gòu)。1997年,首次提出LSTM ,目前該模型在NLP領(lǐng)域的應(yīng)用極其廣泛。GRU則于2014年問世,是LSTM的簡化版。這些循環(huán)神經(jīng)網(wǎng)絡(luò)旨在解決梯度消失和有效學(xué)習(xí)長期依賴問題。相關(guān)介紹請見本教程下一部分。
好文章,需要你的鼓勵
新加坡國立大學(xué)研究團隊開發(fā)了SPIRAL框架,通過讓AI與自己對弈零和游戲來提升推理能力。實驗顯示,僅訓(xùn)練AI玩簡單撲克游戲就能讓其數(shù)學(xué)推理能力提升8.6%,通用推理提升8.4%,且無需任何數(shù)學(xué)題目作為訓(xùn)練材料。研究發(fā)現(xiàn)游戲中的三種推理模式能成功轉(zhuǎn)移到數(shù)學(xué)解題中,為AI訓(xùn)練提供了新思路。
同濟大學(xué)團隊開發(fā)的GIGA-ToF技術(shù)通過融合多幀圖像的"圖結(jié)構(gòu)"信息,創(chuàng)新性地解決了3D相機噪聲問題。該技術(shù)利用圖像間的不變幾何關(guān)系,結(jié)合深度學(xué)習(xí)和數(shù)學(xué)優(yōu)化方法,在合成數(shù)據(jù)集上實現(xiàn)37.9%的精度提升,并在真實設(shè)備上展現(xiàn)出色泛化能力,為機器人、AR和自動駕駛等領(lǐng)域提供更可靠的3D視覺解決方案。
伊利諾伊大學(xué)研究團隊通過對比實驗發(fā)現(xiàn),經(jīng)過強化學(xué)習(xí)訓(xùn)練的視覺語言模型雖然表現(xiàn)出"頓悟時刻"現(xiàn)象,但這些自我糾錯行為并不能實際提升推理準(zhǔn)確率。研究揭示了AI模型存在"生成-驗證差距",即生成答案的能力強于驗證答案質(zhì)量的能力,且模型在自我驗證時無法有效利用視覺信息,為AI多模態(tài)推理發(fā)展提供了重要啟示。
MIT等頂尖機構(gòu)聯(lián)合提出SparseLoRA技術(shù),通過動態(tài)稀疏性實現(xiàn)大語言模型訓(xùn)練加速1.6倍,計算成本降低2.2倍。該方法使用SVD稀疏性估計器智能選擇重要計算部分,在保持模型性能的同時顯著提升訓(xùn)練效率,已在多個任務(wù)上驗證有效性。