RNN,LSTM,BERT


RNN結構,雙向LSTM,Transformer, BERT對比分析

RNN

RNN 按照時間步展開

Bi-RNN
向前和向后的隱含層之間沒有信息流。

LSTM

長短期記憶(Long short-term memory, LSTM)是一種特殊的RNN,主要是為了解決長序列訓練過程中的梯度消失問題。

LSTM 對內部結構進行精心的設計,加入了輸入門,遺忘門,輸出門,和一個內部記憶單元\(c_t\)。輸入門控制當前計算新狀態以多大程度更新到記憶單元;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘;輸出門控制當前輸出有多大程度上取決於當前的記憶單元。

和普通RNN相比,主要的輸入輸出區別如下

相比RNN只有一個傳遞狀態\(h^t\),LSTM有兩個傳輸狀態,\(c^t\) (cell state)和 \(h^t\)(hidden state)。

計算公式

\[ f_t = \sigma(W_f*[x_t,h_{t-1}]+b_f) \\ i_t = \sigma(W_i*[x_t, h_{t-1}]+b_i) \\ o_t = \sigma(W_o*[x_t, h_{t-1}]+b_o) \\ \tilde{C_t} = tanh(W_c*[h_t-1,x_t]+b_c) \\ C_t = f_t\odot C_{t-1}+i_t\odot \tilde{C_t} \\ h_t = o_t\odot tanh(C_t) \]

參數量計算

\((hidden size * (hidden size + x_dim ) + hidden size) *4\)

self-attention

李宏毅self-attention筆記

核心思想:用文本中的其他詞來增強目標詞的語義表示,從而更好地利用上下文信息。
計算步驟:
- 相似度計算
- softmax
- 加權平均
self-attention
問題:常規的attention中,一般k=v, 那么self-attention中可以這樣嗎。

bert

推薦看原文哦: 超細節的BERT/Transformer知識點
史上最細節的自然語言處理NLP/Transformer/BERT/Attention面試問題與答案
上一個鏈接里問題的答案

論文

源碼

問題

問題:為什么選擇使用[cls]的輸出代表整句話的語義表示?
或者說為什么不選擇token1的輸出

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

為什么選它呢,

  • 因為與文本中已有的其它詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個詞的語義信息,從而更好的表示整句話的語義。
  • 從上面self-attention圖片中可以看出把cls位置當做q,類似於站在全局的角度去觀察整個句子文本。

問題:為什么是雙線性點積模型(經過線性變換Q != K)?

  • 雙線性點積模型,引入非對稱性,更具健壯性(Attention mask對角元素值不一定是最大的,也就是說當前位置對自身的注意力得分不一定最高)

展開解釋:

  • self-attention中,sequence中的每個詞都會和sequence中的每個詞做點積去計算相似度,也包括這個詞本身。
  • 對於 self-attention,一般會說它的 q=k=v,這里的相等實際上是指它們來自同一個基礎向量,而在實際計算時,它們是不一樣的,因為這三者都是乘了QKV參數矩陣的。那如果不乘,每個詞對應的q,k,v就是完全一樣的。
  • 在相同量級的情況下,\(q_i\)\(k_i\) 點積的值會是最大的(可以從“兩數和相同的情況下,兩數相等對應的積最大”類比過來)。
  • 那在softmax后的加權平均中,該詞本身所占的比重將會是最大的,使得其他詞的比重很少,無法有效利用上下文信息來增強當前詞的語義表示。
  • 而乘以QKV參數矩陣,會使得每個詞的q,k,v都不一樣,能很大程度上減輕上述的影響。

問題:self-attention的時間復雜度

  • 時間復雜復雜度為:\(O(n^2d)\)
    • 相似度計算可以看成矩陣(n×d)×(d×n),這一步的時間復雜度為O(n×d×n)
    • softmax的時間復雜度O(n^2)
    • 加權平均可以看成矩陣(n×n)×(n×d), 時間復雜度為O(n×n×d)

多頭注意力機制的時間復雜度:

  • hidden_size (d) = num_attention_heads (m) * attention_head_size (a),也即 d=m*a
  • 並將 num_attention_heads 維度transpose到前面,使得Q和K的維度都是(m,n,a),這里不考慮batch維度。
  • 這樣點積可以看作大小為(m,n,a)和(m,a,n)的兩個張量相乘,得到一個(m,n,n)的矩陣,其實就相當於(n,a)和(a,n)的兩個矩陣相乘,做了m次,時間復雜度是\(O(n^2×a×m) = O(n^2d)\)

問題:BERT 怎么處理長文本?

問題:BERT 比ELMO 效果好的原因

從網絡結構以及最后的實驗效果來看,BERT 比 ELMo 效果好主要集中在以下幾點原因:

  • LSTM 抽取特征的能力遠弱於 Transformer
  • 拼接方式雙向融合的特征融合能力偏弱(沒有具體實驗驗證,只是推測)
  • 其實還有一點,BERT 的訓練數據以及模型參數均多余 ELMo,這也是比較重要的一點

知乎:transformer中multi-head attention中每個head為什么要進行降維?
link

簡潔的說:在不增加時間復雜度的情況下,同時,借鑒CNN多核的思想,在更低的維度,在多個獨立的特征空間,更容易學習到更豐富的特征信息。

問題:BERT中的mask

  1. 預訓練的時候在句子編碼的時候將部分詞mask,這個主要作用是用被mask詞前后的詞來去猜測mask掉的詞是什么,因為是人為mask掉的,所以計算機是知道mask詞的正確值,所以也可以判斷模型猜的詞是否准確。
  2. Transformer模型的decoder層存在mask,這個mask的作用是在翻譯預測的時候,如“我愛你”,翻譯成“I love you”,模型在預測love的時候是不知道you的信息,所以需r要把后面“you”的信息mask掉。但是bert只有encoder層,所以這個算是transformer模型的特征。
  3. 每個attention模塊都有一個可選擇的mask操作,這個主要是輸入的句子可能存在填0的操作,attention模塊不需要把填0的無意義的信息算進來,所以使用mask操作。

問題:bert中進行ner為什么沒有使用crf;使用DL進行序列標注問題的時候CRF是必備嘛(todo: in action)

link

  1. 進行序列標注時CRF是必須的嗎?
    如果你已經將問題本身確定為序列標注了,並且正確的標注結果是唯一的,那么用CRF理論上是有正的收益的,但如果主體是BERT等預訓練模型,那么可能要調一下CRF層的學習率,參考CRF層的學習率可能不夠大

  2. 進行NER時必須轉為序列標注嗎?
    就原始問題而言,不論是NER、詞性標注還是閱讀理解等,都不一定要轉化為序列標注問題,既然不轉化為序列標注問題,自然也就用不着CRF了。不轉化為序列標注的做法也有很多,比如筆者提的GlobalPointer

問題:BERT的初始標准差為什么是0.02?

Retrieved from https://kexue.fm/archives/8747

cnn vs rnn vs self-attention

原文

語義特征提取能力

  • 目前實驗支持如下結論:Transformer在這方便的能力非常顯著超過RNN和CNN,RNN和CNN兩者能力差不多。
    長距離特征捕捉能力
    實驗支持如下結論:
    • 原生CNN特征抽取器在這方面顯著弱於RNN和Transformer
    • Transformer微弱優於RNN模型(距離小於13的時)
    • 在比較遠的距離上RNN微弱優於Transformer

任務綜合特征抽取能力(機器翻譯)
Transformer > 原生CNN == 原生RNN

並行計算能力及運行效率
Transformer和CNN差不多,都強於RNN


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM