遷移學習(Transfer Learning)用一句話概況就是把已經訓練好的模型遷移到類似任務中,幫助新模型的訓練。
傳統的神經網絡構建流程
遷移學習
主要分爲兩個步驟。
- 利用一些大型的公開數據集訓練出一個“通用”的 model 。這個階段稱爲 Pre-training 階段。
- 用到它們發佈的公開模型正對於我們的任務對模型進行微調(fine tuning)。這一階段也稱爲fine tuning階段。
使用不恰當就會產生“負遷移(negative transfer)”
Pre-training 模型一定需要:
- 大量的數據訓練。
- 模型有足夠的泛化能力。
word2vec缺陷:
- word2vec 還是把單詞壓縮到一維向量中,維度太低沒有損失了過多的信息。
- 無法區分多義詞,例如“bank”這個詞,有“銀行”和“岸邊”兩個截然不同的意思,然而因爲權重矩陣是靜態的,bank 無論在句子中是什麼意思,只會對應一個一維向量。
BERT 結構其實就是把 GPT 單向網絡結構改成了雙向。
BERT 的 Pre-training
無監督學習策略,上下文訓練語言模型。策略主要分爲兩部分。
單詞級別 把語料數據集(Google 採用了 33 億個單詞的文本)隨機分爲兩份A、B。A 佔比 85%,B 佔比百分之 15%。把數據 B 做類似與 CBOW 模型的操作,就是根據上下文去猜被遮擋的詞(mask)。但是具體細節不同。BERT 繼續把 B 拆分成B1(80%)、B2(10%)、B3(10%)進行 Mask 操作
句子級別 把語料中的句子隨機劃分。然後進行兩兩預測,預測句子二是否爲句子一的下文。
Transformer模型結構
BERT 模型主要使用了 Transformer。Transformer 起初是爲了解決 RNN 的長程記憶退化問題的。所以沒有使用 RNN 結構。
Encoders
Encoder(8個)
Self-Attention(MulitiHead) Add&Normalize Feed&Forward
Decoders
Decoders
Decoder(8個)
Self-Attention(MulitiHead) Add&Normalize Feed&Forward Encoder-Decoder Attention
Base-Attention
Ct 是attention score 的求和
Self-Attention
Base-Attention 中主要是找源句中的詞與目標句中詞的注意力權重。而 Self-Attention 是找本句中的詞與其餘所有詞的一個注意力值。
結構圖:
其中 Q、K、V 都是一個權重矩陣,本網絡目標就是求這三個權重矩陣。
計算過程:
- 第一步 Q矩陣與K矩陣相乘。
- 防止數據的相差過大需要做一下尺度縮放,dk是K的維度。
- Mask(opt.)是一個遮擋操作,實際上這一步在輸入的時候完成的。
- SoftMax把數據弄成0~1的概率數值。
- 與V矩陣進行點乘
Self-Attention(MulitiHead)
在 Transformer 中用的是 Self-Attention 的“多頭版”。所謂得“頭”就是一組 Q、K、V。多頭就是多組 Q、K、V。
Add&Normalize
Add
藉助了殘差這一思想。
深度殘差網絡(Resnet)
Normalize
數據的標準化。數據通過一個公式進行平移,縮放進行分佈調整。在 Transformer 中使用的是 Batch Normalization。
Encoder-Decoder Attention
與 Self-Attention 思路完全一樣,只不過它的 Q 矩陣和 V 矩陣來源於 Encoder,而不再是初始化得到的。
Positional Embedding
在 Input 輸入到 Transformer 的時候還做了一個 Positional Embedding 的操作,這是因爲純 Attention 是沒有辦法知道句子中單詞的輸入順序的。所以需要把單詞輸入之前的位置信息給神經網絡。