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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

05.序列模型 W1.循环序列模型

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05.序列模型 W1.循环序列模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 為什么選擇序列模型
    • 2. 數學符號
    • 3. 循環Recurrent 神經網絡模型
    • 4. 通過時間的反向傳播
    • 5. 不同類型的循環神經網絡
    • 6. 語言模型和序列生成
    • 7. 對新序列采樣
    • 8. 循環神經網絡的梯度消失
    • 9. Gated Recurrent Unit(GRU單元)
    • 10. LSTM(long short term memory)unit
    • 11. 雙向循環神經網絡(Bidirectional RNN)
    • 12. 深層循環神經網絡(Deep RNNs)
    • 作業

參考:
吳恩達視頻課
深度學習筆記

1. 為什么選擇序列模型


有些問題,輸入數據 X 和 輸出數據 Y 都是序列,X 和 Y 有時也會不一樣長。在另一些問題里,只有 X 或 只有 Y 是序列

2. 數學符號


3. 循環Recurrent 神經網絡模型

為什么不使用標準的神經網絡學習上面的 X 到 Y 的映射?




a<t>=g1(Waaa<t?1>+Waxx<t>+ba)a^{<t>}=g_{1}\left(W_{a a} a^{<t-1>}+W_{a x} x^{<t>}+b_{a}\right)a<t>=g1?(Waa?a<t?1>+Wax?x<t>+ba?)

y^<t>=g2(Wyaa<t>+by)\hat{y}^{<t>}=g_{2}\left(W_{y a} a^{<t>}+b_{y}\right)y^?<t>=g2?(Wya?a<t>+by?)

4. 通過時間的反向傳播

編程框架通常會自動實現反向傳播,但是還是要認識下它的運作機制


L<t>(y^<t>,y<t>)=?y<t>log?y^<t>?(1?y<t>)log?(1?y^<t>)L^{<t>}\left(\hat{y}^{<t>}, y^{<t>}\right)=-y^{<t>} \log \hat{y}^{<t>}-\left(1-y^{<t>}\right) \log \left(1-\hat{y}^{<t>}\right)L<t>(y^?<t>,y<t>)=?y<t>logy^?<t>?(1?y<t>)log(1?y^?<t>)

L(y^,y)=∑t=1TxL<t>(y^<t>,y<t>)L(\hat{y}, y)=\sum_{t=1}^{T_{x}} L^{<t>}\left(\hat{y}^{<t>}, y^{<t>}\right)L(y^?,y)=t=1Tx??L<t>(y^?<t>,y<t>)

最小化損失,通過梯度下降來更新參數

5. 不同類型的循環神經網絡

6. 語言模型和序列生成

語言模型所做的就是,它會告訴你某個特定的句子它出現的概率是多少

得到一個句子后:

  • 建立一個字典,將每個單詞轉成 one-hot 編碼
  • 定義句子的結尾,增加一個額外的標記 EOS(更準確的識別結尾)
  • 還有不存在的詞都歸為 unknow UNK

7. 對新序列采樣

訓練一個序列模型之后,要想了解到這個模型學到了什么,一種非正式的方法就是進行一次新序列采樣


以上是基于詞匯的RNN模型,還可以基于字符

基于字符

  • 優點:不必擔心會出現未知的標識
  • 缺點:會得到太多太長的序列,大多數英語句子只有10到20個的單詞,但卻可能包含很多很多字符。基于字符的模型在捕捉句子中的依賴關系不如基于詞匯的語言模型那樣可以捕捉長范圍的關系,并且基于字符的模型訓練成本較高。

自然語言處理的趨勢就是,絕大多數都是使用基于詞匯的語言模型,但隨著計算機性能越來越高,會有更多的應用。
在一些特殊情況下,會開始使用基于字符的模型。除了一些比較專門需要處理大量未知的文本或未知詞匯的應用,還有一些要面對很多專有詞匯的應用。

8. 循環神經網絡的梯度消失


反向傳播的時候,隨著層數的增多,梯度不僅可能指數下降,也可能指數上升。

  • 梯度爆炸,你會看到很多NaN,數值溢出。解決方法就是用梯度修剪。如果它大于某個閾值,縮放梯度向量,保證它不會太大,這是相對比較魯棒的
  • 然而梯度消失更難解決

9. Gated Recurrent Unit(GRU單元)

門控循環單元 GRU,它改變了RNN的隱藏層,使其可以更好地捕捉深層連接,并改善了梯度消失問題

普通的RNN單元結構如下:

c~<t>=tanh?(Wc[c<t?1>,x<t>]+bc)\tilde{c}^{<t>}=\tanh \left(W_{c}\left[c^{<t-1>}, x^{<t>}\right]+b_{c}\right)c~<t>=tanh(Wc?[c<t?1>,x<t>]+bc?)

Γu=σ(Wu[c<t?1>,x<t>]+bu)\Gamma_{u}=\sigma\left(W_{u}\left[c^{<t-1>}, x^{<t>}\right]+b_{u}\right)Γu?=σ(Wu?[c<t?1>,x<t>]+bu?)

c<t>=Γu?c~<t>+(1?Γu)?c<t?1>c^{<t>}=\Gamma_{u} * \tilde{c}^{<t>}+\left(1-\Gamma_{u}\right) * c^{<t-1>}c<t>=Γu??c~<t>+(1?Γu?)?c<t?1>

GRU單元的優點就是通過門決定是否更新記憶細胞

  • 當你從左到右掃描一個句子的時候,這時是要更新某個記憶細胞,還是不更新,不更新(上圖,中間一直為0,表示一直不更新)
  • 直到你真的需要使用記憶細胞的時候,這可能在句子之前就決定了。
  • 因為sigmoid的值,現在門很容易取到0值,只要這個值是一個很大的負數,再由于數值上的四舍五入,上面這些門大體上就是0,或者說非常非常非常接近0。這非常有利于維持細胞的值。因為很接近0,可能是0.000001或者更小,這就不會有梯度消失的問題了。這就是緩解梯度消失問題的關鍵,因此允許神經網絡運行在非常龐大的依賴詞上,比如說cat和was單詞即使被中間的很多單詞分割開

如果門是多維的向量,元素對應的乘積做的就是告訴GRU單元哪個記憶細胞的向量維度在每個時間步要做更新,所以你可以選擇保存一些比特不變,而去更新其他的比特。比如說你可能需要一個比特來記憶貓是單數還是復數,其他比特來理解你正在談論食物,你可以每個時間點只改變一些比特

FULL GRU

Γr=σ(Wr[c<t?1>,x<t>]+br)\Gamma_{r}=\sigma\left(W_{r}\left[c^{<t-1>}, x^{<t>}\right]+b_{r}\right)Γr?=σ(Wr?[c<t?1>,x<t>]+br?)

上式告訴我們 c~<t>,c<t?1>\tilde c^{<t>}, c^{<t-1>}c~<t>,c<t?1> 有多少相關性

研究表明:去嘗試讓神經網絡有更深層的連接,去嘗試產生更大范圍的影響,還有解決梯度消失的問題,GRU就是其中一個研究者們最常使用的版本,也被發現在很多不同的問題上也是非常健壯和實用的

GRU結構可以更好捕捉非常長范圍的依賴,讓RNN更加有效。
還有比較經典的是LSTM,即長短時記憶網絡,見下節

10. LSTM(long short term memory)unit

c~<t>=tanh?(Wc[a<t?1>,x<t>]+bc)\tilde{c}^{<t>}=\tanh \left(W_{c}\left[a^{<t-1>}, x^{<t>}\right]+b_{c}\right)c~<t>=tanh(Wc?[a<t?1>,x<t>]+bc?)

Γu=σ(Wu[a<t?1>,x<t>]+bu)\Gamma_{u}=\sigma\left(W_{u}\left[a^{<t-1>}, x^{<t>}\right]+b_{u}\right) Γu?=σ(Wu?[a<t?1>,x<t>]+bu?)

Γf=σ(Wf[a<t?1>,x<t>]+bf)\Gamma_{f}=\sigma\left(W_{f}\left[a^{<t-1>}, x^{<t>}\right]+b_{f}\right) Γf?=σ(Wf?[a<t?1>,x<t>]+bf?)

Γo=σ(Wo[a<t?1>,x<t>]+bo)\Gamma_{o}=\sigma\left(W_{o}\left[a^{<t-1>}, x^{<t>}\right]+b_{o}\right) Γo?=σ(Wo?[a<t?1>,x<t>]+bo?)

c<t>=Γu?c~<t>+Γf?c<t?1>c^{<t>}=\Gamma_{u} * \tilde{c}^{<t>}+\Gamma_{f} * c^{<t-1>} c<t>=Γu??c~<t>+Γf??c<t?1>

a<t>=Γo?tanh?c<t>a^{<t>}=\Gamma_{o} * \tanh c^{<t>}a<t>=Γo??tanhc<t>


用GRU?用LSTM?

  • GRU 更加簡單,更容易創建一個更大的網絡,它只有兩個門,在計算性上也運行得更快
  • 但 LSTM 更加強大和靈活,因為它有三個門。大部分人會把 LSTM 作為默認的選擇來嘗試

無論是GRU還是LSTM,都可以用它們來構建捕獲更加深層連接的神經網絡

11. 雙向循環神經網絡(Bidirectional RNN)

BRNN 模型可以讓你在序列的某點處不僅可以獲取之前的信息還可以獲取未來的信息


上面的基本單元不僅可以是標準RNN單元,也可以是 GRU 或 LSTM 單元。

NLP(自然語言處理)問題,常用 有LSTM單元的雙向RNN模型是用的最多。

上面的雙向RNN網絡模型的缺點:你需要完整的數據的序列,你才能預測任意位置

  • 比如構建一個語音識別系統,需要等待這個人說完,獲取整個語音表達才能處理這段語音,并進一步做語音識別。實際的語音識別通常會有更加復雜的模塊

12. 深層循環神經網絡(Deep RNNs)

作業

05.序列模型 W1.循環序列模型(作業:手寫RNN+恐龍名字生成)

本文地址:https://michael.blog.csdn.net/article/details/108815992


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的05.序列模型 W1.循环序列模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。