丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給叢末
發(fā)送

0

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

本文作者: 叢末 2019-02-16 16:20
導語:萬字干貨文~

雷鋒網(wǎng) AI 科技評論按:本文的作者是張俊林老師,他是中國中文信息學會理事,中科院軟件所博士,目前在新浪微博 AI Lab 擔任資深算法專家。在此之前,張俊林老師曾在阿里巴巴任資深技術(shù)專家并負責新技術(shù)團隊,也曾在百度和用友擔任技術(shù)經(jīng)理及技術(shù)總監(jiān)等職務(wù)。同時他是技術(shù)書籍《這就是搜索引擎:核心技術(shù)詳解》(該書榮獲全國第十二屆優(yōu)秀圖書獎)、《大數(shù)據(jù)日知錄:架構(gòu)與算法》的作者。本文首發(fā)于知乎,經(jīng)作者許可,雷鋒網(wǎng) AI 科技評論進行轉(zhuǎn)載。

在辭舊迎新的時刻,大家都在忙著回顧過去一年的成績(或者在灶臺前含淚數(shù)鍋),并對 2019 做著規(guī)劃,當然也有不少朋友執(zhí)行力和工作效率比較高,直接把 2018 年初制定的計劃拷貝一下,就能在 3 秒鐘內(nèi)完成 2019 年計劃的制定,在此表示祝賀。2018 年從經(jīng)濟角度講,對于所有人可能都是比較難過的一年,而對于自然語言處理領(lǐng)域來說,2018 年無疑是個收獲頗豐的年頭,而諸多技術(shù)進展如果只能選擇一項來講的話,那么當之無愧的應(yīng)該就是 Bert 模型了。在上一篇介紹 Bert 的文章「從 Word Embedding 到 Bert 模型—自然語言處理中的預(yù)訓練技術(shù)發(fā)展史」里,我曾大言不慚地宣稱如下兩個個人判斷:一個是 Bert 這種兩階段的模式(預(yù)訓練+Finetuning)必將成為 NLP 領(lǐng)域研究和工業(yè)應(yīng)用的流行方法;第二個是從 NLP 領(lǐng)域的特征抽取器角度來說,Transformer 會逐步取代 RNN 成為最主流的的特征抽取器。關(guān)于特征抽取器方面的判斷,上面文章限于篇幅,只是給了一個結(jié)論,并未給出具備誘惑力的說明,看過我文章的人都知道我不是一個隨便下結(jié)論的人(那位正在補充下一句:「你隨便起來不是……」的同學請住口,請不要泄露國家機密,你可以繼續(xù)睡覺,吵到其它同學也沒有關(guān)系,哈哈),但是為什么當時我會下這個結(jié)論呢?本文可以看做是上文的一個外傳,會給出比較詳實的證據(jù)來支撐之前給出的結(jié)論。

如果對目前 NLP 里的三大特征抽取器的未來走向趨勢做個宏觀判斷的話,我的判斷是這樣的:RNN 人老珠黃,已經(jīng)基本完成它的歷史使命,將來會逐步退出歷史舞臺;CNN 如果改造得當,將來還是有希望有自己在 NLP 領(lǐng)域的一席之地,如果改造成功程度超出期望,那么還有一絲可能作為割據(jù)一方的軍閥,繼續(xù)生存壯大,當然我認為這個希望不大,可能跟宋小寶打籃球把姚明打哭的概率相當;而新歡 Transformer 明顯會很快成為 NLP 里擔當大任的最主流的特征抽取器。至于將來是否會出現(xiàn)新的特征抽取器,一槍將 Tranformer 挑落馬下,繼而取而代之成為新的特征抽取山大王?這種擔憂其實是挺有必要的,畢竟李商隱在一千年前就告誡過我們說:「君恩如水向東流,得寵憂移失寵愁。莫向樽前奏花落,涼風只在殿西頭?!巩斎贿@首詩看樣子目前送給 RNN 是比較貼切的,至于未來 Transformer 是否會失寵?這個問題的答案基本可以是肯定的,無非這個時刻的來臨是 3 年之后,還是 1 年之后出現(xiàn)而已。當然,我希望如果是在讀這篇文章的你,或者是我,在未來的某一天,從街頭拉來一位長相普通的淑女,送到韓國整容,一不小心偏離流水線整容工業(yè)的美女模板,整出一位天香國色的絕色,來把 Transformer 打入冷宮,那是最好不過。但是在目前的狀態(tài)下,即使是打著望遠鏡,貌似還沒有看到有這種資質(zhì)的候選人出現(xiàn)在我們的視野之內(nèi)。

我知道如果是一位嚴謹?shù)难邪l(fā)人員,不應(yīng)該在目前局勢還沒那么明朗的時候做出如上看似有些武斷的明確結(jié)論,所以這種說法可能會引起爭議。但是這確實就是我目前的真實想法,至于根據(jù)什么得出的上述判斷?這種判斷是否有依據(jù)?依據(jù)是否充分?相信你在看完這篇文章可以有個屬于自己的結(jié)論。

