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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

(pytorch-深度学习)通过时间反向传播

發(fā)布時間:2024/8/23 pytorch 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (pytorch-深度学习)通过时间反向传播 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過時間反向傳播

介紹循環(huán)神經(jīng)網(wǎng)絡中梯度的計算和存儲方法,即通過時間反向傳播(back-propagation through time)。

  • 正向傳播和反向傳播相互依賴。
  • 正向傳播在循環(huán)神經(jīng)網(wǎng)絡中比較直觀,而通過時間反向傳播其實是反向傳播在循環(huán)神經(jīng)網(wǎng)絡中的具體應用。
  • 我們需要將循環(huán)神經(jīng)網(wǎng)絡按時間步展開,從而得到模型變量和參數(shù)之間的依賴關(guān)系,并依據(jù)鏈式法則應用反向傳播計算并存儲梯度。

定義模型

考慮一個簡單的無偏差項的循環(huán)神經(jīng)網(wǎng)絡,且激活函數(shù)為恒等映射(?(x)=x\phi(x)=x?(x)=x)。設時間步 ttt 的輸入為單樣本 xt∈Rd\boldsymbol{x}_t \in \mathbb{R}^dxt?Rd,標簽為 yty_tyt?,那么隱藏狀態(tài) ht∈Rh\boldsymbol{h}_t \in \mathbb{R}^hht?Rh的計算表達式為

ht=Whxxt+Whhht?1,\boldsymbol{h}_t = \boldsymbol{W}_{hx} \boldsymbol{x}_t + \boldsymbol{W}_{hh} \boldsymbol{h}_{t-1}, ht?=Whx?xt?+Whh?ht?1?,

其中Whx∈Rh×d\boldsymbol{W}_{hx} \in \mathbb{R}^{h \times d}Whx?Rh×dWhh∈Rh×h\boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h}Whh?Rh×h是隱藏層權(quán)重參數(shù)。設輸出層權(quán)重參數(shù)Wqh∈Rq×h\boldsymbol{W}_{qh} \in \mathbb{R}^{q \times h}Wqh?Rq×h,時間步ttt的輸出層變量ot∈Rq\boldsymbol{o}_t \in \mathbb{R}^qot?Rq計算為

ot=Wqhht.\boldsymbol{o}_t = \boldsymbol{W}_{qh} \boldsymbol{h}_{t}. ot?=Wqh?ht?.

設時間步ttt的損失為?(ot,yt)\ell(\boldsymbol{o}_t, y_t)?(ot?,yt?)。時間步數(shù)為TTT的損失函數(shù)LLL定義為

L=1T∑t=1T?(ot,yt).L = \frac{1}{T} \sum_{t=1}^T \ell (\boldsymbol{o}_t, y_t). L=T1?t=1T??(ot?,yt?).

LLL稱為有關(guān)給定時間步的數(shù)據(jù)樣本的目標函數(shù)。

模型計算圖

為了可視化循環(huán)神經(jīng)網(wǎng)絡中模型變量和參數(shù)在計算中的依賴關(guān)系,我們可以繪制模型計算圖,像下圖。例如,時間步3的隱藏狀態(tài)h3\boldsymbol{h}_3h3?的計算依賴模型參數(shù)Whx\boldsymbol{W}_{hx}Whx?、Whh\boldsymbol{W}_{hh}Whh?、上一時間步隱藏狀態(tài)h2\boldsymbol{h}_2h2?以及當前時間步輸入x3\boldsymbol{x}_3x3?。

表示了時間步數(shù)為3的循環(huán)神經(jīng)網(wǎng)絡模型計算中的依賴關(guān)系。

  • 方框代表變量(無陰影)或參數(shù)(有陰影),圓圈代表運算符

方法

