隨機梯度下降演算法

2021-10-17 04:30:36 字數 1115 閱讀 5728

每次從從訓練樣本集上隨機抽取乙個小樣本集,求其**值和真實值誤差的平均值,作為目標函式,將引數沿著梯度的方向移動,從而使當前的目標函式減少得最多。

小樣本集的個數為batch_size,通常為2的冪次方,有利gpu加速

代價函式的總和為1m∑

i=1m

l(x(

i),y

(i),

θ)\dfrac\sum_^ml(x^,y^,θ)

m1​i=1

∑m​l

(x(i

),y(

i),θ

)每次隨機選取乙個樣本,batch_size=1

遇上雜訊容易陷入區域性最優

每次迭代都選取所有樣本,batch_size=n

每次更新更準確,每次更新要計算所有樣本的平均誤差,計算代價大

sgd還有多種變體,其區別在於計算下一次權重更新時還要考慮上一次權重更新,而不僅僅考慮當前的梯度值,比如帶動量sgd,adagrad,rmsprop等這一靈感**於物理學,將優化過程想象成小球從損失函式上滾下來,當小球的速度夠大時,小球不會困在上谷,避免了區域性最優化,也就是不僅要考慮小球當前的斜率,還要考慮小球當前的速度(**於之前的加速度)。

實現**

import tensorflow as tf

past_velocity=0.

momentum=

0.1#不變的動量因子

while loss>

0.01

:#優化迴圈

w,loss,gradient=get_current_parameters(

) velocity=past_velocity*momentum-learning_rate*gradient#上一次的引數

w=w+momentum*velocity-learning_rate*gradient

past_velocity=velocity

updata_parameter(w)

鏈式求導:從損失函式開始,從頂層反向作用至最底層,求出損失值對每個引數的導數。

隨機梯度下降演算法

bp神經網路是神經網路的基礎,其中可用隨機梯度下降演算法來加快更新權值和偏置,但是隨機梯度下降演算法總是忘記,下面來好好複習一下 們已經研究出很多梯度下降的變化形式,包括 些更接近真實模擬球體物理運動的變化形 式。這些模擬球體的變化形式有很多優點,但是也有 個主要的缺點 它最終必需去計算代價函式c的...

梯度下降演算法 隨機梯度下降演算法scala實現

梯度下降和隨機梯度下降是機器學習中最常用的演算法之一。關於其具體的原理這裡不多做介紹,網路上可以很方便的找到。例如可以參考部落格 scala 實現如下 object sgd errorsum y row rowsum for col 0 until x 0 length loss 0.0 for r...

梯度下降 隨機梯度下降 批梯度下降

下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...