<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 神經網絡中爆炸梯度的溫和介紹 > 原文: [https://machinelearningmastery.com/exploding-gradients-in-neural-networks/](https://machinelearningmastery.com/exploding-gradients-in-neural-networks/) 爆炸梯度是一個問題,其中大的誤差梯度累積并導致在訓練期間對神經網絡模型權重的非常大的更新。 這會導致您的模型不穩定,無法從您的訓練數據中學習。 在這篇文章中,您將發現深層人工神經網絡爆炸梯度的問題。 完成這篇文章后,你會知道: * 爆炸的梯度是什么以及它們在訓練過程中引起的問題。 * 如何知道您的網絡模型是否有爆炸梯度。 * 如何解決網絡中的爆炸梯度問題。 讓我們開始吧。 * **更新Oct / 2018** :刪除了ReLU作為解決方案的提及。 ![A Gentle Introduction to Exploding Gradients in Recurrent Neural Networks](img/ba10cf5120398411d9e2cd2ef9304a3d.jpg) 回顧神經網絡中爆炸梯度的溫和介紹 [Taro Taylor](https://www.flickr.com/photos/tjt195/2417533162/) 的照片,保留一些權利。 ## 什么是爆炸梯度? 誤差梯度是在訓練神經網絡期間計算的方向和幅度,該神經網絡用于以正確的方向和正確的量更新網絡權重。 在深度網絡或循環神經網絡中,誤差梯度可能在更新期間累積并導致非常大的梯度。這反過來又導致網絡權重的大量更新,進而導致網絡不穩定。在極端情況下,權重值可能會變得很大,以至于溢出并導致NaN值。 通過重復地將梯度乘以具有大于1.0的值的網絡層,爆炸通過指數增長發生。 ## 爆炸梯度有什么問題? 在深層多層Perceptron網絡中,爆炸梯度可能導致網絡不穩定,最多無法從訓練數據中學習,最壞的情況是導致無法再更新的NaN權重值。 > 爆炸性的梯度會使學習變得不穩定。 - 第282頁,[深度學習](http://amzn.to/2fwdoKR),2016年。 在循環神經網絡中,爆炸性梯度可能導致不穩定的網絡無法從訓練數據中學習,并且最多是無法通過長輸入數據序列學習的網絡。 > ......爆炸梯度問題是指訓練期間梯度范數的大幅增加。這些事件是由于長期成分的爆炸造成的 - [關于訓練復發神經網絡的難度](http://proceedings.mlr.press/v28/pascanu13.pdf),2013。 ## 你怎么知道你是否有爆炸的梯度? 有一些微妙的跡象表明您在網絡訓練期間可能會受到爆炸性梯度的影響,例如: * 該模型無法獲得您的訓練數據(例如損失不佳)。 * 該模型不穩定,導致從更新到更新的損失發生很大變化。 * 在訓練期間模型損失歸NaN所有。 如果你有這些類型的問題,你可以深入挖掘,看看你是否有爆炸梯度的問題。 有一些不太微妙的跡象可以用來確認你有爆炸的梯度。 * 在訓練期間,模型權重很快變得非常大。 * 模型權重在訓練期間達到NaN值。 * 在訓練期間,每個節點和層的誤差梯度值始終高于1.0。 ## 如何修復爆炸梯度? 解決爆炸梯度的方法很多;本節列出了一些您可以使用的最佳實踐方法。 ### 1.重新設計網絡模型 在深度神經網絡中,可以通過重新設計網絡以減少層數來解決爆炸梯度問題。 在訓練網絡時使用較小的批量大小也可能有一些好處。 在循環神經網絡中,在訓練期間通過較少的先前時間步驟進行更新,稱為[通過時間截斷反向傳播](https://machinelearningmastery.com/gentle-introduction-backpropagation-time/),可以減少爆炸梯度問題。 ### 2.使用長短期內存網絡 在循環神經網絡中,考慮到這種類型網絡的訓練中固有的不穩定性,例如,可以發生梯度爆炸。通過反向傳播到時間,基本上將循環網絡轉換為深層多層感知器神經網絡。 通過使用[長短期記憶(LSTM)](https://machinelearningmastery.com/gentle-introduction-long-short-term-memory-networks-experts/)記憶單元和可能相關的門控型神經元結構,可以減少爆炸梯度。 采用LSTM存儲器單元是用于序列預測的循環神經網絡的新的最佳實踐。 ### 3.使用梯度剪輯 在具有大批量大小和具有非常長輸入序列長度的LSTM的非常深的多層感知器網絡中仍然可能發生爆炸梯度。 如果仍然出現爆炸梯度,您可以在網絡訓練期間檢查并限制梯度的大小。 這稱為梯度剪裁。 > 處理爆炸梯度有一個簡單但非常有效的解決方案:如果它們的范數超過給定閾值,則剪切梯度。 - 第5.2.4節,消失和爆炸梯度,[自然語言處理中的神經網絡方法](http://amzn.to/2fwTPCn),2017。 具體地,如果誤差梯度超過閾值,則針對閾值檢查誤差梯度的值并將其剪切或設置為該閾值。 > 在某種程度上,可以通過梯度限幅(在執行梯度下降步驟之前對梯度的值進行閾值處理)來減輕爆炸梯度問題。 - 第294頁,[深度學習](http://amzn.to/2fwdoKR),2016年。 在Keras深度學習庫中,您可以通過在訓練之前在優化器上設置 _clipnorm_ 或 _clipvalue_ 參數來使用梯度剪輯。 好的默認值是 _clipnorm = 1.0_ 和 _clipvalue = 0.5_ 。 * [Keras API](https://keras.io/optimizers/) 中優化器的使用 ### 4.使用重量正規化 另一種方法,如果仍然出現爆炸梯度,則檢查網絡權重的大小,并對網絡損失函數應用較大權重值的懲罰。 這被稱為權重正則化,并且通常可以使用L1(絕對權重)或L2(平方權重)懲罰。 > 對復發權重使用L1或L2懲罰可以幫助爆炸梯度 — [On the difficulty of training recurrent neural networks](http://proceedings.mlr.press/v28/pascanu13.pdf), 2013. 在Keras深度學習庫中,您可以通過在層上設置 _kernel_regularizer_ 參數并使用 _L1_ 或 _L2_ 正則化器來使用權重正則化。 * [Keras API](https://keras.io/regularizers/) 中正則化器的使用 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 圖書 * [深度學習](http://amzn.to/2fwdoKR),2016年。 * [自然語言處理中的神經網絡方法](http://amzn.to/2fwTPCn),2017。 ### 文件 * [關于訓練復發神經網絡的難度](http://proceedings.mlr.press/v28/pascanu13.pdf),2013。 * [學習與梯度下降的長期依賴關系很困難](http://www.dsi.unifi.it/~paolo/ps/tnn-94-gradient.pdf),1994。 * [了解爆炸梯度問題](https://pdfs.semanticscholar.org/728d/814b92a9d2c6118159bb7d9a4b3dc5eeaaeb.pdf),2012。 ### 用品 * [為什么在神經網絡(特別是在RNN中)爆炸梯度是一個問題?](https://www.quora.com/Why-is-it-a-problem-to-have-exploding-gradients-in-a-neural-net-especially-in-an-RNN) * [LSTM如何幫助防止循環神經網絡中的消失(和爆炸)梯度問題?](https://www.quora.com/How-does-LSTM-help-prevent-the-vanishing-and-exploding-gradient-problem-in-a-recurrent-neural-network) * [整流器(神經網絡)](https://en.wikipedia.org/wiki/Rectifier_(neural_networks)) ### Keras API * [Keras API](https://keras.io/optimizers/) 中優化器的使用 * [Keras API](https://keras.io/regularizers/) 中正則化器的使用 ## 摘要 在這篇文章中,您發現了在訓練深度神經網絡模型時爆炸梯度的問題。 具體來說,你學到了: * 爆炸的梯度是什么以及它們在訓練過程中引起的問題。 * 如何知道您的網絡模型是否有爆炸梯度。 * 如何解決網絡中的爆炸梯度問題。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看