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

歡迎訪問 生活随笔!

生活随笔

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

ChatGpt

AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念

發布時間:2024/7/23 ChatGpt 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AI應用開發基礎傻瓜書系列2-神經網絡中反向傳播與梯度下降的基本概念

Copyright ? Microsoft Corporation. All rights reserved.
適用于License版權許可
更多微軟人工智能學習資源,請見微軟人工智能教育與學習共建社區

  • Content
  • 01.0-神經網絡的基本工作原理
  • 01.1-基本數學導數公式
  • 01.2-Python-Numpy庫的點滴
  • 02.0-反向傳播與梯度下降
  • 02.1-線性反向傳播
  • 02.2-非線性反向傳播
  • 02.3-梯度下降
  • 03.0-損失函數
  • 03.1-均方差損失函數
  • 03.2-交叉熵損失函數
  • 04.0-單入單出單層-單變量線性回歸
  • 04.1-最小二乘法
  • 04.2-梯度下降法
  • 04.3-神經網絡法
  • 04.4-梯度下降的三種形式
  • 04.5-實現邏輯非門
  • 05.0-多入單出單層-多變量線性回歸
  • 05.1-正規方程法
  • 05.2-神經網絡法
  • 05.3-樣本特征數據的歸一化
  • 05.4-歸一化的后遺癥
  • 05.5-正確的推理方法
  • 05.6-歸一化標簽值
  • 06.0-多入多出單層神經網絡-多變量線性分類
  • 06.1-二分類原理
  • 06.2-線性二分類實現
  • 06.3-線性二分類結果可視化
  • 06.4-多分類原理
  • 06.5-線性多分類實現
  • 06.6-線性多分類結果可視化
  • 07.0-激活函數
  • 07.1-擠壓型激活函數
  • 07.2-半線性激活函數
  • 07.3-用雙曲正切函數分類
  • 07.4-實現邏輯與門和或門
  • 08.0-單入單出雙層-萬能近似定理
  • 08.1-雙層擬合網絡的原理
  • 08.2-雙層擬合網絡的實現
  • 09.0-多入多出雙層-雙變量非線性分類
  • 09.1-實現邏輯異或門
  • 09.2-理解二分類的工作原理
  • 09.3-非線性多分類
  • 09.4-理解多分類的工作原理
  • 10.0-調參與優化
  • 10.1-權重矩陣初始化
  • 10.2-參數調優
  • 10.3-搜索最優學習率
  • 10.4-梯度下降優化算法
  • 10.5-自適應學習率算法
  • 11.0-深度學習基礎
  • 11.1-三層神經網絡的實現
  • 11.2-驗證與測試
  • 11.3-梯度檢查
  • 11.4-手工測試訓練效果
  • 11.5-搭建深度神經網絡框架
  • 12.0-卷積神經網絡
  • 12.1-卷積
  • 12.2-池化
  • 14.1-神經網絡模型概述
  • 14.2-Windows模型的部署
  • 14.3-Android模型的部署

第二篇:神經網絡中反向傳播與梯度下降的基本概念

預警:本篇博客中會涉及到偏導數的概念,但是非常初級,很容易理解,建議硬著頭皮看,跟著算一遍,看完之后保證會覺得人生美好了很多。

反向傳播和梯度下降這兩個詞,第一眼看上去似懂非懂,不明覺厲。這兩個概念是整個神經網絡中的重要組成部分,是和誤差函數/損失函數的概念分不開的。

神經網絡訓練的最基本的思想就是:先“蒙”一個結果,我們叫預測結果a,看看這個預測結果和事先標記好的訓練集中的真實結果y之間的差距,然后調整策略,再試一次,這一次就不是“蒙”了,而是有依據地向正確的方向靠近。如此反復多次,一直到預測結果和真實結果之間相差無幾,亦即|a-y|->0,就結束訓練。

在神經網絡訓練中,我們把“蒙”叫做初始化,可以隨機,也可以根據以前的經驗給定初始值。即使是“蒙”,也是有技術含量的。

通俗地理解反向傳播

舉個通俗的例子,Bob拿了一支沒有準星的步槍,或者是準星有bug,或者是Bob眼神兒不好看不清靶子,或者是霧很大…反正就是Bob很倒霉。第一次試槍后,拉回靶子一看,彈著點偏左了,于是在第二次試槍時,Bob就會有意識地向右側偏幾毫米,再看靶子上的彈著點,如此反復幾次,Bob就會掌握這支步槍的脾氣了。下圖顯示了Bob的5次試槍過程:

在這個例子中:

  • 每次試槍彈著點和靶心之間的差距就叫做誤差,可以用一個誤差函數來表示,比如差距的絕對值,如圖中的紅色線。

  • 一共試槍5次,就是迭代/訓練了5次的過程 。

  • 每次試槍后,把靶子拉回來看彈著點,然后調整下一次的射擊角度的過程,叫做反向傳播。注意,把靶子拉回來看和跑到靶子前面去看有本質的區別,后者容易有生命危險,因為還有別的射擊者。一個不恰當的比喻是,在數學概念中,人跑到靶子前面去看,叫做正向微分;把靶子拉回來看,叫做反向微分。

  • 每次調整角度的數值和方向,叫做梯度。比如向右側調整1毫米,或者向左下方調整2毫米。如圖中的綠色矢量線。

上圖是每次單發點射,所以每次訓練樣本的個數是1。在實際的神經網絡訓練中,通常需要多個樣本,做批量訓練,以避免單個樣本本身采樣時帶來的誤差。在本例中,多個樣本可以描述為連發射擊,假設一次可以連打3發子彈,每次的離散程度都類似,如下圖所示:

  • 如果每次3發子彈連發,這3發子彈的彈著點和靶心之間的差距之和再除以3,叫做損失,可以用損失函數來表示。

其實損失就是所有樣本的誤差的總和,所以有時候損失函數可以和誤差函數混用概念。

其實射擊還不這么簡單,如果是遠距離狙擊,還要考慮空氣阻力和風速,在神經網絡里,空氣阻力和風速可以對應到隱藏層的概念上。

用數學概念理解反向傳播

我們再用一個純數學的例子來說明反向傳播的概念。

假設我們有一個函數
z=x?y,其中:x=w?2+b,y=b+1,即:z=(w?2+b)?(b+1)z = x * y,其中: x = w * 2 + b, y = b + 1,即: z = (w * 2 + b) * (b + 1)z=x?y:x=w?2+b,y=b+1:z=(w?2+b)?(b+1)

關系如下圖:

注意這里x,
y, z不是變量,w,
b是才變量,因為在神經網絡中,我們要最終求解的是w和b的值,x,y,z只是樣本值。

當w = 3,
b = 4時,會得到如下結果

最終的z值,受到了前面很多因素的影響:變量w,變量b,計算式x,計算式y。常數是個定值,不考慮。目前的z=50,如果我們想讓z變大一些,w和b應該如何變化呢?

我們從z開始一層一層向回看,圖中各節點關于變量b的偏導計算結果如下圖:

因為z = x

  • y,其中x = w
  • 2 + b,y = b +
    1

所以:

?z?b=?z?x??x?b+?z?y??y?b=5?1+10?1=15\frac{\partial{z}}{\partial{b}}=\frac{\partial{z}}{\partial{x}}*\frac{\partial{x}}{\partial{b}}+\frac{\partial{z}}{\partial{y}}*\frac{\partial{y}}{\partial{b}}=5*1+10*1=15?b?z?=?x?z???b?x?+?y?z???b?y?=5?1+10?1=15

其中:

?z?x=??x(x?y)=y=5\frac{\partial{z}}{\partial{x}}=\frac{\partial{}}{\partial{x}}(x*y)=y=5?x?z?=?x??(x?y)=y=5

?z?y=??y(x?y)=x=10\frac{\partial{z}}{\partial{y}}=\frac{\partial{}}{\partial{y}}(x*y)=x=10?y?z?=?y??(x?y)=x=10

?x?b=??b(w?2+b)=1\frac{\partial{x}}{\partial{b}}=\frac{\partial{}}{\partial{b}}(w*2+b)=1?b?x?=?b??(w?2+b)=1

?y?b=??b(b+1)=1\frac{\partial{y}}{\partial{b}}=\frac{\partial{}}{\partial{b}}(b+1)=1?b?y?=?b??(b+1)=1

有一個很有趣的問題是:z
= x * y = 10 * 5 = 50,表面看起來x=10,y=5,似乎x對z的貢獻較大。那么x的微小變化和y的微小變化對z來說,哪一個貢獻大呢?

我們假設只有x變化時,△x =
0.1, 則z = (x

  • △x) * y
    = 10.1 * 5 = 50.5

我們再假設只有y變化時,△y =
0.1, 則z = x *
(y +△y) = 10

  • 5.1 = 51

50.5 < 51,說明y的微小變化對z的貢獻比較大,這個從

?z?x=??x(x?y)=5&lt;?z?y=??y(x?y)=10\frac{\partial{z}}{\partial{x}}=\frac{\partial{}}{\partial{x}}(x*y)=5 &lt; \frac{\partial{z}}{\partial{y}}=\frac{\partial{}}{\partial{y}}(x*y)=10?x?z?=?x??(x?y)=5<?y?z?=?y??(x?y)=10

和這兩個值的比較來看也可以證明。而△x和△y就可以理解為梯度值。

同理,我們也可以得到圖中各變量對w的偏導值:

從以上兩圖可以看出,反向微分保留了所有變量(包括中間變量)對結果z的影響。若z為誤差函數,則對圖進行一次計算,可以得到所有節點對z的影響,即梯度值,下一步就可以利用這些梯度值來更新w和b的權重。

w的變化和b的變化,哪一個對z的變化貢獻大?從圖中還可以注意到:

?z?b=15\frac{\partial{z}}{\partial{b}}=15?b?z?=15

?z?w=10\frac{\partial{z}}{\partial{w}}=10?w?z?=10

所以每次w和b的變化值是不相同的,b的變化會比w大一些,也就是每一步的跨度大一些,這個是與z
= xy = (w2+b)*(b+1)這個算式相關的,并不代表神經網絡中實際情況。

反向傳播的實際計算過程(單變量)

還是用上面的例子,目前:

  • w=3w = 3w=3

  • b=4b=4b=4

  • x=w?2+b=10x = w*2+b = 10x=w?2+b=10

  • y=b+1=5y = b+1 = 5y=b+1=5

  • z=x?y=50z = x*y=50z=x?y=50

假設我們最終的目的想讓z
= 60,只改變b的值,如何實現?

答案就是偏導數:

?z?b=ΔzΔb=15\frac{\partial{z}}{\partial{b}}=\frac{\Delta{z}}{\Delta{b}}=15 ?b?z?=ΔbΔz?=15

目前z=50, 距離60相差10,所以我們令Δz=60?50=10\Delta{z}=60-50=10Δz=60?50=10,則:

ΔzΔb=15=10Δb\frac{\Delta{z}}{\Delta{b}}=15=\frac{10}{\Delta{b}} \\ ΔbΔz?=15=Δb10?

所以:

Δb=0.66667\Delta{b} = 0.66667Δb=0.66667

再帶入式子中(順便說一句,下面這個計算過程就叫做前向計算

  • w=3w = 3w=3

  • b=4+0.66667=4.66667b=4+0.66667=4.66667b=4+0.66667=4.66667

  • x=w?2+b=10.66667x = w*2+b = 10.66667x=w?2+b=10.66667

  • y=b+1=5.66667y = b+1 = 5.66667y=b+1=5.66667

  • z=x?y=10.66667?5.66667=60.4445z = x*y=10.66667*5.66667=60.4445z=x?y=10.66667?5.66667=60.4445

一下子超過60了,咋辦?再來一次(下面的過程就叫做反向傳播):

我們令Δz=60?60.4445=?0.4445\Delta{z}=60-60.4445=-0.4445Δz=60?60.4445=?0.4445,則:

ΔzΔb=15=?0.4445Δb\frac{\Delta{z}}{\Delta{b}}=15=\frac{-0.4445}{\Delta{b}} \\ ΔbΔz?=15=Δb?0.4445?

所以:

Δb=?0.02963\Delta{b} = -0.02963Δb=?0.02963

再帶入式子中:

  • w=3w = 3w=3

  • b=4.66667?0.02963=4.63704b=4.66667-0.02963=4.63704b=4.66667?0.02963=4.63704

  • x=w?2+b=10.63704x = w*2+b = 10.63704x=w?2+b=10.63704

  • y=b+1=5.63704y = b+1 = 5.63704y=b+1=5.63704

  • z=x?y=10.63704?5.63704=59.96z = x*y =10.63704*5.63704=59.96z=x?y=10.63704?5.63704=59.96

咦哈!59.96了!再迭代幾次,應該可以近似等于60了,直到誤差不大于0.00001時,我們就可以結束迭代了,對于計算機來說,這些運算的執行速度很快。

有的同學會說了:這個問題不是用數學公式倒推求解一個二次方程,就能直接得到準確的b值嗎?是的!但是我們是要說明機器學習的方法,機器并不會解二次方程,而且很多時候不是用二次方程就能解決實際問題的。而上例所示,是用機器所擅長的迭代計算的方法來不斷逼近真實解,這就是機器學習的真諦!而且這種方法是普遍適用的。

用二維平面函數說明梯度下降原理

很多資料中會用下面這個圖來說明梯度下降,但是都沒有說清楚以下幾個問題:

1) 為啥用這個看上去像y=x2y = x^2y=x2族的函數來說明梯度下降?