可能談到這里,有些平常吃虧吃的少所以喜歡挑刺的同學會質(zhì)疑說:你憑什么說 NLP 的典型特征抽取器就這三種呢?你置其它知名的特征抽取器比如 Recursive NN 于何地? 嗯,是,很多介紹 NLP 重要進展的文章里甚至把 Recursive NN 當做一項 NLP 里的重大進展,除了它,還有其它的比如 Memory Network 也享受這種部局級尊貴待遇。但是我一直都不太看好這兩個技術(shù),而且不看好很多年了,目前情形更堅定了這個看法。而且我免費奉勸你一句,沒必要在這兩個技術(shù)上浪費時間,至于為什么,因為跟本文主題無關(guān),以后有機會再詳細說。

上面是結(jié)論,下面,我們正式進入舉證階段。

戰(zhàn)場偵查:NLP 任務(wù)的特點及任務(wù)類型

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

NLP 任務(wù)的特點和圖像有極大的不同,上圖展示了一個例子,NLP 的輸入往往是一句話或者一篇文章,所以它有幾個特點:首先,輸入是個一維線性序列,這個好理解;其次,輸入是不定長的,有的長有的短,而這點其實對于模型處理起來也會增加一些小麻煩;再次,單詞或者子句的相對位置關(guān)系很重要,兩個單詞位置互換可能導致完全不同的意思。如果你聽到我對你說:「你欠我那一千萬不用還了」和「我欠你那一千萬不用還了」,你聽到后分別是什么心情?兩者區(qū)別了解一下;另外,句子中的長距離特征對于理解語義也非常關(guān)鍵,例子參考上圖標紅的單詞,特征抽取器能否具備長距離特征捕獲能力這一點對于解決 NLP 任務(wù)來說也是很關(guān)鍵的。

上面這幾個特點請記清,一個特征抽取器是否適配問題領(lǐng)域的特點,有時候決定了它的成敗,而很多模型改進的方向,其實就是改造得使得它更匹配領(lǐng)域問題的特性。這也是為何我在介紹 RNN、CNN、Transformer 等特征抽取器之前,先說明這些內(nèi)容的原因。

NLP 是個很寬泛的領(lǐng)域,包含了幾十個子領(lǐng)域,理論上只要跟語言處理相關(guān),都可以納入這個范圍。但是如果我們對大量 NLP 任務(wù)進行抽象的話,會發(fā)現(xiàn)絕大多數(shù) NLP 任務(wù)可以歸結(jié)為幾大類任務(wù)。兩個看似差異很大的任務(wù),在解決任務(wù)的模型角度,可能完全是一樣的。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

通常而言,絕大部分 NLP 問題可以歸入上圖所示的四類任務(wù)中:一類是序列標注,這是最典型的 NLP 任務(wù),比如中文分詞,詞性標注,命名實體識別,語義角色標注等都可以歸入這一類問題,它的特點是句子中每個單詞要求模型根據(jù)上下文都要給出一個分類類別。第二類是分類任務(wù),比如我們常見的文本分類,情感計算等都可以歸入這一類。它的特點是不管文章有多長,總體給出一個分類類別即可。第三類任務(wù)是句子關(guān)系判斷,比如 Entailment,QA,語義改寫,自然語言推理等任務(wù)都是這個模式,它的特點是給定兩個句子,模型判斷出兩個句子是否具備某種語義關(guān)系;第四類是生成式任務(wù),比如機器翻譯,文本摘要,寫詩造句,看圖說話等都屬于這一類。它的特點是輸入文本內(nèi)容后,需要自主生成另外一段文字。

解決這些不同的任務(wù),從模型角度來講什么最重要?是特征抽取器的能力。尤其是深度學習流行開來后,這一點更凸顯出來。因為深度學習最大的優(yōu)點是「端到端(end to end)」,當然這里不是指的從客戶端到云端,意思是以前研發(fā)人員得考慮設(shè)計抽取哪些特征,而端到端時代后,這些你完全不用管,把原始輸入扔給好的特征抽取器,它自己會把有用的特征抽取出來。

身為資深 Bug 制造者和算法工程師,你現(xiàn)在需要做的事情就是:選擇一個好的特征抽取器,選擇一個好的特征抽取器,選擇一個好的特征抽取器,喂給它大量的訓練數(shù)據(jù),設(shè)定好優(yōu)化目標(loss function),告訴它你想讓它干嘛…….. 然后你覺得你啥也不用干等結(jié)果就行了是吧?那你是我見過的整個宇宙中最樂觀的人……. 你大量時間其實是用在調(diào)參上…….。從這個過程可以看出,如果我們有個強大的特征抽取器,那么中初級算法工程師淪為調(diào)參俠也就是個必然了,在 AutoML(自動那啥)流行的年代,也許以后你想當調(diào)參俠而不得,李斯說的「吾欲與若復牽黃犬,俱出上蔡東門逐狡兔,豈可得乎!」請了解一下。所以請珍惜你半夜兩點還在調(diào)整超參的日子吧,因為對于你來說有一個好消息一個壞消息,好消息是:對于你來說可能這樣辛苦的日子不多了!壞消息是:對于你來說可能這樣辛苦的日子不多了?。?!那么怎么才能成為算法高手?你去設(shè)計一個更強大的特征抽取器呀。

下面開始分敘三大特征抽取器。

沙場老將 RNN:廉頗老矣,尚能飯否

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

RNN 模型我估計大家都熟悉,就不詳細介紹了,模型結(jié)構(gòu)參考上圖,核心是每個輸入對應(yīng)隱層節(jié)點,而隱層節(jié)點之間形成了線性序列,信息由前向后在隱層之間逐步向后傳遞。我們下面直接進入我想講的內(nèi)容。

為何 RNN 能夠成為解決 NLP 問題的主流特征抽取器

我們知道,RNN 自從引入 NLP 界后,很快就成為吸引眼球的明星模型,在 NLP 各種任務(wù)中被廣泛使用。但是原始的 RNN 也存在問題,它采取線性序列結(jié)構(gòu)不斷從前往后收集輸入信息,但這種線性序列結(jié)構(gòu)在反向傳播的時候存在優(yōu)化困難問題,因為反向傳播路徑太長,容易導致嚴重的梯度消失或梯度爆炸問題。為了解決這個問題,后來引入了 LSTM 和 GRU 模型,通過增加中間狀態(tài)信息直接向后傳播,以此緩解梯度消失問題,獲得了很好的效果,于是很快 LSTM 和 GRU 成為 RNN 的標準模型。其實圖像領(lǐng)域最早由 HighwayNet/Resnet 等導致模型革命的 skip connection 的原始思路就是從 LSTM 的隱層傳遞機制借鑒來的。經(jīng)過不斷優(yōu)化,后來 NLP 又從圖像領(lǐng)域借鑒并引入了 attention 機制(從這兩個過程可以看到不同領(lǐng)域的相互技術(shù)借鑒與促進作用),疊加網(wǎng)絡(luò)把層深作深,以及引入 Encoder-Decoder 框架,這些技術(shù)進展極大拓展了 RNN 的能力以及應(yīng)用效果。下圖展示的模型就是非常典型的使用 RNN 來解決 NLP 任務(wù)的通用框架技術(shù)大禮包,在更新的技術(shù)出現(xiàn)前,你可以在 NLP 各種領(lǐng)域見到這個技術(shù)大禮包的身影。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

上述內(nèi)容簡單介紹了 RNN 在 NLP 領(lǐng)域的大致技術(shù)演進過程。那么為什么 RNN 能夠這么快在 NLP 流行并且占據(jù)了主導地位呢?主要原因還是因為 RNN 的結(jié)構(gòu)天然適配解決 NLP 的問題,NLP 的輸入往往是個不定長的線性序列句子,而 RNN 本身結(jié)構(gòu)就是個可以接納不定長輸入的由前向后進行信息線性傳導的網(wǎng)絡(luò)結(jié)構(gòu),而在 LSTM 引入三個門后,對于捕獲長距離特征也是非常有效的。所以 RNN 特別適合 NLP 這種線形序列應(yīng)用場景,這是 RNN 為何在 NLP 界如此流行的根本原因。

RNN 在新時代面臨的兩個嚴重問題

RNN 在 NLP 界一直紅了很多年(2014-2018?),在 2018 年之前,大部分各個子領(lǐng)域的 State of Art 的結(jié)果都是 RNN 獲得的。但是最近一年來,眼看著 RNN 的領(lǐng)袖群倫的地位正在被動搖,所謂各領(lǐng)風騷 3-5 年,看來網(wǎng)紅模型也不例外。

那這又是因為什么呢?主要有兩個原因。

第一個原因在于一些后起之秀新模型的崛起,比如經(jīng)過特殊改造的 CNN 模型,以及最近特別流行的 Transformer,這些后起之秀尤其是 Transformer 的應(yīng)用效果相比 RNN 來說,目前看具有明顯的優(yōu)勢。這是個主要原因,老人如果干不過新人,又沒有脫胎換骨自我革命的能力,自然要自覺或不自愿地退出歷史舞臺,這是自然規(guī)律。至于 RNN 能力偏弱的具體證據(jù),本文后面會專門談,這里不展開講。當然,技術(shù)人員里的 RNN 保皇派們,這個群體規(guī)模應(yīng)該還是相當大的,他們不會輕易放棄曾經(jīng)這么熱門過的流量明星的,所以也想了或者正在想一些改進方法,試圖給 RNN 延年益壽。至于這些方法是什么,有沒有作用,后面也陸續(xù)會談。

另外一個嚴重阻礙 RNN 將來繼續(xù)走紅的問題是:RNN 本身的序列依賴結(jié)構(gòu)對于大規(guī)模并行計算來說相當之不友好。通俗點說,就是 RNN 很難具備高效的并行計算能力,這個乍一看好像不是太大的問題,其實問題很嚴重。如果你僅僅滿足于通過改 RNN 發(fā)一篇論文,那么這確實不是大問題,但是如果工業(yè)界進行技術(shù)選型的時候,在有快得多的模型可用的前提下,是不太可能選擇那么慢的模型的。一個沒有實際落地應(yīng)用支撐其存在價值的模型,其前景如何這個問題,估計用小腦思考也能得出答案。

那問題來了:為什么 RNN 并行計算能力比較差?是什么原因造成的?

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

