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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化「看得见」!...

發布時間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化「看得见」!... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼在《要做好深度學習任務,不妨先在損失函數上「做好文章」》一文中為大家深入淺出地介紹了損失函數的相關知識后,Deep Learning Demystified 編輯、數據科學家 Harsha Bommana 本次接著從優化的角度,結合數學方式和可視化圖,帶大家以「看得見」的方式來了解神經網絡如何一步步找到最小化的損失值,并最終實現最優化。

在前一篇文章《要做好深度學習任務,不妨先在損失函數上「做好文章」》中,我們對損失函數有了一個比較清晰的認知,它能夠讓我們知道模型在某一階段的表現情況?,F在,我們需要使用損失函數來訓練網絡以提高網絡的性能。根本上,我們需要做的其實是獲得損失值并盡可能地將其最小化,因為損失值越小,模型的性能就越高。最小化數學表示的這一過程就叫做優化,下面我們就看看如何在神經網絡上將這些優化方法用其起來~

在神經網絡中,每個層之間都有很多權重。我們需要了解的是:神經網絡中每層的每個權重都會以某種方式影響到網絡的輸出,這是因為它們全都直接或間接地與輸出有關聯。

因此,我們可以說,如果我們改變神經網絡中的任一特定的權重,網絡的輸出也會改變。

如下圖所示,我們嘗試了 3 種不同的場景。在每個場景中,我們都選擇了一些隨機的權重,并對其進行了更改。同時,下圖也顯示了,改變選擇好的權重會對神經網絡的哪些部分產生影響以及哪些部分不構成影響。在這 3 個場景中,網絡的最后一層都至少有一個受影響的節點。由于最后一層的所有節點都與輸出節點相連,所以我們可以說,只要最后這層的部分某部分受到權重變化的影響,那輸出節點也同樣會受到影響。

網絡更改特定權重會對網絡的哪些部分產生影響的可視化圖

從上圖中,我們同樣可以觀察到,權重離輸出節點更遠(離網絡的始端更近),會更多地影響到網絡始端和輸出節點之間的節點。因而,我們可以判斷,權重對輸出的影響是非常間接的,因為在這些權重和輸出之間還存在很多權重。離輸出節點更近的權重則會更少地影響到網絡始端和輸出節點之間的節點,因此它們會更加直接地影響到輸出節點。

了解如何通過改變權重來改變網絡的輸出后,我們接下來要知道如何最小化損失。改變權重就會改變輸出,而改變輸出就會改變損失——因為損失就是一個預測 (Y_pred) 值的函數,而這個值本質上就是網絡的輸出。所以,我們可以得出的結論是,改變權重最終會讓損失也發生改變。

我們已經展示了權重和最終的損失之間的關系,但是目前為止我們還僅僅探討了改變。改變可以是增加的意思,也可以是減少的意思,而在這里我們需要的是減少損失。所以,我們需要探索以這種方式來改變權重究竟如何能夠能讓損失減少。這一過程就叫做優化。

從數學的角度來看,我們可以通過使用偏導數(Partial Derivatives)來實現這個過程。偏導數能夠讓我們理解兩個數學表達式如何相互影響。讓我們先假設 X 和 Y,它們之間存在某些任意的數學關系,如果我們能夠得到 X 對 Y 的偏導數,我們就能夠知道 X 的改變如何影響 Y。如果偏導數為正,就意味著 Y 會隨著 X 的增大而增大;如果為負,則意味著 Y 隨 X 的增大而減小。

如此一來,我們需要得到神經網絡中的每個權重對損失的偏導數。在某個特定案例中,如果權重的偏導數為正,那我們就減小權重從而減小損失;如果為負,我們就增大權重以減小損失——畢竟優化最終的目標就是:減小損失!

優化損失的偏導數可視化圖

對應用到的算法就是梯度下降(Gradient Descent)算法,它又名隨機梯度下降(Stochastic Gradient Descent,SGD),是神經網絡優化中最基礎的算法。這一算法執行的是一個迭代過程,所以我們要多次更新每個權重的值,直到損失收斂為一個合適的值。我們不妨將單輪更新用以下數學公式來表示:

在這里,alpha 符號表示學習率(Learning Rate),它對神經網絡的優化速度有影響。如果學習率較大,我們就能更快地給損失找到一個最小值,因為每次更新的權重跨度夠大,不過,從最終的值來看,我們或許無法找到一個很好的最小值,這是由于每次更新的權重跨度太大,就有很能會直接跨過這個很好的最小值。而采用更小的學習率則能夠解決這一問題,不過這就需要花很多步來讓神經網絡的損失減小到一個不錯的值。所以,我們需要讓學習率維持為一個最佳值,一般而言,0.01 是 alpha 的一個比較安全的取值。

