機器學習004 迴圈神經網路實現與文字分類問題

2021-08-21 04:29:11 字數 1941 閱讀 7380

本週主要目標在於實現乙個可用的迴圈神經網路。主要內容包括:迴圈神經網路以及求導(bptt)、多層迴圈神經網路、文字向量化以及乙個小的文字分類實踐。實現過程中使用了 numpy 用於矩陣運算。文章目的在於脫離程式語言束縛去學習演算法,因此可以使用其他程式語言,同時語言中應該包含以下元件:矩陣乘法、矩陣分片。

正文沒有使用機器學習庫,但由於 python 語言的速度原因,為了更快獲得結果,使用了 tensorflow 進行了預訓練,這個過程不是必須的。文末會附這部分**。

推薦閱讀文章:hochreiter s, schmidhuber j. long short-term memory[j]. neural computation, 1997, 9(8):1735-1780.

資料簡介:語料之中包含:酒店、電腦(筆記本)與書籍等領域。是包含正負樣本的平衡資料集。

5.1 迴圈神經網路正向傳播過程

$$\beginh_t=f(x_t,h_)\\\rightarrow h_t=tanh(concat[x_t, h_]\cdot w+b)\\\rightarrow tanh(x_t\cdot w1+h_\cdot w2+b)\end$$(1.1)

其中 $x_t$ 的形式為 [batchsize, features1],$h_t$ 的形式為 [batchsize, features2]。多層 rnn 網路可以在輸出的基礎上繼續加入 rnn 函式:

$$\beginh^l_t=f(x_t,h^l_)\\h^_t=f(h^l_t, h^_)\end$$(1.2)

對於簡單的 rnn 來說,狀態向量與輸出相同。

5.2 文字向量化正向傳播

迴圈神經網路(rnn)產生之初就是為了處理文字問題。但是神經網路本身只能處理浮點型資料,因此需要將文字轉化為適合於神經網路處理的向量。對於 1.1 式之中的 $x_t$ 為向量化後的文字,其是固定長度的(本文設定為 128)。下面對文字向量化過程進行敘述:

對文字每個字元進行單獨編號 -> 整形數字 -> onehot 向量 -> 乘以降維矩陣 $w_$(n 為字元個數)

在處理文字過程之中我們需要對所有文字之中不重複的字元(或詞)進行單獨編號(整形數字),編號是從 0 開始連續的。處理文字過程之中將文字轉化為相應的整形數字表示。處理完成後將整形數字使用 onehot 向量的方式進行表示。此時向量的維度很高(中文幾千個字元,onehot 向量長度也是如此)。為了將輸入轉化為適合處理的向量長度,需要乘以乙個降維矩陣 $w_$,從而形成 $x_t$。這是對於向量一種線性降維的方式。

5.2 反向傳播過程

$$\begine^l_=\frac}=\frac}\circ f'(x_t,h^l_)\frac\cdot w2+b)}}=e^l_t f' w2&(a)\\\delta w1=\sum_t (x_t)^t\cdot (e_t^lf')&(b)\\\delta w2=\sum_t (h_)^t\cdot (e_t^lf')&(c)\\e^_=\frac_}=\frac_}\circ f'(h_t^l,h^_)\frac\cdot w2+b)}^l}=e^_t f' w1&(d)\end$$(1.3)

1.3-a 稱之為時間反向傳播演算法 bptt,1.3-c 為層間傳播。可訓練引數為 1.3-bc。實際上傳統的 rnn 網路與全鏈結網路並無不同。只是新增了時間反向傳播項。

6.1 迴圈神經網路層

6.2 文字向量化層

6.3 使用 rnn 網路最後一層輸出用於後續處理

6.4 網路其他部分

7.1 文字分類網路模型

8.1 使用 tensorflow 驗證程式正確性

使用 tensorflow 作為驗證程式,驗證方法為輸出計算導數:

驗證分程式僅用於演示思路。

8.2 tensorflow 預訓練網路

閱讀全文:

迴圈神經網路 機器學習 迴圈神經網路知識要點

迴圈神經網路特點是可以挖掘出資料序列之間的關係資訊,實際使用中每乙個樣本的輸入是資料序列,也就是一系列的資料,其中的每個資料是乙個時間步。rnn層也是由乙個或者多個神經元組成的,每個神經元的輸入由兩部分構成,一部分是序列資料中的某乙個資料,另一部分是這個資料的前乙個資料經過迴圈層神經元時,神經元輸出...

《吳恩達機器學習》學習筆記004 神經網路

假使我們採用的都是50x50畫素的小,並且我們將所有的畫素視為特徵,則會有 2500個特徵,如果我們要進一步將兩兩特徵組合構成乙個多項式模型,則會有約 2 個 接近3百萬個 特徵。普通的邏輯回歸模型,不能有效地處理這麼多的特徵,這時候我們需要神經網路。當資料的特徵太多,比如影象識別,一般就不能使用邏...

迴圈神經網路學習

1.迴圈神經網路的應用 2.迴圈神經網路vs卷積神經網路 迴圈神經網路所做的任務 rnn和cnn的區別 1.基本結構 隱層的資料被存入到乙個 記憶 單元中 存在 記憶 中的資料會被作為另外乙個輸入與原始輸入一起輸入到神經網路中。2.深度rnn 3.雙向rnn 結構 優勢 當需要判斷乙個詞的語義時,需...