我們知道,RNN 之所以是 RNN,能將其和其它模型區(qū)分開的最典型標志是:T 時刻隱層狀態(tài)的計算,依賴兩個輸入,一個是 T 時刻的句子輸入單詞 Xt,這個不算特點,所有模型都要接收這個原始輸入;關(guān)鍵的是另外一個輸入,T 時刻的隱層狀態(tài) St 還依賴 T-1 時刻的隱層狀態(tài) S(t-1) 的輸出,這是最能體現(xiàn) RNN 本質(zhì)特征的一點,RNN 的歷史信息是通過這個信息傳輸渠道往后傳輸?shù)?,示意參考上圖。那么為什么 RNN 的并行計算能力不行呢?問題就出在這里。因為 T 時刻的計算依賴 T-1 時刻的隱層計算結(jié)果,而 T-1 時刻的計算依賴 T-2 時刻的隱層計算結(jié)果…….. 這樣就形成了所謂的序列依賴關(guān)系。就是說只能先把第 1 時間步的算完,才能算第 2 時間步的結(jié)果,這就造成了 RNN 在這個角度上是無法并行計算的,只能老老實實地按著時間步一個單詞一個單詞往后走。

而 CNN 和 Transformer 就不存在這種序列依賴問題,所以對于這兩者來說并行計算能力就不是問題,每個時間步的操作可以并行一起計算。

那么能否針對性地對 RNN 改造一下,提升它的并行計算能力呢?如果可以的話,效果如何呢?下面我們討論一下這個問題。

如何改造 RNN 使其具備并行計算能力?

上面說過,RNN 不能并行計算的癥結(jié)所在,在于 T 時刻對 T-1 時刻計算結(jié)果的依賴,而這體現(xiàn)在隱層之間的全連接網(wǎng)絡(luò)上。既然癥結(jié)在這里,那么要想解決問題,也得在這個環(huán)節(jié)下手才行。在這個環(huán)節(jié)多做點什么事情能夠增加 RNN 的并行計算能力呢?你可以想一想。

其實留給你的選項并不多,你可以有兩個大的思路來改進:一種是仍然保留任意連續(xù)時間步(T-1 到 T 時刻)之間的隱層連接;而另外一種是部分地打斷連續(xù)時間步(T-1 到 T 時刻)之間的隱層連接。

我們先來看第一種方法,現(xiàn)在我們的問題轉(zhuǎn)化成了:我們?nèi)匀灰A羧我膺B續(xù)時間步(T-1 到 T 時刻)之間的隱層連接,但是在這個前提下,我們還要能夠做到并行計算,這怎么處理呢?因為只要保留連續(xù)兩個時間步的隱層連接,則意味著要計算 T 時刻的隱層結(jié)果,就需要 T-1 時刻隱層結(jié)果先算完,這不又落入了序列依賴的陷阱里了嗎?嗯,確實是這樣,但是為什么一定要在不同時間步的輸入之間并行呢?沒有人說 RNN 的并行計算一定發(fā)生在不同時間步上啊,你想想,隱層是不是也是包含很多神經(jīng)元?那么在隱層神經(jīng)元之間并行計算行嗎?如果你要是還沒理解這是什么意思,那請看下圖。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

上面的圖只顯示了各個時間步的隱層節(jié)點,每個時間步的隱層包含 3 個神經(jīng)元,這是個俯視圖,是從上往下看 RNN 的隱層節(jié)點的。另外,連續(xù)兩個時間步的隱層神經(jīng)元之間仍然有連接,上圖沒有畫出來是為了看著簡潔一些。這下應(yīng)該明白了吧,假設(shè)隱層神經(jīng)元有 3 個,那么我們可以形成 3 路并行計算(紅色箭頭分隔開成了三路),而每一路因為仍然存在序列依賴問題,所以每一路內(nèi)仍然是串行的。大思路應(yīng)該明白了是吧?但是了解 RNN 結(jié)構(gòu)的同學會發(fā)現(xiàn)這樣還遺留一個問題:隱層神經(jīng)元之間的連接是全連接,就是說 T 時刻某個隱層神經(jīng)元與 T-1 時刻所有隱層神經(jīng)元都有連接,如果是這樣,是無法做到在神經(jīng)元之間并行計算的,你可以想想為什么,這個簡單,我假設(shè)你有能力想明白。那么怎么辦呢?很簡單,T 時刻和 T-1 時刻的隱層神經(jīng)元之間的連接關(guān)系需要改造,從之前的全連接,改造成對應(yīng)位置的神經(jīng)元(就是上圖被紅箭頭分隔到同一行的神經(jīng)元之間)有連接,和其它神經(jīng)元沒有連接。這樣就可以解決這個問題,在不同路的隱層神經(jīng)元之間可以并行計算了。

第一種改造 RNN 并行計算能力的方法思路大致如上所述,這種方法的代表就是論文「Simple Recurrent Units for Highly Parallelizable Recurrence」中提出的 SRU 方法,它最本質(zhì)的改進是把隱層之間的神經(jīng)元依賴由全連接改成了哈達馬乘積,這樣 T 時刻隱層單元本來對 T-1 時刻所有隱層單元的依賴,改成了只是對 T-1 時刻對應(yīng)單元的依賴,于是可以在隱層單元之間進行并行計算,但是收集信息仍然是按照時間序列來進行的。所以其并行性是在隱層單元之間發(fā)生的,而不是在不同時間步之間發(fā)生的。

這其實是比較巧妙的一種方法,但是它的問題在于其并行程度上限是有限的,并行程度取決于隱層神經(jīng)元個數(shù),而一般這個數(shù)值往往不會太大,再增加并行性已經(jīng)不太可能。另外每一路并行線路仍然需要序列計算,這也會拖慢整體速度。SRU 的測試速度為:在文本分類上和原始 CNN(Kim 2014)的速度相當,論文沒有說 CNN 是否采取了并行訓練方法。其它在復雜任務(wù)閱讀理解及 MT 任務(wù)上只做了效果評估,沒有和 CNN 進行速度比較,我估計這是有原因的,因為復雜任務(wù)往往需要深層網(wǎng)絡(luò),其它的就不妄作猜測了。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

第二種改進典型的思路是:為了能夠在不同時間步輸入之間進行并行計算,那么只有一種做法,那就是打斷隱層之間的連接,但是又不能全打斷,因為這樣基本就無法捕獲組合特征了,所以唯一能選的策略就是部分打斷,比如每隔 2 個時間步打斷一次,但是距離稍微遠點的特征如何捕獲呢?只能加深層深,通過層深來建立遠距離特征之間的聯(lián)系。代表性模型比如上圖展示的 Sliced RNN。我當初看到這個模型的時候,心里忍不住發(fā)出杠鈴般的笑聲,情不自禁地走上前跟他打了個招呼:你好呀,CNN 模型,想不到你這個糙漢子有一天也會穿上粉色裙裝,裝扮成 RNN 的樣子出現(xiàn)在我面前啊,哈哈。了解 CNN 模型的同學看到我上面這句話估計會莞爾會心一笑:這不就是簡化版本的 CNN 嗎?不了解 CNN 的同學建議看完后面 CNN 部分再回頭來看看是不是這個意思。

那經(jīng)過這種改造的 RNN 速度改進如何呢?論文給出了速度對比實驗,歸納起來,SRNN 速度比 GRU 模型快 5 到 15 倍,嗯,效果不錯,但是跟對比模型 DC-CNN 模型速度比較起來,比 CNN 模型仍然平均慢了大約 3 倍。這很正常但是又有點說不太過去,說正常是因為本來這就是把 RNN 改頭換面成類似 CNN 的結(jié)構(gòu),而片段里仍然采取 RNN 序列模型,所以必然會拉慢速度,比 CNN 慢再正常不過了。說「說不過去」是指的是:既然本質(zhì)上是 CNN,速度又比 CNN 慢,那么這么改的意義在哪里?為什么不直接用 CNN 呢?是不是?前面那位因為吃虧吃的少所以愛抬杠的同學又會說了:也許人家效果特別好呢。嗯,從這個結(jié)構(gòu)的作用機制上看,可能性不太大。你說論文實驗部分證明了這一點呀,我認為實驗部分對比試驗做的不充分,需要補充除了 DC-CNN 外的其他 CNN 模型進行對比。當然這點純屬個人意見,別當真,因為我講起話來的時候經(jīng)常搖頭晃腦,此時一般會有人驚奇地跟我反饋說:為什么你一講話我就聽到了水聲?

上面列舉了兩種大的改進 RNN 并行計算能力的思路,我個人對于 RNN 的并行計算能力持悲觀態(tài)度,主要因為 RNN 本質(zhì)特性決定了我們能做的選擇太少。無非就是選擇打斷還是不打斷隱層連接的問題。如果選擇打斷,就會面臨上面的問題,你會發(fā)現(xiàn)它可能已經(jīng)不是 RNN 模型了,為了讓它看上去還像是 RNN,所以在打斷片段里仍然采取 RNN 結(jié)構(gòu),這樣無疑會拉慢速度,所以這是個兩難的選擇,與其這樣不如直接換成其它模型;如果我們選擇不打斷,貌似只能在隱層神經(jīng)元之間進行并行,而這樣做的缺點是:一方面并行能力上限很低;另外一方面里面依然存在的序列依賴估計仍然是個問題。這是為何悲觀的原因,主要是看不到大的希望。

偏師之將 CNN:刺激戰(zhàn)場絕地求生

在一年多前,CNN 是自然語言處理中除了 RNN 外最常見的深度學習模型,這里介紹下 CNN 特征抽取器,會比 RNN 說得詳細些,主要考慮到大家對它的熟悉程度可能沒有 RNN 那么高。

NLP 中早期的懷舊版 CNN 模型

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

最早將 CNN 引入 NLP 的是 Kim 在 2014 年做的工作,論文和網(wǎng)絡(luò)結(jié)構(gòu)參考上圖。一般而言,輸入的字或者詞用 Word Embedding 的方式表達,這樣本來一維的文本信息輸入就轉(zhuǎn)換成了二維的輸入結(jié)構(gòu),假設(shè)輸入 X 包含 n 個字符,而每個字符的 Word Embedding 的長度為 d,那么輸入就是 d*n 的二維向量。

卷積層本質(zhì)上是個特征抽取層,可以設(shè)定超參數(shù) F 來指定卷積層包含多少個卷積核(Filter)。對于某個 Filter 來說,可以想象有一個 d*k 大小的移動窗口從輸入矩陣的第一個字開始不斷往后移動,其中 k 是 Filter 指定的窗口大小,d 是 Word Embedding 長度。對于某個時刻的窗口,通過神經(jīng)網(wǎng)絡(luò)的非線性變換,將這個窗口內(nèi)的輸入值轉(zhuǎn)換為某個特征值,隨著窗口不斷往后移動,這個 Filter 對應(yīng)的特征值不斷產(chǎn)生,形成這個 Filter 的特征向量。這就是卷積核抽取特征的過程。卷積層內(nèi)每個 Filter 都如此操作,就形成了不同的特征序列。Pooling 層則對 Filter 的特征進行降維操作,形成最終的特征。一般在 Pooling 層之后連接全聯(lián)接層神經(jīng)網(wǎng)絡(luò),形成最后的分類過程。

