兩個讓Transformer網絡變得更簡單,更高效的方法

2019-11-20     AI公園

作者:Sainbayar Sukhbaatar, Armand Joulin

編譯:ronghuaiyang

導讀

Transformer網絡給深度學習的許多領域帶來了巨大的進步,但它們在訓練和推理過程中都非常需要計算資源,今天給大家帶來兩個使Transformer模型更簡單、更高效的方法。

Transformer網絡給深度學習的許多領域帶來了巨大的進步,包括機器翻譯、文本理解、語音和圖像處理。儘管這些網絡功能強大,但它們在訓練和推理過程中都非常需要計算資源,這限制了它們的大規模的使用,尤其是對具有長期依賴關係的序列。Facebook人工智慧的一項新研究正在尋找使Transformer模型更簡單、更高效的方法。

為了更廣泛地使用這種強大的深度學習體系結構,我們提出了兩種新方法。第一,adaptive attention span,這是一個讓Transformer網絡對於長句子更有效率的方法。使用這種方法,我們能夠在不顯著增加計算時間或內存占用的情況下,將Transformer的注意廣度增加到8000多個令牌。第二,all-attention layer,這是一種簡化Transformer模型結構的方法。即使是一個簡單得多的結構,我們的all-attention網絡也可以匹配Transformer網絡的性能上。我們認為,這項提高Transformer網絡效率的工作是朝著使Transformer網絡具有更廣泛的應用邁出的重要一步。

Adaptive attention span

本研究的目的是使Transformer網絡的計算效率更高,特別是在處理非常長的序列時。我們發現數據中的長期關係的需要更長的注意力的範圍。然而,增加註意範圍也會增加Transformer的計算時間和內存占用。

在我們對Transformer的實驗中,我們發現並不是所有的注意力heads都充分利用了它們的注意範圍。事實上,在一項字符級語言建模的任務中,大多數heads只使用了他們注意力範圍的一小部分。如果我們能在訓練中利用這一特性,我們就能顯著減少計算時間和內存占用,因為兩者都依賴於注意力範圍的長度。不幸的是,我們不知道每個head的注意力範圍是多少。在多次嘗試啟發式地設置注意範圍之後,我們意識到,如果我們能從數據本身學到這一點,那是最好的。

由於注意範圍是整數(因此是不可微的),我們不能像模型的其他參數那樣通過反向傳播直接學習它。但是,我們可以使用soft-masking函數將其轉換為連續值。這個函數的值平滑地從1到0,這使得它可以對掩模長度求導。我們只需將這個掩模函數插入到每個注意力head中,這樣每個head就可以根據數據確定不同的注意力範圍。

通過我們的自適應注意範圍機制,我們設法將Transformer的注意範圍提高到超過8000個tokens,而不會顯著增加它的計算時間和內存占用。在字符級語言建模任務上,這導致了性能的提高,從而改進了現有技術的狀態,使用了更少的參數。

雖然模型中最長的注意力範圍超過了8000步,但是平均的注意力範圍只有200步左右,這使得模型運行起來更加高效。這反映在每一步的FLOPS上,這對於這些模型來說要小得多。在下面的圖中,我們展示了一個這樣的學習注意力範圍,在一個12層的模型中,每層有8個heads。我們可以看到96個heads中只有5個有超過1000步的跨度。

我們已經發布了論文里的實驗代碼:https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Ffacebookresearch%2Fadaptive-span&h=AT3JCYNSm6Vd_t22nJUI6LUGDJXadI9sASr5E2KXFeVuzC0vkzMFavpGFZNTMFnHjw01Y18-M4TwVhUERft8vEhUI9ntCvHtatJ6M1ByU7ynviyVSDqvNbELeV_yYECjdz9SrJvYC_mxf4KVirIeXA由PyTorch實現,可以方便的集成到其他模型中。

All-attention layer

接下來,我們著重於簡化Transformer網絡的結構。Transformer由兩個子層組成:自注意層和前饋層。雖然自注意層被認為是主要的組件,但是前饋子層對於高性能非常重要,這就是為什麼它的大小通常設置為網絡其他部分的四倍。

從表面上看,自我注意和前饋子層看起來非常不同。然而,一個簡單的改變,前饋子層可以變成一個注意層。將ReLU非線性函數替換為softmax函數,可以將其激活解釋為注意權值。此外,我們可以把第一個線性變換看作key向量,把第二個線性變換看作value向量。

利用這個解釋,我們將前饋子層合併到自注意層,創建一個統一的注意層,我們稱之為「all-attention」層。我們所要做的就是在一個自我注意層的key和value中添加一組額外的向量。這些額外的向量就和前饋子層的權值是一樣的:固定的、可訓練的和上下文無關的。相反,根據上下文計算的key和value會根據當前上下文動態更改。

由於額外的向量可以充當一個前饋子層,並獲取關於任務的一般知識,所以我們可以從網絡中刪除所有前饋子層。最終,我們的all-attention網絡只是一堆全注意力層。在語言建模基準測試任務上,我們的all-attention網絡與最先進的Transformer網絡性能相當,並具有更簡單的結構。我們希望這種簡化的體系結構將為更好地理解和改進Transformer網絡開闢道路。

英文原文:https://ai.facebook.com/blog/making-transformer-networks-simpler-and-more-efficient/

請長按或掃描二維碼關注本公眾號

文章來源: https://twgreatdaily.com/zh/ht-bi24BMH2_cNUgLjhB.html