當前位置:
首頁 > 新聞 > 多圖帶你讀懂 Transformers 的工作原理

多圖帶你讀懂 Transformers 的工作原理

本文為 AI 研習社編譯的技術博客,原標題 :

How Transformers Work

作者 | Giuliano Giacaglia

翻譯 | 胡瑛皓

校對 | 醬番梨 審核 | 約翰遜·李加薪 整理 | 立魚王

原文鏈接:

https://towardsdatascience.com/transformers-141e32e69591

Transformer是一類神經網路架構,現在越來越受歡迎了。Transformer最近被OpenAI用於訓練他們的語言模型,同時也被DeepMind的AlphaStar 採用,用於他們的程序擊敗那些頂級星際玩家。

Transformer是為了解決序列傳導問題或神經網路機器翻譯而設計的,意味著任何需要將輸入序列轉換為輸出序列的任務都可以用,包括語音識別和文本到語音轉換等。

序列傳導。綠色表示輸入,藍色表示模型,紫色表示輸出。動圖摘自:jalammar.github.io

對於需要進行序列傳導的模型,有必要有某種記憶。例如,我們將以下句子翻譯到另一種語言(法語):

「The Transformers」 are a Japanese [[hardcore punk]] band. The band was formed in 1968, during the height of Japanese music history」

本例中,第二句話中的「the band」一詞指代第一句中引入的「The Transformers」。當你讀到第二句中的"the band",你知道它指的是「The Transformers」 band。這可能對翻譯很重要。事實上,後一句話中的某個詞指代前幾句話中出現的某個詞,像這樣的例子很多。

翻譯這樣的句子,模型需要找出之間的依賴和關聯。循環神經網路 (RNNs)和卷積神經網路(CNNs)由於其特性已被使用來解決這個問題。 讓我們回顧一下這兩種架構及其缺點。

循環神經網路

循環神經網路內部有循環,允許信息保存其中。

多圖帶你讀懂 Transformers 的工作原理

打開今日頭條,查看更多圖片

輸入表示為 x_t

如上圖所示,我們看到神經網路的一部分A,處理輸入x_t,然後輸出h_t。A處循環使得信息可從前一步傳遞至後一步。

可以換一種方式思考這些循環。循環神經網路可認為是同一網路A的多重備份,每個網路將信息傳遞給其後續網路。看一下如果我們將循環展開會如何:

多圖帶你讀懂 Transformers 的工作原理

展開的循環神經網路

圖中鏈式本質清楚地表明循環神經網路與序列和列表相關。 如果以這種方式翻譯一段文本,需要將文本中的每個單詞設置為其輸入。循環神經網路將序列中前面的詞語的信息傳入後一個神經網路,這樣便可以利用和處理這些信息。

下圖展示了sequence to sequence模型通常是如何用循環神經網路工作的。每個單詞被單獨處理,然後將編碼階段的隱狀態傳入解碼階段以生成結果句子,然後這樣就產生了輸出。

多圖帶你讀懂 Transformers 的工作原理

動圖摘自此文:jalammar.github.io

長期依賴的問題

考慮一下這類模型,即使用之前看到的單詞預測下一個單詞。如果我們需要預測這句話「the clouds in the ___」的下一個單詞,不需要額外的語境信息,很顯然下個單詞是「sky」。

這個例子里,相關信息和需預測單詞的距離很近。循環神經網路可以學習前面的信息,並找出句中下一個單詞。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:colah.github.io

但有些情況我們需要更多語境信息。例如試圖預測這句話的最後一個單詞: 「I grew up in France… I speak fluent ___」。 最靠近這個單詞的信息建議這很有可能是一種語言,但當你想確定具體是哪種語言時,我們需要語境信息France,而這出現在較前面的文本中。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:colah.github.io

當相關信息和詞語之間距離變得很大時,RNN變得非常低效。那是因為,需要翻譯的信息經過運算中的每一步,傳遞鏈越長,信息就越可能在鏈中丟失。

理論上RNN可以學習這些長期依賴關係,不過實踐表現不佳,學不到這些信息。因而出現了LSTM,一種特殊的RNN,試圖解決這類問題。

Long-Short Term Memory (LSTM)

我們平時安排日程時,通常會為不同的約會確定不同的優先順序。如果有什麼重要行程安排,我們通常會取消一些不那麼重要的會議,去參加那些重要的。