這就是最早應(yīng)用在 NLP 領(lǐng)域 CNN 模型的工作機制,用來解決 NLP 中的句子分類任務(wù),看起來還是很簡潔的,之后陸續(xù)出現(xiàn)了在此基礎(chǔ)上的改進模型。這些懷舊版 CNN 模型在一些任務(wù)上也能和當時懷舊版本的 RNN 模型效果相當,所以在 NLP 若干領(lǐng)域也能野蠻生長,但是在更多的 NLP 領(lǐng)域,還是處于被 RNN 模型壓制到抑郁癥早期的尷尬局面。那為什么在圖像領(lǐng)域打遍天下無敵手的 CNN,一旦跑到 NLP 的地盤,就被 RNN 這個地頭蛇壓制得無顏見圖像領(lǐng)域江東父老呢?這說明這個版本的 CNN 還是有很多問題的,其實最根本的癥結(jié)所在還是老革命遇到了新問題,主要是到了新環(huán)境沒有針對新環(huán)境的特性做出針對性的改變,所以面臨水土不服的問題。

CNN 能在 RNN 縱橫的各種 NLP 任務(wù)環(huán)境下生存下來嗎?謎底即將揭曉。

CNN 的進化:物競天擇的模型斗獸場

下面我們先看看懷舊版 CNN 存在哪些問題,然后看看我們的 NLP 專家們是如何改造 CNN,一直改到目前看上去還算效果不錯的現(xiàn)代版本 CNN 的。

首先,我們先要明確一點:CNN 捕獲到的是什么特征呢?從上述懷舊版本 CNN 卷積層的運作機制你大概看出來了,關(guān)鍵在于卷積核覆蓋的那個滑動窗口,CNN 能捕獲到的特征基本都體現(xiàn)在這個滑動窗口里了。大小為 k 的滑動窗口輕輕的穿過句子的一個個單詞,蕩起陣陣漣漪,那么它捕獲了什么? 其實它捕獲到的是單詞的 k-gram 片段信息,這些 k-gram 片段就是 CNN 捕獲到的特征,k 的大小決定了能捕獲多遠距離的特征。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

說完這個,我們來看 Kim 版 CNN 的第一個問題:它只有一個卷積層。表面看上去好像是深度不夠的問題是吧?我會反問你說:為什么要把 CNN 作深呢?其實把深度做起來是手段,不是目的。只有一個卷積層帶來的問題是:對于遠距離特征,單層 CNN 是無法捕獲到的,如果滑動窗口 k 最大為 2,而如果有個遠距離特征距離是 5,那么無論上多少個卷積核,都無法覆蓋到長度為 5 的距離的輸入,所以它是無法捕獲長距離特征的。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

那么怎樣才能捕獲到長距離的特征呢?有兩種典型的改進方法:一種是假設(shè)我們?nèi)匀挥脝蝹€卷積層,滑動窗口大小 k 假設(shè)為 3,就是只接收三個輸入單詞,但是我們想捕獲距離為 5 的特征,怎么做才行?顯然,如果卷積核窗口仍然覆蓋連續(xù)區(qū)域,這肯定是完不成任務(wù)的。提示一下:你玩過跳一跳是吧?能采取類似策略嗎?對,你可以跳著覆蓋呀,是吧?這就是 Dilated 卷積的基本思想,確實也是一種解決方法。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

第二種方法是把深度做起來。第一層卷積層,假設(shè)滑動窗口大小 k 是 3,如果再往上疊一層卷積層,假設(shè)滑動窗口大小也是 3,但是第二層窗口覆蓋的是第一層窗口的輸出特征,所以它其實能覆蓋輸入的距離達到了 5。如果繼續(xù)往上疊加卷積層,可以繼續(xù)增大卷積核覆蓋輸入的長度。

上面是兩種典型的解決 CNN 遠距離特征捕獲能力的方案,Dilated CNN 偏技巧一些,而且疊加卷積層時超參如何設(shè)置有些學問,因為連續(xù)跳接可能會錯過一些特征組合,所以需要精心調(diào)節(jié)參數(shù)搭配,保證所有可能組合都被覆蓋到。相對而言,把 CNN 作深是主流發(fā)展方向。上面這個道理好理解,其實自從 CNN 一出現(xiàn),人們就想各種辦法試圖把 CNN 的深度做起來,但是現(xiàn)實往往是無情的,發(fā)現(xiàn)怎么折騰,CNN 做 NLP 問題就是做不深,做到 2 到 3 層卷積層就做不上去了,網(wǎng)絡(luò)更深對任務(wù)效果沒什么幫助(請不要拿 CharCNN 來做反例,后來研究表明使用單詞的 2 層 CNN 效果超過 CharCNN)。目前看來,還是深層網(wǎng)絡(luò)參數(shù)優(yōu)化手段不足導致的這個問題,而不是層深沒有用。后來 Resnet 等圖像領(lǐng)域的新技術(shù)出現(xiàn)后,很自然地,人們會考慮把 Skip Connection 及各種 Norm 等參數(shù)優(yōu)化技術(shù)引入,這才能慢慢把 CNN 的網(wǎng)絡(luò)深度做起來。