圖中的模型的參數(shù)是 Whx\boldsymbol{W}_{hx}Whx?, Whh\boldsymbol{W}_{hh}Whh?Wqh\boldsymbol{W}_{qh}Wqh?。訓練模型通常需要模型參數(shù)的梯度?L/?Whx\partial L/\partial \boldsymbol{W}_{hx}?L/?Whx?、?L/?Whh\partial L/\partial \boldsymbol{W}_{hh}?L/?Whh??L/?Wqh\partial L/\partial \boldsymbol{W}_{qh}?L/?Wqh?。 圖中的依賴關(guān)系,我們可以按照其中箭頭所指的反方向依次計算并存儲梯度。

  • 首先,目標函數(shù)有關(guān)各時間步輸出層變量的梯度?L/?ot∈Rq\partial L/\partial \boldsymbol{o}_t \in \mathbb{R}^q?L/?ot?Rq很容易計算:

?L?ot=??(ot,yt)T??ot.\frac{\partial L}{\partial \boldsymbol{o}_t} = \frac{\partial \ell (\boldsymbol{o}_t, y_t)}{T \cdot \partial \boldsymbol{o}_t}.?ot??L?=T??ot???(ot?,yt?)?.

  • 之后,可以計算目標函數(shù)有關(guān)模型參數(shù)Wqh\boldsymbol{W}_{qh}Wqh?的梯度?L/?Wqh∈Rq×h\partial L/\partial \boldsymbol{W}_{qh} \in \mathbb{R}^{q \times h}?L/?Wqh?Rq×h。根據(jù)計算圖,LLL通過o1,…,oT\boldsymbol{o}_1, \ldots, \boldsymbol{o}_To1?,,oT?依賴Wqh\boldsymbol{W}_{qh}Wqh?。依據(jù)鏈式法則,

?L?Wqh=∑t=1Tprod(?L?ot,?ot?Wqh)=∑t=1T?L?otht?.\frac{\partial L}{\partial \boldsymbol{W}_{qh}} = \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{W}_{qh}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{o}_t} \boldsymbol{h}_t^\top. ?Wqh??L?=t=1T?prod(?ot??L?,?Wqh??ot??)=t=1T??ot??L?ht??.

  • 其次,隱藏狀態(tài)之間也存在依賴關(guān)系。 在計算圖中,LLL只通過oT\boldsymbol{o}_ToT?依賴最終時間步TTT的隱藏狀態(tài)hT\boldsymbol{h}_ThT?。因此,我們先計算目標函數(shù)有關(guān)最終時間步隱藏狀態(tài)的梯度?L/?hT∈Rh\partial L/\partial \boldsymbol{h}_T \in \mathbb{R}^h?L/?hT?Rh。依據(jù)鏈式法則,我們得到

?L?hT=prod(?L?oT,?oT?hT)=Wqh??L?oT.\frac{\partial L}{\partial \boldsymbol{h}_T} = \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_T}, \frac{\partial \boldsymbol{o}_T}{\partial \boldsymbol{h}_T} \right) = \boldsymbol{W}_{qh}^\top \frac{\partial L}{\partial \boldsymbol{o}_T}. ?hT??L?=prod(?oT??L?,?hT??oT??)=Wqh???oT??L?.

  • 接下來對于時間步t<Tt < Tt<T, 在計算圖中,LLL通過ht+1\boldsymbol{h}_{t+1}ht+1?ot\boldsymbol{o}_tot?依賴ht\boldsymbol{h}_tht?。依據(jù)鏈式法則, 目標函數(shù)有關(guān)時間步t<Tt < Tt<T的隱藏狀態(tài)的梯度?L/?ht∈Rh\partial L/\partial \boldsymbol{h}_t \in \mathbb{R}^h?L/?ht?Rh需要按照時間步從大到小依次計算:
    ?L?ht=prod(?L?ht+1,?ht+1?ht)+prod(?L?ot,?ot?ht)=Whh??L?ht+1+Wqh??L?ot\frac{\partial L}{\partial \boldsymbol{h}_t} = \text{prod} (\frac{\partial L}{\partial \boldsymbol{h}{t+1}}, \frac{\partial \boldsymbol{h}{t+1}}{\partial \boldsymbol{h}_t}) + \text{prod} (\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{h}_t} ) = \boldsymbol{W}_{hh}^\top \frac{\partial L}{\partial \boldsymbol{h}_{t+1}} + \boldsymbol{W}_{qh}^\top \frac{\partial L}{\partial \boldsymbol{o}_t} ?ht??L?=prod(?ht+1?L?,?ht??ht+1?)+prod(?ot??L?,?ht??ot??)=Whh???ht+1??L?+Wqh???ot??L?

  • 將上面的遞歸公式展開,對任意時間步1≤t≤T1 \leq t \leq T1tT,我們可以得到目標函數(shù)有關(guān)隱藏狀態(tài)梯度的通項公式

