導航:首頁 > 網路安全 > 如何學習循環神經網路

如何學習循環神經網路

發布時間:2022-03-07 01:37:55

Ⅰ 循環神經網路RNN怎麼訓練

循環神經⽹絡是為更好地處理時序信息而設計的

Ⅱ 關於循環神經網路RNN,隱藏層是怎麼來的

RNN的隱藏層也可以叫循環核,簡單來說循環核循環的次數叫時間步,循環核的個數就是隱藏層層數。

循環核可以有兩個輸入(來自樣本的輸入x、來自上一時間步的激活值a)和兩個輸出(輸出至下一層的激活值h、輸出至本循環核下一時間步的激活值a),輸入和輸出的形式有很多變化,題主想了解可以上B站搜索「吳恩達 深度學習」其中第五課是專門對RNN及其拓展進行的講解,通俗易懂。

B站鏈接:網頁鏈接

Ⅲ 有卷積神經網路/循環神經網路的matlab編程書籍嗎,求推薦,能分享最好

推薦書籍:《MATLAB深度學習 機器學習、神經網路與人工智慧》
作 者 :(美)Phil Kim著;敖富江,杜靜,周浩譯
出版發行 : 北京:清華大學出版社 , 2018.03
本書共6章,內容包括:機器學習、神經網路、多層神經網路的訓練、
神經網路與分類問題、深度學習、卷積神經網路。

Ⅳ 入門 | 一文簡述循環神經網路

入門 | 一文簡述循環神經網路

本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 RNN 實現示例。

什麼是循環神經網路(RNN)?它們如何運行?可以用在哪裡呢?本文試圖回答上述這些問題,還展示了一個 RNN 實現 demo,你可以根據自己的需要進行擴展。

循環神經網路架構

基礎知識。Python、CNN 知識是必備的。了解 CNN 的相關知識,是為了與 RNN 進行對比:RNN 為什麼以及在哪些地方比 CNN 更好。

我們首先從「循環」(Recurrent)這個詞說起。為什麼將其稱為循環?循環的意思是:

經常或重復出現

將這類神經網路稱為循環神經網路是因為它對一組序列輸入重復進行同樣的操作。本文後續部分將討論這種操作的意義。

我們為什麼需要 RNN?

也許你現在想的是,已經有像卷積網路這樣表現非常出色的網路了,為什麼還需要其他類型的網路呢?有一個需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關知識,我們先來講一下序列。

序列是相互依賴的(有限或無限)數據流,比如時間序列數據、信息性的字元串、對話等。在對話中,一個句子可能有一個意思,但是整體的對話可能又是完全不同的意思。股市數據這樣的時間序列數據也是,單個數據表示當前價格,但是全天的數據會有不一樣的變化,促使我們作出買進或賣出的決定。

當輸入數據具有依賴性且是序列模式時,CNN 的結果一般都不太好。CNN 的前一個輸入和下一個輸入之間沒有任何關聯。所以所有的輸出都是獨立的。CNN 接受輸入,然後基於訓練好的模型輸出。如果你運行了 100 個不同的輸入,它們中的任何一個輸出都不會受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨立的(有些情況下與之後的單詞也是獨立的,這里暫不討論)。所以你需要有一些基於之前輸出的偏向。這就是需要 RNN 的地方。RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。

本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。

何時使用 RNN?

RNN 可用於許多不同的地方。下面是 RNN 應用最多的領域。

1. 語言建模和文本生成

給出一個詞語序列,試著預測下一個詞語的可能性。這在翻譯任務中是很有用的,因為最有可能的句子將是可能性最高的單片語成的句子。

2. 機器翻譯

將文本內容從一種語言翻譯成其他語言使用了一種或幾種形式的 RNN。所有日常使用的實用系統都用了某種高級版本的 RNN。

3. 語音識別

基於輸入的聲波預測語音片段,從而確定詞語。

4. 生成圖像描述

RNN 一個非常廣泛的應用是理解圖像中發生了什麼,從而做出合理的描述。這是 CNN 和 RNN 相結合的作用。CNN 做圖像分割,RNN 用分割後的數據重建描述。這種應用雖然基本,但可能性是無窮的。

5. 視頻標記

可以通過一幀一幀地標記視頻進行視頻搜索。

深入挖掘

本文按照以下主題進行。每一部分都是基於之前的部分進行的,所以不要跳著讀。

前饋網路循環網路循環神經元基於時間的反向傳播(BPTT)RNN 實現

前饋網路入門

前饋網路通過在網路的每個節點上做出的一系列操作傳遞信息。前饋網路每次通過每個層直接向後傳遞信息。這與其他循環神經網路不同。一般而言,前饋網路接受一個輸入並據此產生輸出,這也是大多數監督學習的步驟,輸出結果可能是一個分類結果。它的行為與 CNN 類似。輸出可以是以貓狗等作為標簽的類別。

前饋網路是基於一系列預先標注過的數據訓練的。訓練階段的目的是減少前饋網路猜類別時的誤差。一旦訓練完成,我們就可以用訓練後的權重對新批次的數據進行分類。

一個典型的前饋網路架構

還有一件事要注意。在前饋網路中,無論在測試階段展示給分類器的圖像是什麼,都不會改變權重,所以也不會影響第二個決策。這是前饋網路和循環網路之間一個非常大的不同。

與循環網路不同,前饋網路在測試時不會記得之前的輸入數據。它們始終是取決於時間點的。它們只會在訓練階段記得歷史輸入數據。

循環網路

也就是說,循環網路不僅將當前的輸入樣例作為網路輸入,還將它們之前感知到的一並作為輸入。

我們試著建立了一個多層感知器。從簡單的角度講,它有一個輸入層、一個具備特定激活函數的隱藏層,最終可以得到輸出。

多層感知器架構示例

如果在上述示例中的層數增加了,輸入層也接收輸入。那麼第一個隱藏層將激活傳遞到下一個隱藏層上,依此類推。最後到達輸出層。每一個隱藏層都有自己的權重和偏置項。現在問題變成了我們可以輸入到隱藏層嗎?

每一層都有自己的權重(W)、偏置項(B)和激活函數(F)。這些層的行為不同,合並它們從技術層面上講也極具挑戰性。為了合並它們,我們將所有層的權重和偏置項替換成相同的值。如下圖所示:

現在我們就可以將所有層合並在一起了。所有的隱藏層都可以結合在一個循環層中。所以看起來就像下圖:

我們在每一步都會向隱藏層提供輸入。現在一個循環神經元存儲了所有之前步的輸入,並將這些信息和當前步的輸入合並。因此,它還捕獲到一些當前數據步和之前步的相關性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類在生活中做決策的方式。我們將當前數據和近期數據結合起來,幫助解決手頭的特定問題。這個例子很簡單,但從原則上講這與人類的決策能力是一致的。這讓我非常想知道我們作為人類是否真的很智能,或者說我們是否有非常高級的神經網路模型。我們做出的決策只是對生活中收集到的數據進行訓練。那麼一旦有了能夠在合理時間段內存儲和計算數據的先進模型和系統時,是否可以數字化大腦呢?所以當我們有了比大腦更好更快的模型(基於數百萬人的數據訓練出的)時,會發生什麼?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點:人總是被自己的行為所困擾。

我們用一個例子來闡述上面的解釋,這個例子是預測一系列字母後的下一個字母。想像一個有 8 個字母的單詞 namaskar。

namaskar(合十禮):印度表示尊重的傳統問候或姿勢,將手掌合起置於面前或胸前鞠躬。

如果我們在向網路輸入 7 個字母後試著找出第 8 個字母,會發生什麼呢?隱藏層會經歷 8 次迭代。如果展開網路的話就是一個 8 層的網路,每一層對應一個字母。所以你可以想像一個普通的神經網路被重復了多次。展開的次數與它記得多久之前的數據是直接相關的。

循環神經網路的運作原理

循環神經元

這里我們將更深入地了解負責決策的實際神經元。以之前提到的 namaskar 為例,在給出前 7 個字母後,試著找出第 8 個字母。輸入數據的完整詞彙表是 {n,a,m,s,k,r}。在真實世界中單詞或句子都會更復雜。為了簡化問題,我們用的是下面這個簡單的詞彙表。

在上圖中,隱藏層或 RNN 塊在當前輸入和之前的狀態中應用了公式。在本例中,namaste 的字母 n 前面什麼都沒有。所以我們直接使用當前信息推斷,並移動到下一個字母 a。在推斷字母 a 的過程中,隱藏層應用了上述公式結合當前推斷 a 的信息與前面推斷 n 的信息。輸入在網路中傳遞的每一個狀態都是一個時間步或一步,所以時間步 t 的輸入是 a,時間步 t-1 的輸入就是 n。將公式同時應用於 n 和 a 後,就得到了一個新狀態。

用於當前狀態的公式如下所示:

h_t 是新狀態,h_t-1 是前一個狀態。x_t 是時間 t 時的輸入。在對之前的時間步應用了相同的公式後,我們已經能感知到之前的輸入了。我們將檢查 7 個這樣的輸入,它們在每一步的權重和函數都是相同的。

現在試著以簡單的方式定義 f()。我們使用 tanh 激活函數。通過矩陣 W_hh 定義權重,通過矩陣 W_xh 定義輸入。公式如下所示:

上例只將最後一步作為記憶,因此只與最後一步的數據合並。為了提升網路的記憶能力,並在記憶中保留較長的序列,我們必須在方程中添加更多的狀態,如 h_t-2、h_t-3 等。最後輸出可以按測試階段的計算方式進行計算:

其中,y_t 是輸出。對輸出與實際輸出進行對比,然後計算出誤差值。網路通過反向傳播誤差來更新權重,進行學習。本文後續部分會對反向傳播進行討論。

基於時間的反向傳播演算法(BPTT)

本節默認你已經了解了反向傳播概念。如果需要對反向傳播進行深入了解,請參閱鏈接:?http://cs231n.github.io/optimization-2/?。

現在我們了解了 RNN 是如何實際運作的,但是在實際工作中如何訓練 RNN 呢?該如何決定每個連接的權重呢?如何初始化這些隱藏單元的權重呢?循環網路的目的是要准確地對序列輸入進行分類。這要靠誤差值的反向傳播和梯度下降來實現。但是前饋網路中使用的標准反向傳播無法在此應用。

與有向無環的前饋網路不同,RNN 是循環圖,這也是問題所在。在前饋網路中可以計算出之前層的誤差導數。但 RNN 的層級排列與前饋網路並不相同。

答案就在之前討論過的內容中。我們需要展開網路。展開網路使其看起來像前饋網路就可以了。

展開 RNN

在每個時間步取出 RNN 的隱藏單元並復制。時間步中的每一次復制就像前饋網路中的一層。在時間步 t+1 中每個時間步 t 層與所有可能的層連接。因此我們對權重進行隨機初始化,展開網路,然後在隱藏層中通過反向傳播優化權重。通過向最低層傳遞參數完成初始化。這些參數作為反向傳播的一部分也得到了優化。

展開網路的結果是,現在每一層的權重都不同,因此最終會得到不同程度的優化。無法保證基於權重計算出的誤差是相等的。所以每一次運行結束時每一層的權重都不同。這是我們絕對不希望看到的。最簡單的解決辦法是以某種方式將所有層的誤差合並到一起。可以對誤差值取平均或者求和。通過這種方式,我們可以在所有時間步中使用一層來保持相同的權重。

RNN 實現

本文試著用 Keras 模型實現 RNN。我們試著根據給定的文本預測下一個序列。

代碼地址:?https://gist.github.com/.git?

該模型是 Yash Katariya 建的。我對該模型做了一些細微的改動以適合本文的要求。

Ⅳ 循環神經網路 擅長解決什麼樣的問題

RNN建立在與FNN相同的計算單元上,兩者之間區別在於:組成這些神經元相互關聯的架構有所不同。FNN是建立在層面之上,其中信息從輸入單元向輸出單元單向流動,在這些連通模式中並不存在不定向的循環。盡管大腦的神經元確實在層面之間的連接上包含有不定向循環,我們還是加入了這些限制條件,以犧牲計算的功能性為代價來簡化這一訓練過程。因此,為了創建更為強大的計算系統,我們允許RNN打破這些人為設定強加性質的規定:RNN無需在層面之間構建,同時定向循環也會出現。事實上,神經元在實際中是允許彼此相連的。

Ⅵ 如何實現模擬人類視覺注意力的循環神經網路

如果你的式子寫對了,那出來的結果肯定和sim函數輸出的結果是一樣的。%計算S1與S2層的輸出A1=tansig(W1*p,B1);A2=purelin(W2*A1,B2);隱層為tansig函數,輸出層簡單的線性相加,再附上閾值,不可能會錯的。sim函數的原理也就是如此。

Ⅶ 如何使用tensorflow構建,訓練和改進循環神經網路

我們利用 TensorFlow 提供的 tf.train.AdamOptimizer 來控制學習速度。AdamOptimizer 通過使用動量(參數的移動平均數)來改善傳統梯度下降,促進超參數動態調整。我們可以通過創建標簽錯誤率的摘要標量來跟蹤丟失和錯誤率:
# Create a placeholder for the summary statistics
with tf.name_scope("accuracy"):
# Compute the edit (Levenshtein) distance of the top path
distance =tf.edit_distance(tf.cast(self.decoded[0], tf.int32), self.targets)
# Compute the label error rate (accuracy)
self.ler =tf.rece_mean(distance, name='label_error_rate')
self.ler_placeholder =tf.placeholder(dtype=tf.float32, shape=[])
self.train_ler_op =tf.summary.scalar("train_label_error_rate", self.ler_placeholder)
self.dev_ler_op =tf.summary.scalar("validation_label_error_rate", self.ler_placeholder)
self.test_ler_op =tf.summary.scalar("test_label_error_rate", self.ler_placeholder)
如何改進 RNN
現在我們構建了一個簡單的 LSTM RNN 網路,下一個問題是:如何繼續改進它?幸運的是,在開源社區里,很多大公司都開源了自己的最新語音識別模型。在 2016 年 9 月,微軟的論文《The Microsoft 2016 Conversational Speech Recognition System》展示了在 NIST 200 Switchboard 數據中單系統殘差網路錯誤率 6.9% 的新方式。他們在卷積+循環神經網路上使用了幾種不同的聲學和語言模型。微軟的團隊和其他研究人員在過去 4 年中做出的主要改進包括:

在基於字元的 RNN 上使用語言模型

使用卷積神經網路(CNN)從音頻中獲取特徵

使用多個 RNN 模型組合

值得注意的是,在過去幾十年裡傳統語音識別模型獲得的研究成果,在目前的深度學習語音識別模型中仍然扮演著自己的角色。

修改自: A Historical Perspective of Speech Recognition, Xuedong Huang, James Baker, Raj Reddy Communications of the ACM, Vol. 57 No. 1, Pages 94-103, 2014
訓練你的第一個 RNN 模型
在本教程的 Github 里,作者提供了一些介紹以幫助讀者在 TensorFlow 中使用 RNN 和 CTC 損失函數訓練端到端語音識別系統。大部分事例數據來自 LibriVox。數據被分別存放於以下文件夾中:

Train: train-clean-100-wav (5 examples)

Test: test-clean-wav (2 examples)

Dev: dev-clean-wav (2 examples)

當訓練這些示例數據時,你會很快注意到訓練數據的詞錯率(WER)會產生過擬合,而在測試和開發集中詞錯率則有 85% 左右。詞錯率不是 100% 的原因在於每個字母有 29 種可能性(a-z、逗號、空格和空白),神經網路很快就能學會:

某些字元(e,a,空格,r,s,t)比其他的更常見

輔音-母音-輔音是英文的構詞特徵

MFCC 輸入聲音信號振幅特徵的增加只與字母 a-z 有關

Ⅷ 如何使用TensorFlow構建,訓練和改進循環神經網路

我們利用 TensorFlow 提供的 tf.train.AdamOptimizer 來控制學習速度。AdamOptimizer 通過使用動量(參數的移動平均數)來改善傳統梯度下降,促進超參數動態調整。我

Ⅸ 如何理解循環神經網路實現預測

