Pytorch实现基本循环神经网络RNN (3)
1.47.Pytorch實(shí)現(xiàn)基本循環(huán)神經(jīng)網(wǎng)絡(luò)RNN (3)
Recurrent Neural networks(Rumelhart, 1986)主要用來(lái)處理序列型數(shù)據(jù),具有對(duì)以往數(shù)據(jù)的記憶功能。下圖所示,輸入為input和一個(gè)狀態(tài)Hidden0, 輸出為output和hidden1.
一般地,對(duì)輸入到RNN進(jìn)行處理的第t個(gè)數(shù)據(jù),也就是第t時(shí)刻,輸出的隱藏狀態(tài)可以表示為:
在RNN對(duì)序列數(shù)據(jù)進(jìn)行處理時(shí),采用參數(shù)共享機(jī)制,即權(quán)重是相同的。RNN有很多變體,上述的是最簡(jiǎn)單的一種形式,中間也可以輸入y(t)。標(biāo)準(zhǔn)RNN如下:
對(duì)時(shí)刻t,更新的方程為:
在實(shí)際中使用nn.RNN()模式即可實(shí)現(xiàn)標(biāo)準(zhǔn)RNN的調(diào)用,下面通過(guò)講解函數(shù)中的參數(shù)來(lái)具體講解RNN的實(shí)用。nn.RNA有如下參數(shù):
input_size:輸入x 的特征數(shù)量
hidden_size:隱藏狀態(tài)h 的特征數(shù)量
num_layers:網(wǎng)絡(luò)層數(shù),默認(rèn)為1層。若2層,兩個(gè)RNN單元進(jìn)行堆疊,第2個(gè)RNN單元將第1個(gè)RNN單元的h 作為輸入。
nonlinearity:實(shí)用tanh或ReLU,默認(rèn)是tanh
bias:False代表不使用偏置b i h b_{ih}bih和b h h b_{hh}bhh,默認(rèn)為T(mén)rue。
batch_first:決定輸入數(shù)據(jù)的維度順序。默認(rèn)輸入是(seq,batch,feature),分別是RNN序列長(zhǎng)度,批量數(shù),特征維度。True表示(batch,seq,feature).
dropout:接收一個(gè)0~1的數(shù)值,會(huì)在網(wǎng)絡(luò)除最后一層之外的其他輸出層加上dropout層,默認(rèn)為0
bidirectional:如果是True,表示雙向的RNN。
維度流程詳解:
建立了一個(gè)堆疊2層的RNN,可通過(guò)如下的屬性獲得權(quán)重和偏置參數(shù):
RNN.weight_ih_l[k]:表示第k kk層的input-hidden權(quán)重。如果k = 0 k=0k=0,表示第0層維度為(hidden_size,input_size),其他層的維度為(hidden_size,num_directions*hidden_size),接收第k ? 1 k-1k?1層傳來(lái)的hidden特征。
RNN.weight_hh_l[k]: 表示第k kk層的hidden-hidden權(quán)重,維度是(hidden_size,hidden_size),接收第t ? 1 t-1t?1時(shí)刻第k kk層的hidden特征。
RNN.bias_ih_l[k]: 表示第k kk層的input-hidden的偏置,維度為(hidden_size)
RNN.bias_hh_l[k]: 表示第k kk層的hidden-hidden的偏置,維度為(hidden_size)
如果誤差為負(fù)對(duì)數(shù)似然,則誤差為:
RNN的缺點(diǎn):
根據(jù)前面的介紹可以了解RNN對(duì)以往數(shù)據(jù)的具有記憶性,但是存在的問(wèn)題就是具有遺忘性,總是更加清楚地記得最近處理的記憶而遺忘之前發(fā)生的事情,只能很好地解決短時(shí)依賴(lài)的問(wèn)題。因?yàn)樘荻仍诜聪騻鞑サ臅r(shí)候, 初始階段的數(shù)據(jù)產(chǎn)生的梯度會(huì)由于指數(shù)級(jí)的相乘而很小。
總結(jié)
以上是生活随笔為你收集整理的Pytorch实现基本循环神经网络RNN (3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中国银行新易贷怎么申请
- 下一篇: 信用卡的有效期是什么意思