RNN的引數共享

2021-09-18 03:39:22 字數 1052 閱讀 9884

rnn簡介

迴圈神經網路是一類用於處理序列資料的神經網路。就像卷積網路是專門處理網格化資料x(如乙個影象)的神經網路,迴圈神經網路是專門用於處理序列x(1),...,x(τ)的神經網路。正如卷積網路可以很容易地擴充套件到具有很大寬度和高度的影象,以及處理大小可變的影象,迴圈網路可以擴充套件到更長的序列,且大多數迴圈網路可以處理可變長度的序列。

從多層網路出發到迴圈網路,我們需要利用20世紀80年代機器學習和統計模型早期思想的優點:在模型的不同部分共享引數。引數共享使得模型能夠擴充套件到不同形式的樣本(這裡指不同長度的樣本)並進行泛華。如果我們在每個時間點都有乙個單獨的引數,不但不能泛化到訓練時沒有見過的序列長度,也不能在時間上共享不同序列長度和不同位置的統計強度。

為了簡單起見,我們說的rnn是指在序列上的操作,並且該序列在時刻t(從1到τ)包含向量x(t)。在實際情況中,迴圈網路通常在序列上的小批量上操作,並且小批量的每項具有不同序列長度τ。此外,rnn可以應用於跨越兩個維度的空間資料(如影象)。當應用於涉及時間的資料,並且將整個序列提供給網路之前就能觀察到整個序列時,網路可具有關於時間向後的連線。

需要注意的是,那對每乙個詞做處理的 cell 來說,他並不是只有 1 個神經元的,而是 n 個 hidden units,這個在 tensorflow 中是可以設定的,可以看成是神經網路的寬度!

rnn 的訓練

對於rnn的訓練和對傳統的 ann 訓練一樣。同樣使用 bp 誤差反向傳播演算法,不過有一點區別。如果將 rnn 進行網路展開,那麼引數 w,u,v 是共享的,而傳統神經網路卻不是的。並且在使用梯度下降演算法中,每一步的輸出不僅依賴當前步的網路,並且還用前面若干步網路的狀態。比如,在 t=4 時,我們還需要向後傳遞三步,以及後面的三步都需要加上各種的梯度。該學習演算法稱為 backpropagation through time (bptt)。需要注意的是,在普通 rnn 訓練中,bptt 無法解決長時依賴問題(即當前的輸出與前面很長的一段序列有關,一般超過十步就無能為力了),因為 bptt 會帶來所謂的梯度消失或梯度**問題(the vanishing/exploding gradient problem)。當然,有很多方法去解決這個問題,如 lstm 便是專門應對這種問題的。

RNN 1 引數共享 網路的展開 常見應用

迴圈神經網路的主要用途是處理和 序列資料。從網路結構上,迴圈神經網路會記憶之前的資訊,並利用之前的資訊影響後面節點的輸出。引數共享思想 由於模組a中的運算和變數在不同時刻是相同的,因此迴圈神經網路理論上可以看作是同一神經網路被無限複製的結果。迴圈神經網路在不同的位置共享引數,從而使有限的引數處理任意...

共享引數sharedpreferences

sharedprefences是乙個輕量級的儲存類,特別適合於儲存軟體配置引數 使用sharedprefences儲存資料,其背後是用xml 存放資料,檔案存放在 data data shared prefs目錄下 api中sharedprefences的說明,是儲存一種鍵值對應的資料 api中提供...

RNN應用 基於RNN的語言模型

rnn迴圈神經網路,具有處理序列資料的能力,也就是前面的資料跟後面的資料出現順序是有關係的。以下內容來自 我 昨天 上學 遲到 了 神經網路的輸出如下圖所示 其中,s和e是兩個特殊的詞,分別表示乙個序列的開始和結束。使用這種向量化方法,我們就得到了乙個高維 稀疏的向量 稀疏是指絕大部分元素的值都是0...