?L?ht=∑i=tT(Whh?)T?iWqh??L?oT+t?i.\frac{\partial L}{\partial \boldsymbol{h}_t} = \sum_{i=t}^T {\left(\boldsymbol{W}_{hh}^\top\right)}^{T-i} \boldsymbol{W}_{qh}^\top \frac{\partial L}{\partial \boldsymbol{o}_{T+t-i}}. ?ht??L?=i=tT?(Whh??)T?iWqh???oT+t?i??L?.

由上式中的指數(shù)項可見,當時間步數(shù) TTT 較大或者時間步 ttt 較小時,目標函數(shù)有關(guān)隱藏狀態(tài)的梯度較容易出現(xiàn)衰減和爆炸。這也會影響其他包含?L/?ht\partial L / \partial \boldsymbol{h}_t?L/?ht?項的梯度,例如隱藏層中模型參數(shù)的梯度?L/?Whx∈Rh×d\partial L / \partial \boldsymbol{W}_{hx} \in \mathbb{R}^{h \times d}?L/?Whx?Rh×d?L/?Whh∈Rh×h\partial L / \partial \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h}?L/?Whh?Rh×h。 在圖中,LLL通過h1,…,hT\boldsymbol{h}_1, \ldots, \boldsymbol{h}_Th1?,,hT?依賴這些模型參數(shù)。 依據(jù)鏈式法則,有

?L?Whx=∑t=1Tprod(?L?ht,?ht?Whx)=∑t=1T?L?htxt?,?L?Whh=∑t=1Tprod(?L?ht,?ht?Whh)=∑t=1T?L?htht?1?.\begin{aligned} \frac{\partial L}{\partial \boldsymbol{W}_{hx}} &= \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hx}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{h}_t} \boldsymbol{x}_t^\top,\\ \ \frac{\partial L}{\partial \boldsymbol{W}_{hh}} &= \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hh}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{h}_t} \boldsymbol{h}_{t-1}^\top. \end{aligned} ?Whx??L???Whh??L??=t=1T?prod(?ht??L?,?Whx??ht??)=t=1T??ht??L?xt??,=t=1T?prod(?ht??L?,?Whh??ht??)=t=1T??ht??L?ht?1??.?

每次迭代中,我們在依次計算完以上各個梯度后,會將它們存儲起來,從而避免重復計算。

  • 例如,由于隱藏狀態(tài)梯度?L/?ht\partial L/\partial \boldsymbol{h}_t?L/?ht?被計算和存儲,之后的模型參數(shù)梯度?L/?Whx\partial L/\partial \boldsymbol{W}_{hx}?L/?Whx??L/?Whh\partial L/\partial \boldsymbol{W}_{hh}?L/?Whh?的計算可以直接讀取?L/?ht\partial L/\partial \boldsymbol{h}_t?L/?ht?的值,而無須重復計算它們。
  • 此外,反向傳播中的梯度計算可能會依賴變量的當前值。它們正是通過正向傳播計算出來的。 舉例來說,參數(shù)梯度?L/?Whh\partial L/\partial \boldsymbol{W}_{hh}?L/?Whh?的計算需要依賴隱藏狀態(tài)在時間步t=0,…,T?1t = 0, \ldots, T-1t=0,,T?1的當前值ht\boldsymbol{h}_tht?h0\boldsymbol{h}_0h0?是初始化得到的)。這些值是通過從輸入層到輸出層的正向傳播計算并存儲得到的。

總結(jié)

以上是生活随笔為你收集整理的(pytorch-深度学习)通过时间反向传播的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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