<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文看懂從 RNN 到 LSTM

          共 1915字,需瀏覽 4分鐘

           ·

          2020-07-28 15:16



          來自 |?知乎? 作者 |?陳誠
          鏈接 | https://zhuanlan.zhihu.com/p/32085405

          僅作學術交流,如有侵權,請聯(lián)系后臺刪除



          這是在看了臺大李宏毅教授的深度學習視頻之后的一點總結和感想。看完介紹的第一部分 RNN 尤其 LSTM 的介紹之后,整個人醍醐灌頂。本篇博客就是對視頻的一些記錄加上了一些個人的思考。


          ???0. 從 RNN 說起

          循環(huán)神經網絡(Recurrent Neural Network,RNN)是一種用于處理序列數(shù)據(jù)的神經網絡。相比一般的神經網絡來說,他能夠處理序列變化的數(shù)據(jù)。比如某個單詞的意思會因為上文提到的內容不同而有不同的含義,RNN 就能夠很好地解決這類問題。


          ???1. 普通 RNN

          先簡單介紹一下一般的 RNN。其主要形式如下圖所示(圖片均來自臺大李宏毅教授的PPT):
          這里:
          ?為當前狀態(tài)下數(shù)據(jù)的輸入,??表示接收到的上一個節(jié)點的輸入。

          ?為當前節(jié)點狀態(tài)下的輸出,而??為傳遞到下一個節(jié)點的輸出。

          通過上圖的公式可以看到,輸出?h'?與?x?和?h?的值都相關。而?y?則常常使用?h'?投入到一個線性層(主要是進行維度映射)然后使用softmax進行分類得到需要的數(shù)據(jù)。

          對這里的?y?如何通過?h'?計算得到往往看具體模型的使用方式。通過序列形式的輸入,我們能夠得到如下形式的 RNN。


          ???2. LSTM

          2.1 什么是 LSTM

          長短期記憶(Long short-term memory, LSTM)是一種特殊的 RNN,主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。簡單來說,就是相比普通的 RNN,LSTM 能夠在更長的序列中有更好的表現(xiàn)。

          LSTM 結構(圖右)和普通 RNN 的主要輸入輸出區(qū)別如下所示。

          相比RNN只有一個傳遞狀態(tài)??,LSTM有兩個傳輸狀態(tài),一個??(cell state),和一個?(hidden state)。(Tips:RNN 中的??對于 LSTM 中的??)
          其中對于傳遞下去的??改變得很慢,通常輸出的??是上一個狀態(tài)傳過來的??加上一些數(shù)值。
          而??則在不同節(jié)點下往往會有很大的區(qū)別。

          2.2 深入 LSTM 結構

          下面具體對 LSTM 的內部結構來進行剖析。

          首先使用 LSTM 的當前輸入??和上一個狀態(tài)傳遞下來的??拼接訓練得到四個狀態(tài)。

          其中,??,??,?是由拼接向量乘以權重矩陣之后,再通過一個??激活函數(shù)轉換成0到1之間的數(shù)值,來作為一種門控狀態(tài)。而??則是將結果通過一個??激活函數(shù)將轉換成-1到1之間的值(這里使用??是因為這里是將其做為輸入數(shù)據(jù),而不是門控信號)。

          下面開始進一步介紹這四個狀態(tài)在 LSTM 內部的使用。(敲黑板)

          ?是 Hadamard Product,也就是操作矩陣中對應的元素相乘,因此要求兩個相乘矩陣是同型的。??則代表進行矩陣加法。


          LSTM 內部主要有三個階段:

          1. 忘記階段。這個階段主要是對上一個節(jié)點傳進來的輸入進行選擇性忘記。簡單來說就是會 “忘記不重要的,記住重要的”。

          具體來說是通過計算得到的??(f表示forget)來作為忘記門控,來控制上一個狀態(tài)的??哪些需要留哪些需要忘。

          2. 選擇記憶階段。這個階段將這個階段的輸入有選擇性地進行“記憶”。主要是會對輸入??進行選擇記憶。哪些重要則著重記錄下來,哪些不重要,則少記一些。當前的輸入內容由前面計算得到的??表示。而選擇的門控信號則是由??(i 代表 information)來進行控制。
          將上面兩步得到的結果相加,即可得到傳輸給下一個狀態(tài)的??。也就是上圖中的第一個公式。

          3. 輸出階段。這個階段將決定哪些將會被當成當前狀態(tài)的輸出。主要是通過??來進行控制的。并且還對上一階段得到的??進行了放縮(通過一個 tanh 激活函數(shù)進行變化)。

          與普通 RNN 類似,輸出??往往最終也是通過??變化得到。


          ???3. 總結

          以上,就是 LSTM 的內部結構。通過門控狀態(tài)來控制傳輸狀態(tài),記住需要長時間記憶的,忘記不重要的信息;而不像普通的 RNN 那樣只能夠“呆萌”地僅有一種記憶疊加方式。對很多需要“長期記憶”的任務來說,尤其好用。
          但也因為引入了很多內容,導致參數(shù)變多,也使得訓練難度加大了很多。因此很多時候我們往往會使用效果和 LSTM 相當?shù)珔?shù)更少的 GRU 來構建大訓練量的模型。

          —?完?


          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜成人一区二区 | 国产一站免费 | www爱射AV | 人人插操| 亚洲一级无码精品 |