Base-LLM 1.3.1 循環(huán)神經(jīng)網(wǎng)絡(luò)

一、如何處理序列信息

從分詞到embedding是從文件到稠密詞向量的過程,解決了模型輸入的問題,即文本數(shù)值化。
第二個問題就是,如何從一個詞向量序列中有效地提取整個序列的特征。
例如: 意圖識別中,希望將“播放周杰倫的《稻香》”歸類到“音樂播放”。目前能得到各詞元的詞向量,如何將這些向量融合成能表達(dá)證據(jù)指令含義的“文本向量”,并送入分類器呢?

1.1、簡單方法的局限性

針對詞向量序列融合成一個定長的文本向量,
早期解決方案

  1. 像詞袋法一樣,將所有向量相加或取平均。它的局限是忽略了語序信息。例如“我愛你”和“你愛我” 會得到完全相同的文本向量。 同時所有詞視為同等重要。
  2. 使用全連接神經(jīng)網(wǎng)絡(luò)(FCN)。 具體處理方式是先求和再FCN或者先FCN再求和。同樣無法理解詞元之間的順序關(guān)系和上下文依賴,也沒有捕獲序列特征。

3.使用CNN, 通過一維卷積核,滑過整個詞向量。 缺陷是它的感受野是固定的。雖然可以通過堆疊多層CNN來擴大感受野,但是對于句子開頭和結(jié)尾床距離依賴,CNN讓然難以有效捕捉,無法預(yù)先設(shè)定一個適用于所有句子的最佳窗口大小。

二、 引入“記憶”的RNN

RNN 能夠記住在處理當(dāng)前詞元之前都看過了哪些信息。

image.png

(1)輸入 Xt: 作為每一個時間步的輸入, 通過權(quán)重矩陣U連接到隱藏層。
(2)前一個時刻的隱藏狀態(tài)(ht-1): hidden_state,通過循環(huán)權(quán)重矩陣W連接到隱藏層。
(3) 當(dāng)前時刻的隱藏狀態(tài)(ht): 當(dāng)前時刻輸出的新隱藏狀態(tài)。
(4) 狀態(tài)更新: ht-1到ht的過程
(5) 當(dāng)前的隱藏狀態(tài)ht也可以被用來計算當(dāng)前時間步的最終輸出。

? U和W 為什么設(shè)計為“時間步上參數(shù)共享”?

  1. 處理變長序列
    模型不依賴固定序列長度。訓(xùn)練時學(xué)10步的規(guī)律,推理時可處理100步的輸入(因每步用同一套規(guī)則)。
  2. 大幅減少參數(shù)量:若每步用獨立參數(shù)(如U?, U?...),參數(shù)量隨序列長度爆炸增長,極易過擬合。共享后參數(shù)量僅由隱藏層維度決定(與序列長度無關(guān))。
  3. 學(xué)習(xí)時序模式:共享的W使模型能捕捉“任意時間間隔的依賴”(如“主語→謂語”的關(guān)系),而非僅記住特定位置的模式。
  4. ** 平移不變性** : 相同模式出現(xiàn)在序列不同位置時(如“下雨”在句首或句尾),模型能用相同邏輯處理,提升泛化能力。
  5. 理論與生物啟發(fā): 模擬人類處理語言/時間序列的方式:用同一套認(rèn)知規(guī)則處理不同時刻的信息。

三、RNN工作原理解析

3.1 文本分類實例

image.png

舉例: 給“播放周杰倫的《稻香》”進(jìn)行分類。

  1. 分詞: ["播放", "周杰倫", "的", "《稻香》"], 轉(zhuǎn)為ID序列 [23, 58, 102, 203](假設(shè)), embedding 得到4個詞向量。 輸入序列形狀為(4,128)
  2. 進(jìn)入RNN 逐步按順序逐步處理, hidden_state 維度為H=64。 初始化h0一般為零向量。
    (1) 第一步 t=1, 輸入為x1="播放" 和隱藏狀態(tài) h0, 計算h1, h1得到了包含“播放”的信息。
    (2)第二步 t=2, 輸入x2="周杰倫" 和隱藏狀態(tài)h1, 計算h2, h2得到了包含“播放”和“周杰倫”的信息。
    (3)第三步 t=3, 輸入 x3="的" 和隱藏狀態(tài)h2, 計算h3, h3得到了包含“播放周杰倫的”的信息
    (4) 第四步,t=4, 輸入x4="《稻香》"和隱藏狀態(tài)h3, 計算h4,h4得到了整個句子的信息。
    最后h4被認(rèn)為是整個句子動態(tài)上下文表示,也就是我們需要的“文本向量”。它捕獲了整個句子的語序和語義信息。將h4送入全連接分類層,則可以得到各類別的置信度了。
    通過這種方式RNN成功地將一個變長的詞向量序列,編碼成了一個蘊含序列信息的固定長度的特征向量。

3.2 從靜態(tài)到動態(tài)的飛躍

RNN解決了靜態(tài)詞向量的局限性,實現(xiàn)了Type到Token的跨越。
靜態(tài)的Type(詞嵌入)體現(xiàn)在word2vec等模型中,學(xué)到字典中的靜態(tài)語義。
RNN 通過隱藏狀態(tài)ht則實現(xiàn)了動態(tài)的Token表示。

