self attention
Q=K=V :輸入一個句子,那么里面的每個詞都要和該句子中的所有詞進行attention計算,目的是要學習句子內部詞之間的依賴關系,捕獲句子的內部結構。
首先,要build Q,K,V,對其進行線性變換 for example: dot,reshape, permute_dimensions
然后,我們要對序列做mask,忽略填充部分的影響,一般mask是將填充部分置零,但attention中的mask是在softmax之前,將填充部分減去一個較大的整數(這樣softmax后就比較接近0)
之后,call函數
onece encoder:
vector->self attention->feed forward neural network->r
Q可以理解成篇章的詞向量序列,K= V, 為問題的詞向量序列,那么輸入就是aligned question embedding
transform:
就是谷歌提出的transformer 的架構。這其中左半部分是 encoder, 右半部分是 decoder.
Encoder: 這里面有 N=6 個 一樣的layers, 每一層包含了兩個sub-layers. 第一個sub-layer 就是多頭注意力層(multi-head attention layer) 然后是一個簡單的全連接層。 這里還有一個殘差連接 (residual connection), 在這個基礎上, 還有一個layer norm. 這里的注意力層會在下文詳細解釋。
Decoder: 這里同樣是有六個一樣的Layer是,但是這里的layer 和encoder 不一樣, 這里的layer 包含了三個sub-layers, 其中有 一個self-attention layer, encoder-decoder attention layer 最后是一個全連接層。 前兩個sub-layer 都是基於multi-head attention layer. 這里有個特別點就是masking, masking 的作用就是防止在訓練的時候 使用未來的輸出的單詞。 比如訓練時, 第一個單詞是不能參考第二個單詞的生成結果的。 Masking就會把這個信息變成0, 用來保證預測位置 i 的信息只能基於比 i 小的輸出。
tensor2tensor
可以理解成模型和各類數據集的一個集成庫,可以方便的去調用,解決常見的問題。
實踐路線
attention->transform->bert
理解原理->用t2t實現transform