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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

2.1 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

發布時間:2025/4/5 pytorch 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.1 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

←上一篇↓↑下一篇→
1.15 總結回到目錄2.2 理解 mini-batch 梯度下降法

Mini-batch 梯度下降 (Mini-batch Gradient Descent)

本周將學習優化算法,這能讓你的神經網絡運行得更快。機器學習的應用是一個高度依賴經驗的過程,伴隨著大量迭代的過程,你需要訓練諸多模型,才能找到合適的那一個,所以,優化算法能夠幫助你快速訓練模型。

其中一個難點在于,深度學習沒有在大數據領域發揮最大的效果,我們可以利用一個巨大的數據集來訓練神經網絡,而在巨大的數據集基礎上進行訓練速度很慢。因此,你會發現,使用快速的優化算法,使用好用的優化算法能夠大大提高你和團隊的效率,那么,我們首先來談談mini-batch梯度下降法。

你之前學過,向量化能夠讓你有效地對所有 mmm 個樣本進行計算,允許你處理整個訓練集,而無需某個明確的公式。所以我們要把訓練樣本放大巨大的矩陣 XXX 當中去, X=[x(1)x(2)x(3)?x(m)]X=[x^{(1)}x^{(2)}x^{(3)}\cdots x^{(m)}]X=[x(1)x(2)x(3)?x(m)]YYY 也是如此, Y=[y(1)y(2)y(3)?y(m)]Y=[y^{(1)}y^{(2)}y^{(3)}\cdots y^{(m)}]Y=[y(1)y(2)y(3)?y(m)] ,所以 XXX 的維數是 (nx,m)(n_x,m)(nx?,m)YYY 的維數是 (1,m)(1,m)(1,m) ,向量化能夠讓你相對較快地處理所有 mmm 個樣本。如果 mmm 很大的話,處理速度仍然緩慢。比如說,如果 mmm 是500萬或5000萬或者更大的一個數,在對整個訓練集執行梯度下降法時,你要做的是,你必須處理整個訓練集,然后才能進行一步梯度下降法,然后你需要再重新處理500萬個訓練樣本,才能進行下一步梯度下降法。所以如果你在處理完整個500萬個樣本的訓練集之前,先讓梯度下降法處理一部分,你的算法速度會更快,準確地說,這是你可以做的一些事情。

你可以把訓練集分割為小一點的子集訓練,這些子集被取名為mini-batch,假設每一個子集中只有1000個樣本,那么把其中的 x(1)x^{(1)}x(1)x(1000)x^{(1000)}x(1000) 取出來,將其稱為第一個子訓練集,也叫做mini-batch,然后你再取出接下來的1000個樣本,從 x(1001)x^{(1001)}x(1001)x(2000)x^{(2000)}x(2000) ,然后再取1000個樣本,以此類推。

接下來我要說一個新的符號,把 x(1)x^{(1)}x(1)x(1000)x^{(1000)}x(1000) 稱為 X(1)X^{(1)}X(1)x(1001)x^{(1001)}x(1001)x(2000)x^{(2000)}x(2000) 稱為 X(2)X^{(2)}X(2) ,如果你的訓練樣本一共有500萬個,每個mini-batch都有1000個樣本,也就是說,你有5000個mini-batch,因為5000乘以1000就是5000萬。

你共有5000個mini-batch,所以最后得到是 X(5000)X^{(5000)}X(5000)

YYY 也要進行相同處理,你也要相應地拆分 YYY 的訓練集,所以這是 Y(1)Y^{(1)}Y(1) ,然后從 y(1001)y^{(1001)}y(1001)y(2000)y^{(2000)}y(2000) ,這個叫 Y(2)Y^{(2)}Y(2) ,一直到 Y(5000)Y^{(5000)}Y(5000)

mini-batch的數量 ttt 組成了 X(t)X^{(t)}X(t)Y(t)Y^{(t)}Y(t) ,這就是1000個訓練樣本,包含相應的輸入輸出對。

在繼續課程之前,先確定一下我的符號,之前我們使用了上角小括號 (i)(i)(i) 表示訓練集里的值,所以 x(i)x^{(i)}x(i) 是第 iii 個訓練樣本。我們用了上角中括號 [l][l][l] 來表示神經網絡的層數, z[l]z^{[l]}z[l] 表示神經網絡中第 lll 層的 zzz 值,我們現在引入了大括號 ttt 來代表不同的mini-batch,所以我們有 X(t)X^{(t)}X(t)Y(t)Y^{(t)}Y(t) ,檢查一下自己是否理解無誤。

X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} 的維數:如果 X{1}X^{\{1\}}X{1} 是一個有1000個樣本的訓練集,或者說是1000個樣本的 xxx 值,所以維數應該是 (nx,1000)(n_x,1000)(nx?,1000)X{2}X^{\{2\}}X{2} 的維數應該是 (nx,1000)(n_x,1000)(nx?,1000) ,以此類推。因此所有的子集維數都是 (nx,1000)(n_x,1000)(nx?,1000) ,而這些( Y{t}Y^{\{t\}}Y{t} )的維數都是 (1,1000)(1,1000)(1,1000)

解釋一下這個算法的名稱,batch梯度下降法指的是我們之前講過的梯度下降法算法,就是同時處理整個訓練集,這個名字就是來源于能夠同時看到整個batch訓練集的樣本被處理,這個名字不怎么樣,但就是這樣叫它。

相比之下,mini-batch梯度下降法,指的是我們在下一張幻燈片中會講到的算法,你每次同時處理的單個的mini-batch X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} ,而不是同時處理全部的 XXXYYY 訓練集。

那么究竟mini-batch梯度下降法的原理是什么?在訓練集上運行mini-batch梯度下降法,你運行for t=1……5000,因為我們有5000個各有1000個樣本的組,在for循環里你要做得基本就是對 X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} 執行一步梯度下降法。假設你有一個擁有1000個樣本的訓練集,而且假設你已經很熟悉一次性處理完的方法,你要用向量化去幾乎同時處理1000個樣本。

首先對輸入也就是 X{t}X^{\{t\}}X{t} ,執行前向傳播,然后執行 z[1]=W[1]X+b[1]z^{[1]}=W^{[1]}X+b^{[1]}z[1]=W[1]X+b[1] ,之前我們這里只有,但是現在你正在處理整個訓練集,你在處理第一個mini-batch,在處理mini-batch時它變成了 X{t}X^{\{t\}}X{t} ,即 z[1]=W[1]X{t}+b[1]z^{[1]}=W^{[1]}X^{\{t\}}+b^{[1]}z[1]=W[1]X{t}+b[1] ,然后執行 A[1]k=g[1](Z[1])A^{[1]k}=g^{[1]}(Z^{[1]})A[1]k=g[1](Z[1]) ,之所以用大寫的 ZZZ 是因為這是一個向量內涵,以此類推,直到 A[L]=g[L](Z[L])A^{[L]}=g^{[L]}(Z^{[L]})A[L]=g[L](Z[L]) ,這就是你的預測值。注意這里你需要用到一個向量化的執行命令,這個向量化的執行命令,一次性處理1000個而不是500萬個樣本。接下來你要計算損失成本函數 JJJ ,因為子集規模是1000, J=11000∑i=1lL(y^(i),y(i))J=\frac1{1000}\sum_{i=1}^lL(\hat{y}^{(i)},y^{(i)})J=10001?i=1l?L(y^?(i),y(i)) ,說明一下,這( L(y^(i),y(i))L(\hat{y}^{(i)},y^{(i)})L(y^?(i),y(i)) )指的是來自于mini-batch X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} 中的樣本。

如果你用到了正則化,你也可以使用正則化的術語, J=11000∑i=1lL(y^(i),y(i))+λ21000∑l∣∣w[l]∣∣F2J=\frac1{1000}\sum_{i=1}^lL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{21000}\sum_l||w^{[l]}||^2_FJ=10001?i=1l?L(y^?(i),y(i))+21000λ?l?w[l]F2? ,因為這是一個mini-batch的損失,所以我將 JJJ 損失記為上角標 ttt ,放在大括號里( J{t}=11000∑i=1lL(y^(i),y(i))+λ21000∑l∣∣w[l]∣∣F2J^{\{t\}}=\frac1{1000}\sum_{i=1}^lL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{21000}\sum_l||w^{[l]}||^2_FJ{t}=10001?i=1l?L(y^?(i),y(i))+21000λ?l?w[l]F2? )。

你也會注意到,我們做的一切似曾相識,其實跟之前我們執行梯度下降法如出一轍,除了你現在的對象不是 XXXYYY ,而是 X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} 。接下來,你執行反向傳播來計算 J{t}J^{\{t\}}J{t} 的梯度,你只是使用 X{t}X^{\{t\}}X{t}Y{t}Y^{\{t\}}Y{t} ,然后你更新加權值, WWW 實際上是 W[l]W^{[l]}W[l] ,更新為 W[l]:=W[l]?αdW[l]W^{[l]}:=W^{[l]}-\alpha dW^{[l]}W[l]:=W[l]?αdW[l] ,對 bbb 做相同處理, b[l]:=b[l]?αdb[l]b^{[l]}:=b^{[l]}-\alpha db^{[l]}b[l]:=b[l]?αdb[l] 。這是使用mini-batch梯度下降法訓練樣本的一步,我寫下的代碼也可被稱為進行“一代”(1 epoch)的訓練。一代這個詞意味著只是一次遍歷了訓練集。

使用batch梯度下降法,一次遍歷訓練集只能讓你做一個梯度下降,使用mini-batch梯度下降法,一次遍歷訓練集,能讓你做5000個梯度下降。當然正常來說你想要多次遍歷訓練集,還需要為另一個while循環設置另一個for循環。所以你可以一直處理遍歷訓練集,直到最后你能收斂到一個合適的精度。

如果你有一個丟失的訓練集,mini-batch梯度下降法比batch梯度下降法運行地更快,所以幾乎每個研習深度學習的人在訓練巨大的數據集時都會用到,下一個視頻中,我們將進一步深度討論mini-batch梯度下降法,你也會因此更好地理解它的作用和原理。

課后PPT




←上一篇↓↑下一篇→
1.15 總結回到目錄2.2 理解 mini-batch 梯度下降法

總結

以上是生活随笔為你收集整理的2.1 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。

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