日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > 循环神经网络 >内容正文

循环神经网络

循环神经网络(RNN)相关知识

發(fā)布時(shí)間:2023/12/19 循环神经网络 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 循环神经网络(RNN)相关知识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • RNN概述
  • 前向傳播公式
  • 通過時(shí)間反向傳播(BPTT)
  • RNN確定序列長(zhǎng)度方式
  • 其他RNN結(jié)構(gòu)
  • 基于RNN的應(yīng)用
    • 1,序列數(shù)據(jù)的分析
    • 2,序列數(shù)據(jù)的轉(zhuǎn)換
    • 3,序列數(shù)據(jù)的生成
  • RNN的不足
    • 1,從隱藏變量h角度來(lái)看
    • 2,從梯度傳播角度來(lái)看

RNN概述

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),該序列在時(shí)刻 t(從1 到 τ)包含向量 x(t)x^{(t) }x(t)。典型的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:

RNN每個(gè)時(shí)間步都需要將 x 值的輸入序列映射到輸出值 o 的對(duì)應(yīng)序列。其中 o 是未歸一化的對(duì)數(shù)概率,并且在損失函數(shù) L 內(nèi)部計(jì)算 y^=softmax(x)\hat y = softmax(x)y^?=softmax(x)。損失函數(shù) L 用于衡量每個(gè) o 與相應(yīng)的訓(xùn)練目標(biāo) y 的距離。

RNN輸入到隱含單元的連接由權(quán)重矩陣 U 參數(shù)化,隱含單元與隱含單元連接由權(quán)重矩陣 W 參數(shù)化,隱含單元到輸出節(jié)點(diǎn)的連接由權(quán)重矩陣 V 參數(shù)化。從上面的圖中也可以看出,與CNN類似,在RNN中同樣有參數(shù)共享的思想(共享了參數(shù)W,U,VW,U,VWUV等)。這使得模型的泛化能力更強(qiáng),因?yàn)槟P筒粫?huì)依賴于特定位置上的輸入xxx。例如考慮這兩句話:“I went to Nepal in 2009’’ 和 “In 2009, I went to Nepal.” ,他們表達(dá)的意思完全相同,但是時(shí)間2009出現(xiàn)在不同的地方,RNN的參數(shù)共享機(jī)制可以更有效的提取到這個(gè)時(shí)間信息。參數(shù)共享也允許模型泛化到?jīng)]有見過的序列長(zhǎng)度,并且訓(xùn)練模型所需的訓(xùn)練樣本遠(yuǎn)遠(yuǎn)少于不帶參數(shù)共享的模型。

