RNN 語言模型:序列機率與梯度怎麼接起來|CMU 10-423 第 1 堂
一句「我喜歡貓」不是三個互不相干的字。
一句「我喜歡貓」不是三個互不相干的字。
RNN 用同一組權重,在每個時間步更新一個隱藏狀態,所以能處理任意長度的序列。CS231N L7 從手工造一個偵測連續 1 的 RNN 講起,接著是字元級語言模型、把 CNN 特徵接進 RNN 做影像描述,再用梯度流解釋為什麼 vanilla RNN 難訓練:梯度爆炸靠 gradient clipping,梯度消失靠改架構,也就是 LSTM。最後把 Mamba 這類 state space model 稱為「現代 RNN」。
HW2 把「14*(43+20)=882」這種算式當成字元序列,要你用兩層 LSTM 看到「=」之後逐字生成答案。訓練集 2,369,250 筆、驗證集 263,250 筆,數字都在 0–49 之間;六個 TODO 從建字典、只在「=」之後算 loss 的 batching、生成函式,一路到 teacher forcing 訓練與 exact match 評估。W4 的 PyTorch 助教課就是這份作業的工具箱。
「Look over there」是 3 個 token,中文「請看那邊」是 4 個,日文是 12 個——輸出長度跟輸入對不上,分類器那套「最後接一層 FFN」就不能用。這份 33 頁的投影片從 encoder-decoder 講起,推到 RNN 的梯度消失、LSTM 的三個閘門,最後用 attention 同時解決長距離與平行化兩個問題,並解釋為什麼要除以 √d。
清大高宏宇 NLP 課第二週的投影片共 62 頁,主題是「預測下一個字」。前半用 bigram 計數表、add-one smoothing 和 perplexity 講統計語言模型,再用 PPMI 的 cherry/digital 例子講稀疏向量;中段回到 Word2Vec 的負採樣,並用「蘋果」一詞說明為什麼需要 contextualized embedding;後半從 FFN 的三個缺點引出 RNN,示範它怎麼做 NER、句子分類,以及 stacked 與雙向版本。
這一堂有一條主線:語言模型要估計一串詞出現的機率,做法是一次預測下一個詞。先講詞怎麼表示,從字典、one-hot、共現矩陣走到低維的 word embedding。再講語言模型的三代:n-gram 用數的,沒看過的組合機率是零;neural LM 用網路預測,相近的詞自動分到機率;RNN LM 把所有前文累積在 hidden state,每個時間點共用同一組權重。RNN 用 BPTT 訓練,同一個矩陣乘很多次會讓梯度消失或爆炸,爆炸用 clipping,消失靠 LSTM、GRU 的 gating。最後依輸入與輸出的形狀,把應用分成整句分類、tagging 與 encoder-decoder。
RNN 沿時間傳遞隱狀態,梯度連乘可能衰減或放大;LSTM 以門控制 cell state 的保留與更新,改善長程訊號傳遞但不保證穩定。Self-attention 縮短位置間的資訊路徑,單層 dense attention 的總計算仍隨序列長度平方成長。
第 4 講把語言模型定義成下一詞機率分布,再用 RNN 壓縮任意長前文;它同時揭露 recurrence 的核心代價:資訊與梯度都必須沿時間步逐步傳遞。