語言模型與神經網路

imyhy發表於2024-08-25

語言模型與神經網路

語言模型(Language Model)

Chat GPT 流暢的語言生成能力

自然語言是一種上下文相關的資訊表達和資訊傳遞方式。

定義:語言模型是衡量一句話出現在自然語言中的機率的模型。

image-20240813170939082

數學形式上,給定一句話 \(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} \]

語言模型的核心在於根據前文預測下一個詞出現的機率

image-20240813175643127

如何計算語言模型的機率?

統計語言模型

馬爾科夫假設:當前詞出現的機率之和它前面的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)從資訊處理角度對人腦神經元網路進行抽象,建立某種演算法數學模型,從而達到處理資訊的目的。

  • 神經元之間進行連線,組成網路;
  • 網路通常是某種演算法或者函式的逼近,也可能是一種邏輯策略的表達。

image-20240813204819193

基於4-GRAM的神經網路語言模型

image-20240813205318119

優點:

  • 不會有稀疏性問題;
  • 不需要儲存所有的n-grams。

不足:

  • 視野有限,無法建模長距離語義;
  • 視窗越大,引數規模越大。

能否構建處理任意長度的神經網路模型?

迴圈神經網路(Recurrent Neural Network, RNN)

  • 重複使用隱層引數

  • 可處理任意序列長度

\[h_t = f(W_hh_{t-1} + W_xx_t + b) \]

image-20240814103622998

image-20240814103808156

優點:

  • 能處理任意長度序列;
  • 能夠使用歷史資訊;
  • 模型引數量不隨序列長度增加。

不足:

  • 逐步計算,速度較慢;
  • 長期依賴問題。

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} \]

image-20240814105320186

RNN:梯度爆炸、梯度消失

image-20240814105607087

長短期神經網路(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} \]

image-20240814111250054

線性變換,緩解遠端梯度爆炸和梯度消失問題。

Attention機制(Attention Mechanism)

神經機器翻譯(Neural Machine Translation)

  • 端到端(end-to-end)的神經網路來求解機器翻譯任務。
  • 編碼器-解碼器框架(Encoder-decoder)
    • Seq2Seq;
    • 編碼器(encoder):用來編碼源語言的輸入;
    • 解碼器(decoder):用來生成目標語言的輸出。

編碼器-解碼器框架

image-20240814112510174

通用性:

  • 文字摘要(Summarization):長文字 \(\rightarrow\) 短文字;
  • 對話生成(Dialogue generation):之前的對話 \(\rightarrow\) 下一句對話;
  • 程式碼生成(Code generation):自然語言 \(\rightarrow\) 程式設計程式碼;
  • \(\dots\dots\)

前後依賴性太強,且翻譯過程不具有可解釋性!

目標端解碼某個特定單詞時,應該重點關注源端相關的單詞。

注意力機制

Attention Mechanism [Bahdanau et al., 2015]

  • 目標端解碼時,直接從源端句子捕獲對當前解碼有幫助的資訊,從而生成更相關、更準確的解碼結果。

優點:

  • 緩解RNN中的資訊瓶頸問題;
  • 緩解長距離依賴問題;
  • 具有一定的可解釋性。

基於注意力機制的編碼器-解碼器框架

image-20240814113809425

編碼器-解碼器中如何計算注意力?

  • 編碼器的隱層狀態為 \(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 \]

機器翻譯中的注意力視覺化

image-20240814114454010

基於注意力機制的文字分類模型

image-20240814115117449

文字分類模型注意力視覺化

image-20240814115315798

視覺問答中的注意力

image-20240814115439435

Transformer網路

迴圈神經網路的問題

有限的資訊互動距離:

  • RNN能捕捉區域性資訊,但無法很好地解決長距離依賴關係(long-distance
    dependency)
  • 不能很好地建模序列中的非線性結構關係

無法並行:

  • RNN的隱層狀態具有序列依賴性
  • 時間消耗隨序列長度的增加而增加。

Self Attention

image-20240814120025353

Attention Is All You Need

Transformer [Vaswani et al., 2017]

  • 完全基於attention機制構建的神經網路模型;
  • 直接建模輸入序列的全域性依賴關係;
  • 平行計算。

image-20240814154710455

Transformer編碼器

image-20240814155058276

  • 輸入編碼 + 位置編碼;
  • 多頭注意力機制;
  • 殘差連線 & 層正則;
  • 前饋神經網路;
  • 殘差連線 & 層正則。

位置編碼

為什麼需要位置編碼?

  • 注意力計算:加權和;
  • 無法考慮相對位置關係。

將位置編碼 \(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\) ,並跟隨網路一起訓練,能更好地擬合資料。

自注意力機制

image-20240814160939284

  • 計算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 \]

多頭自注意力機制

image-20240814161415578

  • 並行地計算多個自注意力過程,並拼接輸出結果:

\[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:解碼時需要關注源端資訊。

image-20240814162915508

  • Masked Attention:解碼時(訓練)不應該看到未來的資訊。

image-20240814163657889

image-20240814163552582

Transformer

  • 機器翻譯

image-20240814163803226

  • 影像領域

image-20240814163837055

  • Alphafold2

image-20240814163905907

相關文章