閱讀大概需要8分鐘
跟隨小博主,每天進(jìn)步一丟丟
作者 劉博
鏈接 https://zhuanlan.zhihu.com/p/32755043
昨天的是理論篇,想看的小伙伴點擊這里啦。
導(dǎo)讀
我們需要一個用于處理序列的神經(jīng)網(wǎng)絡(luò)
什么是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
理解循環(huán)神經(jīng)元(Recurrent Neuron)的細(xì)節(jié)
用Excel實現(xiàn)循環(huán)神經(jīng)元的前向傳播
循環(huán)神經(jīng)網(wǎng)絡(luò)的后向傳播(BPTT)
用Excel實現(xiàn)循環(huán)神經(jīng)元的前向傳播
我們先來看看輸入。
我們對輸入進(jìn)行one-hot編碼。這是因為我們的整個詞匯表只有四個字母{h,e,l,o}。
接下來我們將利用把輸入轉(zhuǎn)換為隱藏狀態(tài),這里我們采取隨機的方式將權(quán)重初始化為3x4的矩陣。
(注:這里矩陣的大小為什么是3x4?因為我們想計算
其中是4x1的one-hot矩陣,根據(jù)矩陣乘法運算的法則,大小必須是nx4,n一般取比4小的值,因此的矩陣維度取3x4)步驟1:
輸入網(wǎng)絡(luò)的第一個字母是“h”, 我們想要得到隱藏層狀態(tài),那么首先我們需要計算
。通過矩陣相乘,我們得到步驟2:
現(xiàn)在我們看一下循環(huán)神經(jīng)元, 權(quán)重
是一個1x1的矩陣,值為0.427043,偏差也是1x1的矩陣,值為0.56700.
對于字母“h”,沒有前一個狀態(tài),所以我們也可以認(rèn)為前一個狀態(tài)是[0,0,0,0]。
接下來計算
(譯者注:讀者一定注意到了,1x1的矩陣與一個4x1的矩陣相乘再加上一個1x1的矩陣,根據(jù)矩陣乘法的規(guī)則,是無法運算的。因此這里應(yīng)該是使用了矩陣廣播運算,而得到的結(jié)果應(yīng)該是4x1的矩陣,而不是3x1的矩陣,但是被強制轉(zhuǎn)換為了3x1的矩陣,原因是步驟1的輸出結(jié)果是3x1的矩陣,接下來的步驟3將計算步驟1和步驟2的相加,所以步驟2的輸出必須是3x1)
步驟3:
Ok,有了前兩步,我們就可以計算當(dāng)前循環(huán)神經(jīng)元的狀態(tài)了,根據(jù)以下公式
將前兩步的結(jié)果代入公式即可得到當(dāng)前步的狀態(tài),計算如下
步驟4:
現(xiàn)在我們繼續(xù)關(guān)注下一個字母“e”被傳入網(wǎng)絡(luò)。上一步計算得到的
現(xiàn)在變成了這一步的,而e的one-hot向量是.現(xiàn)在我們來計算以下這一步的.首先計算
步驟5:
有了步驟4的結(jié)果,代入公式可得輸入字母“e”后的狀態(tài)
同樣,這一步得到的狀態(tài)將變成下一步的
,而循環(huán)神經(jīng)元將使用這個狀態(tài)和新輸入字母來計算下一個狀態(tài).步驟6:
在每一個狀態(tài),循環(huán)神經(jīng)元還會計算輸出. 現(xiàn)在我們來計算一下字母e的輸出
(譯者注:注意,一個循環(huán)神經(jīng)元根據(jù)輸入和前一時間步的狀態(tài)計算當(dāng)前時間步的狀態(tài),然后根據(jù)當(dāng)前時間步的狀態(tài)計算輸出。另外需要注意的是,這里的
的維度大小是4x3,這是因為我們想得到4x1的輸出,因為one-hot的維度是4x1,而通過下一步的計算每一個維度可以代表該維度的字母出現(xiàn)的概率)步驟7:
通過應(yīng)用softmax函數(shù),我們可以得到詞匯表中一個特定字母的出現(xiàn)的概率,所以我們現(xiàn)在計算
我們來理解一下得到的概率值。我們看到,這個模型認(rèn)為字母e后面將出現(xiàn)的字母是h,因為概率最高的是代表字母h的那一維??墒菍嶋H上下一個字母應(yīng)該是l,我們哪里做錯了嗎?并沒有,只是我們還沒有訓(xùn)練我們的網(wǎng)絡(luò)。
好,我們面對的下一個大問題就是:RNN網(wǎng)絡(luò)中如何實現(xiàn)后向傳播?如何通過反饋循環(huán)來升級我們的權(quán)重?
循環(huán)神經(jīng)網(wǎng)絡(luò)的后向傳播(BPTT)
很難憑想象理解一個遞歸神經(jīng)網(wǎng)絡(luò)的權(quán)重是如何更新的。因此,為了理解和可視化反向傳播,讓我們按照時間步展開網(wǎng)絡(luò)。在其中我們可以計算也可以不計算每一個時間步的輸出。
在向前傳播的情況下,輸入隨著每一個時間步前進(jìn)。在反向傳播的情況下,我們“回到過去”改變權(quán)重,因此我們叫它通過時間的反向傳播(BPTT)。
我們通常把整個序列(單詞)看作一個訓(xùn)練樣本,所以總的誤差是每個時間步(字符)中誤差的和。權(quán)重在每一個時間步長是相同的(所以可以計算總誤差后一起更新)。讓我們總結(jié)一下反向傳播的步驟。
首先使用預(yù)測輸出和實際輸出計算交叉熵誤差
網(wǎng)絡(luò)按照時間步完全展開
對于展開的網(wǎng)絡(luò),對于每一個實踐步計算權(quán)重的梯度
因為對于所有時間步來說,權(quán)重都一樣,所以對于所有的時間步,可以一起得到梯度(而不是像神經(jīng)網(wǎng)絡(luò)一樣對不同的隱藏層得到不同的梯度)
隨后對循環(huán)神經(jīng)元的權(quán)重進(jìn)行升級
展開的網(wǎng)絡(luò)看起來像一個普通的神經(jīng)網(wǎng)絡(luò)。反向傳播也類似于普通的神經(jīng)網(wǎng)絡(luò),只不過我們一次得到所有時間步的梯度。我知道你在擔(dān)心什么,現(xiàn)在如果有100個時間步,那么網(wǎng)絡(luò)展開后將變得非常巨大(這是個挑戰(zhàn)性的問題,我們后面講介紹如何克服)。
如果你不想深入了解這背后的數(shù)學(xué),所有你需要知道的是,按照時間步展開后的反向傳播類似于常規(guī)神經(jīng)網(wǎng)絡(luò)的反向傳播。
每日托福單詞
inclined adj.趨向于...的 v. 使...傾向(incline的過去式)
synthetic adj.綜合的;合成的,人造的 n.合成物
excusable adj.可原諒的;可辯解的;可免除的
prohibit vt.阻止,禁止
recipe n.食譜;處方;秘訣
優(yōu)質(zhì)公眾號推薦
公眾號名稱:癡海
簡介:只要把握風(fēng)口,豬也能飛起來。如今時代編程風(fēng)口「Python」,值得每個人關(guān)注。癡海,一個專注于 Python 編程,每天定時推送各種 Python 干貨文章。但這不僅僅是一個技術(shù)公眾號,每周還會分享職場、人生、認(rèn)知原創(chuàng)文章。
聯(lián)系客服