<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Transformer、BERT細節(jié)基礎(chǔ)知識點

          共 7320字,需瀏覽 15分鐘

           ·

          2022-04-18 14:10


          向AI轉(zhuǎn)型的程序員都關(guān)注了這個號??????

          機器學(xué)習(xí)AI算法工程?? 公眾號:datayx


          下面嘗試用QA的形式深入不淺出BERT/Transformer的細節(jié)知識點。

          1、不考慮多頭的原因,self-attention中詞向量不乘QKV參數(shù)矩陣,會有什么問題?

          Self-Attention的核心是用文本中的其它詞來增強目標詞的語義表示,從而更好的利用上下文的信息。

          self-attention中,sequence中的每個詞都會和sequence中的每個詞做點積去計算相似度,也包括這個詞本身。

          對于 self-attention,一般會說它的 q=k=v,這里的相等實際上是指它們來自同一個基礎(chǔ)向量,而在實際計算時,它們是不一樣的,因為這三者都是乘了QKV參數(shù)矩陣的。那如果不乘,每個詞對應(yīng)的q,k,v就是完全一樣的。

          在相同量級的情況下,qi與ki點積的值會是最大的(可以從“兩數(shù)和相同的情況下,兩數(shù)相等對應(yīng)的積最大”類比過來)。

          那在softmax后的加權(quán)平均中,該詞本身所占的比重將會是最大的,使得其他詞的比重很少,無法有效利用上下文信息來增強當前詞的語義表示。

          而乘以QKV參數(shù)矩陣,會使得每個詞的q,k,v都不一樣,能很大程度上減輕上述的影響。

          當然,QKV參數(shù)矩陣也使得多頭,類似于CNN中的多核,去捕捉更豐富的特征/信息成為可能。


          2、為什么BERT選擇mask掉15%這個比例的詞,可以是其他的比例嗎?

          BERT采用的Masked LM,會選取語料中所有詞的15%進行隨機mask,論文中表示是受到完形填空任務(wù)的啟發(fā),但其實與CBOW也有異曲同工之妙

          從CBOW的角度,這里??有一個比較好的解釋是:在一個大小為??的窗口中隨機選一個詞,類似CBOW中滑動窗口的中心詞,區(qū)別是這里的滑動窗口是非重疊的。

          那從CBOW的滑動窗口角度,10%~20%都是還ok的比例。

          上述非官方解釋,是來自我的一位朋友提供的一個理解切入的角度,供參考。


          3、使用BERT預(yù)訓(xùn)練模型為什么最多只能輸入512個詞,最多只能兩個句子合成一句?

          這是Google BERT預(yù)訓(xùn)練模型初始設(shè)置的原因,前者對應(yīng)Position Embeddings,后者對應(yīng)Segment Embeddings

          上述BERT pytorch代碼來自

          https://github.com/xieyufei1993/Bert-Pytorch-Chinese-TextClassification

          結(jié)構(gòu)層次非常清晰。


          而在BERT config中


          因此,在直接使用Google 的BERT預(yù)訓(xùn)練模型時,輸入最多512個詞(還要除掉[CLS]和[SEP]),最多兩個句子合成一句。這之外的詞和句子會沒有對應(yīng)的embedding。

          當然,如果有足夠的硬件資源自己重新訓(xùn)練BERT,可以更改 BERT config,設(shè)置更大max_position_embeddings 和 type_vocab_size值去滿足自己的需求。


          4、為什么BERT在第一句前會加一個[CLS]標志?

          BERT在第一句前會加一個[CLS]標志,最后一層該位對應(yīng)向量可以作為整句話的語義表示,從而用于下游的分類任務(wù)等。

          為什么選它呢,因為與文本中已有的其它詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個詞的語義信息,從而更好的表示整句話的語義。

          具體來說,self-attention是用文本中的其它詞來增強目標詞的語義表示,但是目標詞本身的語義還是會占主要部分的,因此,經(jīng)過BERT的12層,每次詞的embedding融合了所有詞的信息,可以去更好的表示自己的語義。

          而[CLS]位本身沒有語義,經(jīng)過12層,得到的是attention后所有詞的加權(quán)平均,相比其他正常詞,可以更好的表征句子語義。

          當然,也可以通過對最后一層所有詞的embedding做pooling去表征句子語義。

          這里補充一下bert的輸出,有兩種,在BERT TF源碼中對應(yīng):

          一種是get_pooled_out(),就是上述[CLS]的表示,輸出shape是[batch size,hidden size]。

          一種是get_sequence_out(),獲取的是整個句子每一個token的向量表示,輸出shape是[batch_size, seq_length, hidden_size],這里也包括[CLS],因此在做token級別的任務(wù)時要注意它。


          5、Self-Attention 的時間復(fù)雜度是怎么計算的?




          6、Transformer在哪里做了權(quán)重共享,為什么可以做權(quán)重共享?

          Transformer在兩個地方進行了權(quán)重共享:

          (1)Encoder和Decoder間的Embedding層權(quán)重共享;

          (2)Decoder中Embedding層和FC層權(quán)重共享。

          對于(1),《Attention is all you need》中Transformer被應(yīng)用在機器翻譯任務(wù)中,源語言和目標語言是不一樣的,但它們可以共用一張大詞表,對于兩種語言中共同出現(xiàn)的詞(比如:數(shù)字,標點等等)可以得到更好的表示,而且對于Encoder和Decoder,嵌入時都只有對應(yīng)語言的embedding會被激活,因此是可以共用一張詞表做權(quán)重共享的。

          論文中,Transformer詞表用了bpe來處理,所以最小的單元是subword。英語和德語同屬日耳曼語族,有很多相同的subword,可以共享類似的語義。而像中英這樣相差較大的語系,語義共享作用可能不會很大。

          但是,共用詞表會使得詞表數(shù)量增大,增加softmax的計算時間,因此實際使用中是否共享可能要根據(jù)情況權(quán)衡。


          對于(2),Embedding層可以說是通過onehot去取到對應(yīng)的embedding向量,F(xiàn)C層可以說是相反的,通過向量(定義為 x)去得到它可能是某個詞的softmax概率,取概率最大(貪婪情況下)的作為預(yù)測值。

          那哪一個會是概率最大的呢?在FC層的每一行量級相同的前提下,理論上和 x 相同的那一行對應(yīng)的點積和softmax概率會是最大的(可類比本文問題1)。

          因此,Embedding層和FC層權(quán)重共享,Embedding層中和向量 x 最接近的那一行對應(yīng)的詞,會獲得更大的預(yù)測概率。實際上,Decoder中的Embedding層和FC層有點像互為逆過程

          通過這樣的權(quán)重共享可以減少參數(shù)的數(shù)量,加快收斂。

          但開始我有一個困惑是:Embedding層參數(shù)維度是:(v,d),F(xiàn)C層參數(shù)維度是:(d,v),可以直接共享嘛,還是要轉(zhuǎn)置?其中v是詞表大小,d是embedding維度。

          查看 pytorch 源碼發(fā)現(xiàn)真的可以直接共享:

          Linear 層的權(quán)重定義中,是按照 (out_features, in_features) 順序來的,實際計算會先將 weight 轉(zhuǎn)置在乘以輸入矩陣。所以 FC層 對應(yīng)的 Linear 權(quán)重維度也是 (v,d),可以直接共享。


          7、BERT非線性的來源在哪里?

          前饋層的gelu激活函數(shù)和self-attention,self-attention是非線性的,感謝評論區(qū)指出。


          8、BERT的三個Embedding直接相加會對語義有影響嗎?

          這是一個非常有意思的問題,蘇劍林老師也給出了回答,真的很妙啊:

          Embedding的數(shù)學(xué)本質(zhì),就是以one hot為輸入的單層全連接。
          也就是說,世界上本沒什么Embedding,有的只是one hot。

          在這里想用一個例子再嘗試解釋一下:

          假設(shè) token Embedding 矩陣維度是 [4,768];position Embedding 矩陣維度是 [3,768];segment Embedding 矩陣維度是 [2,768]。

          對于一個字,假設(shè)它的 token one-hot 是[1,0,0,0];它的 position one-hot 是[1,0,0];它的 segment one-hot 是[1,0]。

          那這個字最后的 word Embedding,就是上面三種 Embedding 的加和。

          如此得到的 word Embedding,和concat后的特征:[1,0,0,0,1,0,0,1,0],再過維度為 [4+3+2,768] = [9, 768] 的全連接層,得到的向量其實就是一樣的。

          再換一個角度理解:

          直接將三個one-hot 特征 concat 起來得到的 [1,0,0,0,1,0,0,1,0] 不再是one-hot了,但可以把它映射到三個one-hot 組成的特征空間,空間維度是 4*3*2=24 ,那在新的特征空間,這個字的one-hot就是[1,0,0,0,0...] (23個0)。

          此時,Embedding 矩陣維度就是 [24,768],最后得到的 word Embedding 依然是和上面的等效,但是三個小Embedding 矩陣的大小會遠小于新特征空間對應(yīng)的Embedding 矩陣大小。

          當然,在相同初始化方法前提下,兩種方式得到的 word Embedding 可能方差會有差別,但是,BERT還有Layer Norm,會把 Embedding 結(jié)果統(tǒng)一到相同的分布。


          BERT的三個Embedding相加,本質(zhì)可以看作一個特征的融合,強大如 BERT 應(yīng)該可以學(xué)到融合后特征的語義信息的。

          下面兩個問題也非常好,值得重點關(guān)注,但網(wǎng)上已經(jīng)有很好的解答了,如下:


          9、Transformer的點積模型做縮放的原因是什么?

          https://www.zhihu.com/question/339723385


          10、在BERT應(yīng)用中,如何解決長文本問題?

          https://www.zhihu.com/question/327450789


          11、為何在獲取輸入詞向量之后需要對矩陣乘以embeddding size的開方?意義是什么?

          embedding matrix的初始化方式是xavier init,這種方式的方差是1/embedding size,因此乘以embedding size的開方使得embedding matrix的方差是1,在這個scale下可能更有利于embedding matrix的收斂

          12. bert中為什么采用層歸一化而不是批量歸一化

          (1)batch normalization

          對RGB圖片進行BN的時候,意思就是對R通道的所有H和W進行norm,對G通道的所有H和W進行norm,以及對B通道的所有H和W進行norm。代碼里的3意味著,如果affine為True的時候,我們要產(chǎn)生3組beta和gamma,分別乘到norm后的RGB通道的特征上

          ICS問題:在深度學(xué)習(xí)中,第L+1層的輸入,也可能隨著第L層參數(shù)的變動,而引起分布的變動。這樣每一層在訓(xùn)練時,都要去適應(yīng)這樣的分布變化,使得訓(xùn)練變得困難。這種層間輸入分布變動的情況,就是Internal Covariate Shift

          (2)Layernormlization

          NLP的layernorm是對最后一維進行的(B,T,d)

          NLP任務(wù),輸入是句子,長短不一,使用mask方法補零,產(chǎn)生了很多沒有用的信息,使用BN就會訓(xùn)練出沒有用的東西

          13. 為什么bert需要額外的segment embedding?

          因為bert預(yù)訓(xùn)練的其中一個任務(wù)是判斷segment A和segment B之間的關(guān)系,這就需要embedding中能包含當前token屬于哪個segment的信息,然而無論是token embedding,還是position embedding都無法表示出這種信息,因此額外創(chuàng)建一個segment embedding matrix用來表示當前token屬于哪個segment的信息,segment vocab size就是2,其中index=0表示token屬于segment A,index=1表示token屬于segment B。

          14. Wordpiece

          wordpiece其核心思想是將單詞打散為字符,然后根據(jù)片段的組合頻率,最后單詞切分成片段處理。和原有的分詞相比,能夠極大的降低OOV的情況,例如cosplayer, 使用分詞的話如果出現(xiàn)頻率較低則是UNK,但bpe可以把它切分吃cos play er, 模型可以詞根以及前綴等信息,學(xué)習(xí)到這個詞的大致信息,而不是一個OOV。

          NLP三大Subword模型詳解:BPE、WordPiece、ULM

          https://zhuanlan.zhihu.com/p/198964217




          wordpiece與BPE(Byte Pair Encoding)算法類似,也是每次從詞表中選出兩個子詞合并成新的子詞。與BPE的最大區(qū)別在于,如何選擇兩個子詞進行合并:BPE選擇頻數(shù)最高的相鄰子詞合并,而WordPiece選擇能夠提升語言模型概率最大的相鄰子詞加入詞表

          15. 為什么BERT采用warm-up?

          16. BERT訓(xùn)練過程中的損失函數(shù)

          介紹一下BERT和Transformer

          (1)bert是用了transformer的encoder側(cè)的網(wǎng)絡(luò),作為一個文本編碼器,使用大規(guī)模數(shù)據(jù)進行預(yù)訓(xùn)練,預(yù)訓(xùn)練使用兩個loss,一個是mask LM,遮蔽掉源端的一些字(可能會被問到mask的具體做法,15%概率mask詞,這其中80%用[mask]替換,10%隨機替換一個其他字,10%不替換),然后根據(jù)上下文去預(yù)測這些字,一個是next sentence,判斷兩個句子是否在文章中互為上下句,然后使用了大規(guī)模的語料去預(yù)訓(xùn)練。

          (2)BERT由12層transformer layer(encoder端)構(gòu)成,首先word emb , pos emb(可能會被問到有哪幾種position embedding的方式,bert是使用的哪種), sent emb做加和作為網(wǎng)絡(luò)輸入,每層由一個multi-head attention, 一個feed forward 以及兩層layerNorm構(gòu)成

          (3)對于Multi-head attention,一個輸入向量,被映射成query, key, value。然后三個向量分別切分成head個小向量,每一組小向量之間做attention

          (4)Q*K+softmax計算出attention,然后與V相乘

          Transformer的位置編碼

          1. 計數(shù)編碼

          2. 計數(shù)+歸一化

          3. 三角函數(shù)編碼

          再重新審視一下位置編碼的需求:1. 需要體現(xiàn)同一個單詞在不同位置的區(qū)別;2. 需要體現(xiàn)一定的先后次序關(guān)系,并且在一定范圍內(nèi)的編碼差異不應(yīng)該依賴于文本長度,具有一定不變性。我們又需要值域落入一定數(shù)值區(qū)間內(nèi)的編碼,又需要保證編碼與文本長度無關(guān),那么怎么做呢?一種思路是使用有界的周期性函數(shù)

          4. 訓(xùn)練式位置編碼

          NLP中的MASK

          https://zhuanlan.zhihu.com/p/139595546


          ????原文地址

          https://zhuanlan.zhihu.com/p/480274493


          機器學(xué)習(xí)算法AI大數(shù)據(jù)技術(shù)

          ?搜索公眾號添加:?datanlp

          長按圖片,識別二維碼




          閱讀過本文的人還看了以下文章:


          TensorFlow 2.0深度學(xué)習(xí)案例實戰(zhàn)


          基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測


          《基于深度學(xué)習(xí)的自然語言處理》中/英PDF


          Deep Learning 中文版初版-周志華團隊


          【全套視頻課】最全的目標檢測算法系列講解,通俗易懂!


          《美團機器學(xué)習(xí)實踐》_美團算法團隊.pdf


          《深度學(xué)習(xí)入門:基于Python的理論與實現(xiàn)》高清中文PDF+源碼


          《深度學(xué)習(xí):基于Keras的Python實踐》PDF和代碼


          特征提取與圖像處理(第二版).pdf


          python就業(yè)班學(xué)習(xí)視頻,從入門到實戰(zhàn)項目


          2019最新《PyTorch自然語言處理》英、中文版PDF+源碼


          《21個項目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實踐詳解》完整版PDF+附書代碼


          《深度學(xué)習(xí)之pytorch》pdf+附書源碼


          PyTorch深度學(xué)習(xí)快速實戰(zhàn)入門《pytorch-handbook》


          【下載】豆瓣評分8.1,《機器學(xué)習(xí)實戰(zhàn):基于Scikit-Learn和TensorFlow》


          《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼


          汽車行業(yè)完整知識圖譜項目實戰(zhàn)視頻(全23課)


          李沐大神開源《動手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材


          筆記、代碼清晰易懂!李航《統(tǒng)計學(xué)習(xí)方法》最新資源全套!


          《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼


          將機器學(xué)習(xí)模型部署為REST API


          FashionAI服裝屬性標簽圖像識別Top1-5方案分享


          重要開源!CNN-RNN-CTC 實現(xiàn)手寫漢字識別


          yolo3 檢測出圖像中的不規(guī)則漢字


          同樣是機器學(xué)習(xí)算法工程師,你的面試為什么過不了?


          前海征信大數(shù)據(jù)算法:風(fēng)險概率預(yù)測


          【Keras】完整實現(xiàn)‘交通標志’分類、‘票據(jù)’分類兩個項目,讓你掌握深度學(xué)習(xí)圖像分類


          VGG16遷移學(xué)習(xí),實現(xiàn)醫(yī)學(xué)圖像識別分類工程項目


          特征工程(一)


          特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊


          特征工程(三):特征縮放,從詞袋到 TF-IDF


          特征工程(四): 類別特征


          特征工程(五): PCA 降維


          特征工程(六): 非線性特征提取和模型堆疊


          特征工程(七):圖像特征提取和深度學(xué)習(xí)


          如何利用全新的決策樹集成級聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?


          Machine Learning Yearning 中文翻譯稿


          螞蟻金服2018秋招-算法工程師(共四面)通過


          全球AI挑戰(zhàn)-場景分類的比賽源碼(多模型融合)


          斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


          python+flask搭建CNN在線識別手寫中文網(wǎng)站


          中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學(xué)習(xí)與特征工程



          不斷更新資源

          深度學(xué)習(xí)、機器學(xué)習(xí)、數(shù)據(jù)分析、python

          ?搜索公眾號添加:?datayx??


          瀏覽 129
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人舔人人爽 | 欧美12区 | 高清无码黄片 | 五月丁香啪啪网 | 男女激情操逼一区福利网站 |