歡迎光臨
每天分享高質量文章

遷移學習在自然語言處理中的應用之通用語言建模

資料來源:OpenAI

(文章內容整理自網路)

    人們在計算機視覺( CV )領域中使用遷移學習(Transfer Learning)已經有相當長的時間了,並且在這幾年中也產生了顯著的效果。在一些任務中的準確性,甚至能夠超過人類水平。如今,Deep learning中廣泛使用預處理權重來提升模型的效果。事實上,當我們真正想到使用pre-trained的方法時,我們第一反應想到的是,我們正在使用遷移學習來對權重進行某種初始化或fine-tuning。遷移學習在計算機視覺領域產生了巨大的影響,並對這一領域的進步做出了巨大的貢獻。

    到目前為止,遷移學習在某種程度上還是侷限於計算機視覺,但是最近的研究工作表明,Transfer Learning的方法幾乎可以擴充套件到任何地方,包括自然語言處理( NLP )、強化學習( RL )。最近,有幾篇論文已經發表,表明在NLP中遷移學習和fine-tuning的工作也獲得了巨大的成功。

    最近,OpenAI還舉辦了一場很有意思的retro context,參與者被要求建立不依賴於環境,智慧使用遷移學習來訓練agent來play game,如下圖所示。那麼今天,我們就深入探索遷移學習潛在潛力。

資料來源: OpenAI復古大賽

圖1. 利用過去的經驗學習新事物( RL環境中的新環境)

    以前的研究涉及計算機視覺中的增量學習(incremental learning),將泛化(generalization)引入模型中,因為這是使神經網路的學習過程變得更加魯棒的重要過程之一。同樣,NLP領域,論文《 Universal Language Model Fine-tuning for Text Classification》也深入探討了這個問題。

文字分類是NLP中的一個重要任務,涉及現實生活中的很多場景,如機器人、私人助理、反欺詐或垃圾郵件檢測、檔案分類等。它可以擴充套件到幾乎任何任務,因為我們幾乎所有地方都需要處理語言模型。論文中作者一直致力於研究文字分類,到目前為止,許多NLP的研究仍然依賴於word2vec和GloVe這樣的模型來訓練embedding。


Embedding的侷限性

    Word embedding是word一種連續稠密的表示。embedding是實際值構成tensor,這些tensor被輸入到模型中,透過訓練得到的。在這個模型中需要維護一個特定的序列(有狀態的,stateful),這樣這個模型就可以學習word和背景關係之間的句法和語意關係。

圖2 不同型別資料的視覺化

    透過視覺化,語意更接近的詞之間的embedding會更相似,空間上離得更近,使得每個詞都有不同的向量表示。

 

詞表中很少出現的word

    在處理資料集時,我們通常會遇到詞表中不存在(UNK)的word,因為詞表的大小是有限制的。

    圖3 Tokenization 這些word存在於詞表中,是常見的word,但是像< unk >這樣的out-of-vocabulary(OOV)的token,embedding無法有效處理。

    對於任何只出現幾次的word,模型將很難計算出特定word的語意,所以建立了一個詞表來解決這個問題。word 2vec無法正確處理UNK的詞。當一個詞未知時,就不能得到它的向量,所以它只能隨機初始化。所以,Embedding通常也面臨已下一些問題:

    1、無法處理共享表示(Shared Representation)

    Embedding來表示word的語意資訊時存在的一個問題是subword之間沒有共享的表示,通常是統一的含義。英語中的所有字首(Prefixes)和字尾(Suffixes)通常都具有一個共同的含義(比如“better”和“faster”中的- er)。因為每個向量都是獨立的,所以word之間的語意關係無法完全被獲取。

    2、同現統計(Co-occurrence statistics)

    分散式詞向量模型會捕捉語言中詞與詞之間某些方面的共現統計(Co-occurrence statistics)。在word共現統計資訊來訓練的embedding可以捕捉word之間的語意相似性,因此可以基於word相似度任務來對訓練得到的embedding進行評估。但如果一個語言模型採用char-based input,這種pretraining帶來的好處就不存在了,只能隨機初始化embedding。

    3、無法支援新語言

    基於某個語言訓練的embedding,無法用於處理新的語言。因為embedding之間不存在引數共享,對於新的語言,需要訓練新的embedding,所以模型不能處理跨語言的任務(cross-lingual task)。


    embedding可以concatenated(拼接)起來,但是這個模型的訓練仍然必須從頭開始;預處理embedding可以被視為固定的引數。這種模型在增量學習中沒有用。


    計算視覺中已經表明,與其他流行的訓練方法相比,hypercolumns其實沒有用。在CV中,pixel的hypercolumns是該畫素上方所有ConvNet單元的啟用向量(vectors of activation)。

圖4 ConvNets中的Hypercolumns


    平均隨機梯度法( ASGD )權重下降的長期短期記憶網路( AWD – LSTM )

    該研究工作主要是受論文《Regularizing and Optimizing LSTM Language Models》的啟發。它利用了權重下降的LSTM(weighted-dropped LSTM),該LSTM在隱含層之間採用DropConnect作為一種遞迴正則(recurrent regularization)。DropConnect是Hinton提出的Dropout的一種拓展,用於正則化全連線的神經網路。

    當使用Dropout訓練時,每層神經網路中會隨機選擇的一個subset的activation設定為零。DropConnect則是從網路中隨機選擇的權重子集(subset of wright)設定為零。因此,每個單元接收來自上一層單元的隨機子集的輸出作為其輸入。

Dropout網路

DropConnect網路

    圖5. Dropout和DropConnect之間的差異

    透過在LSTM的隱藏到隱藏的連線矩陣之間使用—即[ Ui、Uf、Uo、Uc]使用DropConnect,可以防止LSTM中recurrent connections導致的過擬合問題。這種正則化技術也可以幫助其他遞迴神經網路防止因權重的遞迴加權而導致的過擬合問題。

常用的一組值:

    dropouts= np.array ( [ 0.4,0.5,0.05,0.3,0.1 )×0.5

    0.5 multiplier(乘子)是一個超引數,儘管矩陣內部的比例很平衡,但可能也需要0.5倍的調整。

    隨著相同的權重在多個time-step內被重覆使用,相同的單個dropped weights在整個向前計算和向後傳播過程中保持下降。結果類似於variational dropout,variational dropout將相同的dropout mask應用於LSTM內的重覆連線,只會對重覆權重使用dropout。DropConnect也可以用在LSTM [ Wi,Wf,Wo ]的非迴圈權重上。


通用語言模型

    一個具有tuned dropout parameter的三層LSTM ( AWD – LSTM )結構,往往優於使用其他訓練方法訓練出來的文字分類模型。原始的模型基於wiki – text 103資料集進行pre-trained,我們將處理的資料集是IMDb電影評論,因此在進行微調時,主要使用了三種技術來防止over-catastrophic forgetting。

傾斜三角形學習率(Slanted Triangular Learning Rate,STLR)

    以前訓練模型,我常用帶有權重衰減的Adam最佳化演演算法。但是自適應最佳化演演算法往往具有有侷限性。如果模型陷入鞍點,並且產生的梯度很小,使用自使用最佳化演演算法往往很難產生足夠的梯度來走出非凸區域。

    Leslie Smith在論文《Cyclical Learning Rates for Training Neural Networks》提出的週期性學習率(Cyclical learning rate,CLR)解決了這個問題。在使用了迴圈學習率( CLR )後,我的模型的準確率( CMC )提升了10 %。更多資訊,請參見本文:訓練神經網路的迴圈學習率。

    學習率決定了當前權重可以獲得多少梯度,向loss方向移動多少步長。這種方法類似於帶有熱重啟的隨機梯度(stochastic gradient with warm restarts)。Stochastic Gradient Descent with Restarts( SGDR )被用作annealing schedule。

圖6. 迴圈學習率

    簡而言之,選擇初始學習速率和學習速率排程器其實很困難,因為並不總是明確指導哪種方式會更好。

    每個引數都有自適應學習速率。像Adam、Adagrad和RMSprop這樣的最佳化器對每個被訓練引數的學習速率都可以自動調節。

論文《Cyclical Learning Rates for Training Neural Networks》以優雅、簡化的方式解決了許多常見的問題。

    迴圈學習率( CLR )為學習率的值設定了上限和下限。它可以與自適應學習方法相結合,但類似於SGDR,計算成本也較低。

    如果陷入鞍點,較高的學習速率可以將模型推出鞍點,但是如果它非常的小(在後期階段我們將需要降低學習速率),那麼傳統的學習速率排程方法將永遠不會產生足夠的梯度,如果它陷入複雜的鞍點(非凸)。

圖7. 非凸函式

    週期性的較高學習速率將在surfacesh上有更平滑和更快的traversal。

    最佳學習率( LR )介於最大和最小界限之間。

圖8. 迴圈學習率產生的邊界

    以這種方式改變LR可確保此問題在需要時得到解決。

    因此,對於遷移學習,任務是在給定由固定任務A訓練的模型的情況下,提高任務B的效能。語言模型具有CV中的分類模型在NLP環境下所具有的所有能力:它瞭解語言,理解層次關係,可以控制long-trem的依賴關係,並且可以進行情感分析。

用於文字分類的通用語言模型的微調( ULMfit )分為三個階段,就像CV一樣。

圖9. ULMFit的三個階段

    在第一階段,LM 預訓練( a ),語言模型是在一個普通資料集上訓練的,主要從這個資料集上學習什麼是語言的一般特徵,並收集word之間語意關係的知識。像ImageNet一樣,這個模型使用wikitext 103 ( 103M token)資料集訓練。

    在第二階段,LM微調( b ),需要對主幹(基礎模型)進行微調,使用discriminative fine-tuning和傾斜三角形學習速率( STLRs )來使模型學習特定任務相關(task-specific)的特徵。

    在第三階段,分類器微調( c ),使用gradual unfreezing和STLR對分類器進行修改以微調target task,從而保留初級表示(low-level representation)並適應高階表示。

    簡而言之,ULMfit可以被認為是一個主幹和一個在頂部(頭部)新增的分類器。它利用了一個在一般領域語料庫上訓練過的預處理模型。(通常,研究人員處理的資料集必須進行審查,以免有許多領域空白(domain gap))稍後可以使用所提到的技術對標的任務進行微調,以使文字分類達到最新效能。


ULMfit正在解決的問題

    這個方法可以稱為通用方法,因為它不限定於某個特定的資料集,可以跨越不同長度的檔案和資料集而正常工作。它使用單一的體系結構(在本例中是AWD-LSTM,就像CV中的ResNets一樣)。任何定製功能都不能被設計成與其他任務相容。它不需要任何額外的檔案就能應用於某些領域。

    這個模型可以透過使用attention和新增必要的skip connections來進一步改進。


Discriminative fine-tuning

    每層神經網路會捕捉不同的資訊。在CV中,initial layer捕捉broad、distinctive、wide的特徵。隨著深度的增加,他們試會圖捕捉特定於某些任務的複雜特徵。使用相同的原理,這種方法建議以不同的方式微調這種語言模型的不同層。要做到這一點,每一層都必須使用不同的學習率。這樣我們就可以決定如何更新每一層中的引數。

    引數θ被分成一個串列,以下表示第l層的引數

    當然,同樣的操作也可以用學習率來完成

    然後,隨機梯度下降可以透過discriminative fine-tuning來實現:


基於特定任務的分類器微調

    添加了另外兩個線性block。每個block使用batch normalization和較小的dropout。(BN可以起到正則化效果) 在block之間使用 ReLU )作為啟用函式,然後把(似然)logits傳遞給softmax,轉換成輸出標的分類上的機率分佈。這些分類器層不會受pre-training的影響,因為他們是從零開始訓練的。在block層之前和最後一層隱含層之後連線了一個pooling層,並被反饋到第一個線性層。

    Snippet:使用Pytorch實現的FastAI API (分類器訓練)


Concat pooling

    要經常註意遞迴模型的狀態,keep有用的狀態,釋放那些無用的狀態,因為memory中只有有限的狀態可以用更新門進行更新。但是從LSTM模型生成的最後一個隱藏狀態包含了大量資訊,這些權重必須從隱藏狀態中儲存下來。為了做到這一點,我們將最後一個time-step的隱狀態與之前多個time-step的隱狀態的最大和平均的pooled representation連線起來,只要它可以方便地放在GPU記憶體中。


訓練分類器(gradual unfreezing)

    Fine-tuning分類器會導致過度記憶(Overcatastrophic forgetting)。微調分類器會慢慢它導致過擬合和收斂。建議不要一次微調所有的層,而是一次只微調一個層(freezing其他層)。因為最後一層擁有general的領域知識。最後一層隨後unfrozen,然後我們可以在一次iteration中微調先前frozen的層。下一個被frozen的層被unfrozen,重覆這個過程,直到所有的層都被微調並直到收斂。


文字分類的時間反向傳播( BPTT )

    Backpropagation through time ( BPTT )常用於RNN,處理序列資料。BPTT透過展開所有時間步(unrolling all time steps)來工作。每個時間步驟包含一個輸入、one copy of the network和一個輸出。網路產生的誤差會在每個時間步計算和累積。網路被rolled back,權重透過梯度下降來更新。

圖10. 時間反向傳播(BPTT)

    這個模型是用前一batch資料的final state來初始化的。max和mean pooling層的的隱狀態也被tracked。最重要的是,反向傳播法使用的是可變長度序列。以下是PyTorch 中使用的Sampler部分的程式碼:

    因此Sampler傳回一個迭代器(一個可以迭代的簡單物件)。它以大約相同大小的隨機排序Batch遍歷資料。在第一次呼叫中,使用最大可能的序列,允許合適的記憶體分配順序。


所涉及的技術

    這個專案主要依賴英特爾的AI DevCloud來執行tokenization。spaCy 被用於這項任務(具有超執行緒、fast.ai support),因為它計算開銷很大。以增量方式進行大量的訓練,主要部分使用Intel Xeon可擴充套件處理器叢集完成,其餘部分使用NVIDIA GeForce * GTX 1080圖形處理單元完成。


結果

    在自然語言處理研究中,基於embedding或某種形式的遷移學習的方法比任何其他方法都更有效。在用新方法逐漸unfreezing和訓練分類器後(如前所述),只需要4個epochs就可以快速達到94.4的準確度,超過了目前的其他技術水平。

表1. 使用ULMFit的文字分類的loss和準確率

圖11. validation error rate

往期精品內容推薦

MIT課程:深度學習無人駕駛(2018)影片分享-上

神聖的NLP!一文理解詞性標註、依存分析和命名物體識別任務

合成註意力推理神經網路-Christopher Manning-ICLR2018

2018/2019/校招/春招/秋招/自然語言處理/深度學習/機器學習知識要點及面試筆記

《純乾貨》2018-2019年國際AI會議最全資訊整理分享

前沿分享-基於區塊鏈技術的機器學習行業概述

歷史最全GAN網路及其各種變體整理(附論文及程式碼實現)

麻省理工學院-2018年最新深度學習演演算法及其應用入門課程資源分享

千萬不要錯過!ICLR-2018精品論文解析

模型彙總24 –  深度學習中Attention Mechanism詳細介紹:原理、分類及應用

純乾貨-17 分散式深度學習原理、演演算法詳細介紹

掃描下方二維碼可以訂閱哦!

DeepLearning_NLP

深度學習與NLP

       商務合作請聯絡微訊號:lqfarmerlq

覺得還不錯,記得點選下方小廣告哦!!

贊(0)

分享創造快樂