RNN不會那麼做。無論什麼時候都會不斷往後面加信息,它通過應用函數轉換全部現有信息。在過程中所有信息都被修改了,它不去考慮哪些重要,哪些不重要。

LSTMs在此基礎上利用乘法和加法做了一些小改進。在LSTMs里,信息流經一種機制稱為細胞狀態。LSTM便可以選擇性的記憶或遺忘那些重要或不重要的事情了。

LSTM內部看起來像是這樣:

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:colah.github.io

每個細胞的輸入為x_t (在句子到句子翻譯這類應用中x_t是一個單詞), 上一輪細胞狀態以及上一輪的輸出。模型基於這些輸入計算改變其中信息,然後產生新的細胞狀態和輸出。本文不會詳細講每個細胞的實現機制。如果你想了解這些細胞的運作機制,推薦你看一下Christopher的博客:


Understanding LSTM Networks -- colah"s blog
這些循環使得循環神經網路看起來有點神秘。 但如果再細想一下,事實上

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

採用細胞狀態後,在翻譯過程中,句子中對翻譯單詞重要的信息會被一輪一輪傳遞下去。

LSTM的問題

總體來說問題LSTM的問題與RNN一樣,例如當句子過長LSTM也不能很好的工作。原因在於保持離當前單詞較遠的上下文的概率以距離的指數衰減。

那意味著當出現長句,模型通常會忘記序列中較遠的內容。RNN與LSTM模型的另一個問題,由於不得不逐個單詞處理,因此難以並行化處理句子。不僅如此,也沒有長短範圍依賴的模型。總之,LSTM和RNN模型有三個問題:

  • 順序計算,不能有效並行化

  • 沒有顯示的建模長短範圍依賴

  • 單詞之間的距離是線性的

Attention

為了解決其中部分問題,研究者建立了一項能對特定單詞產生注意力的技能。

當翻譯一個句子,我會特別注意我當前正在翻譯的單詞。當我錄製錄音時,我會仔細聆聽我正在寫下的部分。如果你讓我描述我所在的房間,當我這樣做的時候,我會瞥一眼描述的物體。

神經網路用attention可以做到同樣的效果,專註於給出信息的那部分。例如,RNN可注意另一RNN的輸出。在每個時點它聚焦於其他RNN不同的位置。

為了解決這些問題,注意力(attention)是一種用於神經網路的技術。 對於RNN模型,與其只編碼整個句子的隱狀態,我們可以把每個單詞的隱狀態一起傳給解碼器階段。在RNN的每個步驟使用隱藏狀態進行解碼。詳見下面動圖

多圖帶你讀懂 Transformers 的工作原理

綠色步驟是編碼階段,紫色步驟是解碼階段,動圖摘自此文:jalammar.github.io

其背後的想法是句子每個單詞都有相關信息。為了精確解碼,需要用注意力機制考慮輸入的每個單詞。

對於要放入序列傳導RNN模型的注意力,我們分成編碼和解碼兩步。一步以綠色表示另一步以紫色表示。綠色步驟稱為編碼階段紫色步驟稱為解碼階段。

多圖帶你讀懂 Transformers 的工作原理

動圖摘自此文:jalammar.github.io

綠色步驟負責由輸入建立隱狀態。我們把句子中每個單詞產生的所有隱狀態傳入解碼階段,而不是和過去的attention一樣,僅傳遞一個隱狀態給解碼器。每個隱狀態都會在解碼階段被使用,去找出網路應該注意的地方。

比如,當我們翻譯這句 「Je suis étudiant」法語句子到英語時,需要在翻譯時解碼步驟去查不同的單詞。

多圖帶你讀懂 Transformers 的工作原理

此動圖展示當翻譯「Je suis étudiant」至英語時,如何給每個隱狀態賦予權重。顏色越深對於每個單詞的權重越大。動圖摘自此文:jalammar.github.io

或再比如,當你將「L』accord sur la zone économique européenne a été signé en ao?t 1992.」 法語翻譯成英語,下圖展示了需要對每個輸入賦予多少注意力。

多圖帶你讀懂 Transformers 的工作原理

翻譯 「L』accord sur la zone économique européenne a été signé en ao?t 1992.」法語句子到英文。圖片摘自此文:jalammar.github.io

不過我們前面討論的一些問題,用帶attention的RNN仍然無法解決。比如,不可能並行處理輸入的單詞。對較大的文本語料,增加了翻譯文本的用時。

