在學習Bert之前我們先了解“遞歸神經網絡(RNN??Recurrent neural network)”?和 “長短期記憶(LSTM?Long short-term memory)”
我們如果僅僅識別每個字的含義,那么在一句話中沒有相同的字還是可以的但是如果一句話中有相同的字,那么我們進不能識別每個字的含義,因為有可能相同的字,位置不一樣,詞性也不一樣,那么含義就會不一樣。?
因此就引出了 遞歸神經網絡(RNN??Recurrent neural network)和長短期記憶(LSTM?Long short-term memory)
遞歸神經網絡
RNN就是在傳入模型的時候,也傳入一個向量,就是一個記憶單元,我們可以形象的稱為“傳家寶”,因為傳家寶會一直串行的傳下去這樣就能。有了這個傳家寶,就可以根據上文判斷當前文字的詞性。
因為是串行傳遞,如果一句話很長,這也導致RRN模型中記憶單元也就是“傳家寶”中記錄的東西過多,導致最前面的信息和最后面的信息很難對應,如:
當我們問“誰與賽罕塔拉結下了不解之緣?”時,“傳家寶”里的東西已經記錄前面的太多信息了,無法準確的找到主語“我”。
為了解決這個問題,因此引出“長短期記憶(LSTM?Long short-term memory)”模型。
長短期記憶
LSTM模型就是,還是那上面的例子,問“誰與賽罕塔拉結下了不解之緣?”時,我們就會把“傳家寶”上鎖,不會讓中間無關緊要的信息進入“傳家寶”,這樣我們就能在“傳家寶”當中找到我們想要的答案。
自注意力機制
通過學習RNN和LSTM模型,雖然問題已經解決,但是速度還是太慢了,先輩的巨人們就創造了Bart模型,在學習Bart模型前,我們要先了解自注意力機制(Self-attention)
所謂的注意力機制就是是一個特征轉換器,考慮了句子整體的前后關系。注意力機制可以讓模型在生成每個目標詞的時候,選擇性地“關注”源句子中相關聯的部分,而不是等同對待整個源句子。
?通俗一點,注意力機制就是對于每個事件所分擔注意力的比例是多少。
那么𝛼1,1, 𝛼1,2, 𝛼1,3, 𝛼1,4這些都是怎么求的呢?
得到的𝛼1,1, 𝛼1,2, 𝛼1,3, 𝛼1,4其概率和不為1,因此在經過一次Soft-max,得到概率和為1,這樣我們就得到了𝛼1分配給每個字多少的注意力
b1就是𝛼1看過整句話結合注意力得到的值?,這樣可以求得b2,b3,b4,在計算得過程中都是全部都是并行的,完全不需要等待前面得內容,因此速度很快。
下面是具體得計算過程,
?
我們把每個字,也就是表示成768維向量稱之為token
Bert
Bert就是一個編碼器,與他對應的就是GPT-2解碼器,先逐步分析Bert的過程:
Inputs就是將一個字以one-hot的編碼形式展示出來,傳去Input Embeadding中,就是對應的“詞Embeadding”進行的操作就是進行一次全連接Linear(22128,768);在進行一次Positional Encoding,就是對應的“位置 Embeadding”,進行的操作是一次全連接Linear(512,768)。
經過兩次全連接,進入的就是Muti-Head Attention(多頭注意力機制),下面的三個箭頭就是Wq、Wk、Wv,都是(768,768)的Linear,后面進行Norm,就是歸一化,觀察到還有一個箭頭指向Add,這就是ResNet殘差連接,因為有殘差連接,網絡才能走很深。傳出還是768維。
傳入Feed Forward,Feed Forward的操作就是進行兩次全連接:nn.linear(768,3072)、nn.linear(3072,768),得到768維,在進行一次歸一化和殘差連接,這就算把特征提取出來了。
這就是Bert的一次完整的過程,當然,因為Bert整體的過程不改變維度,輸入768維,輸出768維,所以可以根據具體的情況進行N次。
? ? ? ? ? ??
這就是他們之間的關系?
?