梯度下降与反向传播详解

梯度下降
  1. 对于机器学习中其中一个主要的步骤是构造Cost函数,当构建好Cost函数后需要对Cost函数进行优化,使得Cost值最小。
    * 策略1:随机寻找(不太实用)
    最直接粗暴的方法就是,我们尽量多地去试参数,然后从里面选那个让损失函数最小的参数组,最为最后的W。
    * 策略2:随机局部搜索
    在现有的参数W基础上,随机搜索一下周边的参数,查看有没有比现在更好的W,然后用新的W替换现有的W,不断迭代。
    * 策略3:梯度下降
    找到最陡的方向,逐一小步,然后再找到当前位置最陡的下山方向,再迈一小步…

这里写图片描述

以线性回归为例,对于假设函数(Hypothesis):

hθ(x)=θ0+θ1x

构造Cost函数:
J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2

优化目标是最小化:
J(θ0,θ1)

高等数学中我们学过求函数最小值可以通过求解导数,对 J(θ0,θ1) 求偏导数:
J(θ0,θ1)θ0=1mi+1m(θ0+θ1xy)

=1mi+1m(hθ(x)y)

J(θ0,θ1)θ1=1mi+1m(θ0+θ1xy)x(i)

=1mi+1m(hθ(x)y)x(i)

梯度下降(Gradient descent algorithm)
repeat until convergence{
θ0:=θ0αJ(θ0,θ1)θ0
θ1:=θ1αJ(θ0,θ1)θ1
}
这里写图片描述

原理:对于某个点 (x0,y0) ,其导数表示在该点的瞬时变化率,也就是在在该点的斜率,表示从该点向其他点下滑的最快梯度。
具体推导见:http://blog.csdn.net/honghu110/article/details/55052909

反向传播

反向传播算法是神经网络中最有效的算法,其主要的思想是将网络最后输出的结果计算其误差,并且将误差反向逐级传下去。
方向传播运用的是链式求导的基本思想(隐函数求导),例如:

函数 u=ϕ(t) 在点t处可导, z=f(u)

dzdt=zu×dudt

举个简单的例子对于如下图所示的神经网络:
这里写图片描述

假设第一个神经元的表达式为 f1(x)=w0+w1x , 第二个神经元的表达式为 f2(y)=θ0+θ1y ,那么实际上第一个神经元的输出是第二个神经元的输入,也就是第二个表达式中的 y=f1(x) 。对于训练这个模型首先采用前向传播算法(也就是按步骤计算得出输出结果):
对于输入 x1 计算:

w0+w1x1=f1(x1)

θ0+θ1f1(x1)=f2(f1(x1))

假设输出结果计算后得到 y1
构造代价函数为:
C=12||y1y1||2

注: y1 表示分类, y1 表示预测值

计算误差之后需要将误差反向传播回去,首先计算最后一层的误差,更新 θ1,θ0
θ0:=θ0αCθ0
θ1:=θ1αCθ1
然后再更新前一个节点的 w1,w0
w0=w0αCf2×f2f1×f1w0
w1=w1αCf2×f2f1×f1w1
采用梯度下降依次逐层更新知道最终收敛为止。

(感觉网上总结的反向传播算法都说的好高大上,看完理解后我自己总结了个比较容易理解的方案)
参考文献:http://m.blog.csdn.net/article/details?id=51039334

  • 15
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值