卷積神經網路

卷積神經網路可以幫助解決這些問題,可以做到:

  • 並行化 (按層)

  • 利用局部依賴

  • 位置間的距離是對數級的

一些最流行的序列傳導網路, 例如 Wavenet和Bytenet就採用卷積神經網路。

多圖帶你讀懂 Transformers 的工作原理

Wavenet, 模型採用卷積神經網路 (CNN). 動圖摘自此文

卷積神經網路可並行處理是因為,輸入的每個單詞可被同時處理並不必依賴於前一個單詞翻譯的結果。不僅如此,輸出單詞與任何CNN輸入的單詞的「距離」是log(N) 數量級— — 即輸入單詞到輸出單詞連線形成的樹的高度 (如上面動圖所示)。 這比RNN輸出到其輸入的距離要好很多,因為其距離是N數量級。

問題在於卷積神經網路在翻譯句子過程中不一定有助於解決依賴問題。這就是transformers被創造出來的原因,它結合了CNN和attention機制.

Transformers

Transformers模型試圖結合卷積神經網路和attention機制解決並行化問題。attention機制提升模型從一個序列轉換為另一個序列的速度。

我們來看一下Transformer是如何工作的。Transformer是一類用attention來提速的模型,具體來說使用的是self-attention。

多圖帶你讀懂 Transformers 的工作原理

Transformer, 圖片摘自此文:jalammar.github.io

從內部來看Transformer與之前模型架構相似,只是Transformer由6個編碼器和6個解碼器組成。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

編碼器非常相似,所有編碼器都具有相同的架構。解碼器也有相同的屬性諸如互相之間非常相似。編碼器有兩層: self-attention層和前饋神經網路層。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

編碼器的輸入先進入self-attention層,有助於編碼器在編碼句中特定單詞時可參考輸入句子中其他單詞。解碼器也包含這兩層,不過在兩層中間增加了attention層,以幫助解碼器聚焦到輸入句子的相關部分。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

Self-Attention

注: 這部分轉自Jay Allamar的博文

https://jalammar.github.io/illustrated-transformer/

我們來看一下模型中各種不同的向量/張量,它們在已訓練模型組件中如何流轉,從而把輸入轉化成輸出的。 由於這是一個NLP應用實例,我們先用詞嵌入演算法把每個輸入的詞語轉換為詞向量。

圖片摘自此文:jalammar.github.io

每個單詞被轉換為一個長度512的向量。圖中我們用這些簡單的方塊表示這些向量。

僅在最底層的解碼器處進行詞嵌入轉換。對於所有編碼器,它們都接收大小為512的向量列表

最底層的編碼器接收的是詞嵌入,但其他編碼器接收的輸入是其下一層的直接輸出。當輸入序列中的單詞做詞嵌入轉換後,數據就按順序流經各層編碼器的2層結構。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

此處我們開始看到Transformer的一個重要特性,每個位置上的單詞在編碼器中流經自己的路徑。在self-attention層處理這些路徑的依賴關係。前饋神經網路不處理這些依賴關係。這樣當數據流經前饋神經網路時,不同的路徑可被並行執行。

接下來,我們將切換到一句短句實例,看一下在編碼器的子層里會發生什麼。

Self-Attention

首先讓我們來看一下如何用向量計算self-attention,然後再看一下利用矩陣運算的實現方式。

多圖帶你讀懂 Transformers 的工作原理

找出句中單詞之間的關係並給出正確的注意力。圖片摘自此文:http://web.stanford.edu

self-attention計算的第一步是通過編碼器的輸入向量 (本例中是每個單詞的詞嵌入向量) 建立Query, Key和Value三個向量,我們通過輸入的詞嵌入向量乘以之前訓練完成的三個矩陣得到。

注意,這些新向量的長度小於詞嵌入向量的長度。這裡取64,而詞嵌入向量及編碼器的輸入輸出長度為512。這是一個架構性選擇,向量長度不需要變得更小,使得多頭注意力(multiheaded attention)計算基本穩定。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

將詞向量x1乘以權重矩陣WQ得到q1,即與這個單詞關聯的「query」向量。這樣,我們最終分別得到輸入句子里每個單詞的「query」,「key」和「value」投射。

那「query」, 「key」和「value」向量是什麼?

