ThinkNet:迄今為止最簡單的語言建模網路

dicksonjyl560101發表於2019-05-16

https://www.toutiao.com/a6691117235055886861/


2019-05-15 13:12:12
這篇短論文介紹了一種名為ThinkNet的模型。該模型非常簡單,可以應用在語言建模任務中,且能在一些任務中達到當前最佳水平。
ThinkNet:迄今為止最簡單的語言建模網路

論文地址:https://arxiv.org/abs/1904.11816


這篇短論文介紹了一種名為Think Again Network(ThinkNet)的抽象概念,它可以用於任何狀態依賴的函式(如迴圈神經網路)。本文中展示了該網路在語言建模任務中的簡單應用,它在Penn Treebank上達到了當前最低的困惑度。

ThinkNet

給定任意的狀態依賴函式F(x,s),其中x是輸入,s是狀態,ThinkNet可定義為:

ThinkNet:迄今為止最簡單的語言建模網路

其中s是一個初始狀態,t ≥ 1是ThinkNet的時間步長,M([z1; ...; zt−1])是任意的混合函式(可以是靜態函式或者是可訓練的神經網路),該混合函式將之前所有的輸出組合成一個新的狀態。然後優化函式 L(TN(F, ., ., T )),而不是損失函式L(F(., .))。

ThinkNet:迄今為止最簡單的語言建模網路

圖1:執行4個時間步長的ThinkNet示意圖(在狀態依賴函式F(x, s)上實現)。在t=0時,網路以狀態s(0)進行初始化。在 t > 0時,混合函式M根據之前的時間步長t、t-1、……、1生成的所有輸出來計算下一個狀態s(t+1)。最終,在流程的最後計算損失L。


實質上,“Think Again”抽象概念通過新增額外的迴圈來擴充套件任何狀態依賴函式。其理念是將函式F(x, s)重複執行t次(每次執行對應一個ThinkNet時間步長),並讓混合函式M為下一次執行準備初始狀態。

為此,可將M定義為該網路之前生成的所有輸出的函式。“Think Again”的概念暗指一個人通過多次行動來完成任務:在其已經處理了手頭問題並更新了“思維狀態”之後,再次思考該問題通常是很有用的。

概念上,任何問題都可以通過這個框架來解決,正如:人們在再次解決問題時會學會對以前所有的答案(z1, z2, . . . , zt−1)進行推理(為此,我們訓練了自己的“混合函式”M)。

從人類問題解決者和深度學習模型的角度來看,這都是有意義的,這可以得益於在處理問題時提前瞭解了問題的內在表現。在語言/序列建模的環境中,如果我們在閱讀短語/序列時預先知道它將如何結束,則將從中受益。

Delta Loss


定義ThinkNet後,我們可以在T個時間步長後簡單地計算其損失。我們提出了另一種選擇,Delta Loss (∆L):

ThinkNet:迄今為止最簡單的語言建模網路

等式 2 的第一項是在時間步長t和t+1時後續損失之間所有差異的和。對此項進行梯度下降會促使模型最大化在每個時間步長降低損失的速率。與其促使模型在T次迭代後產生令人滿意的損失,我們鼓勵其在每個時間步長改善其解決方案。

我們的假設這將促進收斂:以Delta Loss訓練的模型應該可以將其計算擴充套件到更多的時間步長併產生更好的結果。相比之下,只用最後的損失L(TN(F, ., ., T ))訓練的模型,可能只得到較差的中間狀態,如果超過t個時間步長後使用它們,則反過來會導致發散。

等式 2中的“差異和”項有一個有趣的屬性,它是可伸縮的,除了第一項和最後一項,其它項都可相互抵消,結果變成L(TN(F, ., ., T )) − L(TN(F, ., ., 1))。這使得整個方程簡單多了,雖然效率不高——因為仍然需要迭代所有損失來計算最大損失項。

自然地,該模型可以自由地學習操縱其輸入以便在某個時刻生成很高的損失,以減少它並得到一個很大的delta。這可以通過將所有迭代中的最大損失作為等式 2的附加項來防止。

ThinkNet:迄今為止最簡單的語言建模網路

圖2:用Delta Loss擴充的ThinkNet。其基礎架構與圖1中所示的相同,但是這裡我們在每個ThinkNet時間步長t上計算了損失L(t)。計算後續損失之間的Delta∆(L (t+1) ,L (t) ),然後最終的損失被定義為所有時間步長的最大損失maxL(t)加上所有delta P∆(L (t+1) ,L (t) )。


語言建模中的應用


給定一系列token,語言模型給出下一個可能出現的token的概率分佈或者Plm(xt|x1, . . . , xt−1)。當使用神經網路(如LSTM[10])對P建模時,會獲得非常好的結果。在這裡,我們將AWD-LSTM[11]語言模型封裝在ThinkNet中並評估其效能。

AWD-LSTM 的編碼器 Flm(x, s)在觀察到具有一些先前狀態s的一系列token x後會給出序列表徵。將 Flm 轉換為 ThinkNet 所需的只是一個混合函式。下面我們選擇簡單的函式:

ThinkNet:迄今為止最簡單的語言建模網路

這裡求前兩個狀態的平均值,其中zt = [(h1, c1); ...; (hL; cL)],並且每個元組和 (hl , cl)上的求和與除法都是以元素為單位計算的。

我們在表1中的結果表明,有10個測試ThinkNet時間步長訓練的ThinkNet T3模型即使沒有連續的快取指標(cache pointer)也能實現目前最好的效能。如果使用連續快取指標,差距更大。我們還認為它是迄今為止此類模型中最簡單的模型。另外值得注意的是,我們沒有進行任何超引數調優。

ThinkNet:迄今為止最簡單的語言建模網路


表1:上面是PTB語言建模的先前最佳技術,下面是我們的模型。所有ThinkNet模型都使用tT = 10(測試ThinkNet時間步長)。在沒有使用原始AWDLSTM模型任何附加引數的情況下,以3個時間步長訓練的兩個ThinkNet模型都大大超過了先前的技術水平。


ThinkNet:迄今為止最簡單的語言建模網路


圖3:在PTB上,以1到3 個ThinkNet 時間步長訓練的模型在1到10個測試時間步長 (tT)下進行評估。然而普通的AWD-LSTM 模型 (T1) 的效能在超過訓練使用的時間步長時會下降,但ThinkNet模型會繼續改進直到收斂。


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

相關文章