深度学习(23)随机梯度下降一: 随机梯度下降简介
深度學習(23)隨機梯度下降一: 隨機梯度下降簡介
- 1. What’s Gradient?
- 2. What does it mean?
- 3. How to search?
- 4. For instance
- 5. Learning Process
- 6. AutoGrad
- 7. GradientTape
- 8. Persistent GradientTape(多次調用)
- 9. 2nd2^{nd}2nd-order
- 10. 二階求導實戰
Outline
- What’s Gradient
- What does it mean
- How to Search
- AutoGrad
1. What’s Gradient?
- 導數,derivative
- 偏微分,partial derivative
- 梯度,gradient
?f=(?f?x1;?f?x2;…;?f?xn)?f=(\frac{?f}{?x_1} ; \frac{?f}{?x_2} ;…; \frac{?f}{?x_n} )?f=(?x1??f?;?x2??f?;…;?xn??f?)
2. What does it mean?
可以看到,梯度就是函數對x求偏導和對y求偏導的向量和; 在函數上升的時候,梯度方向是向外擴散的; 在函數上升的快的時候,梯度的向量的模也大(就是圖中箭頭長); 在函數梯度趨于緩慢或為0時,梯度的向量的模小(就是圖中箭頭短);
如上圖所示,藍色區域代表函數值較小的區域,因為箭頭是向外擴散的,而梯度的方向就是函數值增大的方向; 紅色區域代表函數值較大的區域,因為箭頭是向內收縮的,而梯度的反方向就是函數值減小的方向;
3. How to search?
-
?f→largervalue?f→larger\ value?f→larger?value
- Search for minima:
- lr/α/ηlr/α/ηlr/α/η
θt+1=θt?αt?f(θt)θ_{t+1}=θ_t-α_t ?f(θ_t)θt+1?=θt??αt??f(θt?)
- lr/α/ηlr/α/ηlr/α/η
- Search for minima:
4. For instance
θt+1=θt?αt?f(θt)θ_{t+1}=θ_t-α_t ?f(θ_t)θt+1?=θt??αt??f(θt?)
(1) Function:
J(θ1,θ2)=θ12+θ22J(θ_1,θ_2 )=θ_1^2+θ_2^2J(θ1?,θ2?)=θ12?+θ22?
(2) Objective:
min?θ1,θ2?J(θ1,θ2)\min_{θ_1,θ_2}?J(θ_1,θ_2 )θ1?,θ2?min??J(θ1?,θ2?)
(3) Update rules:
θ1?θ1?αdθ1J(θ1,θ2)θ_1?θ_1-α \fracze8trgl8bvbq{θ_1}J(θ_1,θ_2 )θ1?:=θ1??αθ1?d?J(θ1?,θ2?)
θ2?θ2?αdθ2J(θ1,θ2)θ_2?θ_2-α \fracze8trgl8bvbq{θ_2}J(θ_1,θ_2 )θ2?:=θ2??αθ2?d?J(θ1?,θ2?)
(4) Derivatives:
ddθ1J(θ1,θ2)=ddθ1θ12+ddθ1θ22=2θ1\fracze8trgl8bvbq{dθ_1} J(θ_1,θ_2 )=\fracze8trgl8bvbq{dθ_1 } θ_1^2+\fracze8trgl8bvbq{dθ_1} θ_2^2=2θ_1dθ1?d?J(θ1?,θ2?)=dθ1?d?θ12?+dθ1?d?θ22?=2θ1?
ddθ2J(θ1,θ2)=ddθ2θ12+ddθ2θ22=2θ1\fracze8trgl8bvbq{dθ_2} J(θ_1,θ_2 )=\fracze8trgl8bvbq{dθ_2} θ_1^2+\fracze8trgl8bvbq{dθ_2} θ_2^2=2θ_1dθ2?d?J(θ1?,θ2?)=dθ2?d?θ12?+dθ2?d?θ22?=2θ1?
5. Learning Process
(1) Learning Process-1
(2) Learning Process-2
←\leftarrow←
6. AutoGrad
- With tf.GradientTape() as tape:
- Build computation graph
- loss=fθ(x)loss=f_θ (x)loss=fθ?(x)
- [w_grad] = tape.gradient(loss, [w])
7. GradientTape
(1) with tf.GradientTape() as tape: 將要更新的參數梯度全部放入這個函數里;
(2) grad1 = tape.gradient(y, [w]): 其中y就是損失losslossloss,[w]為要更新的參數;
可以看到,計算結果為[None],這是因為我們放入方法內的函數是y2=x?wy_2=x*wy2?=x?w,與y無關,所以返回值為[None];
(3) grad2 = tape.gradient(y2, [w]): 更新w的梯度,即:
?y2?w=x=2\frac{?y_2}{?w}=x=2?w?y2??=x=2
8. Persistent GradientTape(多次調用)
- with tf.GradientTape(persistent=True) as tape: 設置參數persistent=True,這樣就可以進行多次更新操作了;
9. 2nd2^{nd}2nd-order
-
y=xw+by=xw+by=xw+b
-
?y?x=x\frac{?y}{?x}=x?x?y?=x
-
?2y?x2=?y′?w=?x?w=None\frac{?^2 y}{?x^2 }=\frac{?y'}{?w}=\frac{?x}{?w}=None?x2?2y?=?w?y′?=?w?x?=None
- 要包2層tf.GradientTape(),因為要求二階導數。
10. 二階求導實戰
import tensorflow as tfw = tf.Variable(1.0) b = tf.Variable(2.0) x = tf.Variable(3.0)with tf.GradientTape() as t1:with tf.GradientTape() as t2:y = x * w + bdy_dw, dy_db = t2.gradient(y, [w, b]) d2y_dw2 = t1.gradient(dy_dw, w)print(dy_dw) print(dy_db) print(d2y_dw2)assert dy_dw.numpy() == 3.0 assert d2y_dw2 is None運行結果如下:
參考文獻:
[1] 龍良曲:《深度學習與TensorFlow2入門實戰》
[2] http://mccormickml/2014/03/04/gradient-descent-derivation/
[3] http://ruder.io/optimizing-gradient-descent/
總結
以上是生活随笔為你收集整理的深度学习(23)随机梯度下降一: 随机梯度下降简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海57个网点征信
- 下一篇: 专家:ChatGPT没什么创新 更多因为