Gradient Descent

Gradient Descent

Tags
Machine Learning
Published
February 22, 2017
Author
yanbc

Gradient Descent

假设我们有一个函数,我们需要找到它的最小值。
C=f(x,y,w,b)C=f(x, y, w, b)
其中x,y是数据集,是常量;w,b是变量,那么C函数的偏差值可以表示为:
ΔCCwΔw+CbΔb\Delta C \approx \frac{\partial C}{\partial w} \Delta w + \frac{\partial C}{\partial b} \Delta b
同时C函数的 Gradient Vector 为:
C(Cw,Cb)T\nabla C \equiv \left( \frac{\partial C}{\partial w}, \frac{\partial C}{\partial b} \right)^T
如果我们可以使
\Delta w = -\eta \frac{\partial C}{\partial w} \tag{1}\Delta b = -\eta \frac{\partial C}{\partial b} \tag{2}
那么可以实现 C 一直保持向下减小:
ΔC=η((Cw)2+(Cb)2)\Delta C = -\eta ( (\frac{\partial C}{\partial w})^2 + (\frac{\partial C}{\partial b})^2 )

Back-propagation

那么,到底怎么去求式(1)和式(2)呢?这就需要依赖 Back-propagation 了。实际上,Back-propagation 就是一种快速求Gradient的方法。
我们定义一个值,称之为 error:
\delta^l_j \equiv \frac{\partial C}{\partial z^l_j}\tag{error}
Back-propagation 的核心就是说,只要我们可以计算出 error 值,我们就可以通过下面的简单计算得出每一个参数的 Gradient:
\delta^l_j = \frac{\partial C}{\partial a^l_j} \sigma'(z^l_j) \tag{BP1}\delta^l = ((w^{l+1})^T \delta^{l+1}) \odot \sigma'(z^l) \tag{BP2}\frac{\partial C}{\partial b^l_j} = \delta^l_j \tag{BP3}\frac{\partial C}{\partial w^l_{jk}} = a^{l-1}_k \delta^l_j\tag{BP4}