上面說的是 Kim 版本 CNN 的第一個問題,無法捕獲遠距離特征的問題,以及后面科研人員提出的主要解決方案?;仡^看 Kim 版本 CNN 還有一個問題,就是那個 Max Pooling 層,這塊其實與 CNN 能否保持輸入句子中單詞的位置信息有關(guān)系。首先我想問個問題:RNN 因為是線性序列結(jié)構(gòu),所以很自然它天然就會把位置信息編碼進去;那么,CNN 是否能夠保留原始輸入的相對位置信息呢?我們前面說過對于 NLP 問題來說,位置信息是很有用的。其實 CNN 的卷積核是能保留特征之間的相對位置的,道理很簡單,滑動窗口從左到右滑動,捕獲到的特征也是如此順序排列,所以它在結(jié)構(gòu)上已經(jīng)記錄了相對位置信息了。但是如果卷積層后面立即接上 Pooling 層的話,Max Pooling 的操作邏輯是:從一個卷積核獲得的特征向量里只選中并保留最強的那一個特征,所以到了 Pooling 層,位置信息就被扔掉了,這在 NLP 里其實是有信息損失的。所以在 NLP 領(lǐng)域里,目前 CNN 的一個發(fā)展趨勢是拋棄 Pooling 層,靠全卷積層來疊加網(wǎng)絡(luò)深度,這背后是有原因的(當然圖像領(lǐng)域也是這個趨勢)。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

上圖展示了在 NLP 領(lǐng)域能夠施展身手的摩登 CNN 的主體結(jié)構(gòu),通常由 1-D 卷積層來疊加深度,使用 Skip Connection 來輔助優(yōu)化,也可以引入 Dilated CNN 等手段。比如 ConvS2S 主體就是上圖所示結(jié)構(gòu),Encoder 包含 15 個卷積層,卷積核 kernel size=3,覆蓋輸入長度為 25。當然對于 ConvS2S 來說,卷積核里引入 GLU 門控非線性函數(shù)也有重要幫助,限于篇幅,這里不展開說了,GLU 貌似是 NLP 里 CNN 模型必備的構(gòu)件,值得掌握。再比如 TCN(論文:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling),集成了幾項技術(shù):利用 Dilated CNN 拓展單層卷積層的輸入覆蓋長度,利用全卷積層堆疊層深,使用 Skip Connection 輔助優(yōu)化,引入 Casual CNN 讓網(wǎng)絡(luò)結(jié)構(gòu)看不到 T 時間步后的數(shù)據(jù)。不過 TCN 的實驗做得有兩個明顯問題:一個問題是任務(wù)除了語言模型外都不是典型的 NLP 任務(wù),而是合成數(shù)據(jù)任務(wù),所以論文結(jié)論很難直接說就適合 NLP 領(lǐng)域;另外一點,它用來進行效果比較的對比方法,沒有用當時效果很好的模型來對比,比較基準低。所以 TCN 的模型效果說服力不太夠。其實它該引入的元素也基本引入了,實驗說服力不夠,我覺得可能是它命中缺 GLU 吧。

除此外,簡單談一下 CNN 的位置編碼問題和并行計算能力問題。上面說了,CNN 的卷積層其實是保留了相對位置信息的,只要你在設(shè)計模型的時候別手賤,中間層不要隨手瞎插入 Pooling 層,問題就不大,不專門在輸入部分對 position 進行編碼也行。但是也可以類似 ConvS2S 那樣,專門在輸入部分給每個單詞增加一個 position embedding,將單詞的 position embedding 和詞向量 embedding 疊加起來形成單詞輸入,這樣也可以,也是常規(guī)做法。

至于 CNN 的并行計算能力,那是非常強的,這其實很好理解。我們考慮單層卷積層,首先對于某個卷積核來說,每個滑動窗口位置之間沒有依賴關(guān)系,所以完全可以并行計算;另外,不同的卷積核之間也沒什么相互影響,所以也可以并行計算。CNN 的并行度是非常自由也非常高的,這是 CNN 的一個非常好的優(yōu)點。

以上內(nèi)容介紹了懷舊版 CNN 是如何在 NLP 修羅場一步步通過自我進化生存到今天的。CNN 的進化方向,如果千言萬語一句話歸納的話,那就是:想方設(shè)法把 CNN 的深度做起來,隨著深度的增加,很多看似無關(guān)的問題就隨之解決了。就跟我們國家最近 40 年的主旋律是發(fā)展經(jīng)濟一樣,經(jīng)濟發(fā)展好了,很多問題就不是問題了。最近幾年之所以大家感到各方面很困難,癥結(jié)就在于經(jīng)濟不行了,所以很多問題無法通過經(jīng)濟帶動來解決,于是看似各種花樣的困難就冒出來,這是一個道理。

那么介紹了這么多,摩登版 CNN 效果如何呢?與 RNN 及 Transforme 比起來怎樣?別著急,后面會專門談這個問題。

白衣騎士 Transformer:蓋世英雄站上舞臺

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

