【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )
文章目錄
- I . 梯度下降 Gradient Descent 簡介 ( 梯度下降過程 | 梯度下降方向 )
- II . 梯度下降 示例說明 ( 單個參數 )
- III . 梯度下降 示例說明 ( 多個參數 )
- IV . 梯度下降 總結 ( 定義損失函數 | 損失函數求導 )
- V . 梯度下降 方法
- VI . 批量梯度下降法
- VII . 隨機梯度下降法
- VIII . 小批量梯度下降法
I . 梯度下降 Gradient Descent 簡介 ( 梯度下降過程 | 梯度下降方向 )
1 . 后向傳播算法 : 針對每個數據樣本 , 從輸入層到輸出層傳播輸入 , 這是向前傳播輸入 , 然后從輸出層向輸入層傳播誤差 , 這是向后傳播誤差 ;
② 權重和偏置更新 : 傳播誤差過程中 , 對神經元網絡中 , 單元連接的權重 , 和單元本身的偏置 , 進行更新 ;
③ 單元連接權重增量 : Δwij=(l)ErrjOi\Delta w_{ij} = (l) Err_j O_iΔwij?=(l)Errj?Oi?
③ 單元偏置增量 : Δθj=(l)Errj\Delta \theta_j = (l) Err_jΔθj?=(l)Errj?
2 . 權重和偏置更新要求 : 更新的時候 , 涉及到 權重 和 偏置的增量 , 分別是 Δwij\Delta w_{ij}Δwij? 和 Δθj\Delta \theta_jΔθj? , 這兩個增量值要使損失函數取最小值 , 并且該最小值越來越小 ;
3 . 權重和偏置更新方向 : 這兩個增量的方向要求是 , 損失函數不僅要下降 , 并且損失函數下降的速度越快越好 , 這個損失函數下降最快的方向 , 就是梯度的反方向 , 梯度通常是對損失函數進行求導得到的 ;
損失函數 下降最快的方向 , 是梯度的反方向 ;
梯度通常是對損失函數進行求導得來的 ;
在某一點求導 , 就是這一點的曲線的切線的方向 ;
這里的方向只有兩個 , 坐標軸正向 ( 從左到右 | 從負數到正數 | 增加 ) , 坐標軸反向 ( 從右到左 | 從負數到正數 | 減小 ) ;
4 . 權重和偏置更新步長 : 有了梯度以后 , 對 單元連接權重 和 單元偏置 參數進行更新時 , 還涉及到學習率 lll , 這個學習率 lll 又叫做超參數 ;
II . 梯度下降 示例說明 ( 單個參數 )
1 . 坐標軸說明 : 下圖是損失函數 f(θ)f(\theta)f(θ) , 橫軸 θ\thetaθ 是指需要更新的 權重 或 偏置 參數 , 縱軸是損失函數 f(θ)f(\theta)f(θ) 的計算結果 ;
2 . 損失函數最小值 : 取一個合適的 θ\thetaθ 值 , 使損失函數值 f(θ)f(\theta)f(θ) 大小最小 , 此時是圖中黃色的點對應的 θ^\hat{\theta}θ^ 值 ;
3 . 初始值 : 圖中最左側的值 , 標注為 Radom initial value , 即 隨機初始值 ;
4 . 初始值變化趨勢 : 每次對初始值進行一次變化 , 變化的方向是逐步使損失函數趨于最小 , 就是圖中初始值開始到最小值的箭頭方向 ;
5 . 梯度下降算法 : 梯度下降算法的目的是為了使損失函數 f(θ)f(\theta)f(θ) 達到最小值 ;
6 . 梯度本質 : 梯度 或 求導 , 本質上是求某一點在曲線上的切線 , 切線的斜率表示的就是導數 ;
7 . 初始值累加方向 : 當 θ\thetaθ 是初始值時 , 切線的斜率是負數 , θ\thetaθ 是向右走 , 每次累加的 Δθ\Delta\thetaΔθ 是正數 , 因此 θ\thetaθ 值需要減去梯度的值 , 相當于加上了一個正數 , 因此說 θ\thetaθ 的方向與斜率是反方向 ( 方向指的是符號的正負號方向 ) , 即與梯度是反向方的 ; 每次累加的 Δθ\Delta\thetaΔθ 就是在 xxx 軸上的兩點之間的距離 ;
8 . 方向說明 ( 重點 ) :
損失函數 下降最快的方向 , 是梯度的反方向 ;
梯度通常是對損失函數進行求導得來的 ;
在某一點求導 , 就是這一點的曲線的切線的方向 ;
這里的方向只有兩個 , 坐標軸正向 ( 從左到右 | 從負數到正數 | 增加 ) , 坐標軸反向 ( 從右到左 | 從負數到正數 | 減小 ) ;
9 . 學習步長 : 由初始值開始迭代 , 對 θ\thetaθ 參數進行更新 , 最終取得使損失函數值最小 , 即橫軸坐標軸參數等于 θ^\hat{\theta}θ^ ; 該步長代表了該操作的效率 , 步長越大 , 速度越快 ;
10 . 梯度下降算法本質 : 對于當前的參數 θ\thetaθ 值 , 計算 f(θ)f(\theta)f(θ) 的梯度 , 即導數 / 斜率 ( 負的 ) , 在梯度的反方向 ( 正數方向 ) 走一個步長 , 然后繼續向前傳播輸入 , 再次向后傳播誤差時 , 繼續計算其 θ\thetaθ 值對應的梯度值 , 迭代 NNN 多次 , 即可得到使損失函數最小的參數值 ;
上圖是一個凸函數 , 最小值只有一個 , 比較好分析 , 實際情況是 , 同時存在多個甚至無數個能使 損失函數 f(θ)f(\theta)f(θ) 取到最小值的 θ\thetaθ 值 ;
III . 梯度下降 示例說明 ( 多個參數 )
1 . 兩個參數的損失函數 : 下圖是有兩個參數的情況下的損失函數情況 ;
2 . 損失函數示例 :
z=x2+2y2z = x^2 + 2y^2z=x2+2y2
① 分析基礎 : 該損失函數 zzz 有兩個參數 , 該函數就不能再二維坐標軸中進行分析了 , 需要在三維坐標空間中進行分析 ;
② 坐標軸說明 : zzz 軸是損失函數值 , xxx 軸是 xxx 參數的取值 , yyy 軸是 yyy 參數的取值 ;
③ 梯度下降要求 : 不僅要在 xxx 軸損失函數下降最快 , 在 yyy 軸損失函數也要下降最快 ; 如下圖中的藍色箭頭方向 ;
3 . 參數說明 :
如果有 111 個參數 , 就是在二維空間中進行分析 , 如在 xxx 軸 和 yyy 軸平面上分析 ;
如果有 222 個參數 , 就是在 333 維空間中進行分析 , 如在 xxx , yyy 軸 和 zzz 軸 三維空間上分析 ;
?\vdots?
如果有 nnn 個參數 , 就是在 n+1n + 1n+1 維空間中進行分析 ;
最終的效果可能不是這樣的 , 實際可能會存在很多彎曲波折 , x,yx , yx,y 參數數值 , 在各軸上 , 按照鋸齒形狀下降 , 但是大概的趨勢是這樣的 ;
IV . 梯度下降 總結 ( 定義損失函數 | 損失函數求導 )
1 . 單個參數的梯度下降算法公式表示 :
θjnew=θjold?α??θjoldJ(θ)\theta^{new}_j = \theta^{old}_j - \alpha \frac{ \partial }{ \partial \theta^{old}_j} J (\theta)θjnew?=θjold??α?θjold???J(θ)
θj\theta_jθj? 表示第 jjj 個參數 ;
θjnew\theta^{new}_jθjnew? 表示新的第 jjj 個參數 ;
θjold\theta^{old}_jθjold? 表示舊的第 jjj 個參數 ;
α\alphaα 指的是學習率 , 或梯度下降的步長 ;
如果是單個參數值 , 是對 目標函數 / 損失函數 J(θ)J (\theta)J(θ) 關于當前的第 jjj 個參數 θj\theta_jθj? 進行求導 , 只對一個參數進行求導 ;
2 . 使用矩陣的形式表示多個參數的梯度下降算法 :
θnew=θold=α?θJ(θ)\theta^{new} = \theta^{old} = \alpha \nabla_\theta J (\theta)θnew=θold=α?θ?J(θ)
θ\thetaθ 表示很多參數的矩陣 ;
θnew\theta^{new}θnew 表示新的參數的矩陣 ;
θold\theta^{old}θold 表示舊的參數矩陣 ;
α\alphaα 指的是學習率 , 或梯度下降的步長 ;
?θJ(θ)\nabla_\theta J (\theta)?θ?J(θ) 表示梯度的反向方 , 這是對 目標函數 / 損失函數 J(θ)J (\theta)J(θ) 關于 θ\thetaθ 進行求導 , 注意 θ\thetaθ 是很多參數組成的矩陣 , 需要對每個參數進行求導 , 即偏導 , 然后將這些偏導整合起來 ;
3 . 梯度下降算法實現 :
① 定義損失函數 : 先定義損失函數 , 一般是誤差平方和 ;
② 求參數增量 : 對損失函數進行求導 , 使用導數 乘以 學習率 ( 步長 ) , 得到一個 參數增量 , 這里的參數指的是 權值 和 偏置 ;
③ 偽代碼實現 :
//迭代循環執行下面的代碼 , 每循環一次 , 梯度下降一次 , 損失函數的值就會變小一次 while true : //對損失函數進行求導 , 也就是評估梯度 , J 代表損失函數 , theta 代表參數值 // 本質是 對損失函數 J 關于 theta 求導theta_gradient = evaluate_gradient ( J , corpus , theta )//左側的 theta 是新的 theta , 右側的 theta 是舊的 theta // alpha 是學習率 , 也是梯度的步長 , theta_gradient 是損失函數導數theta = theta - alpha * theta_gradientV . 梯度下降 方法
1 . 常用的梯度下降方法 :
① 批量梯度下降法 : Batch Gradient Descent ;
② 隨機梯度下降法 : Stochastic Gradient Descent ;
③ 小批量梯度下降法 : Mini-batch Gradient Descent ; 介于上述兩者之間 ;
VI . 批量梯度下降法
批量梯度下降法 : 梯度下降的最常用方法 , 反向傳播誤差時 , 使用誤差更新參數時 , 參考所有樣本的誤差更新 權值 和 偏置參數 , 如果有 nnn 個樣本 , 每次迭代時 , 將這 nnn 個樣本全部處理一遍 , 每次迭代都要使用所有的樣本進行參數更新 ; 公式如下 :
θ′=θ?α∑j=1n(hθ(x0(j),x1(j),?,xn(j))?yj)xi(j)\theta' = \theta - \alpha \sum_{j=1}^n( h_\theta ( x_0^{(j)}, x_1^{(j)}, \cdots , x_n^{(j)} ) - y_j) x_i^{(j)}θ′=θ?αj=1∑n?(hθ?(x0(j)?,x1(j)?,?,xn(j)?)?yj?)xi(j)?
樣本個數 : nnn 代表樣本個數 ;
梯度計算 : 此處計算梯度 , 使用了所有的樣本的梯度數據 ;
VII . 隨機梯度下降法
隨機梯度下降法 : 求梯度的時候 , 隨機選擇一個樣本進行 , 使用該樣本的誤差更新參數 ; 公式如下 , 相對于批量梯度下降法的公式只是刪除了 總和 符號 , 不再累加所有的樣本誤差數據 ;
θ′=θ?α(hθ(x0(j),x1(j),?,xn(j))?yj)xi(j)\theta' = \theta - \alpha ( h_\theta ( x_0^{(j)}, x_1^{(j)}, \cdots , x_n^{(j)} ) - y_j) x_i^{(j)}θ′=θ?α(hθ?(x0(j)?,x1(j)?,?,xn(j)?)?yj?)xi(j)?
VIII . 小批量梯度下降法
小批量梯度下降法 :
① 方法引入 : 上述的批量梯度下降法 , 使用所有的樣本 , 訓練時間很長 , 但是預測準確度很高 ; 隨機梯度下降法 , 訓練速度很快 , 準確度無法保證 ; 這里引入一種介于上述兩個方法之間的一種方法 , 即小批量梯度下降方法 ;
② 參數更新方式 : 數據集有 nnn 個樣本 , 采用其中的 mmm 個樣本的子數據集 進行迭代更新參數 ;
③ 公式 :
θ′=θ?α∑j=1m(hθ(x0(j),x1(j),?,xn(j))?yj)xi(j)\theta' = \theta - \alpha \sum_{j=1}^m( h_\theta ( x_0^{(j)}, x_1^{(j)}, \cdots , x_n^{(j)} ) - y_j) x_i^{(j)}θ′=θ?αj=1∑m?(hθ?(x0(j)?,x1(j)?,?,xn(j)?)?yj?)xi(j)?
注意上述 求和的是 子數據集的 111 到 mmm 索引 ;
總結
以上是生活随笔為你收集整理的【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TarsosDSP】TarsosDSP
- 下一篇: 【数据挖掘】卷积神经网络 ( 视觉原理