梯度介绍

深度学习的训练本质是优化损失,优化的方式是计算梯度,然后通过优化算法更新参数 ,常见的优化算法SGD/Momentum/Adagrad/RMSProp/Adam等,本文总结一下梯度的计算。

链式法则

利用微分求梯度的方法计算量太大,而误差反向传播算法的出现提高了计算效率,误差反向传播算法(BP)主要基于链式法则
链式法则是求复合函数的导数:
例如多元复合函数f=x2yf=x^2y,可以看作f(x,y)=p(x)q(y)f(x,y)=p(x)q(y),其中p(x)=x2p(x)=x^2q(y)=yq(y)=y
fx=fppx=q2x=2xy\frac{\partial{f}}{\partial{x}}=\frac{\partial{f}}{\partial{p}}*\frac{\partial{p}}{\partial{x}}=q*2x=2xy
fy=fqqy=p1=x2\frac{\partial{f}}{\partial{y}}=\frac{\partial{f}}{\partial{q}}*\frac{\partial{q}}{\partial{y}}=p*1=x^2

有了偏导数,当y的梯度已知,各变量的梯度=偏导数*y的梯度,因此有几点常用如下

1.如果是由a + b = y,则反向传播时a b 的梯度相等,且等于y的梯度
2.如果是a * b = y,则反向传播时a b 的梯度分别为b a,如果是矩阵运算会涉及到矩阵转换
3.max操作梯度只有传播到取最大值的一路

深度学习(二)梯度计算
图片来自 梯度是如何计算的

逻辑回归梯度计算

逻辑回归流程如下

  • 全连接 z=wTx+b=w1x1+w2x2+bz = w^Tx +b=w_1x_1+w_2x_2+b
  • **层 y^=a=σ(z)\hat{y}=a = \sigma(z)
  • 损失层(二分类交叉熵) L(a,y)=(ylog(a)+(1y)log(1a))L(a,y)=-(ylog(a)+(1-y)log(1-a))

这里**函数为sigmoid y=11+exp(x)y=\frac{1}{1+exp(-x)}
dadz=1(1+ex)2ex=11+exex1+ex=11+ex(111+ex)\frac{da}{dz}=\frac{1}{(1+e^{-x})^2}*e^{-x}=\frac{1}{1+e^{-x}}*\frac{e^{-x}}{1+e^{-x}}=\frac{1}{1+e^{-x}}*(1-\frac{1}{1+e^{-x}})
dadz=y(1y)\frac{da}{dz}=y*(1-y)

先求L(a,y)关于a的导数dL(a,y)da=y/a+(1y)/(1a)\frac{dL(a,y)}{da}=-y/a+(1-y)/(1-a)
因为dL(a,y)dz=(dLda)(dadz)\frac{dL(a,y)}{dz}=(\frac{dL}{da})*(\frac{da}{dz})
所以有dz=dL(a,y)dz=(dLda)(dadz)=[y/a+(1y)/(1a)]a(1a)dz=aydz=\frac{dL(a,y)}{dz}=(\frac{dL}{da})*(\frac{da}{dz})=[-y/a+(1-y)/(1-a)]*a(1-a)\\ dz=a-y

进一步推导w和b
dw1=1mimx1(i)(a(i)y(i))dw2=1mimx2(i)(a(i)y(i))db=1mim(a(i)y(i))dw_1=\frac{1}{m}\sum_i^mx_1^{(i)}(a^{(i)}-y^{(i)})\\ dw_2=\frac{1}{m}\sum_i^mx_2^{(i)}(a^{(i)}-y^{(i)})\\ db=\frac{1}{m}\sum_i^m(a^{(i)}-y^{(i)})

wx矩阵形式推导

趁热打铁,我们把矩阵形式的梯度推导一下,先放结果。假设D=wxD=wx
dW=dD.dot(X.T)dX=W.T.dot(dD)dW=dD.dot(X.T)\\ dX=W.T.dot(dD)

a*b 表示矩阵对应位置相乘
a.dot(b) 表示矩阵内积

未完待续…

相关文章: