語言模型與神經網路
語言模型(Language Model)
Chat GPT 流暢的語言生成能力
自然語言是一種上下文相關的資訊表達和資訊傳遞方式。
定義:語言模型是衡量一句話出現在自然語言中的機率的模型。
數學形式上,給定一句話 \(s=\{w_1,\dots,w_n\}\) ,它對應的機率為:
\[\begin{align}
\mathrm{P}(s) &= \mathrm{P}(w_1,\dots,w_n) \\
&= \mathrm{P}(w_1)\times \mathrm{P}(w_2|w_1) \times \dots \times \mathrm{P}(w_n|w_1,\dots ,w_{n-1}) \\
&= \prod_{i=1}^n\mathrm{P}(w_i|w_1,\dots,w_{i-1})
\end{align}
\]
語言模型的核心在於根據前文預測下一個詞出現的機率。
如何計算語言模型的機率?
統計語言模型
馬爾科夫假設:當前詞出現的機率之和它前面的k個詞相關。
\[\begin{align}
\mathrm{P}(w_i|w_1,\dots,w_{i-1})
&= \mathrm{P}(w_i|w_{i-k},\dots,w_{i-1}) \tag{馬爾可夫假設}\\
&= \mathrm{P}(w_i) \tag{k=0, Unigram Model}\\
&= \mathrm{P}(w_i|w_{i-1}) \tag{k=1, Bigram Model}\\
&= \mathrm{P}(w_i|w_{i-2},w_{i-1}) \tag{k=2, Trigram Model}
\end{align}
\]
用頻率估計機率
\[\begin{align}
\mathrm{P}(w_i|w_1,\dots,w_{i-1})
&= \mathrm{P}(w_i|w_{i-k},\dots,w_{i-1}) \tag{馬爾可夫假設}\\
&= \frac{\mathrm{P}(w_{i-k},\dots,w_{i-1},w_i)}{\mathrm{P}(w_{i-k},\dots,w_{i-1})} \tag{條件機率}\\
&\approx \frac{\mathrm{count}(w_{i-k},\dots,w_{i-1},w_i)/\mathrm{count}(all~grams)}{\mathrm{count}(w_{i-k},\dots,w_{i-1})/\mathrm{count}(all~grams)} \\
&= \frac{\mathrm{count}(w_{i-k},\dots,w_{i-1},w_i)}{\mathrm{count}(w_{i-k},\dots,w_{i-1})} \tag{機率估計, N gram Model}
\end{align}
\]
語言模型評價方法
-
困惑度(Perplexity)
- 用來度量一個機率分佈或機率模型預測樣本的好壞程度;
- 可以用來比較兩個機率模型,低困惑度的機率模型能更好地預測樣本。
在測試資料上
\[\begin{align}
\mathrm{Perplexity}(s)
&=2^{H(s)} \\
&=2^{-\frac{1}{n}\log_2\mathrm{P}(w_1,\dots,w_n)} \\
&=2^{\log_2\mathrm{P}(w_1,\dots,w_n)^{-\frac{1}{n}}} \\
&=\mathrm{P}(w_1,\dots,w_n)^{-\frac{1}{n}} \\
&=\sqrt[n]{1/\mathrm{P}(w_1,\dots,w_n)}
\end{align}
\]
引數規模問題:隨著k的增大,引數數目呈指數增長,無法儲存。
神經網路(Neural Network)
人工神經網路(Artificial Neural Network, ANN)從資訊處理角度對人腦神經元網路進行抽象,建立某種演算法數學模型,從而達到處理資訊的目的。
- 神經元之間進行連線,組成網路;
- 網路通常是某種演算法或者函式的逼近,也可能是一種邏輯策略的表達。
基於4-GRAM的神經網路語言模型
優點:
- 不會有稀疏性問題;
- 不需要儲存所有的n-grams。
不足:
- 視野有限,無法建模長距離語義;
- 視窗越大,引數規模越大。
能否構建處理任意長度的神經網路模型?
迴圈神經網路(Recurrent Neural Network, RNN)
-
重複使用隱層引數
-
可處理任意序列長度
\[h_t = f(W_hh_{t-1} + W_xx_t + b)
\]
優點:
- 能處理任意長度序列;
- 能夠使用歷史資訊;
- 模型引數量不隨序列長度增加。
不足:
- 逐步計算,速度較慢;
- 長期依賴問題。
RNN-LM模型訓練
- 給定長度為 \(T\) 的輸入文字:\(x_1,\dots,x_T\) ;
- 將文字輸入到RNN-LM,計算每一步預測的單詞分佈 \(\hat{y}^t\) ;
- 計算每一步預測單詞的機率分佈 \(\hat{y}_t\) 和真實單詞 \(y_t\)(one-hot向量)之間的交叉熵:
\[\mathrm{J}^t(\theta) = \mathrm{CE}(y^t,\hat{y}^t) = -\sum_{w\in V}y_w^t\log\hat{y}_w^t = -\log\hat{y}^t_{x_t+1}
\]
- 模型在輸入文字上的訓練損失為:
\[\mathrm{J}(\theta) = \frac{1}{T}\sum_{t=1}^T\mathrm{J}^t(\theta) = \frac{1}{T}\sum_{t=1}^T-\log\hat{y}^t_{x_t+1}
\]
RNN:梯度爆炸、梯度消失
長短期神經網路(Long Short-Term Memory, LSTM)
引入三個門和一個細胞狀態來控制神經元的資訊流動:
- 遺忘門 \(f_t\) :控制哪些資訊應該從之前的細胞狀態中遺忘;
- 輸入門 \(i_t\) :控制哪些資訊應該被更新到細胞狀態中;
- 輸出門 \(o_t\) :控制哪些資訊應該被輸出到隱層狀態中;
- 細胞狀態 \(C_t\) :容納神經元資訊。
\[\begin{align}
f_t &= \sigma(W_fh_{t-1} + U_fx_t + b_f)\\
i_t &= \sigma(W_ih_{t-1} + U_ix_t + b_i)\\
o_t &= \sigma(W_oh_{t-1} + U_ox_t + b_o)\\
\hat{C}_t &= \tanh(W_ch_{t-1} + U_cx_t + b_c)\\
C_t &= f_t \times C_{t-1} + i_t \times \hat{C}_t\\
h_t &= o_t \times \tanh(C_t)
\end{align}
\]
線性變換,緩解遠端梯度爆炸和梯度消失問題。
Attention機制(Attention Mechanism)
神經機器翻譯(Neural Machine Translation)
- 用端到端(end-to-end)的神經網路來求解機器翻譯任務。
- 編碼器-解碼器框架(Encoder-decoder):
- Seq2Seq;
- 編碼器(encoder):用來編碼源語言的輸入;
- 解碼器(decoder):用來生成目標語言的輸出。
編碼器-解碼器框架
通用性:
- 文字摘要(Summarization):長文字 \(\rightarrow\) 短文字;
- 對話生成(Dialogue generation):之前的對話 \(\rightarrow\) 下一句對話;
- 程式碼生成(Code generation):自然語言 \(\rightarrow\) 程式設計程式碼;
- \(\dots\dots\)
前後依賴性太強,且翻譯過程不具有可解釋性!
目標端解碼某個特定單詞時,應該重點關注源端相關的單詞。
注意力機制
Attention Mechanism [Bahdanau et al., 2015]
- 目標端解碼時,直接從源端句子捕獲對當前解碼有幫助的資訊,從而生成更相關、更準確的解碼結果。
優點:
- 緩解RNN中的資訊瓶頸問題;
- 緩解長距離依賴問題;
- 具有一定的可解釋性。
基於注意力機制的編碼器-解碼器框架
編碼器-解碼器中如何計算注意力?
- 編碼器的隱層狀態為 \(h_1,\dots,h_w\in \R^h\)
- \(t\) 時刻,解碼器的隱層狀態為 \(s_t\in\R^h\)
- 對於 \(t\) 時刻,編碼器隱層狀態的注意力打分為:
\[e^t = \big[s_t^Th_1,\dots,s_t^Th_N\big]\in\R^N
\]
- 利用softmax函式將注意力打分轉換成機率化的注意力權重:
\[\alpha^t=\mathrm{softmax}(e^t)\in\R^N
\]
- 利用注意力權重α得到編碼器隱層狀態的加權輸出:
\[a^t = \sum_{i=1}^N\alpha_i^th_i\in\R^h
\]
機器翻譯中的注意力視覺化
基於注意力機制的文字分類模型
文字分類模型注意力視覺化
視覺問答中的注意力
Transformer網路
迴圈神經網路的問題
有限的資訊互動距離:
- RNN能捕捉區域性資訊,但無法很好地解決長距離依賴關係(long-distance
dependency); - 不能很好地建模序列中的非線性結構關係。
無法並行:
- RNN的隱層狀態具有序列依賴性;
- 時間消耗隨序列長度的增加而增加。
Self Attention
Attention Is All You Need
Transformer [Vaswani et al., 2017]
- 完全基於attention機制構建的神經網路模型;
- 直接建模輸入序列的全域性依賴關係;
- 平行計算。
Transformer編碼器
- 輸入編碼 + 位置編碼;
- 多頭注意力機制;
- 殘差連線 & 層正則;
- 前饋神經網路;
- 殘差連線 & 層正則。
位置編碼
為什麼需要位置編碼?
- 注意力計算:加權和;
- 無法考慮相對位置關係。
將位置編碼 \(p_i\) 注入到輸入編碼中:\(x_i=x_i+p_i\)
- 三角函式表示:直接根據正弦函式計算位置編碼,不需要從頭學習,直接計算得出。
\[p_i=\left[\begin{matrix}
sin(i/10000^{2\times1/d})\\
cos(i/10000^{2\times1/d})\\
\vdots \\
sin(i/10000^{2\times d/d})\\
cos(i/10000^{2\times d/d})\\
\end{matrix}
\right]
\]
- 從頭學習:隨機初始化位置編碼 \(p_i\) ,並跟隨網路一起訓練,能更好地擬合資料。
自注意力機制
- 計算attention所需要的queries,keys,values:
\[Q = XW_Q\quad K = XW_K\quad V = XW_V
\]
- 根據queries和keys計算attention打分 \(E\) :
\[E = QK^T
\]
- 計算attention權重 \(A\) :
\[A = \mathrm{softmax}\Big(\frac{E}{\sqrt{d_k}}\Big)
\]
- 根據attention權重 \(A\) 和values計算attention輸出 \(O\) :
\[O = AV
\]
多頭自注意力機制
- 並行地計算多個自注意力過程,並拼接輸出結果:
\[O_i = \mathrm{softmax}\Big(\frac{Q_iK_i^T}{\sqrt{d_k}}\Big)V_i \\
O = \big[O_1,\dots,O_M\big]
\]
殘差連線
Residual connections [He et al., 2016]
- 將淺層網路和深層網路相連,有利於梯度回傳;
- 使深處網路的訓練變得更加容易。
\[X^l = \mathrm{MultiHeadAttn}(X^{l-1}) + X^{l-1}
\]
層正則
Layer Normalization [Ba et al., 2016]
- 對輸入進行標準化;
- 加速收斂,提升模型訓練的穩定性。
\[均值:\mu^l = \frac{1}{d}\sum_{i=1}^dx_i^l \\
方差:\sigma^l = \sqrt{\frac{1}{d}\sum_{i=1}^d(x_i^l-\mu^l)^2} \\
歸一化:x'^l = \frac{x^l-\mu^l}{\sigma^l}
\]
前饋網路
兩層前饋神經網路
\[\mathrm{FFN}(X) = \max(0,XW_1 + b_1)W_2 + b_2
\]
Transformer解碼器
- Cross Attention:解碼時需要關注源端資訊。
- Masked Attention:解碼時(訓練)不應該看到未來的資訊。
Transformer
- 機器翻譯
- 影像領域
- Alphafold2