然而僅僅使用梯度下降算法存在的一個大問題是,如下圖所示,損失無法趨近于全局最小值,而僅能不斷接近局部最小值。

SGD 局部最小值問題

我們從標記的綠點看起,第一個綠點之后的每個綠點都表示依次更新后的新權重和損失。由于偏導數(梯度)在無限接近局部最小值時基本上等于 0,因此梯度下降僅僅在找到局部最小值之前發生。所以,在求到局部最小值后,梯度下降基本上就會原封不動,并不會繼續嘗試去找到全局最小值。

上圖非常簡單,而在現實中,這張圖要復雜得多,存在很多個局部最小值,所以如果僅僅使用梯度下降算法,并不能確保能夠找到一個不錯的損失。針對這一問題,我們可以采用動量的方法。

動量(Momentum)

在動量中,我們需要做的基本上就是獲取權重在本次更新之前經過的所有更新的一些信息。根本上而言,如果權重持續往一個特定方向變化(增大或減小),它就會慢慢地積累下該方向的「動量」。因此,當權重遇到一些抵抗力并最終往相反的方向變化時,由于此前積累的動量,它就能夠繼續按原來的方向變化。

這與物理中的實際動量類似。我們想象有一個走廊和一個球,當我們在走廊的一遍發球時,它會持續滾動一段時間,在此過程中,它就為往該方向的前進獲取的動量。最后,當球滾動到底時,也不會就停在那里,而是往相反的方向再滾動一會,這是因為它在此之前所獲得的動量——即便重力會讓它停下來,然而動量會讓它繼續滾動一會。

我們嘗試從數學的角度來再現這一場景,以便讓梯度下降算法能夠在經過局部最小值后繼續嘗試取得全局最小值,公式如下:

動量算法的權重更新公式

權重更新公式(動量)

這里的 V 表示的是動量因子(Momentum Factor),如公式所示,在每次更新中,它都會將前一次更新的動量因子加到當前導數上。之后,我們僅需要將這個值加上權重,即可得出更新后的權重。其中 n 在這里指的是動量系數(Coefficient of Momentum),它決定權重每次往前移動所獲得的動量為多少。

當權重更新后,權重也會在動量因子中將所有此前的梯度存儲為一個部分。這樣的話,一旦權重需要往相反的方向變化,例如達到局部最小值時,它依舊會朝同一個方向變化一段時間,直到動量因子的數量逐漸減少,才往相反的方向變化。在多數情況下,動量因子通常都足以讓權重解決到了局部最小值便停止的問題。

動量可視化示例

動量算法的另一個附加優勢是:由于梯度的積累,權重會更快地收斂成一個合適的損失值。優化中還有哪些能夠讓梯度下降以更精準的方式執行的技術呢?我們下面來看。

涅斯捷羅夫梯度加速(Nesterov accelerated gradient,NAG)

在 NAG 中,我們要做的不是計算當前位置的梯度,而是計算與當前位置接近的未來位置的梯度。這樣做的原因是我們希望以一種更加精準的方式來計算梯度。動量在取得最小值前就會開始減小,因為其使用的梯度是未來位置的梯度。這種方法結果會提高收斂期間的穩定性并減少波動,進一步,它在實際應用中的表現也比單純用動量算法更好。

接下來我們來看具體如何在神經網絡權重的優化中使用 NAG。

擴展后的整個動量方程式如下:

擴展后的動量全方程式

這里的下一個權重值 W 由「n*v_old」和「alpha *當前梯度」以及當前權重相加得出。假設「alpha *當前梯度」的值變得很小,我們就能通過僅將「n*v_old」與當前權重值相加來趨近于下一個 W 值。

計算趨近于未來位置的權重值

現在,我們要計算的不是當前 W 值的梯度,而是未來 W 值的梯度。這就讓動量因子在真正面臨劇烈的梯度變化前提前適應,從而其訓練期間的穩定性得以提高。

涅斯捷羅夫動量公式

這個帶有 NAG 的新的動量方程式顯示,我們采用的是趨近于未來位置的 W 值的梯度而不是當前位置的 W 值的梯度。

涅斯捷羅夫可視化示例

如上面使用 NAG 方法的示例所示,我們給當前位置的 W 值加上了「n*v_old」以趨近于未來位置的 W 值。然后,我們計算未來位置的梯度值,并在計算「v_new」值時使用該值而非當前位置的梯度值。在本示例中,雖然在該場景中,動量在理論上應該是增加的,然而它在經過該位置時就開始減小了,這是因為未來位置的 W 值的梯度是指向相反方向的,所以動量值不增反減。

下面我們來看一些自適應優化方法。

自適應優化(Adaptive Optimization)

在自適應優化方法中,學習率(alpha)和動量系數(n)在整個訓練過程中都不再是連續的,而是連續地適應網絡中的各個權重,因而會隨權重一同變化。這些類型的優化算法都屬于自適應優化這類方法。

第一個要介紹的自適應優化算法是 Adagrad 算法。

Adagrad

涅斯捷羅夫是自適應梯度算法的簡稱。在該算法中,我們需要為權重的每輪更新更改學習率(alpha),它們在每輪更新期間的更改方式為:如果權重在較短時間內被更新的太多次,它就會減小;反之增大。

首先,每個權重都有自身的緩存(Cache)值,新的緩存值由自身原本的緩存值加上其在當前位置前的梯度的平方得出。

Adagrad 的緩存更新值

在訓練過程中,該緩存值會持續增大,新的權重更新公式如下所示:

Adagrad 權重更新公式

除了學習率(alpha)在整個訓練過程中會持續變化外,該公式與原本的梯度下降公式一樣。公式分母中的 E 是一個非常小的值,它是為了確保該公式不會出現「分子除以零」的情況。

具體而言,在該公式中,如果權重的更新非常大,緩存值就會增大,結果會導致學習率變小,從而讓權重的更新幅度持續減小。另一方面,如果權重并沒有發生較為明顯的更新,緩存值就會變得很小,結果會讓學習率增大,進而會增大權重的更新幅度。這就是 Adagrad 優化器的基本原理。

然而,該算法的缺點就是,無論權重過去的梯度為多少,緩存值總會增大些,這是因為公式中的平方結果是非負數。這樣的話,每個權重的學習率最終都會減小至一個非常小的值,直到訓練過程再也不會發生較明顯的變化為止。

下一個要介紹的自適應優化器——RMSProp 則能夠解決這一問題。

RMSProp?

與 Adagrad 相比,RMSProp 唯一的不同點就在于它的緩存更新策略。RMSProp 的公式引入了一個新參數——衰減率(Decay Rate),即 gamma:

RMSProp 的緩存權重更新公式

這里的 gamma 值一般為 0.9 或 0.99,因此對于每輪更新而言,相比于 Adagrad,公式中相加的與梯度的平方會乘上非常低的比率。這就確保了學習率能夠基于此前更新的權重,像在 Adagrad 算法中一樣持續變化,但與此同時,該學習率不會衰減得很快,因而它的訓練過程會持續更長的時間。

再接下來,我們要介紹的是 Adam 優化器,總體而言,它被廣泛視作深度學習優化中最佳的優化器之一。

Adam

Adam 有點像 RMSProp 和動量(Momentum)方法的結合體。我們首先計算 m 值,它表示的是當前位置的動量:

Adam 動量權重更新公式

該公式與動量公式的唯一區別就是,當前梯度值乘以的不是學習率(alpha)而是 (1-Beta_1)。

下一步我們計算累積的緩存值,這跟 RMSProp 中的計算方法一樣:

最后得到的權重更新公式如下:

Adam 權重更新公式

如上公式所示,我們通過計算動量值來累加梯度值,與此同時,我們可以通過利用緩存值來持續更改學習率。由于這兩個特征,Adam 的性能一般會比本文提到的以外的所有優化器都更好,因而在訓練神經網絡方面,它也是被開發人員偏好使用的優化器。在 Adam 的相關論文中,推薦 (Beta_1) 的參數取值為 0.9、(Beta_2) 的參數取值為 0.99 、(epsilon)的參數取值為 1e-08。

在本文中,我提到了多數深度學習從業者在基本的深度學習任務中最常用的幾個最重要的優化器,希望大家能夠通過閱讀本文有所收獲!

注:作者在本文中使用的 a(Loss)/a(Wi) 符號,實際上表示的是 Wi 值的 a(Loss)/a(W)。

via

https://medium.com/deep-learning-demystified/https-medium-com-deep-learning-demystified-understanding-optimizers-313b787a69fe?

————

編輯?∑Gemini

?來源:雷鋒網

總結

以上是生活随笔為你收集整理的数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化「看得见」!...的全部內容,希望文章能夠幫你解決所遇到的問題。

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