與其感慨模型難訓練,不如試試 AutoNLP

dicksonjyl560101發表於2019-09-26

什麼是自注意力機制?

2017 年,谷歌發表了一篇名字叫做《Attention Is All You Need》的論文,該論文提出了基於注意力機制的來處理序列模型的問題,可以改變 RNN 模型訓練慢的弊端,並且在 11 個 NLP 任務中取得了最優結果。那麼,我們要認識 Transformer 模型,首先應該瞭解什麼是注意力機制。

通俗的來講,當我們在看一樣東西的時候,我們的注意力一定是在當前正在看的這個東西的某一個地方,換句話說,當我們的目光轉移到別處時,我們的注意力也在隨之轉移。將這個東西換成我們當前存在的一個場景中,那麼在這個場景中每一處位置上的注意力分佈是不均勻的。因此,注意力機制就是在模型中模擬人的這種注意力,去學習不同空間或者是區域性重要性,然後將這些重要性結合起來。

自注意力機制也叫做內注意力,是將一個序列中的不同位置聯絡起來,計算序列的表示的機制。假設我們要將一個英文句子翻譯為中文:Tom can’t play with Jerry because he has to move。那麼在這句話中,“he”指的是 Tom 還是 Jerry 呢?我們人類可以很快的回答這個問題,但是機器不能,這個時候就需要用到自注意力機制。當我們構建的模型處理“he”這個單詞的時候,自注意力機制會允許“he”與“Tom”建立聯絡,幫助模型對這個單詞更好的進行編碼。

當我們瞭解了自注意力機制以後,我們就來拆解分析它的計算方式。在論文中,作者將自注意力機制解釋為“按比例縮放的點積注意力”,可以看出,整個注意力機制的計算過程是透過“點積(乘積)”的方式完成的。

自注意力的計算步驟:

(1)將每個單詞詞向量生成三個向量,分別為:查詢向量,鍵向量和值向量,這三個向量是透過詞嵌入與三個權值矩陣相乘得到的。具體計算過程如下圖所示:

與其感慨模型難訓練,不如試試AutoNLP

(2)計算得分。得到每個單詞的查詢向量、鍵向量以及值向量以後,需要拿每個單詞對當前處理的單詞進行打分,即計算兩個單詞之間的相關性。該步驟透過當前單詞的查詢向量與其他單詞的鍵向量相點積完成。

(3)將上一步得到的分數除以鍵向量維數的平方根(論文中使用了 8),使得梯度更穩定,然後透過 softmax 函式傳遞結果,即將所有單詞的分數歸一化。

(4)將上一步得到的結果分別乘以值向量,透過這一步來弱化不相關的單詞。

(5)將上一步驟的計算結果進行求和,得到自注意力層在當前位置(即當前關注的單詞)的輸出。
將上述步驟透過矩陣計算,計算公式如下圖所示,Q 矩陣中的每一行代表一個句子中每一個單詞的查詢矩陣,以此類推,Z 矩陣就是自注意力層的輸出形式。

與其感慨模型難訓練,不如試試AutoNLP

初識 Transformer 模型

我們在上一節中已經瞭解了什麼是自注意力機制,Transformer 是第一個完全依賴自注意力機制計算輸入和輸出表示的轉換模型,因此我們在這一節來深入瞭解一下 Transformer 模型。如果將 Transformer 模型看做一個黑盒,那麼機器翻譯任務就可以解釋為輸入一種語言,經過 Transformer 模型輸出為另一種語言。將這個黑盒拆開來看,裡面包括了編碼元件和解碼元件,以及這兩個元件之間的互動。編碼元件由一堆編碼器構成,解碼元件由相同數量的解碼器組成。

所有的編碼器的結構都是一樣的,可以分為自注意力層和前饋神經網路層。輸入單詞 x 經過自注意力層輸出 z,然後將 z 作為前饋神經網路的輸入,以此類推。解碼器與編碼器結構類似,但是在自注意力層和前饋神經網路層之間多了編碼 - 解碼注意力層,在這一層中,查詢向量來自於前一個解碼器層的輸出,鍵向量和值向量來自於編碼器的輸出,這使得解碼器中的每個位置都可以參與輸入序列中的所有位置。

另外在 Transformer 結構中,還有幾個細節需要注意:

(1)殘差連線。在編碼器和解碼器的每一個子層之間,都存在一個殘差連線,並且跟隨一個“歸一化”層。

(2)位置編碼。在 NLP 問題中,每一句話的單詞輸入順序很重要,因此,Transformer 在詞嵌入中新增了一個位置向量,透過使用不同頻率的正弦餘弦函式來獲得單詞的絕對或者相對位置資訊。

在 Transformer 模型中,作者引入了“多頭”注意力。在上一節中,我們已經瞭解了單層注意力機制,但是論文作者發現對查詢向量、鍵向量以及值向量進行 h 次不同的線性對映效果特別好,因此提出了“多頭”注意力機制。多頭注意力機制就是將學習到的線性對映分別對映到 d_k、d_k 和 d_v 維,對每個對映之後得到的查詢向量、鍵向量以及值向量進行自注意力函式的並行操作,得到了 d_v 維的輸出。輸出的矩陣與附加權重 W^O 相乘,得到壓縮後的矩陣,該矩陣中融合了所有注意力頭資訊。用圖來表示計算過程,如圖所示。

多頭注意力機制主要提高了兩個方面的效能:首先它擴充套件了模型對於不同位置的專注能力,比如我們在本節一開始提出的問題,“he”指的是 Tom 還是 Jerry。第二個方面是它給出了注意力層的多個“表示子空間”,即每個單詞可以對映要不同的表示子空間中。

與其感慨模型難訓練,不如試試AutoNLP

如下圖所示,為 Transformer 的整體框架圖。

與其感慨模型難訓練,不如試試AutoNLP

進化的 Transformer 結構

2019 年,谷歌提出了一種新的思想:利用神經架構搜尋的方法找到最好的 Transformer 架構。因此,提出了基於進化演算法的 Transformer 架構搜尋演算法。首先根據前饋序列模型的最新進展構建一個大的搜尋空間,然後使用進化演算法進行架構的搜尋,用 Transformer 模型來初始化種群。下面,我們將分搜尋空間和搜尋演算法兩個方面介紹該框架。

1. 搜尋空間

在該問題中,搜尋空間是由兩個可堆疊的單元組成的(如圖 12-15 所示),一個是編碼器,一個是解碼器,編碼器包含六個塊,解碼器包含八個塊。每個塊包含兩個分支,每個分支都接受前面的隱藏層作為輸入,然後對其應用歸一化、卷積層 (具有指定的相對輸出維度) 和啟用函式。然後,這兩個分支透過組合函式連線起來。任何未使用的隱藏狀態都會透過加法自動新增到最後的塊輸出中。以這種方式定義的編碼器和解碼器單元均重複其相應的單元數次,並連線到網路的輸入和輸出嵌入部分,生成最終的模型。

我們的搜尋空間包含五個分支級搜尋欄位 (input, normalization, layer, output dimension and activation)、一個塊級搜尋欄位 (combiner function) 和一個單元級搜尋欄位 (number of cells)。

與其感慨模型難訓練,不如試試AutoNLP

下面我們分別介紹這些基因(引數)。

  • Input

指定單元中的隱藏狀態將作為輸入提供給分支。對於每個第 i 個塊,其分支的輸入選項為 [0,i),其中第 j 個隱藏狀態對應於第 j 個塊輸出,第 0 個隱藏狀態為單元格輸入。

  • Normalization

歸一化層,在應用層轉換之前應用於每個輸入。提供兩個選項 [LAYER normalization, NONE]。一般選擇前一個欄位。

  • Layer

規範化後應用的神經網路層。

它提供的選項包括:

標準卷積 w×1,w∈{1,3}

深度可分離卷積 w×1,w∈{3,5,7,9,11}

輕量卷積 w×1 r ,w∈{3,5,7,15},r∈{1,4,16}.r 是縮減因子,相當於 d⁄H。

h 頭注意力層:h∈{4,8,6}

門控線性單元

參與編碼器(解碼器專用)

恆等式:不對輸入進行轉換

死分支:沒有輸出

對於解碼器卷積層,輸入偏移w-1⁄2,以便當前位置無法“看到”後面的預測。

  • Relative Output Dimension

相對輸出維度,它描述了相應圖層的輸出維度。該引數解釋了可變的輸出深度,可選欄位包括 10 個相對輸出大小:[1,10]

  • Activations

啟用函式,即在神經網路層之後對每個分支應用非線性啟用函式。啟用函式包括{SWISH, RELU, LEAKY RELU, NONE}。

  • Combiner Functions

塊級搜尋欄位組合函式描述瞭如何將左層和右層分支組合在一起。它的選項包括{ADDITION,CONCATENATION,MULTIPLICATION}。對於 MULTIPLICATION 和 ADDITION,如果右和左分支輸出具有不同的嵌入深度,那麼填充兩者中的較小者以使維度匹配。對於 ADDITION,填充為 0,對於 MULTIPLICATION,填充是 1。

  • Number of Cells

單元級搜尋欄位是單元數,它描述了單元重複的次數。它的選項是 [1,6]。
因此,在搜尋空間中,子模型的基因編碼表示為:[left input, left normalization, left layer, left relative output dimension, left activation, right input, right normalization, right layer, right relative output dimension, right activation, combiner function]×14 + [number of cells]×2。

2. 搜尋策略

在該框架中,使用錦標賽選擇進化搜尋策略,首先定義描述神經網路架構的基因編碼;然後,從基因編碼空間中隨機取樣來建立個體從而建立一個初始種群。基於這些個體在目標任務上描述的神經網路的訓練為它們分配適應度(fitness),再在任務的驗證集上評估它們的表現。然後,研究者對種群進行重複取樣,以產生子種群,從中選擇適應度最高的個體作為親本(parent)。被選中的親本使自身基因編碼發生突變(編碼欄位隨機改變為不同的值)以產生子模型。然後,透過在目標任務上的訓練和評估,像對待初始種群一樣為這些子模型分配適應度。當適應度評估結束時,再次對種群進行抽樣,子種群中適應度最低的個體被移除,也就是從種群中移除。然後,新評估的子模型被新增到種群中,取代被移除的個體。這一過程會重複進行,直到種群中出現具備高度適應度的個體。

具體搜尋過程如下圖所示:

與其感慨模型難訓練,不如試試AutoNLP

由於進化演算法的搜尋需要很大的時間代價,為了加快搜尋過程,論文作者在錦標賽選擇法的基礎上提出了一種漸進動態障礙(PDH)最佳化策略,根據資源的適用性將資源動態分配給更有前景的架構。該演算法首先訓練子模型固定數量的 s0 步,並在驗證集上進行評估以生成適應度,作為基線適應度,與障礙 (h) 進行比較,以確定是否應該繼續訓練。每個 h_i 表示子模型在∑_(j=0)^i▒s_j 訓練步驟後必須具備的適應度,才能繼續訓練。每次透過一個障礙 h_i,模型都會訓練額外的 s_(i+1) 步。如果模型的適應度低於與它所訓練的步數相對應的障礙,則訓練立即結束,並返回當前的適應度。具體流程如下圖所示:

與其感慨模型難訓練,不如試試AutoNLP






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2658426/,如需轉載,請註明出處,否則將追究法律責任。

相關文章