RECURRENT NEURAL NETWORKS TUTORIAL
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks, RNNs, 遞歸神經(jīng)網(wǎng)絡(luò))是一種在自然語(yǔ)言處理方面大有前途的模型。但有別于它的流行,我很難找到關(guān)于RNN的原理與實(shí)現(xiàn)的資源。這就是我要寫這篇教程的原因。這是一篇系列教程,我將從如下幾個(gè)方面來(lái)講解,
1. RNN基礎(chǔ) Introduction to RNNs (this post)
2. 使用Python與Theano來(lái)實(shí)現(xiàn)RNN Implementing a RNN using Python and Theano
3. 理解定時(shí)后向傳播算法與梯度消失問(wèn)題 Understanding the Backpropagation Through Time (BPTT) algorithm and the vanishing gradient problem
4. 實(shí)現(xiàn)一個(gè)GRU/LSTM RNN Implementing a GRU/LSTM RNN
在教程中,我們會(huì)實(shí)現(xiàn)一個(gè)基于RNN的語(yǔ)言模型recurrent neural network based language model。語(yǔ)言模型的應(yīng)用將包括兩部分:
1. 允許我們給任意的句子評(píng)分,來(lái)評(píng)價(jià)它是否是一個(gè)真實(shí)的句子。這是對(duì)于語(yǔ)法和語(yǔ)義正確性的一種度量。這類模型往往用作機(jī)器翻譯的一部分。
2. 允許我們生成新的文本(我認(rèn)為這要酷得多)。訓(xùn)練基于莎士比亞的語(yǔ)言模型,使我們可以生成類似莎士比亞的文本。The Unreasonable Effectiveness of Recurrent Neural Networks論證了什么樣的RNN語(yǔ)言模型能夠勝任。
我假設(shè)你已經(jīng)對(duì)基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)有了一定的認(rèn)識(shí)。如果不,請(qǐng)看Implementing A Neural Network From Scratch,它可以指導(dǎo)你理解并實(shí)現(xiàn)一個(gè)非循環(huán)的網(wǎng)絡(luò)。
什么是RNNs?
RNN背后的思想是充分利用順序信息。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,我們假設(shè)所有的輸入(和輸出)是相互獨(dú)立的。但是在很多情況下這是一個(gè)很壞的概念。如果你想預(yù)測(cè)一個(gè)句子中下一個(gè)單詞是什么,你當(dāng)然最好要知道前一個(gè)單詞是什么。RNNs被稱為循環(huán),是因?yàn)樗鼘?duì)序列中的所有元素執(zhí)行相同的任務(wù),每一次輸出都依托于之前的計(jì)算。換一種想法,RNNs擁有對(duì)至今為止計(jì)算過(guò)的信息的“記憶”。理論上,RNNs可以利用任意長(zhǎng)序列上的信息,但在實(shí)際中,它們通常只能回顧之前幾步(稍后詳細(xì)介紹)。典型的RNN是這樣的:
上圖展現(xiàn)了一個(gè)RNN展開(kāi)(unrolled, unfolded)為全連接的形式。通過(guò)展開(kāi)我們,
The above diagram shows a RNN beingunrolled(or unfolded) into a full network. By unrolling we simply mean that we write out the network for the complete sequence. For example, if the sequence we care about is a sentence of 5 words, the network would be unrolled into a 5-layer neural network, one layer for each word. The formulas that govern the computation happening in a RNN are as follows: