人工智慧算法之序列建模的利器:transformer,比RNN更快更準更深

2020-09-27 平凡科技

時間老人的背上負著一個龐大的布袋,那裡面裝滿著被寡恩負義的世人所遺忘的豐功偉績;那些已成過去的偉績,一轉眼間就會在人們的記憶裡消失。     —— 莎士比亞

概述

Transformer這篇論文很經典, 本文是這篇論文及相關參考論文的讀書筆記。主要涉及到:

  • 對序列建模: 從CNN, RNN(LSTM) 到transformer, 解決了速度和依賴長度的問題
  • 模型架構: layer normalization和殘差網絡,使得深度學習在序列建模上成為可能
  • 對幾種attention進行了分析及可視化
  • 最後對position encoding進行了說明,本質上這個模塊無需訓練,是人為通過正弦的引入了相對、絕對位置的信息特徵,有點FFT(傅立葉變換)的味道。

序列建模

自然語言處理中的文本,可以看成是詞的序列,是天生的序列數據。而對序列建模,通常都需要考慮上下文信息,比如RNN, LSTM, GRU等,核心思想:

  • 即當前的狀態不僅取決於當前的輸入值 x[t] ,也取決於歷史前一時刻的狀態值h[t-1] (如果是反向RNN, 是未來狀態)。
  • 按此迭代: h[t-1] = f(h[t-2], x[t-1]),依此下去
  • 可以得出結論,當前的狀態 h(t) 和 h(t-1), h(t-2)等歷史狀態都有關係,再進一步講,h(t)和歷史的輸入序列、當前的輸入都有關係。
  • 相比RNN網絡而言,實際上LSTM和GRU更能容易刻畫距離更遠的歷史信息。如果用雙向LSTM的話,就能考慮上(歷史)下(未來)文信息了。但這種基於 RNN的網絡,有一個局限,就是要step-by-step逐步計算,阻止了並行化,計算起來,比CNN要慢很多。
  • 注意力機制(Attention)是目前機器翻譯的標配,翻譯每個目標詞的時候 (@Decoder),可以按不同的重要程度關注源序列各個詞(@Encoder),通常和RNN結合在一起應用。
  • Transformer的提出,拋棄了RNN的逐步計算的思路,但保留了考慮上 下文信息可捕捉任意長度的依賴關係的特點,且能實現Attention的功能,更易並行化複雜度低, 目前應用廣泛。
  • Encoder完全並行,Decoder是step-by-step。

模型架構

encoder: 本質上是將一個序列表徵的過程(特徵工程),將(B, T)大小的離散輸入詞序列通過embedding表示成(B, T, d_model)大小 ,再通過transformer表示成(B, T, d_model)


decoder: 考慮背景信息的languge model

  • 本質上一個language model, 一個詞一個詞的將詞蹦出來。
  • 通過attention, 將encoder的輸出(上下文信息)綁定到language model上

殘差網絡(residual Net)

  • ResNet(1512.03385)論文中,指出對於深層的網絡, 當層次足夠深時,訓練集的誤差會大,反而不如淺層的網絡。得出結論: identity mapping不容易學習,故設計了ResNet, 使得 深度 學習成為可能。
  • NLP中, ResNet中的直連,也有另外一種含義: 能保證當前輸入Q不會被attention(Q, K, V) 淹沒
  • ResNet的直連設計,需要 d_embedding=d_k=d_v=d_model, 否則,無法直連
  • y = x + F(x)
  • F(x) 需要包含非線性, 否則,y = x+Wx = (W+I)x, 實驗也證明, 這種方式沒有作用
  • F(x) = W_2 Relu(W_1x)
  • x, y 的維度要相同,才能用Residual Network

Layer Normalization(1607.06450)

  • batch normalization (BN): 對所有樣本上進行平均: (B, d) ~ 沿著B求均值和標準差
  • 實際實現中,對同一batch中的樣本進行統計, 嚴重依賴batch size, 如batch size小, 統計不準
  • layer normalization(LN): 對某一層神經元上不同位置進行統計: (B, T, d) ~ 沿著(d)求均值和方差
  • 與Batch Size無關,與樣本綁定

BN VS LN

Attention

  • self-attention: 將一個序列表徵出來
  • encode-decoder attention: 解碼(預測下一個詞)時,考慮Encoder的信息
  • multi-head attention: 將輸入映射到子空間,分別做attention, 然後拼起來,在映射回目標空間

scaled dot-product attention

輸出是V中行向量的加權平均,加權係數矩陣 (T_y, T_x) 通過訓練得出:

attention(Q, K, V) = softmax(QK^T/d_k) V

注意:如果一個序列所有的詞都相同, 如果沒有Position Encoding,attention模塊認為所有位置的詞都相同。而加了position encoding, 即使每個位置上的詞相同,但由於位置不同,生成的embedding也不同。

multi-head attention:

將Q, K, V 映射成不同的子空間,分別應用attention, 然後 起來,再映射到目標空間。

幾種attention

self-attention初衷: 複雜度低,且能捕捉長期依賴關係

  • 根據attention公式,可得到: self-attention的複雜度為O(T^2d_model), 其中 T 為序列的長度
  • 不用循環機制,所以可捕捉任意位置的依賴關係

在self-attention中, Q==K==V

encode self-attention

在encoder-decoder attention中, Q!=K==V

decoder self-attention

encoder-decoder attentions

Position Encoding

初衷: transformer中沒有RNN機制, 如何利用序列的位置信息(相對、絕對)?

  • 一種是position embedding, 只能對訓練語料中的長度做Embedding, 需要訓練
  • 和詞embedding類似,有OOV的問題
  • 如果預測數據超出範圍(OOV),會報錯。處理方式是用一個<unk>表示所有OOV的"位置(position)",但信息會損耗
  • 一種是transformer中提出的sin/cos position encoding, 不需訓練
  • 泛化能力理論上來說更好
  • 利用了sin/cos的周期性,外插explorate效果會好,理論上只要內存足夠大,可以外插任意位置

position encoding: d(t)

從position embedding角度,將每個位置t映射成embedding

  • 表示position的t, 與正弦波、餘弦波上的t對應
  • 0 <= d <= d_model$ 對應的是正弦波、餘弦波的周期(或頻率), d 越大,周期越大
  • position encoding 模塊,本質上內部是一個矩陣 Tmax x d_model , 無需訓練,其中 T_max 是支持的最大序列長度,理論上來說可以無窮大,直到OOM

position encodong: t(d)

主要參考文獻

  • transfomer, https://arxiv.org/abs/1706.03762
  • ResNet, https://arxiv.org/abs/1512.03385
  • Layer Norm: https://arxiv.org/abs/1607.06450

