1.4 通过时间的反向传播-深度学习第五课《序列模型》-Stanford吴恩达教授
| 1.3 循環(huán)神經(jīng)網(wǎng)絡(luò) | 回到目錄 | 1.5 不同類型的循環(huán)神經(jīng)網(wǎng)絡(luò) |
通過時(shí)間的反向傳播 (Backpropagation through time)
之前我們已經(jīng)學(xué)過了循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)結(jié)構(gòu),在本節(jié)視頻中我們將來了解反向傳播是怎樣在循環(huán)神經(jīng)網(wǎng)絡(luò)中運(yùn)行的。和之前一樣,當(dāng)你在編程框架中實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)時(shí),編程框架通常會(huì)自動(dòng)處理反向傳播。但我認(rèn)為,在循環(huán)神經(jīng)網(wǎng)絡(luò)中,對(duì)反向傳播的運(yùn)行有一個(gè)粗略的認(rèn)識(shí)還是非常有用的,讓我們來一探究竟。
在之前你已經(jīng)見過對(duì)于前向傳播(上圖藍(lán)色箭頭所指方向)怎樣在神經(jīng)網(wǎng)絡(luò)中從左到右地計(jì)算這些激活項(xiàng),直到輸出所有地預(yù)測結(jié)果。而對(duì)于反向傳播,我想你已經(jīng)猜到了,反向傳播地計(jì)算方向(上圖紅色箭頭所指方向)與前向傳播基本上是相反的。
我們來分析一下前向傳播的計(jì)算,現(xiàn)在你有一個(gè)輸入序列, x<1>,x<2>,x<3>x^{<1>},x^{<2>},x^{<3>}x<1>,x<2>,x<3> 一直到 x<Tx>x^{<T_x>}x<Tx?> ,然后用 x<1>x^{<1>}x<1> 還有 a<0>a^{<0>}a<0> 計(jì)算出時(shí)間步1的激活項(xiàng),再用 x<2>x^{<2>}x<2> 和 a<1>a^{<1>}a<1> 計(jì)算出 a<2>a^{<2>}a<2> ,然后計(jì)算 a<3>a^{<3>}a<3> 等等,一直到 a<Tx>a^{<T_x>}a<Tx?> 。
為了真正計(jì)算出 a<1>a^{<1>}a<1> ,你還需要一些參數(shù), WaW_aWa? 和 bab_aba? ,用它們來計(jì)算出 a<1>a^{<1>}a<1> 。這些參數(shù)在之后的每一個(gè)時(shí)間步都會(huì)被用到,于是繼續(xù)用這些參數(shù)計(jì)算 a<2>,a<3>a^{<2>},a^{<3>}a<2>,a<3> 等等,所有的這些激活項(xiàng)都要取決于參數(shù) WaW_aWa? 和 bab_aba? 。有了 a<1>a^{<1>}a<1> ,神經(jīng)網(wǎng)絡(luò)就可以計(jì)算第一個(gè)預(yù)測值 y^<1>\hat{y}^{<1>}y^?<1> ,接著到下一個(gè)時(shí)間步,繼續(xù)計(jì)算出 y^<2>,y^<3>\hat{y}^{<2>},\hat{y}^{<3>}y^?<2>,y^?<3> ,等等,一直到 y^<Ty>\hat{y}^{<T_y>}y^?<Ty?> 。為了計(jì)算出 y^\hat{y}y^? ,需要參數(shù) WyW_yWy? 和 byb_yby? ,它們將被用于所有這些節(jié)點(diǎn)。
然后為了計(jì)算反向傳播,你還需要一個(gè)損失函數(shù)。我們先定義一個(gè)元素?fù)p失函數(shù)(上圖編號(hào)1所示)
L<t>(y^<t>,y<t>)=?y<t>log?y^<t>?(1?y<t>)log?(1?y^<t>)L^{<t>}(\hat{y}^{<t>},y^{<t>})=-y^{<t>}\log \hat{y}^{<t>}-(1-y^{<t>})\log(1-\hat{y}^{<t>})L<t>(y^?<t>,y<t>)=?y<t>logy^?<t>?(1?y<t>)log(1?y^?<t>)
它對(duì)應(yīng)的是序列中一個(gè)具體的詞,如果它是某個(gè)人的名字,那么 y<t>y^{<t>}y<t> 的值就是1,然后神經(jīng)網(wǎng)絡(luò)將輸出這個(gè)詞是名字的概率值,比如0.1。我將它定義為標(biāo)準(zhǔn)邏輯回歸損失函數(shù),也叫交叉熵?fù)p失函數(shù)(Cross Entropy Loss),它和之前我們?cè)诙诸悊栴}中看到的公式很像。所以這是關(guān)于單個(gè)位置上或者說某個(gè)時(shí)間步 ttt 上某個(gè)單詞的預(yù)測值的損失函數(shù)。
現(xiàn)在我們來定義整個(gè)序列的損失函數(shù),將 LLL 定義為(上圖編號(hào)2所示)
L(y^,y)=∑t=1TxL<t>(y^<t>,y<t>)L(\hat{y},y)=\sum_{t=1}^{T_x}L^{<t>}(\hat{y}^{<t>},y^{<t>})L(y^?,y)=∑t=1Tx??L<t>(y^?<t>,y<t>)
在這個(gè)計(jì)算圖中,通過 y^<1>\hat{y}^{<1>}y^?<1> 可以計(jì)算對(duì)應(yīng)的損失函數(shù),于是計(jì)算出第一個(gè)時(shí)間步的損失函數(shù)(上圖編號(hào)3所示),然后計(jì)算出第二個(gè)時(shí)間步的損失函數(shù),然后是第三個(gè)時(shí)間步,一直到最后一個(gè)時(shí)間步,最后為了計(jì)算出總體損失函數(shù),我們要把它們都加起來,通過下面的等式(上圖編號(hào)2所示的等式)計(jì)算出最后的 LLL (上圖編號(hào)4所示),也就是把每個(gè)單獨(dú)時(shí)間步的損失函數(shù)都加起來。
這就是完整的計(jì)算圖,在之前的例子中,你已經(jīng)見過反向傳播,所以你應(yīng)該能夠想得到反向傳播算法需要在相反的方向上進(jìn)行計(jì)算和傳遞信息,最終你做的就是把前向傳播的箭頭都反過來,在這之后你就可以計(jì)算出所有合適的量,然后你就可以通過導(dǎo)數(shù)相關(guān)的參數(shù),用梯度下降法來更新參數(shù)。
在這個(gè)反向傳播的過程中,最重要的信息傳遞或者說最重要的遞歸運(yùn)算就是這個(gè)從右到左的運(yùn)算,這也就是為什么這個(gè)算法有一個(gè)很別致的名字,叫做“通過(穿越)時(shí)間反向傳播(backpropagation through time)”。取這個(gè)名字的原因是對(duì)于前向傳播,你需要從左到右進(jìn)行計(jì)算,在這個(gè)過程中,時(shí)刻 ttt 不斷增加。而對(duì)于反向傳播,你需要從右到左進(jìn)行計(jì)算,就像時(shí)間倒流。“通過時(shí)間反向傳播”,就像穿越時(shí)光,這種說法聽起來就像是你需要一臺(tái)時(shí)光機(jī)來實(shí)現(xiàn)這個(gè)算法一樣。
RNN反向傳播示意圖:
希望你大致了解了前向和反向傳播是如何在RNN中工作的,到目前為止,你只見到了RNN中一個(gè)主要的例子,其中輸入序列的長度和輸出序列的長度是一樣的。在下節(jié)課將展示更多的RNN架構(gòu),這將讓你能夠處理一些更廣泛的應(yīng)用。
課程板書
| 1.3 循環(huán)神經(jīng)網(wǎng)絡(luò) | 回到目錄 | 1.5 不同類型的循環(huán)神經(jīng)網(wǎng)絡(luò) |
總結(jié)
以上是生活随笔為你收集整理的1.4 通过时间的反向传播-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.3 循环神经网络模型-深度学习第五课
- 下一篇: 1.5 不同类型的循环网络-深度学习第五