RNN:有梯度消失,沒有辦法長時間記憶,
神經網路是用來特征提取
CNN因為后邊加了一層全連接,才可以去做分類,
RNN和CNN
RNN:處理序列化資料(一句話,一段語音,一段視頻)連續型的,具有記憶性,但是沒有辦法長期記憶,反向可能會導致梯度消失(梯度消失的原因是反向推到引數可能極小接近0)
CNN:第一張圖片和第二張圖片沒有關系,一張張圖片處理,所以不適合用來處理序列化資料(文本之類的)
BPTT:RNN的反向傳播,通過時間步進行反向傳播
RNN優點:可以處理序列化資料,使神經網路具有記憶功能
RNN缺點:如果序列太長可能會導致梯度消失或梯度爆炸,這個原因也使RNN不具備長期記憶功能
x:輸入;h:隱藏層;o:輸出
u包含了很多小w(第一層),v包含了很多小w(第二層), w:權重
output 【-1】 多對一 (一個輸出有用) 文本分類、情感分析
output 所有的 多對多 (多個輸出都有用) 機器翻譯
一對多 所有的 一對多
#回圈神經網路梯度消失原因:
###因為層數太深,后邊的代價調整不到前邊的資訊,產生梯度消失,導致不能長期記憶
RNN鏈式求導:提了兩個
包含累乘的激活函式,
tanh求導:(0-1)
RNN輸入資料維度:(batch_size,seq_legth,hidden_size)批量大小,句子長度,多少維度的向量
nn.dynamic_rnn 動態RNN 回圈呼叫神經單元,(單元,資料,)
major_time=TRUE 會將batch_size和seq_legth調換位置,但是還是三維,
補全0后,參與運算了,權重調整了,不合理,
動態RNN,引數:seq_length:設定好(句子長短不一,需要處理一下,不讓填0的加入運算) 效果:補全的0,不參與運算
全連接就是一層神經網路
seq2seq:(三步)
①經過一個softmax,一個預測資料3維(0,1,2),真實資料是2維(0,1);
②求交叉熵
③求均值
weights=tf.sequence_mask(lengths=[batch_size],dtype=tf.float32)
sequence_loss=tf.contrib.seq2seq.sequence_loss(logits=outputs,targets=y,weights=weights)
有的地方不應該產生代價,
一個串列,每個句子的長度,
LSTM(遺忘門,輸入門,輸出門):引入了一個門和細胞狀態c
門,sigmoid激活函式:0-1,判斷上一個時間步帶的資訊是否有用,
c,把有用的資訊儲存到c中
遺忘門作用物件:細胞狀態c,(判斷c里邊的資訊是否需要忘記)
遺忘門:遺忘過去的資訊,
輸入門:判斷當前的輸入有多少需要更新到細胞狀態c中
遺忘門和輸入門h和x拼接后 為什么sigmoid激活后,值不一樣?
原因:權重不一樣
tanh:提取所有的總特征(等同于一個標準RNN網路)* sigmoid
現在的c:過去有用的,和現在
輸出門:
c里的東西有用,但不一定對下一個ht(輸出)有用,故:
再加一個sigmoid,判斷c里的資訊是否對下一個ht有用,做進一步篩選,
LSTM:
線性變換,不會累乘零點幾,故不容易梯度消失,.
GRU(重置門,更新門)
處理序列化資料的門,lstm的一種變種,
兩個門
重置門:
作用物件:上一個h狀態
作用:哪些資訊需要記住,哪些需要忘記,
更新門:
作用物件:當前的ht,上一時刻作用ht-1
GRU的激活資訊ht-1(新的)和xt,比LSTM的激活資訊ht-1(有用的+沒用的所有資訊)都和xt拼接,
第一個sigmo作用:新的ht-1和xt進行拼接,
第二個sigmoid 兩個作用:判斷過去ht-1和當前ht的資訊是否有用(判斷兩個,因為作用物件是2個),
難點:1- sigmoid 取極端例子,全部都有用,走右邊;之前全部都沒用,走上邊,
wr和wz的權重經過訓練,最開始是隨機的,但是權重會慢慢變,
因為去掉了細胞狀態c,所以new_ht-1的狀態又重新和xt進行了拼接,這一步代替了細胞狀態c作用,
LSTM,GRU的區別
- LSTM有三個門,而GRU有兩個門
- 去掉了細胞單元C
- 輸出的時候取消了二階的非線性函式
LSTM有三個門,GRU只有兩個門,減少了一個tanh函式,從而減少引數,減少運算量
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/384129.html
標籤:AI
上一篇:Alibaba內部的python入門到精通背記手冊+面試寶典,GitHub已爆贊
下一篇:一圖讀懂知識圖譜