動態(tài)詞向量:指的他是基于文本上下文產(chǎn)生的,而不是固定的向量。

ELMO? 動態(tài)詞向量

四、從零實現(xiàn)一個RNN

五、雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

上邊單向RNN, 信息只利用了t時刻和之前的信息,但是自然語言處理任務(wù)重,一個詞通常依賴于上文也依賴于下文。例如 “蘋果味道不錯”,只看上文不知道蘋果是指水果還是蘋果公司。

為了利用未來信息,提出了雙向循環(huán)神經(jīng)網(wǎng)絡(luò),同時利用過去和未來的上下文信息。

5.1 BiRNN結(jié)構(gòu)與原理

原理是由兩個完全獨立的RNN構(gòu)成,并將他們疊加進(jìn)行處理。一個是正向的,一個是反向的。


image.png

注意: 正香和反向的兩個RNN擁有各自獨立的權(quán)重參數(shù),訓(xùn)練中被同事優(yōu)化。

為什么不直接訓(xùn)練兩個獨立的RNN然后合并結(jié)果
BiRNN 可以在同一個Loss下同事訓(xùn)練兩個方向的權(quán)重,這樣能更好的適應(yīng)目標(biāo)任務(wù)。

最終輸出是兩個獨立RNN的隱藏狀態(tài)的拼接,如果每個RNN的hidden_size為H,那么BiRNN在每個時間步的輸出維度將變?yōu)?H。
在Pytorch中,設(shè)置bidirectional為True。隱藏狀態(tài)存儲的第一個維度為num_layers*2,分別存儲了正向和反向RNN在最后一個時間步的隱藏狀態(tài)。

5.2 BiRNN的作用與局限

作用: 提取了更完整的上下文相關(guān)的特征,使得在許多NLP任務(wù)重(如命名實體識別、情感分析、機器翻譯等)都取得了比單向RNN更好的效果。
局限:沒有解決長距離依賴問題,依然會面臨梯度消失或梯度爆炸的挑戰(zhàn)。BiRNN因為需要處理完整的序列才能計算反向信息,所以無法被用于需要實時預(yù)測的場景。

六、隨時間反向傳播

BPTT(隨時間反向傳播):將RNN沿著時間維度展開,可視作一個各層參數(shù)共享的深層前饋網(wǎng)絡(luò),在這個結(jié)構(gòu)上執(zhí)行通用的反向傳播算法。

假設(shè)整個序列的總損失L是所有時間步損失Lt的總和。
目標(biāo)則是計算損失L對共享參數(shù)U和W的梯度。

image.png

image.png
image.png

image.png

這個連乘的形式正式RNN產(chǎn)生問題的根源所在。

七、 RNN的局限性

7.1 梯度消失與梯度爆炸

連乘導(dǎo)致小于1的數(shù)連乘會越來越小,導(dǎo)致梯度消失。 大于1的數(shù)連乘會導(dǎo)致梯度越來越大,導(dǎo)致梯度爆炸。常見梯度爆炸的解決辦法是梯度裁剪,也就是梯度的范數(shù)超過某個閾值時,就將其縮放到該閾值。

7.2 長距離依賴

梯度消失導(dǎo)致了長距離依賴問題。
(1)反向傳播視角: 梯度消失導(dǎo)致最開始的詞的權(quán)重衰減為零。無法捕捉到遠(yuǎn)距離的語義依賴。

(2)正向傳播視角: 信息遺忘或近期偏執(zhí)。正向計算過程中,每一步的信息都會被新的輸入和循環(huán)權(quán)重W 稀釋或覆蓋。經(jīng)過足夠多的時間步后,序列最初的信息在隱藏狀態(tài)中所剩無幾,導(dǎo)致模型遺忘了最初的差異。

7.3 單向性

常規(guī)RNN信息流是單向的,雙向循環(huán)網(wǎng)絡(luò)結(jié)合正向和反向信息流來解決單向性問題。 為了學(xué)習(xí)更復(fù)雜的特征表示,可以把多個RNN堆疊起來,構(gòu)成深度循環(huán)神經(jīng)網(wǎng)絡(luò)。但是都沒有從根本上解決梯度傳播帶來的長距離依賴問題。
研究者發(fā)明了兩種更精巧的門控RNN結(jié)構(gòu),分別是長短記憶網(wǎng)絡(luò)和門控循環(huán)單元。

總結(jié)

  1. 如何處理序列信息?
    簡單方法: 類似詞袋法加權(quán); 使用FCN等。 這些都是孤立處理,無法捕獲上下文依賴以及序列特征。CNN (感受野有限,無法捕捉長距離依賴)
  2. 引入記憶RNN
  3. RNN工作原理
    輸入是當(dāng)前時間步的輸入x和上一層的隱藏狀態(tài),有相同的U和W權(quán)重,每一個時間步計算之后都會更新權(quán)重,并輸出新的隱藏狀態(tài)。
    這個最終的輸出可以作為該文本向量,也就是動態(tài)向量。
  4. RNN實現(xiàn)
  5. BiRNN: 能夠結(jié)合前文和后文的上下文信息,拼接前向和反向RNN的隱藏狀態(tài),共同優(yōu)化權(quán)重。
  6. 隨時間反向傳播: Loss是每個時間步的損失之和
  7. RNN的局限性: 存在梯度爆炸或者梯度消失問題,無法解決長距離依賴問題。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容