2) 在最低點的左側,梯度值是負數;在最低點的右側,梯度值是正數。為什么說是“下降”?

3) 為什么1—>2,2—>3等等的連線不是這條曲線的切線呢,而好像是弦線?

為何用$y =

x^2$函數?

這是因為有一種損失函數的形式就是均方差,亦即:

loss=∑i(ai?yi)2loss = \sum_{i}(a_i - y_i) ^ 2loss=i?(ai??yi?)2

其中a是本次迭代的預測結果,y是樣本中的真實結果。我們的目的就是在這個函數上求最小值,使loss最小,這樣樣本值和預測值就會非常非常接近,以便于我們以后預測不在樣本中的真實數據。

為什么說是“梯度下降”?

“梯度下降”,剛接觸這個詞時,我總是往“降低難度”或“降低維度”方面去理解,因為有個“下降”的動詞在里面。而實際上,“下降”在這里面的含義是“與導數相反的方向”的意思。

我們假設上面這個圖形的函數是y=(x?1)2+0.001y = (x-1)^2+0.001y=(x?1)2+0.001,則y’x=2(x?1)y’_x = 2(x-1)yx?=2(x?1)

  • 在點B上,這個函數的切線(綠色)是指向下方的(Y軸方向),所以是個負數:假設XBX_BXB?
    = 0.1, 則y’=2?(0.1?1)=?1.8y’ = 2*(0.1-1) = -1.8y=2?(0.1?1)=?1.8

  • 在F點上,切線(綠色)向上:假設XFX_FXF?
    = 1.5, 則y’=2?(1.5?1)=1y’ = 2*(1.5-1) = 1y=2?(1.5?1)=1,是個正數。

而在標準的權重更新公式里:

w=w–η?Δww = w – η*\Delta{w}w=wη?Δw

b=b–η?Δbb = b – η*\Delta{b}b=bη?Δb

可以看到無論是w還是b,都是用上一次的權重值減去步長×\times×梯度。注意,我們在上一個例子中,是用b直接加減Δb\Delta{b}Δb的,并沒有用到η,或者說η=1。這樣的問題就是步長可能過大,一下子就跳過了極值點。

  • 當梯度(y’)是正數時,即點F的位置,x=x?η?1x = x - η*1x=x?η?1,切線向上,x值會變小,權重值會從右側向x=1靠近;

  • 當梯度(y’)是負數時,亦即點B的位置,切線向下,x值會變大:$x = x

  • η*(-1.8)
    = x + η*1.8$,最終運算結果變成了加法,與切線方向相反,權重值會從左側向x=1靠近。

所以總體上看,無論x在極值的左側還是右側,都會向中間(坡底)靠攏,確實是“下降”了。

不知不覺中,我們已經接觸到了第一個神經網絡中的超參η,即步長值,這個值對于神經網絡訓練非常重要,決定了訓練時間的長短,它的取值一般是從0.1到0.0001,自己選擇。

曲線和弦線的關系?

  • 我們先知道了A點的切線的方向,亦即黃色的線,但是不知道長度

  • 我們有步長值η,以及梯度下降公式X1=X0–η?dxX_1 = X_0 – η * dxX1?=X0?η?dx

  • 因為yx′的導數dx=2(X?1),η=0.1,X0=0.2,于是有X1=X0–0.1?2(X0?1)=0.36y&#x27;_x的導數dx = 2(X-1), η = 0.1, X_0 = 0.2, 于是有X_1 = X_0–0.1*2(X_0-1) = 0.36yx?dx=2(X?1),η=0.1,X0?=0.2,X1?=X0?0.1?2(X0??1)=0.36,這就等同于我們知道了切線的長度,亦即綠色的線的長度和方向都確定了

  • 然后我們可以畫出紅色的線(亦即弦線)

  • 所以,弦線在這里面沒啥用途,只是表示一個迭代跳躍的動作而已。實際的變化值已經由綠色的線定義好了。

    參考資料

    • http://colah.github.io/posts/2015-08-Backprop/

    點擊這里提交問題與建議
    聯系我們: msraeduhub@microsoft.com
    學習了這么多,還沒過癮怎么辦?歡迎加入“微軟 AI 應用開發實戰交流群”,跟大家一起暢談AI,答疑解惑。掃描下方二維碼,回復“申請入群”,即刻邀請你入群。

    總結

    以上是生活随笔為你收集整理的AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

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