當(dāng)訓(xùn)練循環(huán)網(wǎng)絡(luò)根據(jù)過去的信息去預(yù)測(cè)未來(lái)的信息時(shí),網(wǎng)絡(luò)通常要使用隱含狀態(tài) h (t) 來(lái)表示時(shí)刻 t 之前的序列信息:
h(t)=g(t)(x(t),x(t?1),x(t?2),…,x(2),x(1))=f(h(t?1),x(t);θ).\begin{aligned} h^{(t)} &=g^{(t)}(x^{(t)},x^{(t-1)},x^{(t-2)},\dots,x^{(2)}, x^{(1)}) \\ & = f(h^{(t-1)}, x^{(t)} ; \theta) . \end{aligned} h(t)?=g(t)(x(t),x(t?1),x(t?2),,x(2),x(1))=f(h(t?1),x(t);θ).?
函數(shù)g(t)g^{(t)}g(t)將過去的序列(x(t),x(t?1),x(t?2),…,x(2),x(1))(x^{(t)},x^{(t-1)}, x^{(t-2)},\dots,x^{(2)}, x^{(1)})(x(t),x(t?1),x(t?2),,x(2),x(1))作為輸入來(lái)生成當(dāng)前的隱含狀態(tài)h(t)h(t)h(t)。實(shí)際上,我們可以遞歸調(diào)用函數(shù)fff來(lái)完成隱含狀態(tài)的計(jì)算。這么做主要有兩個(gè)優(yōu)點(diǎn):

  • 無(wú)論序列的長(zhǎng)度如何,模型始終具有相同的輸入數(shù)據(jù)。因?yàn)樗魂P(guān)注給定輸x(t)x^{(t)}x(t)后,從一種狀態(tài)h(t?1)h(t-1)h(t?1)到另一種狀態(tài)h(t)h(t)h(t)的轉(zhuǎn)移, 而不是在可變長(zhǎng)度的歷史輸入數(shù)據(jù)x(t?1),x(t?2),…,x(2),x(1)x^{(t-1)},x^{(t-2)},\dots,x^{(2)}, x^{(1)}x(t?1),x(t?2),,x(2),x(1)上的操作。
  • 我們可以在每個(gè)時(shí)間步(ttt時(shí)刻)使用相同參數(shù)的狀態(tài)轉(zhuǎn)移函數(shù)fff
  • 在不同的NLP場(chǎng)景中,h(t) 需要保存的信息也不同。例如在詞性標(biāo)注任務(wù)中,h(t) 更多的是要保存前一個(gè)單詞的信息;而在機(jī)器翻譯任務(wù)中,則需要保存輸入序列的所有信息。

    前向傳播公式

    上面的圖中沒有指明激活函數(shù),假設(shè)使用tanhtanhtanh作為激活函數(shù),并且假設(shè)輸出值是離散的,例如用于預(yù)測(cè)類別。一種表示離散變量的方式是:把輸出 o 作為離散變量每種可能值的非標(biāo)準(zhǔn)化對(duì)數(shù)概率。然后,我們可以應(yīng)用 softmax 函數(shù)獲得標(biāo)準(zhǔn)化后概率的輸出向量y^\hat yy^?

    RNN從特定的初始狀態(tài) h (0) 開始前向傳播。從 t = 1 到 t = τ 的每個(gè)時(shí)間步,我們應(yīng)用以下更新方程:
    a(t)=b+Wh(t?1)+Ux(t)h(t)=tanh?(a(t))o(t)=c+Vh(t)\begin{aligned} &\mathbf a^{(t)} = \mathbf b + \mathbf W \mathbf h^{(t-1)} + \mathbf U \mathbf x^{(t)} \\ &\mathbf h^{(t)} = \tanh(\mathbf a^{(t)}) \\ &\mathbf o^{(t)} = \mathbf c + \mathbf V \mathbf h^{(t)} \\ \end{aligned} ?a(t)=b+Wh(t?1)+Ux(t)h(t)=tanh(a(t))o(t)=c+Vh(t)?

    y^(t)=softmax(o(t))=eo(t)∑t=1τeo(t)\hat {\mathbf y} ^{(t)} = softmax(\mathbf o^{(t)}) = \frac{e^{o^{(t)}}}{\sum_{t=1}^\tau e^{o^{(t)}}} \\ y^?(t)=softmax(o(t))=t=1τ?eo(t)eo(t)?

    其中的參數(shù)的偏置向量 b 和 c 連同權(quán)重矩陣 U、V 和 W,分別對(duì)應(yīng)于輸入到隱藏單元、
    隱藏單元到輸出和隱藏單元到隱藏單元的連接。這個(gè)循環(huán)網(wǎng)絡(luò)將一個(gè)輸入序列映射到相同長(zhǎng)度的輸出序列。與 x 序列配對(duì)的 y 的總損失就是所有時(shí)間步的損失之和,例如定義損失L為所有時(shí)間步的負(fù)對(duì)數(shù)似然函數(shù):
    L({x(1),…,x(τ)},{y(1),…,y(τ)})=∑tL(t)=?∑tlog?Pmodel(y(t)∣{x(1),…,x(τ)})\begin{aligned} &L(\{x^{(1)},\ldots,x^{(\tau)}\},\{y^{(1)},\ldots,y^{(\tau)}\}) \\ &= \sum_{t} L^{(t)} \\ &= -\sum_{t} \log P_{model}(y^{(t)}|\{x^{(1)},\ldots,x^{(\tau)}\}) \end{aligned} ?L({x(1),,x(τ)},{y(1),,y(τ)})=t?L(t)=?t?logPmodel?(y(t){x(1),,x(τ)})?
    了解正向傳播的計(jì)算內(nèi)容之后,就可以討論通過時(shí)間反向傳播算法來(lái)更新網(wǎng)絡(luò)參數(shù)了。

    通過時(shí)間反向傳播(BPTT)

    回顧之前的計(jì)算圖:

    對(duì)于每一個(gè)節(jié)點(diǎn) N,我們需要先 N 后面的節(jié)點(diǎn)的梯度,然后遞歸地計(jì)算梯度 ?NL? _N L?N?L。我們從最后一個(gè)節(jié)點(diǎn)開始遞歸:
    ?L?L(t)=1\frac{\partial L}{\partial L^{(t)}} = 1 ?L(t)?L?=1
    觀察正向傳播的計(jì)算公式,不難發(fā)現(xiàn) L(t)L^{(t)}L(t)是關(guān)于y^(t)\hat {\mathbf y} ^{(t)}y^?(t)的函數(shù),y^(t)\hat {\mathbf y} ^{(t)}y^?(t)softmaxsoftmaxsoftmax的結(jié)果, 而softmaxsoftmaxsoftmax是關(guān)于 o(t)o^{(t)}o(t)的函數(shù)。求LLL對(duì)非標(biāo)準(zhǔn)化對(duì)數(shù)概率 o(t)o^{(t)}o(t)求偏導(dǎo)(相關(guān)求導(dǎo)過程可以參考Softmax求導(dǎo)),得到:
    (?o(t)L)i=?L?oi(t)=?L?L(t)?L(t)?y^i(t)?y^i(t)?oi(t)={y^i(t)?1,yi(t)=labely^i(t)?0,yi(t)≠label\begin{aligned} (\nabla_{\mathbf o^{(t)}} L)_i &= \frac{\partial L}{\partial o_{i}^{(t)}}\\ &= \frac{\partial L}{\partial L^{(t)}} \frac{\partial L^{(t)}}{\partial \hat {\mathbf y} ^{(t)}_i} \frac{\partial \hat {\mathbf y} ^{(t)}_i}{\partial o_{i}^{(t)}} \\ &= \begin{cases} \hat {y}_i ^{(t)} - 1 , \qquad {y}_i ^{(t)} =label\\ \hat {y}_i ^{(t)} - 0, \qquad {y}_i ^{(t)} \ne label \end{cases} \end{aligned} (?o(t)?L)i??=?oi(t)??L?=?L(t)?L??y^?i(t)??L(t)??oi(t)??y^?i(t)??={y^?i(t)??1,yi(t)?=labely^?i(t)??0,yi(t)??=label??
    從序列的末尾開始,反向進(jìn)行計(jì)算。在最后的時(shí)間步 τ,只有 o (τ) 依賴于h (τ) ,不存在h (τ+1)依賴于h (τ) ,因此這個(gè)梯度很簡(jiǎn)單。由o(t)=c+Vh(t)\mathbf o^{(t)} = \mathbf c + \mathbf V \mathbf h^{(t)}o(t)=c+Vh(t),可以知道:
    ?h(τ)L=?o(τ)?h(τ)?o(τ)L=VT?o(τ)L\nabla_{\mathbf h^{(\tau)}}L = \frac{\partial o^{(\tau)}}{\partial h^{(\tau)}}\nabla_{\mathbf o^{(\tau)}} L = \mathbf V^T \nabla_{\mathbf o^{(\tau)}} L ?h(τ)?L=?h(τ)?o(τ)??o(τ)?L=VT?o(τ)?L
    然后我們可以從時(shí)刻 t = τ ? 1 到 t = 1 反向迭代,通過時(shí)間反向傳播梯度。由下面的式子:
    a(t)=b+Wh(t?1)+Ux(t)h(t)=tanh?(a(t))o(t)=c+Vh(t)\mathbf a^{(t)} = \mathbf b + \mathbf W \mathbf h^{(t-1)} + \mathbf U \mathbf x^{(t)} \\ \mathbf h^{(t)} = \tanh(\mathbf a^{(t)}) \\ \mathbf o^{(t)} = \mathbf c + \mathbf V \mathbf h^{(t)} a(t)=b+Wh(t?1)+Ux(t)h(t)=tanh(a(t))o(t)=c+Vh(t)
    不難發(fā)現(xiàn)當(dāng)t < τ時(shí), o (t) 和 h (t+1) 都依賴于h (t) 。因此,它的梯度由兩個(gè)部分組成:
    ?h(t)L=(?h(t+1)?h(t))?(?h(t+1)L)+(?o(t)?h(t))?(?o(t)L)=W?(?h(t+1)L)diag?(1?(h(t+1))2)+V?(?o(t)L)\begin{array}{l} \nabla_{h^{(t)}} L=\left(\frac{\partial \boldsymbol{h}^{(t+1)}}{\partial \boldsymbol{h}^{(t)}}\right)^{\top}\left(\nabla_{\boldsymbol{h}^{(t+1)}} L\right)+\left(\frac{\partial \boldsymbol{o}^{(t)}}{\partial \boldsymbol{h}^{(t)}}\right)^{\top}\left(\nabla_{\boldsymbol{o}^{(t)}} L\right) \\ =\boldsymbol{W}^{\top}\left(\nabla_{\boldsymbol{h}^{(t+1)}} L\right) \operatorname{diag}\left(1-\left(\boldsymbol{h}^{(t+1)}\right)^{2}\right)+\boldsymbol{V}^{\top}\left(\nabla_{\boldsymbol{o}^{(t)}} L\right) \end{array} ?h(t)?L=(?h(t)?h(t+1)?)?(?h(t+1)?L)+(?h(t)?o(t)?)?(?o(t)?L)=W?(?h(t+1)?L)diag(1?(h(t+1))2)+V?(?o(t)?L)?
    其中:
    tanh?′(x)=1?(tanh(x))2\tanh'(x) = 1- (tanh(x))^2 tanh(x)=1?(tanh(x))2

    ?h(t+1)?h(t)=?tanh?(b+Wh(t)+Ux(t+1))?h(t)=WTdiag(1?(h(t+1))2)\begin{aligned} \frac{\partial \boldsymbol{h}^{(t+1)}}{\partial\boldsymbol{h}^{(t)}} &= \frac{\partial \tanh(\mathbf b + \mathbf W \boldsymbol h^{(t)} + \mathbf U \mathbf x^{(t+1)} )}{\partial\boldsymbol{h}^{(t)}} \\ &= \mathbf W^T diag(1-(\boldsymbol h^{(t+1)})^2) \end{aligned} ?h(t)?h(t+1)??=?h(t)?tanh(b+Wh(t)+Ux(t+1))?=WTdiag(1?(h(t+1))2)?

    基于前面的步驟,接下來(lái)進(jìn)行參數(shù)的跟新:
    ?cL=∑t(?o(t)?c)??o(t)L=∑t?o(t)L?bL=∑t(?h(t)?b(t))??h(t)L=∑tdiag?(1?(h(t))2)?h(t)L?VL=∑t∑i(?L?oi(t))?Voi(t)=∑t(?o(t)L)h(t)??W=∑t∑i(?L?hi(t))?W(t)hi(t)=∑tdiag?(1?(h(t))2)(?h(t)L)h(t?1)??UL=∑t∑i(?L?hi(t))?U(t)hi(t)=∑tdiag?(1?(h(t))2)(?h(t)L)x(t)?\begin{aligned} \nabla_{c} L &=\sum_{t}\left(\frac{\partial \boldsymbol{o}^{(t)}}{\partial \boldsymbol{c}}\right)^{\top} \nabla_{\boldsymbol{o}^{(t)}} L=\sum_{t} \nabla_{\boldsymbol{o}^{(t)}} L \\ \nabla_{\boldsymbol{b}} L &=\sum_{t}\left(\frac{\partial \boldsymbol{h}^{(t)}}{\partial \boldsymbol{b}^{(t)}}\right)^{\top} \nabla_{\boldsymbol{h}^{(t)}} L=\sum_{t} \operatorname{diag}\left(1-\left(\boldsymbol{h}^{(t)}\right)^{2}\right) \nabla_{\boldsymbol{h}^{(t)}} L \\ \nabla_{\boldsymbol{V}} L &=\sum_{t} \sum_{i}\left(\frac{\partial L}{\partial o_{i}^{(t)}}\right) \nabla_{\boldsymbol{V}} o_{i}^{(t)}=\sum_{t}\left(\nabla_{o^{(t)}} L\right) \boldsymbol{h}^{(t)^{\top}} \\ \nabla_{\boldsymbol{W}} &=\sum_{t} \sum_{i}\left(\frac{\partial L}{\partial h_{i}^{(t)}}\right) \nabla_{\boldsymbol{W}^{(t)}} h_{i}^{(t)} \\ &=\sum_{t} \operatorname{diag}\left(1-\left(\boldsymbol{h}^{(t)}\right)^{2}\right)\left(\nabla_{\boldsymbol{h}^{(t)}} L\right) \boldsymbol{h}^{(t-1)^{\top}} \\ \nabla_{U} L &=\sum_{t} \sum_{i}\left(\frac{\partial L}{\partial h_{i}^{(t)}}\right) \nabla_{\boldsymbol{U}^{(t)}} h_{i}^{(t)} \\ &=\sum_{t} \operatorname{diag}\left(1-\left(\boldsymbol{h}^{(t)}\right)^{2}\right)\left(\nabla_{\boldsymbol{h}^{(t)}} L\right) \boldsymbol{x}^{(t)^{\top}} \end{aligned} ?c?L?b?L?V?L?W??U?L?=t?(?c?o(t)?)??o(t)?L=t??o(t)?L=t?(?b(t)?h(t)?)??h(t)?L=t?diag(1?(h(t))2)?h(t)?L=t?i?(?oi(t)??L?)?V?oi(t)?=t?(?o(t)?L)h(t)?=t?i?(?hi(t)??L?)?W(t)?hi(t)?=t?diag(1?(h(t))2)(?h(t)?L)h(t?1)?=t?i?(?hi(t)??L?)?U(t)?hi(t)?=t?diag(1?(h(t))2)(?h(t)?L)x(t)??

    RNN確定序列長(zhǎng)度方式

    第一種是添加一個(gè)表示序列末端的特殊符號(hào)。在訓(xùn)練集中,我們將該符號(hào)作為序列的一個(gè)額外成員,即緊跟每個(gè)訓(xùn)練樣本 x (τ) 之后。

    第二種選擇是在模型中引入一個(gè)額外的Bernoulli輸出,表示在每個(gè)時(shí)間步?jīng)Q定繼續(xù)或停止。相比向詞匯表增加一個(gè)額外符號(hào),這種方法更普遍,因?yàn)樗m用于任何RNN。在這種方法中,sigmoid被訓(xùn)練為最大化正確預(yù)測(cè)的對(duì)數(shù)似然,即在每個(gè)時(shí)間步序列決定結(jié)束或繼續(xù)。

    第三種是將一個(gè)額外的輸出添加到模型并預(yù)測(cè)整數(shù) τ 本身。模型可以預(yù)測(cè) τ 的值,然后使用 τ 步有價(jià)值的數(shù)據(jù)。這種方法需要在每個(gè)時(shí)間步的循環(huán)更新中增加一個(gè)額外輸入,使得循環(huán)更新知道它是否是靠近所產(chǎn)生序列的末尾。

    其他RNN結(jié)構(gòu)

    除了上面介紹的RNN結(jié)構(gòu),還有一些其他結(jié)構(gòu):

    1, 每個(gè)時(shí)間步都產(chǎn)生一個(gè)輸出,但是只有當(dāng)前時(shí)刻的輸出 o 與下個(gè)時(shí)刻的隱藏單元之間有連接的RNN:

    這樣的RNN沒有最開始介紹的 RNN 那樣強(qiáng)大,上圖中的RNN被訓(xùn)練為將特定輸出值放入 o 中,并且 o 是允許傳播到未來(lái)的唯一信息。此處沒有從 h 前向傳播的直接連接。之前的 h 僅通過產(chǎn)生的預(yù)測(cè)間接地連接到當(dāng)前。o 通常缺乏過去的重要信息,除非它非常高維且內(nèi)容豐富。這使得該圖中的RNN不那么強(qiáng)大,但是它更容易訓(xùn)練,因?yàn)槊總€(gè)時(shí)間步可以與其他時(shí)間步分離訓(xùn)練,允許訓(xùn)練期間更多的并行化。

    2, 隱藏單元之間存在循環(huán)連接,但讀取整個(gè)序列后只在最后一個(gè)時(shí)間步產(chǎn)生單個(gè)輸出的RNN:

    這樣的網(wǎng)絡(luò)可以用于概括序列,并產(chǎn)生一個(gè)向量 o 用于表示整個(gè)輸入序列,然后可以對(duì) o 進(jìn)行進(jìn)一步的處理。例如在翻譯任務(wù)中,先輸入原始輸入的句子,得到句子的向量表示 o ,然后對(duì) o 展開進(jìn)一步的翻譯任務(wù)。

    3,包含上下文的RNN:

    此RNN包含從前一個(gè)輸出到當(dāng)前狀態(tài)的連接。這些連接允許RNN在給定 x 的序列后,對(duì)相同長(zhǎng)度的 y 序列上的任意分布建模。

    4,雙向RNN

    在許多應(yīng)用中,我們要輸出的 y (t) 的預(yù)測(cè)可能依賴于整個(gè)輸入序列。例如,在語(yǔ)音識(shí)別中,當(dāng)前聲音作為音素的正確解釋可能取決于未來(lái)幾個(gè)音素,甚至可能取決于未來(lái)的幾個(gè)詞,因?yàn)樵~與附近的詞之間的存在語(yǔ)義依賴。雙向RNN結(jié)構(gòu)如下:

    隱藏狀態(tài)變量 h 在時(shí)間上向前傳播信息(向右),而隱藏狀態(tài)變量 g 在時(shí)間上向后傳播信息(向左)。因此在每個(gè)點(diǎn) t,輸出單元 o (t) 可以受益于輸入 h (t) 中關(guān)于過去的相關(guān)信息以及輸入 g (t) 中關(guān)于未來(lái)的相關(guān)信息。

    5,編碼—解碼結(jié)構(gòu)(序列到序列)的RNN

    編碼—解碼結(jié)構(gòu)的RNN支持將輸入序列映射到不一定等長(zhǎng)的輸出序列,結(jié)構(gòu)如下圖所示:

    這在許多場(chǎng)景中都有應(yīng)用,如語(yǔ)音識(shí)別、機(jī)器翻譯或問答,其中訓(xùn)練集的輸入和輸出序列的長(zhǎng)度通常不相同。它由讀取輸入序列的編碼器RNN以及生成輸出序列的解碼器RNN組成。編碼器RNN的最終隱藏狀態(tài)用于計(jì)算一般為固定大小的上下文向量 C,C 表示輸入序列的語(yǔ)義概要信息并且作為解碼器RNN的輸入。

    基于RNN的應(yīng)用

    RNN通常用于處理序列形式的輸入數(shù)據(jù),如文本,語(yǔ)音等。輸出也可以是序列或者某個(gè)預(yù)測(cè)值。常見的應(yīng)用如下:

    1,序列數(shù)據(jù)的分析

    例如情感分析,輸入一句話的每個(gè)字的向量表示,輸出其情感的預(yù)測(cè)標(biāo)簽。網(wǎng)絡(luò)結(jié)構(gòu)如下:

    2,序列數(shù)據(jù)的轉(zhuǎn)換

    例如機(jī)器翻譯,輸入是某種語(yǔ)言的字序列,輸出是翻譯后的字序列。網(wǎng)絡(luò)結(jié)構(gòu)如下:

    再如,詞性標(biāo)注,輸入是字的向量表示,輸出是每個(gè)字對(duì)應(yīng)的詞性標(biāo)注信息,常見網(wǎng)絡(luò)結(jié)構(gòu)如下:

    3,序列數(shù)據(jù)的生成

    例如,圖片描述生成,輸入是一張圖片的向量表示,輸出圖片的描述信息。網(wǎng)絡(luò)結(jié)構(gòu)如下:

    RNN的不足

    RNN很難解決長(zhǎng)依賴問題,即經(jīng)過許多個(gè)時(shí)間步的傳播之后,梯度值傾向于0或者無(wú)窮大,這樣的現(xiàn)象稱之為梯度消失和梯度爆炸。

    1,從隱藏變量h角度來(lái)看

    為了簡(jiǎn)化說明,我們認(rèn)為:
    h(t)=WTh(t?1)\boldsymbol h^{(t)} = \boldsymbol W^T \boldsymbol h^{(t-1)} h(t)=WTh(t?1)
    根據(jù)遞推關(guān)系,可以轉(zhuǎn)換為:
    h(t)=(Wt)Th(0)\boldsymbol h^{(t)} = (\boldsymbol W^t)^T \boldsymbol h^{(0)} h(t)=(Wt)Th(0)
    當(dāng)W\boldsymbol WW 符合下列形式的特征分解:
    W=QΣQT\boldsymbol W = \boldsymbol Q \boldsymbol \Sigma \boldsymbol Q^T W=QΣQT
    其中Q\boldsymbol QQ是正交矩陣。于是有:
    h(t)=QTΣtQh(0)\boldsymbol h^{(t)} = \boldsymbol Q^T \boldsymbol \Sigma^t \boldsymbol Q \boldsymbol h^{(0)} h(t)=QTΣtQh(0)
    經(jīng)過多個(gè)階段的傳播后,如果$ \boldsymbol \Sigma^t中的特征值小于1,特征值將衰減到零。如果特征值大于1,經(jīng)過中的特征值小于1,特征值將衰減到零。如果特征值大于1,經(jīng)過11經(jīng)t次相乘后,特征值將激增。任何不與最大特征向量對(duì)齊的次相乘后,特征值將激增。任何不與最大特征向量對(duì)齊的對(duì)\boldsymbol h^{(0)}$的部分將最終被丟棄,無(wú)法做到長(zhǎng)期依賴。

    2,從梯度傳播角度來(lái)看

    梯度的反向傳播過程如下圖所示:

    不難得到:
    ?J?y0=?J?h3?h3?h2?h2?h1?h1?y0\frac{\partial J}{\partial y_0} = \frac{\partial J}{\partial h_3}\frac{\partial h_3}{\partial h_2} \frac{\partial h_2}{\partial h_1} \frac{\partial h_1}{\partial y_0} ?y0??J?=?h3??J??h2??h3???h1??h2???y0??h1??
    上面的式子是多個(gè)偏導(dǎo)數(shù)的累乘,如果每個(gè)偏導(dǎo)數(shù)的值都小于1,那么傳播到 t=0t=0t=0 時(shí)刻的梯度幾乎等于0了,也就是梯度消失了。梯度消失意味著只有靠近輸出的幾層才真正起到學(xué)習(xí)的作用,無(wú)法通過加深網(wǎng)絡(luò)層數(shù)來(lái)提升預(yù)測(cè)效果,這樣RNN很難學(xué)習(xí)到輸入序列中的長(zhǎng)距離依賴關(guān)系。

    反之,如果每個(gè)偏導(dǎo)數(shù)的值都大于1,那么傳播到 t=0t=0t=0 時(shí)刻的梯度被指數(shù)倍放大,也就是梯度爆炸了。可以通過梯度裁剪來(lái)緩解,即當(dāng)梯度的范式大于某個(gè)給定值的時(shí)候,對(duì)梯度進(jìn)行等比縮放。

    為了能學(xué)習(xí)到更長(zhǎng)的依賴關(guān)系,需要對(duì)RNN網(wǎng)絡(luò)加以改進(jìn),下一篇文章提到的LSTM模型可以一定程度上得到改善。

    參考文章:

    《深度學(xué)習(xí)》

    RNN詳解

    總結(jié)

    以上是生活随笔為你收集整理的循环神经网络(RNN)相关知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。