更新時間:2020-07-09 來源:黑馬程序員 瀏覽量:
什么是RNN?
RNN的思想是利用序列化的信息。在傳統(tǒng)的神經(jīng)網(wǎng)絡中,我們假設所有輸入和輸出彼此獨立。但對于許多任務而言,這個假設有問題。例如你想預測句子中的下一個單詞,就需要知道它前面有哪些單詞。
RNN被稱為循環(huán),因為它對序列列的每個元素執(zhí)行相同的任務,并且基于先前的計算進行輸出。RNN的另一個優(yōu)點是它具有“記憶”,它可以收集到目前為止已經(jīng)計算的信息。理論上,RNN可以在任意長的序列中使用信息,但實際使用中僅僅往回記錄幾步。這是典型的RNN的樣子:
RNN可以做什么?
RNN在許多NLP任務中取得了巨大成功。
在這個領(lǐng)域最常用的RNN類型是LSTM,它在捕獲長期依賴方面要比普通的RNN好得多。但不要擔心,LSTM和RNN基本相同,它們只是采用不同的方式來計算隱藏狀態(tài)。以下是RNP在NLP中的一些示例應用。
機?翻譯
機?翻譯類似于語言模型,因為我們的輸入是源語言中的一系列單詞(例如德語)。我們希望輸出目標語言的一系列單詞(例如英語)。關(guān)鍵的區(qū)別是只有輸入完整之后才會進行輸出,因為我們翻譯的句子的第一個單詞可能需要從完整的輸入序列中獲取信息。
語音識別
給定來自聲波的聲學信號作為輸入序列,我們可以預測一系列語音片段及其概率。
生成圖像描述
RNN作為模型的一部分與卷積神經(jīng)網(wǎng)絡一起生成未標記圖像的描述。這個組合模型非常令人驚訝的,結(jié)果很不不錯。
組合模型甚至可以把生成的單詞與圖像中找到的特征對應起來。
訓練RNN
訓練RNN類似于訓練傳統(tǒng)的神經(jīng)網(wǎng)絡。我們也使用反向傳播算法,但有點調(diào)整。由于參數(shù)由?絡中的所有步驟共享,因此每個輸出的梯度不僅取決于當前時刻的計算結(jié)果,還取決于先前的步驟的計算結(jié)果。例如,為了計算t=4處的梯度,我們需要反向傳播3步并把梯度相加,這種被稱為基于時間的反向傳播算法(BPTT)。由于存在梯度消失/梯度爆炸的問題,用BPTT訓練的普通RNN難以學習期依賴(例如相距很遠的步驟之間的依賴性)。但是存在一些處理這些問題的方法,并且某些類型的RNN(如 LSTM)是專門為解決這些問題而設計的。
RNN擴展
多年來,研究人員開發(fā)了更復雜的RNN來解決普通RNN模型的一些缺點。這里會簡要概述,以便您熟悉模型的分類。
雙向RNN基于以下思想:時間t處的輸出可能不僅取決于序列中的先前元素,還取決于未來元素。
例如,要預測序列中缺少的單詞,您需要查看左側(cè)和右側(cè)上下文。雙向RNN非常簡單。它們只是兩個堆疊在一起的RNN。然后基于兩個RNN的隱藏狀態(tài)計算輸出。
深度(雙向)RNN類似于雙向RNN,只是我們現(xiàn)在每個時間步有多個層。在實踐中,這為我們提供了更高的學習能力(但需要大量的訓練數(shù)據(jù))。
猜你喜歡: