日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

第七课 循环神经网络与自然语言处理

發布時間:2023/12/10 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第七课 循环神经网络与自然语言处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 循環神經網絡
    • 1.1 場景與多種應用
    • 1.2 RNN網絡結構
      • 1.2.1為什么需要RNN
      • 1.2.2 RNN 結構
    • 1.3 多種RNN
    • 1.4 BPTT算法
    • 1.5 生成模型與圖像描述
  • 2 LSTM
    • 2.1 LSTM
    • 2.2 GRU

1 循環神經網絡

1.1 場景與多種應用

1 模仿論文生成
2 模仿linux內核編寫代碼
3 模仿小四寫論文
4 機器翻譯
5 image to text 看圖說話

1.2 RNN網絡結構

1.2.1為什么需要RNN

傳統神經網絡輸入和輸出是互相獨立的。
我是中國人,我的母語是____。這里完形填空的結果是與前面的詞相關的。
RNN引入 記憶 的概念。循環:來源于每個元素執行相同的任務。輸出依賴于 輸入和記憶。

有時間 順序上的依賴,都可以使用RNN。例如一段時間內的銷量。也就是說RNN不僅僅可以用于解決NLP問題。

推薦系統下也可以使用RNN。

1.2.2 RNN 結構

xtx_txt?是時間t處的輸入。例如時間t的詞向量。
sts_tst?是時間t處的記憶。
oto_tot?是時間t處的輸出。例如預測下個詞的話,可能是每個詞出現的概率。
公式:
St=f(UXt+WSt?1)S_t=f(UX_t+WS_{t-1})St?=f(UXt?+WSt?1?) f可以是tanh等函數。
Ot=softmax(VSt)O_t=softmax(VS_t)Ot?=softmax(VSt?)
例如XtX_tXt?可以是一個1000x1的向量,U是一個800x1000的矩陣,W是一個800x800的矩陣,這樣StS_tSt?就是一個800x1的向量。
V是一個4萬x800的矩陣。(4萬是詞匯量)

說明:
1 隱狀態sts_tst?是記憶體,捕捉了之前時間點上的信息。例如現在你讀高三,sts_tst?就是你在高一,高二,高三學習內容的記憶。

2 oto_tot?是通過之前所有時間以及當前記憶共同得到的。

3 由于容量問題,sts_tst?并不能記住所有內容。

4 RNN共享一組參數:U、W、V。可以這樣理解,你就是你,你用同一套學習方法學習了高一、高二、高三的內容。

5 有些情況下,不需要每個時間都有oto_tot?,只需要在最后時間有輸出即可。例如文本分類。

RNN唐詩生成器

1.3 多種RNN

1 雙向RNN
有些時候,輸出依賴于之前和之后的序列元素。

h?t=f(W?xt+V?h?t?1+b?)\vec h_t = f(\vec Wx_t+\vec V\vec h_{t-1}+\vec b)ht?=f(Wxt?+Vht?1?+b)
h←t=f(W←xt+V←h←t+1+b←)\overleftarrow{h}_{t}=f\left(\overleftarrow{W} x_{t}+\overleftarrow{V} \overleftarrow{h}_{t+1}+\overleftarrow{b}\right)ht?=f(Wxt?+Vht+1?+b)
yt=g(U[h?t;h←t]+c)y_{t}=g\left(U\left[\vec{h}_{t} ; \overleftarrow{h}_t\right]+c\right)yt?=g(U[ht?;ht?]+c)

從左向右計算記憶h?t\vec h_tht?,從右向左計算記憶h←t\overleftarrow{h}_tht?U[h?t;h←t]U\left[\vec{h}_{t} ; \overleftarrow{h}_t\right]U[ht?;ht?]是對兩個矩陣做拼接。

h和s的含義相同,表示記憶。
左右信息融合,使用的是concat拼接的方法。

2 深層雙向RNN

圖中的h和之前的S是等價的。
這樣的網絡可以這樣理解。高考前的多輪復習。高三內容有很多章,每個時間t學習一章。復習呢進行了多輪。按照圖中是三輪。

h?t(i)=f(W?(i)ht(i?1)+V?(i)h?t?1(i)+b?(i))\vec h_t^{(i)} = f(\vec W^{(i)}h_t^{(i-1)}+\vec V^{(i)}\vec h_{t-1}^{(i)}+\vec b^{(i)})ht(i)?=f(W(i)ht(i?1)?+V(i)ht?1(i)?+b(i))
t=第二章,i=第二輪,那么其學習記憶=W第一輪第二章的學習記憶+V第二輪第一章的學習記憶。

1.4 BPTT算法

BPTT和BP很類似,是一個思路,但是因為這里和時刻有關系。

在這樣一個多分類器中,損失函數是一個交叉熵。
某一時刻的損失函數是:Et(yt,y^t)=?ytlog?y^tE_{t}\left(y_{t}, \hat{y}_{t}\right)=-y_{t} \log \hat{y}_{t}Et?(yt?,y^?t?)=?yt?logy^?t?
最終的損失函數是所有時刻的交叉熵相加:E(y,y^)=∑tEt(yt,y^t)=?∑ytlog?y^t\begin{aligned} E(y, \hat{y}) &=\sum_{t} E_{t}\left(y_{t}, \hat{y}_{t}\right) \\ &=-\sum y_{t} \log \hat{y}_{t} \end{aligned}E(y,y^?)?=t?Et?(yt?,y^?t?)=?yt?logy^?t??
損失函數對W求偏導:?E?W=∑t?Et?W\frac{\partial E}{\partial W}=\sum_{t} \frac{\partial E_{t}}{\partial W}?W?E?=t??W?Et??

假設t=3,?E3?W=?E3?y^3?y^3?s3?s3?W\frac{\partial E_{3}}{\partial W}=\frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}} \frac{\partial s_{3}}{\partial W}?W?E3??=?y^?3??E3???s3??y^?3???W?s3??
E3E_3E3?y3y_3y3?有關系,y3y_3y3?s3s_3s3?有關系(參考2.1中的公式)。
s3=tanh(Ux3+Ws2)s_3=tanh(Ux_3+Ws_2)s3?=tanh(Ux3?+Ws2?)s3s_3s3?s2s_2s2?有關系,我們對s3s_3s3?對W求偏導不能直接等于s2s_2s2?,因為s2s_2s2?也和W有關系。
s2=tanh(Ux2+Ws1)s_2=tanh(Ux_2+Ws_1)s2?=tanh(Ux2?+Ws1?)

s2s_2s2?s1s_1s1?有關系…一直到0時刻。所以我們會把每個時刻的相關梯度值相加:?s3?W=∑k=03?s3?sk?sk?W\frac{\partial s_{3}}{\partial W}=\sum_{k=0}^{3} \frac{\partial s_{3}}{\partial s_{k}} \frac{\partial s_{k}}{\partial W}?W?s3??=k=03??sk??s3???W?sk??

其中我們在計算?s3?s2\dfrac{\partial s_3}{\partial s_2}?s2??s3??的時候需要使用鏈式法則計算:?s3?s1=?s3?s2?s2?s1?s1?s0\dfrac{\partial s_3}{\partial s_1}=\dfrac{\partial s_3}{\partial s_2}\dfrac{\partial s_2}{\partial s_1}\dfrac{\partial s_1}{\partial s_0}?s1??s3??=?s2??s3???s1??s2???s0??s1??

所以最終得到:?E3?W=∑k=03?E3?y^3?y^3?s3?s3?sk?sk?W=∑k=03?E3?y^3?y^3?s3(∏j=k+13?sj?sj?1)?sk?W\frac{\partial E_{3}}{\partial W}=\sum_{k=0}^{3} \frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}} \frac{\partial s_{3}}{\partial s_{k}} \frac{\partial s_{k}}{\partial W} =\sum_{k=0}^{3} \frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}}\left(\prod_{j=k+1}^{3} \frac{\partial s_{j}}{\partial s_{j-1}}\right) \frac{\partial s_{k}}{\partial W}?W?E3??=k=03??y^?3??E3???s3??y^?3???sk??s3???W?sk??=k=03??y^?3??E3???s3??y^?3?????j=k+13??sj?1??sj??????W?sk??

看公式中有連乘的部分。當使用tanh作為激活函數的時候,由于導數值分別在0到1之間,隨著時間的累計,小于1的數不斷相城,很容易趨近于0。(另外一種解釋:如果權重矩陣 W的范數也不很大,那么經過 𝑡?𝑘 次傳播后,?s3?sk\dfrac{\partial s_3}{\partial s_k}?sk??s3??的范數會趨近于0,這也就導致了梯度消失。)

梯度消失帶來的一個問題就是記憶力有限,離得越遠的東西記住得越少。

1.5 生成模型與圖像描述

一張圖片->經過VGG網絡,取得倒數第一層的輸出->作為RNN第一層的多加的輸入。

2 LSTM

2.1 LSTM

LSTM就是為了解決普通RNN中的梯度消失問題提出的。
LSTM提出了記憶細胞C,以及各種門。下圖中的h與上面的S是相同含義,表示記憶。每個時刻的輸出,在這里是沒有畫出來的。
假設現在有一個任務是根據已經讀到的詞,預測下一個詞。例如輸入法,生成詩詞。

第1步:忘記門:從記憶細胞中丟棄一些信息

使用sigmoid函數,經過sigmoid之后得到一個概率值,描述每個部分有多少量可以通過。
ft=σ(Wf?[ht?1,xt]+bf)f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)ft?=σ(Wf??[ht?1?,xt?]+bf?)

如果C中包含當前對象的性別屬性,現在已經正確的預測了當前的名詞。當我們看到另外一個新的對象的時候,我們希望忘記舊對象的性別屬性。

第2步:更新什么新信息到記憶中

sigmoid決定什么值需要更新: it=σ(Wi?[ht?1,xt]+bi)i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)it?=σ(Wi??[ht?1?,xt?]+bi?)
tanh層創建一個新的候選值向量(高三這一年學到的所有知識): C~t=tanh?(WC?[ht?1,xt]+bC)\tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)C~t?=tanh(WC??[ht?1?,xt?]+bC?)

第3步:更新記憶細胞

把舊狀態與ftf_tft?相乘,丟棄掉我們確定需要丟棄的信息;
加上iti_tit?*C~t\tilde{C}_{t}C~t?,就是新的候選值,更新狀態。
Ct=ft?Ct?1+it?C~tC_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}Ct?=ft??Ct?1?+it??C~t?
Ct?1C_{t-1}Ct?1?是到高二以及之前的所有記憶,C~t\tilde{C}_{t}C~t?高三這一年學到的所有知識。帶著兩部分應該留下的內容去高考。

在任務中就是希望把新看到對象的性別屬性添加到C,而把舊對象的性別屬性刪除。

第4步,基于細胞狀態得到輸出

首先一個sigmoid層確定細胞狀態的哪個部分的值將輸出:ot=σ(Wo[ht?1,xt]+bo)o_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right)ot?=σ(Wo?[ht?1?,xt?]+bo?)

接著用tanh處理細胞狀態,輸出我們確定輸出的那部分,這部分是記憶用于下一時刻幫助做出決策的:ht=ot?tanh?(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht?=ot??tanh(Ct?)

在語言模型中,既然我當前看到了一個對象,這里可能輸出一個動詞信息,以備下一步需要用到。例如這里可能輸出當前對象是單數還是復數,這樣就知道下一個動詞應該填寫什么形式。

總結:

1:決定老細胞只留下哪部分ft=σ(Wf?[ht?1,xt]+bf)f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)ft?=σ(Wf??[ht?1?,xt?]+bf?)
2: 決定新知識應該記住哪部分:it=σ(Wi?[ht?1,xt]+bi)i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)it?=σ(Wi??[ht?1?,xt?]+bi?)
新學習到的知識:C~t=tanh?(WC?[ht?1,xt]+bC)\tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)C~t?=tanh(WC??[ht?1?,xt?]+bC?)
3 更新細胞狀態:Ct=ft?Ct?1+it?C~tC_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}Ct?=ft??Ct?1?+it??C~t?
4 決定要輸出哪部分:ot=σ(Wo[ht?1,xt]+bo)o_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right)ot?=σ(Wo?[ht?1?,xt?]+bo?)
產生隱藏狀態的輸出:ht=ot?tanh?(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht?=ot??tanh(Ct?)

對比普通的RNN,輸出ot=σ(VSt)o_t=\sigma\left(VS_t\right)ot?=σ(VSt?),St=tanh(Uxt+WSt?1)S_t=tanh(Ux_t+WS_{t-1})St?=tanh(Uxt?+WSt?1?),對于記憶StS_tSt?是由之前記憶和新知識共同組成。加入細胞狀態可以選擇忘記一部分老知識和選擇忘記一部分新知識。

在之前的求導過程中?s3?s1=?s3?s2?s2?s1?s1?s0\dfrac{\partial s_3}{\partial s_1}=\dfrac{\partial s_3}{\partial s_2}\dfrac{\partial s_2}{\partial s_1}\dfrac{\partial s_1}{\partial s_0}?s1??s3??=?s2??s3???s1??s2???s0??s1??,現在變為。。。。。

輸出ot=σ(Vht)o_t=\sigma\left(Vh_t\right)ot?=σ(Vht?)
ht=ot?tanh?(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht?=ot??tanh(Ct?)
Ct=ft?Ct?1+it?C~t=ft?Ct?1+it?tanh?(WC?[ht?1,xt]+bC)C_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}=f_{t} * C_{t-1}+i_t*\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)Ct?=ft??Ct?1?+it??C~t?=ft??Ct?1?+it??tanh(WC??[ht?1?,xt?]+bC?)
損失函數不變,還是令t=3,?E3?W=?E3?y^3?y^3?h3?h3?C3?C3?Wc\frac{\partial E_{3}}{\partial W}=\frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial h_{3}} \frac{\partial h_{3}}{\partial C_3}\frac{\partial C_{3}}{\partial W_c}?W?E3??=?y^?3??E3???h3??y^?3???C3??h3???Wc??C3??

要求?C3?Wc\dfrac{\partial C_3}{\partial W_c}?Wc??C3??,這樣CtC_tCt?WcW_cWc?有關系,Ct?1C_{t-1}Ct?1?WcW_cWc?有關系,兩部分相加,對整個函數求導,就是對這兩部分分別求導,再相加。與普通RNN的相乘
?C3?C1=?C3?C2+?C2?C1=?\dfrac{\partial C_3}{\partial C_1}=\dfrac{\partial C_3}{\partial C_2}+\dfrac{\partial C_2}{\partial C_1}=??C1??C3??=?C2??C3??+?C1??C2??=?

2.2 GRU

GRU是LSTM的變種之一。

GRU做的改變是:
1 將忘記門和輸入門合并成一個門,稱為更新門。
2 細胞狀態和隱藏狀態,也就是上面的C和hth_tht?合并為一個hth_tht?
這樣GRU的參數就比標準LSTM要少,在很多情況下效果基本一致。

總結

以上是生活随笔為你收集整理的第七课 循环神经网络与自然语言处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。