梯度更新方法总结

梯度更新

举例说明

对于逻辑归回梯度求解:

  • 假设预测输出函数:

    h(x0,x1,...,xn)=i=0nθixi+θ0 h ( x 0 , x 1 , . . . , x n ) = ∑ i = 0 n θ i x i + θ 0

    i:一次输入中,第i个数据

  • 实际输出: y y

  • Cost Function函数:

    J(θ0,θ1,...,θn)=1mj=0m(y(j)h(j))2

    j:第j个输入,总共输入m个数据

  • 梯度求解的最终目的:令 J J 的值 最小,根据微积分,只要求出J=dJdθ=Jθi0

    根据导数的定义: J=JJ J = J − J ′ J J 肯定是往函数最小值方向移动,即J0Jmin

  • 但是通常情况下,由于 J J 很难直接求解出来,换个思路就是通过更新参数θi(j)来实现: J0Jmin J ′ → 0 或 J → min

    • 如何保证参数 θi θ i 更新方向是 Jmin J → min

      求解:

      θ+i=θiΔθi θ i + = θ i − Δ θ i
      根据导数定义,如果保证 Δθi Δ θ i 和偏导数 Jθi ∂ J ∂ θ i 数值正负号一致,上述参数 θi θ i 更新后, Jmin J → min

    • 如何确定每次参数要更新多少?

      对于参数更新公式:

      θ+i=θiΔθi θ i + = θ i − Δ θ i
      只是保证了参数更新方向正确,为了防止一步跨度太大,最终 J J 的值一下子垮过min,从而造成抖动,需要引入学习效率η,最终公式:
      θ+i=θiηΔθi θ i + = θ i − η Δ θ i

      一般: η[0,1] η ∈ [ 0 , 1 ]

  • 小结:

    θ+i=θiηΔθi θ i + = θ i − η Δ θ i
    该公式属于人造并非数学推导,主要是符合了参数更新方向、同时人为设定更新步长

PS:某个权重更新的值=0,即 Jθi=0 ∂ J ∂ θ i = 0 ,并不代表 dJdθ=0 d J d θ = 0

常见梯度更新方法

参考:http://blog.csdn.net/boon_228/article/details/51721835

BGD

批次梯度下降

  • 概念:每次更新所有样本数据来更新一次 J(θ) J ( θ ) 的参数 θ θ
  • 预测函数:
    h(x0,x1,...,xn)=i=0nθixi+θ0 h ( x 0 , x 1 , . . . , x n ) = ∑ i = 0 n θ i x i + θ 0
  • 对于cost function:
    J(θ0,θ1,...,θn)=1mj=0m(y(j)h(j))2 J ( θ 0 , θ 1 , . . . , θ n ) = 1 m ∑ j = 0 m ( y ( j ) − h ( j ) ) 2
  • 有参数更新公式:
    θ+i=θiηJθi=θiη2mj=0m(y(j)h(j))xi θ i + = θ i − η ∂ J ∂ θ i = θ i − η 2 m ∑ j = 0 m ( y ( j ) − h ( j ) ) x i
  • 这种参数更新方法是批量梯度更新,也就是每次更新 θi θ i 都需要用到这样本里所有数据
  • 小结:
    图1 -w300
    • 优点:没更新一次,都用所有样本数据进行更新,这样就求解了全局最优解,同时通过计算公式可以发现可以并行实现;
    • 缺点:由于每次更新都要计算该批次训练样本数据,如果批次样本数量太大,训练过程会很慢

SGD

随机梯度下降

  • 概念:由于BGD每次更新都需要用到批次里所有样本数据,所以引入随机梯度下降概念;和BGD的区别在于,每次训练样本只输入一个,通过不断输入不同样本来修正参数,而BGD是一次输入所有样本来修正参数

    区别BGDSGD
    h(x) h ( x ) ni=0θixi+θ0 ∑ i = 0 n θ i x i + θ 0 ni=0θixi+θ0 ∑ i = 0 n θ i x i + θ 0
    J(θ) J ( θ ) 1mmj=0(y(j)h(j))2 1 m ∑ j = 0 m ( y ( j ) − h ( j ) ) 2 12(yh)2 1 2 ( y − h ) 2
    每次输入样本数所有1个
    循环次数一次=样本数量
  • 小结:
    图1 -w300

    • 优点:训练速度快;
    • 缺点:准确度下降(噪音比BGD大),并非全局最优解;不易于并行实现;

MBGD

小批量梯度下降

  • 概念:结合了BGD和SGD的优点:将所有的样本分割成很多小份,每次用这个小样本进行BGD训练,即:

    for SGD:
        for BGD:
            ...
  • 小结:
    • 目前算法比较常用的梯度下降算法用MBGD,常用的小份样本数量有:64、10

常用梯度更新公式推导

神经网络常用梯度更新公式推导

Pooling

  1. 在池化层,设置了固定的w,所以参数不在此更新
  2. 主要类似设置了反向传播的阀门,保证反向阀门开合以及打开大小
  3. 这里的pooling方法是一般池化,即池化过程中,各个模块的边界不重叠。除了不重叠方法外,还有重叠池化、空金字塔池化