相關焦點

  • 谷歌開源序列建模框架Lingvo
    機器之心編譯機器之心編輯部自然語言處理在過去一年取得了很大進步,但直接關注 NLP 或序列建模的框架還很少。本文介紹了谷歌開源的 Lingvo,它是一種建立在 TensorFlow 上的序列建模框架。這一命名展示了 Lingvo 框架的根源:它是由 TensorFlow 開發的通用深度學習框架,它重點關注自然語言處理相關的序列建模方法,包括機器翻譯、語音識別和語音合成等。項目地址:https://github.com/tensorflow/lingvo在谷歌內部,Lingvo 框架非常有吸引力,使用它的研究人員越來越多。
  • 深2.5至4倍,參數和計算量卻更少,DeLighT Transformer是怎麼做到的?
    然而算法優化一直在路上…… Google 團隊提出的 NLP 經典之作 Transformer 由在數學上,每一層 l 的輸出 Y 可定義為: 每一層 l 的組數則按照以下公式計算: DeLighT 模塊 Transformer 塊:標準 transformer 塊(圖 1c)由多頭注意力組成,使用查詢 - 鍵 - 值(query-key-value)分解來建模序列
  • 深度學習建模方法,首先需要了解建模的思路
    人工智慧領域發展到現在,已經不像人們認為的那樣遙不可及,只要編程熟練,即使是半路出家的人,也可以很快學會編程並使用深度學習進行建模。在當前人工智慧人才缺口大的前提下,編程課成為很多學校選擇重點投入的科目,但是有些學校的老師在校內教學方法上存在一些問題,授課講解的不夠系統,無法進行深度學習建模操作。
  • 模型壓縮95%,MIT韓松等人提出新型Lite Transformer
    然而這樣流行的算法卻需要極高的算力才能實現足夠的性能,這對於受到算力和電池嚴格限制的移動端來說有些力不從心。該論文已被人工智慧頂會 ICLR 2020 收錄。該研究是由 MIT 電氣工程和計算機科學系助理教授韓松領導的。
  • Transformer競爭對手QRNN論文解讀更快的RNN
    使用遞歸神經網絡(RNN)序列建模業務已有很長時間了。 但是RNN很慢因為他們一次處理一個令牌無法並行化處理。 此外,循環體系結構增加了完整序列的固定長度編碼向量的限制。 為了克服這些問題,諸如CNN-LSTM,Transformer,QRNNs之類的架構蓬勃發展。
  • 這六大方法如何讓Transformer輕鬆應對高難度長文本序列?
    ,d 是鍵向量和查詢向量的維數,n 是序列的長度。因此,可能編碼在稀疏 transformer 注意模式中的歸納偏置是有積極作用的。如果想要開始將 Transformer-XL用於自己的項目,原始碼請參見 Kimi Young 的 github:https://github.com/kimiyoung/transformer-xl,或查看HuggingFace 的實現(https://huggingface.co/transformers/model_doc/transformerxl.html
  • 內容推薦算法:異構行為序列建模探索
    DINDIN認為用戶的興趣是多樣的, 對於確定的一個target, 通常只能匹配到歷史行為序列中的若干商品而非全部, 所以要有針對性地激活這些匹配到的商品, 同時抑制之外的噪聲。以這種有的放矢的思想建模序列表達, 相較 歷史序列 mean pooling 能夠帶來額外的收益。
  • 關於序列建模,是時候拋棄RNN和LSTM了
    現在,序列變換(seq2seq)才是求解序列學習的真正答案,序列變換還在語音到文本理解的任務中取得了優越的成果,並提升了 Siri、Cortana、谷歌語音助理和 Alexa 的性能。此外還有機器翻譯,現在機器翻譯已經能將文本翻譯為多種語言。在圖像到文本、文本到圖像的變換以及視頻文字說明的應用中,序列變換也是卓有成效。
  • 熱門的模型跨界,Transformer、GPT做CV任務一文大盤點
    原創 Synced 機器之心機器之心原創作者:陳萍可能大家心裡都有一種錯誤認知,做自然語言處理任務的模型不能夠用來進行計算機視覺任務。其實不然,現階段已出現好多研究,它們通過算法的改進,將在 NLP 領域表現良好的模型,如 Transformer、GPT 等進行改進並應用於視覺任務,不僅實現了模型跨界,而且取得了不錯的性能。模型跨界效果如何呢?人工智慧的快速發展已經淋漓盡致地體現在我們的日常生活中,從人臉識別、語音識別到機器翻譯等等,無不展示著 AI 帶來的便利。
  • 從字符級的語言建模開始,了解語言模型與序列建模的基本概念
    生成文本序列的通常方式是訓練模型在給定所有先前詞/字符的條件下預測下一個詞/字符出現的概率。此類模型叫作統計語言模型,這種模型會嘗試捕捉訓練文本的統計結構,本文從字符級語言模型和名字預測出發向讀者介紹了語言建模的核心概念。循環神經網絡(RNN)模型常用於訓練這種語言模型,因為它們使用高維隱藏狀態單元處理信息的能力非常強大,建模長期依賴關係的能力也非常強。
  • 來自谷歌大腦工程師的RNN系列教程 | RNN的基本介紹
    該教程細分為以下部分: 1.循環神經網絡(RNN)的基本介紹(本部分) 2.利用Python和Theano實現RNN 3.理解時間進化反傳算法(BPTT)的算法和梯度消失問題 4.建立基於門控循環單元(GRU)或者長短時記憶(LSTM)的RNN模型那麼今天,我們將先對RNN做一個基本介紹。
  • 圖解OpenAI的秘密武器GPT-2:可視化Transformer語言模型
    Transformer架構的演變一個是encoder結構,如下圖所示:來自原始 transformer論文的encoder模塊可以輸入直到某個最大序列長度(例如512個token)。如果輸入序列短於此限制,我們可以填充序列的其餘部分。
  • 2019最新進展|Transformer在深度推薦系統中的應用
    作者 | Alex-zhai【導讀】最近基於Transformer的一些NLP模型很火(比如BERT,GPT-2等),因此將Transformer模型引入到推薦算法中是近期的一個潮流。Transformer比起傳統的LSTM、GRU等模型,可以更好地建模用戶的行為序列。本文主要整理Transformer在推薦模型中的一些應用以及在2019年的最新進展。
  • 谷歌將AutoML應用於Transformer架構,翻譯結果飆升,已開源!
    Evolved Transformer不僅實現了最先進的翻譯結果,與原始的Transformer相比,它還展示了語言建模的改進性能。自幾年前推出以來,Google的Transformer架構已經應用於從製作奇幻小說到編寫音樂和聲的各種挑戰。重要的是,Transformer的高性能已經證明,當應用於序列任務(例如語言建模和翻譯)時,前饋神經網絡可以與遞歸神經網絡一樣有效。
  • 機器之心GitHub項目:從循環到卷積,探索序列建模的奧秘
    這是機器之心 GitHub 實現項目的第四期,前面幾期分別介紹了卷積神經網絡、生成對抗網絡與帶動態路由的 CapsNet。機器之心項目地址:https://github.com/jiqizhixin/ML-Tutorial-Experiment文章結構:序列建模循環網絡表達式計算圖LSTMGRU卷積與時間卷積網絡全卷積與因果卷積空洞卷積高速公路網絡與殘差模塊實現LSTM的語言建模時間卷積網絡的語言建模
  • 密碼學算法之序列密碼中的ZUC算法詳解
    ZUC 算法,即祖衝之算法,屬於序列密碼,其也是中國第一個成為國際密碼標準的密碼算法。ZUC 算法,即祖衝之算法,是移動通信 3GPP 機密性算法 EEA3 和完整性算法 EIA3的核心,其亦是中國自主設計的加密算法。在 2009 年 5 月, ZUC 算法獲得了 3GPP 安全算法組 SA立項,正式申請參加 3GPP LTE 第三套機密性和完整性算法標準的競選工作。