2021-06-30 Transformer & Bert tips

BERT中使用Transformer作特征提取器,其實只使用了Transformer的Encoder。

那么Decoder去哪了呢?顯然是被BERT改造了。Transformer其實是個完整地seq-to-seq模型,可以解決諸如機器翻譯、生成式QA這種輸入輸出為不定長句子的任務,在Transformer中,它使用Encoder做特征提取器,然后用Decoder做解析,輸出我們想要的結果。

而對于BERT,它作為一個預訓練模型,它使用固定的任務——language modeling來對整個模型的參數進行訓練,這個language modeling的任務就是masked language model,所以它是一個用上下文去推測中心詞[MASK]的任務,故和Encoder-Decoder架構無關,它的輸入輸出不是句子,其輸入是這句話的上下文單詞,輸出是[MASK]的softmax后的結果,最終計算Negative Log Likelihood Loss,并在一次次迭代中以此更新參數。所以說,BERT的預訓練過程,其實就是將Transformer的Decoder拿掉,僅使用Encoder做特征抽取器,再使用抽取得到的“特征”做Masked language modeling的任務,通過這個任務進行參數的修正。

當然了,BERT不僅僅做了MLM任務,還有Next Sequence Prediction,這個由于后序驗證對模型的效果提升不明顯,所以沒有贅述。

注意:我們常說,xxx使用Transformer作為特征抽取器,這其實在說用Transformer的Encoder(主要是Self-Attention和短路連接等模塊)做特征抽取器,和Decoder啥關系也沒有

Transformer block是由multi-head self-attention + FFN構成的?

其實論文原文以及配圖就是這樣寫的,但這么說不確切。如果你仔細地看過Transformer部分的源碼,你會發現,在multi-head self-attention和FFN層之間,還有一個“intermediate layer”,即中間層,【代碼詳見此處】。這個中間層將前面Attention-layer的hidden size擴大了4倍,然后再做一次非線性變換(即過一個激活函數,如gelu、relu),再將hidden size變回原size。中間這部分的功能,我個人理解,有點類似于“特征組合器”,增大神經元個數,增強Transformer對于distributed的文本特征的組合能力,從而獲取更多、更復雜的語義信息。此外,中間層是Transformer中唯一一個過了激活函數的layer,所以也引入了非線性信息,當然從理論上也對提升模型的擬合不同語義信息能力有幫助。(當然,BERT預訓練的MLM任務中,在bert_model的輸出之后,在接softmax+將結果計算loss之前,有一個hidden_size不變的線性變換Linear + 激活函數激活 + LayerNorm的過程,【代碼詳見此處】,這里也有個激活函數,但這并非Transformer的結構,這屬于接了下游MLM任務的結構,故真正Transformer-block中的非線性映射,只在中間層的激活函數引入)

實際上,“intermediate layer”在bert代碼里是集成到FFN類中的,但由于很多人經常把FFN層直接當做一次線性變換(即簡單的nn.Linear layer)而忽略了其中的intermediate layer,故在這里單拎出來加以解釋。
————————————————
版權聲明:本文為CSDN博主「illusion」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_41712499/article/details/103993879

Transformer和BERT的位置編碼有什么區別?

BERT的位置編碼是學習出來的,Transformer是通過正弦函數生成的。

原生的Transformer中使用的是正弦位置編碼(Sinusoidal Position Encoding),是絕對位置的函數式編碼。由于Transformer中為self-attention,這種正余弦函數由于點乘操作,會有相對位置信息存在,但是沒有方向性,且通過權重矩陣的映射之后,這種信息可能消失。

BERT中使用的是學習位置嵌入(learned position embedding),是絕對位置的參數式編碼,且和相應位置上的詞向量進行相加而不是拼接。

BERT模型結構是什么?

利用Transformer結構構造了一個多層雙向的encoder網絡。

BERT、GPT、ELMO之間的區別是什么?

(1)特征提取器:elmo采用LSTM進行提取,GPT和bert則采用Transformer進行提取。很多任務表明Transformer特征提取能力強于LSTM,elmo采用1層靜態向量+2層LSTM,多層提取能力有限,而GPT和bert中的Transformer可采用多層,并行計算能力強。

(2)單/雙向語言模型:

GPT采用單向語言模型,elmo和bert采用雙向語言模型。但是elmo實際上是兩個單向語言模型(方向相反)的拼接,這種融合特征的能力比bert一體化融合特征方式弱。

GPT和bert都采用Transformer,Transformer是encoder-decoder結構,GPT的單向語言模型采用decoder部分,decoder的部分見到的都是不完整的句子;bert的雙向語言模型則采用encoder部分,采用了完整句子。
————————————————
版權聲明:本文為CSDN博主「麥格芬230」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42295205/article/details/106152707
————————————————
版權聲明:本文為CSDN博主「麥格芬230」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42295205/article/details/106152707

positionencoding

PositionalEmbedding的成分直接疊加于Embedding之上,使得每個token的位置信息和它的語義信息(embedding)充分融合,并被傳遞到后續所有經過復雜變換的序列表達中的線性組合得到, 也就是乘上某個線性變換矩陣就得到了

Feed Forward Network

每一層經過attention之后,還會有一個FFN,這個FFN的作用就是空間變換。FFN包含了2層lineartransformation層,中間的激活函數是ReLu。其實,FFN的加入引入了非線性(ReLu激活函數),變換了attention output的空間,從而增加了模型的表現能力。把FFN去掉模型也是可以用的,但是效果差了很多。
feed-forward network: 實現 很簡單,如果你用 Dense這種實現,那就簡單了, ffn_1 = nn.Dense(hidden_size, activation='relu')
ffn_2 = nn.Dense(units, activation='identity')
ffn_2(ffn_1(X))
如果自己寫layer 那需要 做一個 reshape操作,因為input 是 3-D (batch,seq,embedding), 這里推薦大家用conv1d去寫, kernel_size設置成1就行(后續可以和cv的一些常見操作聯系起來,便于理解feed-forward network的意義),另外要注意的是這邊第一層的activation是relu,后面 一層是沒有activation的

這里如何去理解ffn(feed-forward network)的作用可以從 兩個層面去理解:

  1. 模型的capacity,第一層映射到更大的空間,無外乎就是用了更大的網絡,提升了模型的空間,沒有ffn當然也可以,但是效果卻明顯差了,這點我做過實驗

  2. ’unique‘ representation: 之前提到推薦用conv1d的方式去實現,會發現這個做法是在cv中網絡的最后的位置嘗嘗出現的,是一個localized transform,因為在前面的attention層的表示中,每個位置已經融合了其他位置的信息了,這里我們想要鞏固每一個位置他們自己的 'unique' representation, 做法就是用kernel_size = 1 的conv1d,這個操作不考慮周邊鄰居的信息,只會對自己的位置的representation進行transform. 這邊看上去有點難以理解,其實是說的通的,雖然我們希望每個位置在空間上去融合不同位置的信息(無論是圖片 conv block 實現,還是句子 attention 實現),但是我們還是會希望每個位置去保持/鞏固 自己原有的信息(而不是簡單的對每個位置的信息做加權平均,這里從前面一層的結構 input = input+attention 也可以看出),這里的ffn 我會理解去鞏固自己原有信息來獲取一個unique representation,不然結果可能每個位置的最后輸出會差不太多 (這里其實可以做個實驗去掉ffn 看看每個attention block 的每個位置的輸出會不會比較相似)

multi-head

Graph Attention Networks‘ ,attention 可以讓你關注重點的部分,但是attention 機制使得信息的交互很有限,會損失兩者之間一些有用的信息,而使用multi-head 可以增加網絡空間,讓更多的信息傳輸

Dropout說的簡單一點就是:我們在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止工作,這樣可以使模型泛化性更強,因為它不會太依賴某些局部的特征

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容