用簡單例子闡述更易理解枯燥無味的定義,本文由淺入深解析兩者的工作機理,為設計程式奠定基礎,主要分兩部分內容:
(i)舉例理解迴圈神經網路(rnn [1], recurrent neural networks)
(ii)舉例理解長短期記憶網路(lstm [2] ,long short-term memory)
rnn為lstm之父,欲求lstm,必先rnn。
(a)rnn定義:
輸入資料為序列,如:「water is hot」, 「i like chinese chess」, 通過前後輸入互相關聯的網路,**或者分類.
(b)舉例理解rnn(batch size =1 )
如圖一, 區別於深度神經網路(dnn),rnn多了一些隱層的輸出。迴圈體現在前後節點的作用是統一的權重(w),神經網路的權重共享(u、v). 以water is hot為例闡述rnn工作原理,詞性標註問題+語義識別 分別表示 序列輸入-單輸出(分類類別) 和 序列輸入-序列輸出(分類類別).
example1 詞性標註問題:看看乙個句子每個單詞是名詞還是動詞。
網路輸入:
10000句類似標註好的句子。
如 water(名) is(動) hot(形). i(名) am(動) a(形) man(名). 。。。
網路訓練過程:
第一時刻,輸入x
1x_1
x1= 00001001(water),標籤y
1y_1
y1:01 (名), 通過網路得到隱層輸出 s1=
f(ux
1+w∗
0+a)
s_1 = f(ux_1+ w*0 +a)
s1=f(
ux1
+w∗0
+a), 整個網路最後的**輸出o1=
f(vs
1+b)
o_1 = f(vs_1 + b)
o1=f(
vs1
+b)。
第二時刻,輸入x2 = 00101001(is), 通過網路得到隱層輸出s2=
f(ux
2+ws
1+a)
s_2 = f(ux_2+ ws_1 +a)
s2=f(
ux2
+ws1
+a)
, 整個網路最後的**輸出o2=
f(vs
2+b)
o_2 = f(vs_2 + b)
o2=f(
vs2
+b)。
第三時刻…等等。 句子有多長, 就迴圈幾次。
損失函式
o 1,
o2,o
3...
o_1,o_2, o_3...
o1,o2
,o3
...
與真實的標註的誤差。
注: 前後兩個時刻的輸入向量維數相同。
example2 語義識別:看看話是罵人還是誇人的
網路輸入:
10000句類似標註完成的句子。
如 you are a really bad man(罵).
you are beautiful(誇)…
網路訓練過程:
網路結構與詞性標註問題相同,但是中間層的輸出 s
1s_1
s1 其實是不需要的,當然這個任務中也不會有對應的標籤。我們其實僅僅需要最後的o
no_n
on來達到看看這句話是罵我呢還是誇我。
損失函式就是o
no_n
on…與真實的標註的誤差。
當然還有 單輸入但是輸出為序列 同理可分析。
(a)lstm定義:
lstm是rnn的son,長江後浪推前浪,lstm看到rnn這個dad記住了太多有的沒的,造成不好的影響(梯度消失or梯度**),於是它向魚取經-7秒記憶三開關**,通過三個開關(又稱作門)來把控要不要資訊。三個開關:遺忘門,輸入門,輸出門。
lstm就比rnn多個cell的機制,如下:
上圖是經典之圖,那一堆公式只要記著乙個原則就行: 記憶或者遺忘的「權重」是0-1之間取值(最好是階躍函式),「資訊」是-1到1之間取值。用tanh做啟用函式的式子都在計算「資訊」,用 σ
\sigma
σ 函式的公式,都在計算權重.
f
ff:遺忘門;
i
ii:輸入門;(這裡為了理解就是0或者1)
o
oo.:輸出門(注意ot=
oto_t=o_t
ot=ot
,列印錯誤);
h
th_t
ht : 是隱層節點的值(相當於rnn圖的s_t)。
c
tc_t
ct : 是cell的縮寫,可以理解成現在的記憶, 腦子裡的東西;
注:可以看出,此時 ct,
htc_t, h_t
ct,ht
共同影響後乙個單詞。
(b)舉例理解lstm
example3 語義識別:看看話是罵人還是誇人的.
網路輸入:
:10000句類似標註完成的句子。
如you are a really bad man(罵).
you are beautiful(誇)…
網路訓練過程:
輸入 x 特徵, y 標籤。
第一時刻,
輸入 x_1= 00021000(you), 計算遺忘門 f_1 與輸入門 i_1, 更新大腦知識 c_1,計算輸出門, 通過輸出門計算隱層神經元節點值h_1。
第二時刻,
輸入 x_2= 00021020(are), 計算遺忘門 f_2 與輸入門 i_2, 更新大腦知識 c_2, 計算輸出門, 通過輸出門和h_0計算隱層神經元節點值h_1。
第三時刻…等等。 句子有多長, 就迴圈幾次。
最終網路的輸出為 y^=
fsof
tmax
(vhn
+b)\hat = f_(vh_n + b)
y^=fs
oftm
ax(
vhn
+b)
損失函式:
y
^\hat
y^與真實的標註 y
yy 的誤差(往往是交叉熵損失函式)。
[1]goodfellow, i., bengio, y., courville, a..deep learning (vol. 1):cambridge:mit press,2016:367-415
[2]schmidhuber, j., 2015. deep learning in neural networks: an overview. neural networks, 61, pp.85-117.
本文部分知識受以下文章啟發,在此由衷感謝以下作者的分享!
簡介)簡介)
梯度具體求解)
快速排序 通俗易懂 例子 優化方案
快速排序思想 排序陣列 下標從l到r 選擇l到r之間任意乙個資料作為povit 分割槽點 遍歷陣列,將小於povit到放左邊,大於povit到放右邊,將povit放中間。處理後,陣列l到r的資料分成了3部分,l到p 1之間到資料都是小於povit的,povit在中間,後面p 1到r的資料都是大於po...
通俗易懂 equals 與 的區別
值型別 int,char,long,boolean等 都是用 判斷相等性。物件引用的話,判斷引用所指的物件是否是同乙個。equals是object的成員函式,有些類會覆蓋 override 這個方法,用於判斷物件的等價性。例如string類,兩個引用所指向的string都是 abc 但可能出現他們實...
volatile的乙個例子 通俗易懂
volatile 關鍵字的兩層語義 一旦乙個共享變數 類的成員變數 類的靜態成員變數 被 volatile 修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是立即可見的。2 禁止進行指令重排序。方式一 變數不使用...