迴圈卷積網路教程1 RNN基礎介紹

2022-07-11 00:27:12 字數 3227 閱讀 5486

卷積神經網路(rnn)是一種流行的網路結構,可以處理很多nlp的任務。儘管它們最近非常流行,但是對於其如何工作原理的解釋是非常少有的。這個是這個教程將要做的事情。接下來要講一下多系列:

1. 介紹rnn(本部分)

2. 利用python和theano實現乙個rnn

3.通過bptt演算法理解後向傳播和梯度消失問題

4.實現乙個gru/lstm rnn

本部分教程將實現乙個rnn語言模型。

應用這個模型有兩個方面的原因:

1)它允許我們評估任意的句子,基於他們在現實生活中有多大的出現的可能性;這給我們乙個語法和語義正確性的衡量方法。這個模型典型應用於機器翻譯系統;

2)乙個語言模型允許我們生成新的文字(我認為這是非常棒的應用)。訓練乙個語言模型基於shakespeare允許我們生成shakespeare類似的文字。這個有趣的發布論證了字元級的語言模型的能力;

我假設你對於基本的卷積網路的框架是熟悉的;如果你不熟,你可能想要從頭開始實現乙個神經網路,它將指導您了解非迴圈網路背後的思想和實現。

什麼是rnn?

rnn背後的原理是利用序列資訊。在乙個傳統的卷積網路中,我們假設的是所有的輸入和輸出都是獨立的。但是對於許多任務來說,這個是乙個非常差勁的假設。如果你想**乙個句子中下乙個單詞,你最好知道這個單詞之前的詞。rnn被稱為recurrent 因為它們對序列的每個元素執行相同的任務,同時輸出依賴於前期的計算。另一種方式思考rnn是他們有記憶,可以捕捉過去計算過的資訊。在理論上來說,rnn可以使用任意長的序列中的資訊,但在實踐中,它們只能向後看幾個步驟(稍後詳細介紹)。典型的rnn是這樣的:

圖 1 遞迴神經網路及其前向計算展開

上面的圖顯示了乙個rnn被展開成乙個完整的網路。展開的意思是我們寫出了完整序列的網路。例如,如果我們關心的序列是乙個包含5個單詞的句子,那麼這個網路將被展開為乙個5層的神經網路,每層對應乙個單詞。rnn計算的公式如下:

有一些需要注意的地方:

rnn可以做什麼?

在許多nlp任務中,神經網路已顯示出巨大的成功。在這一點上,我應該提到最常用的rnns型別是lstm,它在捕獲長期依賴關係方面比普通的rnns要好得多。但是不用擔心,lstms本質上與我們將在本教程中開發的rnn是一樣的,它們只是計算隱藏狀態的方式不同。我們將在後面的文章中更詳細地介紹lstms。下面是一些rnns在nlp中的示例應用(通過非詳盡列表)。

語言模型和文字生成:

給定乙個單詞序列,我們想要**每個單詞出現前乙個單詞的概率。語言模型允許我們衡量乙個句子的可能性,這對於及其翻譯很重要(因為出現頻率高的句子往往是正確的)。能夠**下乙個單詞的乙個***是我們得到了乙個生成模型,它允許我們通過從輸出概率抽樣來生成新的文字。依賴我們的訓練資料,我們可以生成各種各樣的東西。在語言建模,我們的輸入通常是乙個單詞序列(編碼為1 -h),輸出通常是**的單詞。當訓練網路的時候,我們設定

,因為我們想要在t時刻**下乙個單詞。

機器翻譯:

機器翻譯與語言建模的相似之處在於我們的輸入是我們源語言中的一系列單詞。我們想要輸出我們目標語言的單詞序列。乙個關鍵的差異在於我們的輸出只有在完整語句輸入結束後才開始,因為我們翻譯的句子的第乙個單詞可能需要從完整的輸入序列中捕獲的資訊。

圖2. 機器翻譯

語音辨識:

給定來自聲音頻號的輸入序列,我們可以**一系列語音片段及其概率。

描述生成

與卷積神經網路一起,神經網路被用作模型的一部分,用於生成未標記影象的描述。它的工作效果非常好。合併後的模型甚至將生成的單詞與影象中的特徵對應起來。

rnn的訓練:

訓練乙個rnn類似於傳統的神經網路。我們同樣也使用了反向傳播演算法,但是稍微有點變化。由於網路中所有時間步長都共享這些引數,因此每個輸出點的梯度不僅取決於當前時間步長的計算,還取決於之前的時間步長。例如,為了計算t=4時的梯度,我們需要反向傳播3步並將梯度相加。這被稱為時間反向傳播(bptt)。如果這還沒有完整的概念,不要擔心,我們會有乙個完整帖子關於相關的細節。目前而言,只需要知道這個事實:由於所謂的消失/**梯度問題,使用bptt訓練的普通rnns在學習長期依賴(例如,步驟之間相距很遠的依賴)方面存在困難。有一些機制,以及相應的rnn網路型別是專門設計來解決這些問題的。

多年來,研究人員已經開發出更複雜的型別的rnns處理一些原始rnn模型的缺點。我們將討論他們的更多細節在後面的帖子,但我希望這部分作為簡要概述,以便您熟悉的模型的概況。

雙向rnn:

雙向神經網路是基於這樣一種思想,即t時刻的輸出可能不僅依賴於序列中先前的元素,還依賴於未來的元素。例如,要**乙個序列中缺失的單詞,您需要同時檢視左右上下文。雙向網路非常簡單。它們只是兩個重疊在一起的神經網路。然後根據這兩個rnn的隱藏狀態計算輸出。

圖3. 雙向迴圈網路

深度雙向rnn:

deep (bidirectional) rnns

類似於雙向rnns,只有我們現在每個時間步有多個層。在實踐中,這給了我們乙個更高的學習能力(但我們也需要大量的訓練資料)。

lstm網路:

lstm網路現在非常流行,我們在上面簡要地討論過。lstms與rnns沒有根本不同的架構,但是它們使用不同的函式來計算隱藏狀態。lstms中的記憶體稱為cells,您可以將它們視為黑盒,接受前乙個狀態h_和當前輸入x_t作為輸入。在內部,這些 cell 決定哪些要保留(哪些要刪除)記憶體。然後,它們將前一狀態、當前記憶體和輸入組合起來。事實證明,這些型別的單位在捕獲長期依賴時非常有效

總結:

PROTEL網路教程

教程的第1天 學會自己畫簡單的sch檔案 第1課 新建乙個 ddb,新建乙個sch檔案,並且新增畫sch要用到的零件庫 第2課 利用新增好的零件庫,進行畫第乙個可以自動佈線的原理圖 課後補充 sch中一些必須要避免的錯誤 教程的第2天 學會從sch到pcb的轉變,並且進行自動佈線 第一課 建立乙個p...

網路教程 gitee github的基礎使用方法

gitee官方示例 視覺化工具 ubuntu使用git 根據自己的作業系統選擇版本進行安裝 參考文章 更多 cd ssh ssh keygen t rsa c youremail youremail.com generating public private rsa key pair.三次回車即可生...

網路教程 13 深入TCP協議

應用層向tcp層傳送用於網間傳輸的 用8位位元組表示的資料流,然後tcp把資料流分割成適當長度的報文段 通常受該計算機連線的網路的資料鏈路層的最大傳輸單元 mtu 的限制 之後tcp把結果包傳給ip層,由它來通過網路將包傳送給接收端實體的tcp層。tcp為了保證不發生丟包,就給每個包乙個序號,同時序...