它們是一種抽象,在計算和考慮注意力時會被用到。如果你讀了下文里關於注意力的計算方法,你就差不多明白各向量的角色。

計算self-attention的第二步是計算一項得分(score)。我們以計算句中第一個單詞Thinking的self-attention為例。我們需要計算句中每個單詞針對這個詞的得分。當我們在特定的位置編碼一個單詞時,該得分決定了在輸入句子的其他部分需要放多少焦點。

得分等於當前詞的query向量與需評分詞語的key向量的點積。因此,如果需要計算#1位置處單詞的self-attention,第一個得分是q1與k1的點積,第二個得分就是q1和k2的點積。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

第三第四步是將所有得分除以8(論文中取的是向量維數開根號— — 64,這樣會得到更穩定的梯度。當然也可以用其他值,不過這是默認值),然後將結果放入一個softmax操作. softmax方法正則化這些得分,使它們都大於0且加和為1。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

這個經過softmax的score決定了該單詞在這個位置表達了多少。很顯然當前位置所在的單詞會得到最高的softmax得分,不過有時候有助於演算法注意到其他與當前單詞相關的單詞。

第五步,將每個value向量乘以softmax得分 (準備對它們求和)。這裡的意圖是保持需要聚焦的單詞的value,並且去除不相關的單詞(乘以一個很小的數字比如0.001)。

第六步,求和加權後的value向量。這就產生了(對於第一個單詞)在self-attention層上此位置的輸出。

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:jalammar.github.io

這樣self-attention計算就結束了。結果向量就可以拿來作為前饋神經網路的輸入。不過實際實現中,考慮到性能該計算由矩陣形式運算完成。我們現在看一下,我們已經知道如何在詞級別計算了。

Multihead attention

Transformer基本上就是這麼工作的。此外還有一些其他細節使其工作得更好。比如,實現中使用了多頭注意力的概念,而不是只在一個維度上計算注意力。

其背後的想法是,當你翻譯一個單詞時,基於不同的問題,會對於同一個單詞產生不同的注意力,如下圖所示。比如說當你在翻譯「I kicked the ball」句中的「kicked」時,你會問「Who kicked」。由於問題不同,當翻譯成另一種語言時結果可能改變。或者問了其他問題,比如「Did what?」,等…

多圖帶你讀懂 Transformers 的工作原理

多圖帶你讀懂 Transformers 的工作原理

多圖帶你讀懂 Transformers 的工作原理

圖片摘自此文:http://web.stanford.edu

Positional Encoding

Transfomer的另一個重要步驟是為每個詞增加了位置編碼。由於每個單詞的位置與翻譯相關,所以編碼每個單詞的位置是有用的。

總結

本文概述transformers是怎麼工作的,以及在序列傳導問題中使用的原因。如果你希望更深入的理解模型運作的原理及相關差異。推薦閱讀以下帖子、文章和視頻資料。

  1. The Unreasonable Effectiveness of Recurrent Neural Networks

  2. Understanding LSTM Networks

  3. Visualizing A Neural Machine Translation Model

  4. The Illustrated Transformer

  5. The Transformer — Attention is all you need

  6. The Annotated Transformer

  7. Attention is all you need attentional neural network models

  8. Self-Attention For Generative Models

  9. OpenAI GPT-2: Understanding Language Generation through Visualization

  10. WaveNet: A Generative Model for Raw Audio

想要繼續查看該篇文章相關鏈接和參考文獻?

點擊【多圖帶你讀懂 Transformers 的工作原理】或長按下方地址:

https://ai.yanxishe.com/page/TextTranslation/1558

AI研習社今日推薦:雷鋒網雷鋒網雷鋒網

卡耐基梅隆大學 2019 春季《神經網路自然語言處理》是CMU語言技術學院和計算機學院聯合開課,主要內容是教學生如何用神經網路做自然語言處理。神經網路對於語言建模任務而言,可以稱得上是提供了一種強大的新工具,與此同時,神經網路能夠改進諸多任務中的最新技術,將過去不容易解決的問題變得輕鬆簡單。

加入小組免費觀看視頻:https://ai.yanxishe.com/page/groupDetail/33

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

「互聯網汽車」又添新成員,上汽斯柯達接入斑馬智行互聯繫統
視見醫療科技研發總監王少彬:宮頸癌放療精準臨床靶區勾畫

TAG:雷鋒網 |