神經系統(nervous system)是機體內起主導作用的系統,分為中樞神經系統和周圍神經系統兩大部分。
神經系統是人體內起主導作用的功能調節系統。人體的結構與功能均極為復雜,體內各器官、系統的功能和各種生理過程都不是各自孤立地進行,而是在神經系統的直接或間接調節控制下,互相聯系、相互影響、密切配合,使人體成為一個完整統一的有機體,實現和維持正常的生命活動。同時,人體又是生活在經常變化的環境中,神經系統能感受到外部環境的變化對體內各種功能不斷進行迅速而完善的調整,使人體適應體內外環境的變化。可見,神經系統在人體生命活動中起著主導的調節作用,人類的神經系統高度發展,特別是大腦皮層不僅進化成為調節控制的最高中樞,而且進化成為能進行思維活動的器官。因此,人類不但能適應環境,還能認識和改造世界。
神經系統由中樞部分及其外周部分所組成。中樞部分包括腦和脊髓,分別位於顱腔和椎管內,兩者在結構和功能上緊密聯系,組成中樞神經系統。外周部分包括12對腦神經和31對脊神經,它們組成外周神經系統。外周神經分布於全身,把腦和脊髓與全身其他器官聯系起來,使中樞神經系統既能感受內外環境的變化(通過傳入神經傳輸感覺信息),又能調節體內各種功能(通過傳出神經傳達調節指令),以保證人體的完整統一及其對環境的適應。神經系統的基本結構和功能單位是神經元(神經細胞),而神經元的活動和信息在神經系統中的傳輸則表現為一定的生物電變化及其傳播。例如,外周神經中的傳入神經纖維把感覺信息傳入中樞,傳出神經纖維把中樞發出的指令信息傳給效應器,都是以神經沖動的形式傳送的,而神經沖動就是一種稱為動作電位的生物電變化,是神經興奮的標志。
中樞神經通過周圍神經與人體其他各個器官、系統發生極其廣泛復雜的聯系。神經系統在維持機體內環境穩定,保持機體完整統一性及其與外環境的協調平衡中起著主導作用。在社會勞動中,人類的大腦皮層得到了高速發展和不斷完善,產生了語言、思維、學習、記憶等高級功能活動,使人不僅能適應環境的變化,而且能認識和主動改造環境。內、外環境的各種信息,由感受器接受後,通過周圍神經傳遞到腦和脊髓的各級中樞進行整合,再經周圍神經控制和調節機體各系統器官的活動,以維持機體與內、外界環境的相對平衡。神經系統是由神經細胞(神經元)和神經膠質所組成。
中樞神經通過周圍神經與人體其他各個器官、系統發生極其廣泛復雜的聯系。神經系統在維持機體內環境穩定,保持機體完整統一性及其與外環境的協調平衡中起著主導作用。在社會勞動中,人類的大腦皮層得到了高速發展和不斷完善,產生了語言、思維、學習、記憶等高級功能活動,使人不僅能適應環境的變化,而且能認識和主動改造環境。內、外環境的各種信息,由感受器接受後,通過周圍神經傳遞到腦和脊髓的各級中樞進行整合,再經周圍神經控制和調節機體各系統器官的活動,以維持機體與內、外界環境的相對平衡。神經系統是由神經細胞(神經元)和神經膠質所組成。
中樞神經系統central nervous system包括位於顱腔內的腦和位於椎管內的脊髓。
腦brain是中樞神經系統的頭端膨大部分,位於顱腔內。人腦可分為端腦、間腦、中腦、腦橋、小腦和延髓六個部分。通常把中腦、腦橋和延髓合稱為腦干,延髓向下經枕骨大孔連接脊髓。腦的內腔稱為腔室,內含腦脊髓液。端腦包括左、右大腦半球。每個半球表層為灰質所覆叫大腦皮質。人類的大腦皮質在長期的進化過程中高度發展,它不僅是人類各種機能活動的高級中樞,也是人類思維和意識活動的物質基礎。
脊髓spinal cord呈前後扁的圓柱體,位於椎管內,上端在平齊枕骨大孔處與延髓相續,下端終於第1腰椎下緣水平。脊髓前、後面的兩側發出許多條細的神經纖維束,叫做根絲。一定范圍的根絲向外方集中成束,形成脊神經的前根和後根。前、後根在椎間孔處合並形成脊神經。脊髓以每對脊神經根根絲的出入范圍為准,劃分為31個節段,即頸髓8節(C1-8),胸髓12節(T1-12),腰髓5節(L1-5),骶髓(S1-5),尾髓1節(Co1)。
周圍神經系統peripheral nervous system聯絡於中樞神經和其它各系統器官之間,包括與腦相連的12對腦神經cranial nerves和與脊髓相連的31對脊神經spinal nerves。按其所支配的周圍器官的性質可分為分布於體表和骨骼肌的軀體神經系和分布於內臟、心血管和腺體的內臟神經系。

閱讀全文

與如何學習循環神經網路相關的資料

熱點內容
如何關閉全家網路 瀏覽:115
希沃白板設置網路共享 瀏覽:646
為何無法訪問到移動網路 瀏覽:768
oppo如何查看網路連接了多少個 瀏覽:454
手機網路數據信號為黃色 瀏覽:929
網路安全身邊事小漫畫 瀏覽:771
蘋果手機信號好但是網路卡怎麼辦 瀏覽:213
網路信號好但上不了網怎麼辦 瀏覽:36
實施計算機網路安全防護措施 瀏覽:440
網路下載的文檔如何刪除空白行 瀏覽:693
以前都是有線網路哪裡都可以用 瀏覽:686
信息網路安全有風險的特殊字元 瀏覽:319
為什麼我的手機微信沒網路 瀏覽:89
網路信息安全是哪個部門 瀏覽:477
無線網路限制頁面 瀏覽:940
廣電網路路由器連接電腦 瀏覽:22
共享樹以網路 瀏覽:362
延遲相同的情況下如何選擇網路 瀏覽:208
電腦網路主要性能指標 瀏覽:128
電腦無線網路軟體下載 瀏覽:887

友情鏈接