更新時(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被稱為循環(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的樣子:
RNN可以做什么?
RNN在許多NLP任務(wù)中取得了巨大成功。
在這個(gè)領(lǐng)域最常用的RNN類型是LSTM,它在捕獲長(zhǎng)期依賴方面要比普通的RNN好得多。但不要擔(dān)心,LSTM和RNN基本相同,它們只是采用不同的方式來(lái)計(jì)算隱藏狀態(tài)。以下是RNP在NLP中的一些示例應(yīng)用。
機(jī)?翻譯
機(jī)?翻譯類似于語(yǔ)言模型,因?yàn)槲覀兊妮斎胧窃凑Z(yǔ)言中的一系列單詞(例如德語(yǔ))。我們希望輸出目標(biāo)語(yǔ)言的一系列單詞(例如英語(yǔ))。關(guān)鍵的區(qū)別是只有輸入完整之后才會(huì)進(jìn)行輸出,因?yàn)槲覀兎g的句子的第一個(gè)單詞可能需要從完整的輸入序列中獲取信息。
語(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)。
訓(xùn)練RNN
訓(xùn)練RNN類似于訓(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步并把梯度相加,這種被稱為基于時(shí)間的反向傳播算法(BPTT)。由于存在梯度消失/梯度爆炸的問(wèn)題,用BPTT訓(xùn)練的普通RNN難以學(xué)習(xí)期依賴(例如相距很遠(yuǎn)的步驟之間的依賴性)。但是存在一些處理這些問(wèn)題的方法,并且某些類型的RNN(如 LSTM)是專門為解決這些問(wèn)題而設(shè)計(jì)的。
RNN擴(kuò)展
多年來(lái),研究人員開發(fā)了更復(fù)雜的RNN來(lái)解決普通RNN模型的一些缺點(diǎn)。這里會(huì)簡(jiǎn)要概述,以便您熟悉模型的分類。
雙向RNN基于以下思想:時(shí)間t處的輸出可能不僅取決于序列中的先前元素,還取決于未來(lái)元素。
例如,要預(yù)測(cè)序列中缺少的單詞,您需要查看左側(cè)和右側(cè)上下文。雙向RNN非常簡(jiǎn)單。它們只是兩個(gè)堆疊在一起的RNN。然后基于兩個(gè)RNN的隱藏狀態(tài)計(jì)算輸出。
深度(雙向)RNN類似于雙向RNN,只是我們現(xiàn)在每個(gè)時(shí)間步有多個(gè)層。在實(shí)踐中,這為我們提供了更高的學(xué)習(xí)能力(但需要大量的訓(xùn)練數(shù)據(jù))。
猜你喜歡: