關於梯度的一些知識點

梯度與反向傳播

  1.對於一個二元函數f(x, y),有 \(\nabla f = [\frac{\partial f}{\partial x} , \frac{\partial f}{\partial y}]\)  所以可知,梯度是一個向量而不是一個標量

  2.利用鏈式法則解釋何爲反向傳播:
        f(x,y,z)=(x+y)z, q = x+y。若是咱們對f求x的偏導。實際爲\(\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q} \frac{\partial q}{\partial x}\)。此時,咱們使用代碼來複現這一過程,藉此來說反向傳播:網絡

# 設置輸入值
x = -2; y = 5; z = -4
 
# 進行前向傳播
q = x + y # q becomes 3
f = q * z # f becomes -12
 
# 進行反向傳播:
# 首先回傳到 f = q * z
dfdz = q # df/dz = q, 因此關於z的梯度是3
dfdq = z # df/dq = z, 因此關於q的梯度是-4
# 如今回傳到q = x + y
dfdx = 1.0 * dfdq # dq/dx = 1. 這裏的乘法是由於鏈式法則
dfdy = 1.0 * dfdq # dq/dy = 1

咱們經過上述代碼獲得了梯度\([\frac{\partial f}{\partial x} , \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z}]\)咱們的計算過程以下圖所示:
反向傳播
前向傳播從輸入計算到輸出(綠色),反向傳播從尾部開始,根據鏈式法則遞歸地向前計算梯度(顯示爲紅色。好比說我想獲得f關於z的反向傳播,就對z求梯度),一直到網絡的輸入端。能夠認爲,梯度是從計算鏈路中迴流。

下面舉一個如何利用這種思想求一個複雜函數梯度的例子:
\(f = \frac{1}{1 + exp(-(w_{0}x_{0} + w_{1}x_{1} + w{2}))}\)
在這裏咱們使用sigmod函數求導的思想
\(\sigma(x) = \frac{1}{1 + exp(-x)}\)

sigmod函數

咱們經過如下的代碼求出對x和w的梯度:spa

w = [2,-3,-3] # 假設一些隨機數據和權重
x = [-1, -2]
 
# 前向傳播
dot = w[0]*x[0] + w[1]*x[1] + w[2]
f = 1.0 / (1 + math.exp(-dot)) # sigmoid函數
 
# 對神經元反向傳播
ddot = (1 - f) * f # 點積變量的梯度, 使用sigmoid函數求導
dx = [w[0] * ddot, w[1] * ddot] # 回傳到x
dw = [x[0] * ddot, x[1] * ddot, 1.0 * ddot] # 回傳到w
# 完成!獲得輸入的梯度

上述代碼先完成了對dot=\(w_{0}x_{0} + w_{1}x_{1} + w{2}\)的求導,而後再令dot對x和w的份量求導code

相關文章
相關標籤/搜索