全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是什么?可以做什么?

更新時(shí)間:2020-07-09 來(lái)源:黑馬程序員 瀏覽量:

什么是RNN?

RNN的思想是利用序列化的信息。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,我們假設(shè)所有輸入和輸出彼此獨(dú)立。但對(duì)于許多任務(wù)而言,這個(gè)假設(shè)有問(wèn)題。例如你想預(yù)測(cè)句子中的下一個(gè)單詞,就需要知道它前面有哪些單詞。

RNN被稱(chēng)為循環(huán),因?yàn)樗鼘?duì)序列列的每個(gè)元素執(zhí)行相同的任務(wù),并且基于先前的計(jì)算進(jìn)行輸出。RNN的另一個(gè)優(yōu)點(diǎn)是它具有“記憶”,它可以收集到目前為止已經(jīng)計(jì)算的信息。理論上,RNN可以在任意長(zhǎng)的序列中使用信息,但實(shí)際使用中僅僅往回記錄幾步。這是典型的RNN的樣子:

1594281105997_神經(jīng)網(wǎng)絡(luò)RNN.jpg

1594281115608_神經(jīng)網(wǎng)絡(luò)RNN1.jpg

RNN可以做什么?

RNN在許多NLP任務(wù)中取得了巨大成功。 在這個(gè)領(lǐng)域最常用的RNN類(lèi)型是LSTM,它在捕獲長(zhǎng)期依賴(lài)方面要比普通的RNN好得多。但不要擔(dān)心,LSTM和RNN基本相同,它們只是采用不同的方式來(lái)計(jì)算隱藏狀態(tài)。以下是RNP在NLP中的一些示例應(yīng)用。

1594281125607_神經(jīng)網(wǎng)絡(luò)RNN1-1.jpg


機(jī)?翻譯

機(jī)?翻譯類(lèi)似于語(yǔ)言模型,因?yàn)槲覀兊妮斎胧窃凑Z(yǔ)言中的一系列單詞(例如德語(yǔ))。我們希望輸出目標(biāo)語(yǔ)言的一系列單詞(例如英語(yǔ))。關(guān)鍵的區(qū)別是只有輸入完整之后才會(huì)進(jìn)行輸出,因?yàn)槲覀兎g的句子的第一個(gè)單詞可能需要從完整的輸入序列中獲取信息。

1594281142409_神經(jīng)網(wǎng)絡(luò)RNN2.jpg

 

語(yǔ)音識(shí)別
給定來(lái)自聲波的聲學(xué)信號(hào)作為輸入序列,我們可以預(yù)測(cè)一系列語(yǔ)音片段及其概率。


生成圖像描述
RNN作為模型的一部分與卷積神經(jīng)網(wǎng)絡(luò)一起生成未標(biāo)記圖像的描述。這個(gè)組合模型非常令人驚訝的,結(jié)果很不不錯(cuò)。 組合模型甚至可以把生成的單詞與圖像中找到的特征對(duì)應(yīng)起來(lái)。

1594281156270_神經(jīng)網(wǎng)絡(luò)RNN3.jpg

 


訓(xùn)練RNN

訓(xùn)練RNN類(lèi)似于訓(xùn)練傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)。我們也使用反向傳播算法,但有點(diǎn)調(diào)整。由于參數(shù)由?絡(luò)中的所有步驟共享,因此每個(gè)輸出的梯度不僅取決于當(dāng)前時(shí)刻的計(jì)算結(jié)果,還取決于先前的步驟的計(jì)算結(jié)果。例如,為了計(jì)算t=4處的梯度,我們需要反向傳播3步并把梯度相加,這種被稱(chēng)為基于時(shí)間的反向傳播算法(BPTT)。由于存在梯度消失/梯度爆炸的問(wèn)題,用BPTT訓(xùn)練的普通RNN難以學(xué)習(xí)期依賴(lài)(例如相距很遠(yuǎn)的步驟之間的依賴(lài)性)。但是存在一些處理這些問(wèn)題的方法,并且某些類(lèi)型的RNN(如 LSTM)是專(zhuān)門(mén)為解決這些問(wèn)題而設(shè)計(jì)的。

 

RNN擴(kuò)展

多年來(lái),研究人員開(kāi)發(fā)了更復(fù)雜的RNN來(lái)解決普通RNN模型的一些缺點(diǎn)。這里會(huì)簡(jiǎn)要概述,以便您熟悉模型的分類(lèi)。

雙向RNN基于以下思想:時(shí)間t處的輸出可能不僅取決于序列中的先前元素,還取決于未來(lái)元素。 例如,要預(yù)測(cè)序列中缺少的單詞,您需要查看左側(cè)和右側(cè)上下文。雙向RNN非常簡(jiǎn)單。它們只是兩個(gè)堆疊在一起的RNN。然后基于兩個(gè)RNN的隱藏狀態(tài)計(jì)算輸出。

1594281168618_神經(jīng)網(wǎng)絡(luò)RNN4.jpg


深度(雙向)RNN類(lèi)似于雙向RNN,只是我們現(xiàn)在每個(gè)時(shí)間步有多個(gè)層。在實(shí)踐中,這為我們提供了更高的學(xué)習(xí)能力(但需要大量的訓(xùn)練數(shù)據(jù))。

1594281177687_神經(jīng)網(wǎng)絡(luò)RNN5.jpg

1594281186309_神經(jīng)網(wǎng)絡(luò)RNN6.jpg


猜你喜歡:

Python視頻教程:19天入門(mén)python編程 

黑馬程序員Python基礎(chǔ)教程下載 

Python+人工智能培訓(xùn)課程

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!