循環(huán)神經(jīng)網(wǎng)絡(luò)是什么?有哪些應(yīng)用?怎么去使用它?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
什么是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),如何使用它們?本文所討論的就是關(guān)于循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)內(nèi)容,RNN 是變得日益流行的深度學(xué)習(xí)模型。本文不打算深入講解其晦澀的數(shù)學(xué)原理,而是旨在讓讀者獲得關(guān)于RNN 的抽象理解。
一般的循環(huán)神經(jīng)網(wǎng)絡(luò)信息循環(huán)神經(jīng)網(wǎng)絡(luò)出現(xiàn)于20世紀(jì) 80年代,最近由于網(wǎng)絡(luò)設(shè)計(jì)的推進(jìn)和圖形處理單元上計(jì)算能力的提升,循環(huán)神經(jīng)網(wǎng)絡(luò)變得越來(lái)越流行。這種網(wǎng)絡(luò)尤其是對(duì)序列數(shù)據(jù)非常有用,因?yàn)槊總€(gè)神經(jīng)元或者單元能用它的內(nèi)部存儲(chǔ)來(lái)保存之前輸入的相關(guān)信息。在語(yǔ)言的案例中,“I had washed my house”這句話的意思與“I had my house washed”大不相同。這就能讓網(wǎng)絡(luò)獲取對(duì)該表達(dá)更深的理解。
注意到這點(diǎn)很重要,因?yàn)楫?dāng)閱讀一個(gè)句子甚至是一個(gè)人時(shí),你就是要從它之前的單詞中提出每個(gè)詞的語(yǔ)境。
一個(gè)卷起的循環(huán)神經(jīng)網(wǎng)絡(luò)
一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)里有很多個(gè)環(huán),這些環(huán)能允許帶著信息通過(guò)神經(jīng)元,同時(shí)在輸入中讀取它們。
一個(gè)展開(kāi)的循環(huán)神經(jīng)網(wǎng)絡(luò)
在這些圖表中, xt是某些輸入,A 是這個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)的一部分,而 ht 是輸出?;旧?,你能輸入句子中的詞或者甚至是像 xt 這樣的字符串中的字符,然后通過(guò)該循環(huán)神經(jīng)網(wǎng)絡(luò)它會(huì)得出一個(gè) ht。
目標(biāo)是用 ht 作為輸出,并將它與你的測(cè)試數(shù)據(jù)(通常是原始數(shù)據(jù)的一個(gè)小子集)比較。然后你會(huì)得出你的誤差率。比較完之后,有了誤差率,你就能使用一種叫隨時(shí)間反向傳播(BPTT)的技術(shù)。BPTT 返回檢查這個(gè)網(wǎng)絡(luò),并基于誤差率調(diào)整權(quán)重。這樣也調(diào)整了這個(gè)網(wǎng)絡(luò),并讓它學(xué)習(xí)去做得更好。
理論上說(shuō),循環(huán)神經(jīng)網(wǎng)絡(luò)能從句子開(kāi)頭處理語(yǔ)境,它允許對(duì)一個(gè)句子末尾的詞進(jìn)行更精確的預(yù)測(cè)。在實(shí)踐中,對(duì)于 vanilla RNN 來(lái)說(shuō),這并不是真正需要的。這就是為什么 RNN 在出現(xiàn)之后淡出研究圈一段時(shí)間直到使用神經(jīng)網(wǎng)絡(luò)中的長(zhǎng)短期記憶(LSTM)單元取得了一些不錯(cuò)的結(jié)果后又重新火起來(lái)的主要原因。加上 LATM 后的網(wǎng)絡(luò)就像是加了一個(gè)記憶單元,能記住輸入的最初內(nèi)容的語(yǔ)境。
這些少量記憶單元能讓 RNN 更加精確,而且是這種模型流行的最新原因。這些記憶單元允許跨輸入以便記住上下文語(yǔ)境。這些單元中,LSTM 與 門(mén)控循環(huán)單元(GRU)是當(dāng)下使用比較廣泛的兩個(gè),后者的計(jì)算效率更高,因?yàn)樗鼈冋加玫挠?jì)算機(jī)內(nèi)存比較少。
循環(huán)神經(jīng)網(wǎng)絡(luò)的應(yīng)用RNN 有很多應(yīng)用。一個(gè)不錯(cuò)的應(yīng)用是與自然語(yǔ)言處理(NLP)的合作。網(wǎng)上已經(jīng)有很多人證明了 RNN,他們創(chuàng)造出了令人驚訝的模型,這些模型能表示一種語(yǔ)言模型。這些語(yǔ)言模型能采納像莎士比亞的詩(shī)歌這樣的大量輸入,并在訓(xùn)練這些模型后生成它們自己的莎士比亞式的詩(shī)歌,而且這些詩(shī)歌很難與原作區(qū)分開(kāi)來(lái)。
下面是莎士比亞式詩(shī)歌。
PANDARUS:
Alas, I think he shall be come approached and the day
When little srain would be attain‘d into being never fed,
And who is but a chain and subjects of his death,
I should not sleep.
Second Senator:
They are away this miseries, produced upon my soul,
Breaking and strongly should be buried, when I perish
The earth and thoughts of many states.
DUKE VINCENTIO:
Well, your wit is in the care of side and that.
Second Lord:
They would be ruled after this chamber, and
my fair nues begun out of the fact, to be conveyed,
Whose noble souls I’ll have the heart of the wars.
Clown:
Come, sir, I will make did behold your worship.
VIOLA:
I‘ll drink it.
這首詩(shī)完全是一個(gè) RNN 寫(xiě)出來(lái)的。這里有一篇好文章更深入地介紹了 Char RNNs 。
這種特殊類(lèi)型的 RNN 是在一個(gè)文本數(shù)據(jù)集中喂養(yǎng)的,它要逐字讀取輸入。與一次投喂一個(gè)詞相比,這種方式讓人驚訝的地方是這個(gè)網(wǎng)絡(luò)能創(chuàng)造出它自己獨(dú)特的詞,這些詞是用于訓(xùn)練的詞匯中沒(méi)有的。
一個(gè) char RNN 的例子
這張從以上參考文章中摘取的圖表展示了這個(gè)模型將會(huì)如何預(yù)測(cè)“Hello”這個(gè)詞。這張圖很好地將網(wǎng)絡(luò)如何逐字采納每個(gè)詞并預(yù)測(cè)下一個(gè)字符的可能性可視化了。
另一個(gè)讓人驚喜的 RNN 應(yīng)用是機(jī)器翻譯。這種方法很有趣,因?yàn)樗枰瑫r(shí)訓(xùn)練兩個(gè) RNN。在這些網(wǎng)絡(luò)中,輸入的是成對(duì)的不同語(yǔ)言的句子。例如,你能給這個(gè)網(wǎng)絡(luò)輸入意思相同的一對(duì)英法兩種語(yǔ)言的句子,其中英語(yǔ)是源語(yǔ)言,法語(yǔ)作為翻譯語(yǔ)言。有了足夠的訓(xùn)練后,你給這個(gè)網(wǎng)絡(luò)一個(gè)英語(yǔ)句子,它就能把它翻譯成法語(yǔ)!這個(gè)模型被稱(chēng)為序列到序列模型(Sequence to Sequences model )或者編碼-解碼模型(Encoder- Decoder model)。
英法翻譯的例子
這張圖表展示了信息流是如何通過(guò)編碼-解碼模型的,它用了一個(gè)詞嵌入層( word embedding layer )來(lái)獲取更好的詞表征。一個(gè)詞嵌入層通常是 GloVe 或者 Word 2 Vec 算法,能批量采納詞,并創(chuàng)建一個(gè)權(quán)重矩陣,讓相似的詞相互連接起來(lái)。用一個(gè)嵌入層通常會(huì)讓你的 RNN 更加精確,因?yàn)樗芨玫谋碚飨嗨频脑~是什么樣的,以便減少網(wǎng)絡(luò)的推斷。
結(jié)論RNN 現(xiàn)在很流行。它們是自然語(yǔ)言處理中最有效的模型之一。這些模型會(huì)一直出現(xiàn)新的應(yīng)用。