Max Pooling
  • 概念:反向传播求导数过程类似分段函数求导

    分段函数在分段点的导数必须分别求左右导数,而在非分段点的导数如常

    图3 -w300

  • 有矩阵如下:

    147258369 1 2 3 4 5 6 7 8 9

  • 求解整个矩阵的max_pooling,则:

    y=max(x1,x2,...,x9)=9 y = max ( x 1 , x 2 , . . . , x 9 ) = 9

  • 反向传播时:

    yxn={0,xn1,xn ∂ y ∂ x n = { 0 , x n 非 最 大 值 1 , x n 是 最 大 值

    这个公式可以通过如下代码的条件语句实现:

    if x_n == y:
        y_d = 1
    else:
        y_d = 0
  • 根据反向传播公式的链式原理:

    w+=wηΔw=wηJw|x=x0=wηJOut1Out1Net1...Netiw|x=x0 w + = w − η Δ w = w − η ∂ J ∂ w | x = x 0 = w − η ∂ J ∂ O u t 1 ∂ O u t 1 ∂ N e t 1 . . . ∂ N e t i ∂ w | x = x 0

    如果pooling层对 xi x i 偏导数为0,通过 xi x i 向前的参数修正值都恒为0,即不传播;

  • 小结:
    对于max pooling参数只通过max值那个点反向传播,在上述例子中,即通过 x9 x 9 向前修正参数,其他值均认为是无用数据丢弃;

Mean Pooling
  • 概念:求解n x m矩阵的上所有点的均值

    图4 -w300

  • 有矩阵如下:

    147258369 1 2 3 4 5 6 7 8 9

  • 求解整个矩阵的mean pooling,则:
    y=(x1+x2++xn)n=5 y = ( x 1 + x 2 + ⋯ + x n ) n = 5
  • 反向传播时:
    yxn=1n=19 ∂ y ∂ x n = 1 n = 1 9
  • 小结:
    对于mean pooling ,反向传播过程中,只是给传播链条添加一个常数 1n 1 n ,即作为固定权重使用

激活函数

同Pooling,没有需要更新的权重,起到了传播过程中的阀门作用

ReLU
  • 公式:
    y={0,x0x,x>0 y = { 0 , x ≤ 0 x , x > 0
  • 反向传播时:
    dydx={0,x01,x>0 d y d x = { 0 , x ≤ 0 1 , x > 0
  • 小结:
    对于输出值: x0 x ≤ 0 的神经元,流经ReLU层后的反向传播,该神经元以及前面对应的参数都会被丢弃,即不再更新参数
Sigmoid
  • 公式:
    y=11+ex y = 1 1 + e − x
  • 反向传播时:
    dydx=y(1y) d y d x = y ( 1 − y )
tanh
  • 公式:
    y=exexex+ex y = e x − e − x e x + e − x
  • 反向传播时:
    dydx=2(1y)(1+y) d y d x = 2 ( 1 − y ) ( 1 + y )
soft Max
  • 公式:

    yi=exini=0exi y i = e x i ∑ i = 0 n e x i

    xi x i :第i个输入值
    yi y i xi x i 对应的输出值

  • 反向传播时:
    yixi=yi(1yi) ∂ y i ∂ x i = y i ( 1 − y i )

Loss函数

交叉熵

理论上均方差 C=(ya)2n C = ( y − a ) 2 n 值小的程度,作为判断神经元预测结果和实际结果的偏离程度很好理解
但是,实际问题中,针对分类问题,交叉熵的表现比均方差来的好

  • 设经过soft Max的神经元输出:
    z1(k=1)2(k=2)3(k=2)1(i=1)0.90.10.12(i=2)0.10.90.13(i=3)0.10.10.9 预 测 z 类 别 1 ( i = 1 ) 类 别 2 ( i = 2 ) 类 别 3 ( i = 3 ) 样 本 1 ( k = 1 ) 0.9 0.1 0.1 样 本 2 ( k = 2 ) 0.1 0.9 0.1 样 本 3 ( k = 2 ) 0.1 0.1 0.9
  • 实际结果:
    y1(k=1)2(k=2)3(k=3)1(i=1)1002(i=2)0103(i=3)001 实 际 y 类 别 1 ( i = 1 ) 类 别 2 ( i = 2 ) 类 别 3 ( i = 3 ) 样 本 1 ( k = 1 ) 1 0 0 样 本 2 ( k = 2 ) 0 1 0 样 本 3 ( k = 3 ) 0 0 1
  • 交叉熵公式:

    Ck=1ni=1n[y(k)ilnz(k)i+(1y(k)i)ln(1z(k)i)], y(k)i{0,1}C10.035C20.035C30.035C=1mk=1m(Ck)0.035 C k = − 1 n ∑ i = 1 n [ y i ( k ) ln ⁡ z i ( k ) + ( 1 − y i ( k ) ) ln ⁡ ( 1 − z i ( k ) ) ] ,   y i ( k ) ∈ { 0 , 1 } C 1 ≈ 0.035 C 2 ≈ 0.035 C 3 ≈ 0.035 C = 1 m ∑ k = 1 m ( C k ) ≈ 0.035

    Ck C k :第k个样本的交叉熵
    zi z i :某个样本的第i个类别预测结果
    yi y i :某个样本的第i个类别实际结果

  • 反向传播时, yi y i 是已知值:
    Czi=CCkCkzi=1m(y(k)inz(k)i), y(k)i{0,1} ∂ C ∂ z i = ∂ C ∂ C k ∂ C k z i = 1 m ( − y i ( k ) n z i ( k ) ) ,   y i ( k ) ∈ { 0 , 1 }

梯度更新代码实现

TBD

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值