Transformer 是谷歌在 17 年做機器翻譯任務(wù)的「Attention is all you need」的論文中提出的,引起了相當大的反響。每一位從事 NLP 研發(fā)的同仁都應(yīng)該透徹搞明白 Transformer,它的重要性毫無疑問,尤其是你在看完我這篇文章之后,我相信你的緊迫感會更迫切,我就是這么一位善于制造焦慮的能手。不過這里沒打算重點介紹它,想要入門 Transformer 的可以參考以下三篇文章:一個是 Jay Alammar 可視化地介紹 Transformer 的博客文章 The Illustrated Transformer,非常容易理解整個機制,建議先從這篇看起,這是中文翻譯版本;第二篇是 Calvo 的博客:Dissecting BERT Part 1: The Encoder,盡管說是解析 Bert,但是因為 Bert 的 Encoder 就是 Transformer,所以其實它是在解析 Transformer,里面舉的例子很好;再然后可以進階一下,參考哈佛大學 NLP 研究組寫的「The Annotated Transformer.」,代碼原理雙管齊下,講得也很清楚。

下面只說跟本文主題有關(guān)的內(nèi)容。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

這里要澄清一下,本文所說的 Transformer 特征抽取器并非原始論文所指。我們知道,「Attention is all you need」論文中說的的 Transformer 指的是完整的 Encoder-Decoder 框架,而我這里是從特征提取器角度來說的,你可以簡單理解為論文中的 Encoder 部分。因為 Encoder 部分目的比較單純,就是從原始句子中提取特征,而 Decoder 部分則功能相對比較多,除了特征提取功能外,還包含語言模型功能,以及用 attention 機制表達的翻譯模型功能。所以這里請注意,避免后續(xù)理解概念產(chǎn)生混淆。

Transformer 的 Encoder 部分(不是上圖一個一個的標為 encoder 的模塊,而是紅框內(nèi)的整體,上圖來自 The Illustrated Transformer,Jay Alammar 把每個 Block 稱為 Encoder 不太符合常規(guī)叫法)是由若干個相同的 Transformer Block 堆疊成的。這個 Transformer Block 其實才是 Transformer 最關(guān)鍵的地方,核心配方就在這里。那么它長什么樣子呢?

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

它的照片見上圖,看上去是不是很可愛,有點像安卓機器人是吧?這里需要強調(diào)一下,盡管 Transformer 原始論文一直重點在說 Self Attention,但是目前來看,能讓 Transformer 效果好的,不僅僅是 Self attention,這個 Block 里所有元素,包括 Multi-head self attention,Skip connection,LayerNorm,F(xiàn)F 一起在發(fā)揮作用。為什么這么說?你看到后面會體會到這一點。

我們針對 NLP 任務(wù)的特點來說下 Transformer 的對應(yīng)解決方案。首先,自然語言一般是個不定長的句子,那么這個不定長問題怎么解決呢?Transformer 做法跟 CNN 是類似的,一般設(shè)定輸入的最大長度,如果句子沒那么長,則用 Padding 填充,這樣整個模型輸入起碼看起來是定長的了。另外,NLP 句子中單詞之間的相對位置是包含很多信息的,上面提過,RNN 因為結(jié)構(gòu)就是線性序列的,所以天然會將位置信息編碼進模型;而 CNN 的卷積層其實也是保留了位置相對信息的,所以什么也不做問題也不大。但是對于 Transformer 來說,為了能夠保留輸入句子單詞之間的相對位置信息,必須要做點什么。為啥它必須要做點什么呢?因為輸入的第一層網(wǎng)絡(luò)是 Muli-head self attention 層,我們知道,Self attention 會讓當前輸入單詞和句子中任意單詞發(fā)生關(guān)系,然后集成到一個 embedding 向量里,但是當所有信息到了 embedding 后,位置信息并沒有被編碼進去。所以,Transformer 不像 RNN 或 CNN,必須明確的在輸入端將 Positon 信息編碼,Transformer 是用位置函數(shù)來進行位置編碼的,而 Bert 等模型則給每個單詞一個 Position embedding,將單詞 embedding 和單詞對應(yīng)的 position embedding 加起來形成單詞的輸入 embedding,類似上文講的 ConvS2S 的做法。而關(guān)于 NLP 句子中長距離依賴特征的問題,Self attention 天然就能解決這個問題,因為在集成信息的時候,當前單詞和句子中任意單詞都發(fā)生了聯(lián)系,所以一步到位就把這個事情做掉了。不像 RNN 需要通過隱層節(jié)點序列往后傳,也不像 CNN 需要通過增加網(wǎng)絡(luò)深度來捕獲遠距離特征,Transformer 在這點上明顯方案是相對簡單直觀的。說這些是為了單獨介紹下 Transformer 是怎樣解決 NLP 任務(wù)幾個關(guān)鍵點的。

Transformer 有兩個版本:Transformer base 和 Transformer Big。兩者結(jié)構(gòu)其實是一樣的,主要區(qū)別是包含的 Transformer Block 數(shù)量不同,Transformer base 包含 12 個 Block 疊加,而 Transformer Big 則擴張一倍,包含 24 個 Block。無疑 Transformer Big 在網(wǎng)絡(luò)深度,參數(shù)量以及計算量相對 Transformer base 翻倍,所以是相對重的一個模型,但是效果也最好。

(上篇)

雷鋒網(wǎng) AI 科技評論經(jīng)作者許可轉(zhuǎn)載。

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

放棄幻想,全面擁抱 Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較(上篇)

分享:
相關(guān)文章
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說