來自硅谷工程師的Google TensorFlow教程:開始訓(xùn)練你的第一個RNN吧》,有讀者反饋希望了解更多關(guān)于RNN的相關(guān)內(nèi)容。因此,在接下來的幾周中,科技行者為大家準(zhǔn)備了一套RNN系列的入門教程,供大家參考。
4.建立基于門控循環(huán)單元(GRU)或者長短時記憶(LSTM)的RNN模型
那么今天,我們將先對RNN做一個基本介紹。
在這一教程里,我們將會建立一個基于RNN的語言模型。語言模型的應(yīng)用有雙重目的:第一,可以根據(jù)句子在現(xiàn)實中出現(xiàn)的可能性和概率對任意句子進行評分。這給了我們語法和語義上的度量,在機器翻譯系統(tǒng)中,這類模型非常常見。第二,一個語言模型可以生成新文本。例如,Andrej Karpathy的這篇博文(http://karpathy.github.io/2015/05/21/rnn-effectiveness/)就展示了RNN模型的作用和有效性,它可以訓(xùn)練莎士比亞的詩集,從而生成類似莎士比亞詩集的文本。
在開始本次教程前,需要您對神經(jīng)網(wǎng)絡(luò)(NNs)的基本概念有了一定的了解。神經(jīng)網(wǎng)絡(luò)是是一種應(yīng)用類似于大腦神經(jīng)突觸聯(lián)接的結(jié)構(gòu)進行信息處理的數(shù)學(xué)模型。
-1-
何為RNN?
RNN的本質(zhì)概念是利用時序信息,在傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,假設(shè)所有的輸入(以及輸出)都各自獨立。但是,對于很多任務(wù)而言,這非常局限。舉個例子,假如你想根據(jù)一句沒說完的話,預(yù)測下一個單詞,最好的辦法就是聯(lián)系上下文的信息。而RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))之所以是“循環(huán)”,是因為它們對序列的每個元素執(zhí)行相同的任務(wù),而每次的結(jié)果都獨立于之前的計算。
另一種思考RNN的方式是,它擁有“記憶”模塊,可以獲取已經(jīng)計算過的信息。理論上講,RNN可以利用任意長度的序列信息,但只可以利用有限的前幾步的信息。
下面便是一個典型的RNN模型:
上圖顯示的是RNN模型全部展開時的情況。“展開”指的是用網(wǎng)絡(luò)描述出所有序列。
例如,如果序列中的句子有5個單詞,那么,橫向展開網(wǎng)絡(luò)后將有五層神經(jīng)網(wǎng)絡(luò),一層對應(yīng)一個單詞。
下面解釋一下其中的計算公式:
需要注意的有幾點:
-2-
RNN有何用處?
在眾多自然語言處理的任務(wù)中,RNN已經(jīng)取得了巨大成功。這里,需要指出的是RNN中最常用的類型是長短時記憶(LSTMs)模型,相比較于原始的RNN,LSTM可以存儲更長的時序信息。并且,本教程中LSTM在本質(zhì)上和我們所要開發(fā)的RNN是一致的,只不過LSTM計算隱藏狀態(tài)的方式有所不同。在下一個教程中,我們將會更詳細(xì)地講解LSTM。
接下來,我們主要介紹一下在自然語言處理中應(yīng)用RNN的例子:
2.1 語言建模和文本生成
通過訓(xùn)練RNN模型,我們可以基于給出的一個單詞序列,預(yù)測下一個單詞。這對于語言建模和文本生成而言是非常有價值的。
同時,語言模型可以用于評估一個句子出現(xiàn)的可能性,這對機器翻譯而言也是非常重要的(因為高概率的句子通常是正確的)。
能夠預(yù)測下一個單詞出現(xiàn)的概率,那是因為我們所得到的衍生模型能夠根據(jù)輸出的可能性來生成新文本。而根據(jù)我們的訓(xùn)練數(shù)據(jù),模型還可以得到所有類型的文本。在語言建模中,我們的輸入屬于典型的單詞序列(例如利用one-hot載體進行編碼),而在訓(xùn)練該神經(jīng)網(wǎng)絡(luò)時,我們希望t時刻的輸出是精確的,因此,我們會設(shè)定。
下面是關(guān)于語言建模和文本生成的研究論文:
Recurrent neural network based language model
《基于循環(huán)神經(jīng)網(wǎng)絡(luò)的語言模型》
Extensions of Recurrent neural network based language model
《基于循環(huán)神經(jīng)網(wǎng)絡(luò)拓展的語言模型》
Generating Text with Recurrent Neural Networks
《利用循環(huán)神經(jīng)網(wǎng)絡(luò)生成文本》
2.2 機器翻譯
機器翻譯類似于語言建模,我們首先輸入源語(例如德語),需要輸出是目標(biāo)語(例如英語)。關(guān)鍵區(qū)別是,在機器翻譯中,翻譯的第一個字可能會需要所有已輸入句子的信息,所以只有看到全部輸入之后才能輸出。
▲ 上圖是用于機器翻譯的RNN模型
圖片來源:http://cs224d.stanford.edu/lectures/CS224d-Lecture8.pdf
下面是關(guān)于機器翻譯的研究論文:
A Recursive Recurrent Neural Network for Statistical Machine Translation
《用于統(tǒng)計類機器翻譯的遞歸型循環(huán)神經(jīng)網(wǎng)絡(luò)》
Sequence to Sequence Learning with Neural Networks
《利用神經(jīng)網(wǎng)絡(luò)進行序列至序列的學(xué)習(xí)》
Joint Language and Translation Modeling with Recurrent Neural Networks
《利用循環(huán)神經(jīng)網(wǎng)絡(luò)進行語言和翻譯的建?!?br />
2.3 語音識別
根據(jù)從聲音中得到的一系列聲波信號,并以此作為輸入,可以預(yù)測出一系列語音片段及其可能性。
下面是關(guān)于語音識別的研究論文:
Towards End-to-End Speech Recognition with Recurrent Neural Networks
《利用循環(huán)神經(jīng)網(wǎng)絡(luò)進行端對端的語音識別》
2.4 生成圖片的文字描述
和CNN(卷積神經(jīng)網(wǎng)絡(luò))一樣,RNN也被應(yīng)用于生成描述未被標(biāo)簽的圖片模型。并且,兩者結(jié)合的模型組合甚至可以依據(jù)圖片特征排列生成文字,以及圖片中特征的對應(yīng)位置。如下圖:
▲用于生成圖像描述的深度視覺 - 語義示例
來源:http://cs.stanford.edu/people/karpathy/deepimagesent/
2.5 訓(xùn)練RNN模型
訓(xùn)練RNN模型與訓(xùn)練傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)類似。我們同樣采用反向傳播算法,但也有不同。因為在RNN中,橫向展開的每一層都是共享權(quán)重的,每一個輸出的梯度(gradient)不僅僅依賴于當(dāng)下這個時間點,還依賴于過去的時間點。舉個例子,想要計算時間點t=4的梯度,我們需要反向傳播3個時間點,并把梯度相加。這個算法就叫做BPTT(Backpropagation Through Time)?,F(xiàn)在只需要知道,BPTT算法本身是有局限性的,它不能長期記憶,還會引起梯度消失和梯度爆炸問題,LSTM就是用來解決這個問題的。
2.6 RNN模型的拓展
多年以來,為了克服傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)(vanilla RNN)的弱點,研究人員已經(jīng)開發(fā)出更多統(tǒng)計型的循環(huán)神經(jīng)網(wǎng)絡(luò)。之后的部分,我們將更細(xì)致地對此進行講解,但是,我希望這部分概要有助于大致了解一下模型分類。下面是一些典型的模型:
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(Bidirectional RNN)的理念是,時間t時的輸出不僅僅取決于過去的記憶,也同樣取決于后面發(fā)生的事情。例如,某一序列中,想要預(yù)測一個單詞,會聯(lián)系前文和后文。雙向循環(huán)神經(jīng)網(wǎng)絡(luò)便是如此簡單。僅僅是兩套循環(huán)神經(jīng)網(wǎng)絡(luò)前后交疊在一起而已。輸出的計算結(jié)果便基于這兩套循環(huán)神經(jīng)網(wǎng)絡(luò)的隱藏狀態(tài)。如下圖:
深度(雙向)(Deep (Bidirectional) RNN)循環(huán)神經(jīng)網(wǎng)絡(luò)類似于雙向循環(huán)神經(jīng)網(wǎng)絡(luò),只不過是每個時長內(nèi)都有多層。實際上,這一點意味著它有更強的學(xué)習(xí)能力(但是相應(yīng)地,也需要大量訓(xùn)練數(shù)據(jù))。
LSTM網(wǎng)絡(luò):近來,LSTM非常流行。本質(zhì)上,LSTM與RNN的基礎(chǔ)架構(gòu)并無不同,但是,LSTM在計算隱藏狀態(tài)時會采用不同的函數(shù)。LSTM中的記憶被稱為“細(xì)胞”,而可以把這些“細(xì)胞”視作黑匣子,記憶之前狀態(tài)為的輸入和當(dāng)前為x_t的輸入。本質(zhì)上,這些“細(xì)胞”將決定將保留或剔除相關(guān)記憶,“細(xì)胞”可以整合之前的狀態(tài)、當(dāng)前的記憶和輸入。而結(jié)果證明,對于長期的記憶來說,這些單元的類型非常高效。
-3-
總結(jié)
希望通過第一篇教程,你已經(jīng)對RNN的定義和作用有了一個基本的了解。下周,我們將介紹如何利用Python和Theano建立起第一個基于RNN的語言模型。
好文章,需要你的鼓勵
新加坡國立大學(xué)研究團隊開發(fā)了SPIRAL框架,通過讓AI與自己對弈零和游戲來提升推理能力。實驗顯示,僅訓(xùn)練AI玩簡單撲克游戲就能讓其數(shù)學(xué)推理能力提升8.6%,通用推理提升8.4%,且無需任何數(shù)學(xué)題目作為訓(xùn)練材料。研究發(fā)現(xiàn)游戲中的三種推理模式能成功轉(zhuǎn)移到數(shù)學(xué)解題中,為AI訓(xùn)練提供了新思路。
同濟大學(xué)團隊開發(fā)的GIGA-ToF技術(shù)通過融合多幀圖像的"圖結(jié)構(gòu)"信息,創(chuàng)新性地解決了3D相機噪聲問題。該技術(shù)利用圖像間的不變幾何關(guān)系,結(jié)合深度學(xué)習(xí)和數(shù)學(xué)優(yōu)化方法,在合成數(shù)據(jù)集上實現(xiàn)37.9%的精度提升,并在真實設(shè)備上展現(xiàn)出色泛化能力,為機器人、AR和自動駕駛等領(lǐng)域提供更可靠的3D視覺解決方案。
伊利諾伊大學(xué)研究團隊通過對比實驗發(fā)現(xiàn),經(jīng)過強化學(xué)習(xí)訓(xùn)練的視覺語言模型雖然表現(xiàn)出"頓悟時刻"現(xiàn)象,但這些自我糾錯行為并不能實際提升推理準(zhǔn)確率。研究揭示了AI模型存在"生成-驗證差距",即生成答案的能力強于驗證答案質(zhì)量的能力,且模型在自我驗證時無法有效利用視覺信息,為AI多模態(tài)推理發(fā)展提供了重要啟示。
MIT等頂尖機構(gòu)聯(lián)合提出SparseLoRA技術(shù),通過動態(tài)稀疏性實現(xiàn)大語言模型訓(xùn)練加速1.6倍,計算成本降低2.2倍。該方法使用SVD稀疏性估計器智能選擇重要計算部分,在保持模型性能的同時顯著提升訓(xùn)練效率,已在多個任務(wù)上驗證有效性。