神经网络学习笔记(七)

在前面几章中,我们介绍了随机梯度下降的框架和各个参数误差的求法,本章将在此基础之上介绍用于训练神经网络的反向传播算法。

一、反向传播算法(Backpropagation Algorithm)

回顾随机梯度算法的流程:

  • 初始化各个参数 θ θ={w(1),b(1),...,w(L+1),b(L+1)}
  • 循环 N
    • 对于每一个训练样本(x(t),y(t))
    • 求目标函数的反梯度方向,即 Δ=θl(f(x(t);θ),y(t))λθΩ(θ)
    • 更新参数 θθ+αΔ

    其中,一个很重要的过程就是如何求目标函数的反梯度方向。假定我们已经对神经网络进行了前向传播(即通过输入计算出了各层的预激励和激励,以及最终的误差函数),综合前面几张我们说的参数误差梯度的求法,我们有:

    • 计算输出梯度
      • a(L+1)(x)logf(x)y=(e(y)f(x)) ,详见第四章
    • 对于 L+1 1 中的每一层k,有:
      • 计算隐层梯度
        W(k)logf(x)y=(a(k)(x)logf(x)y)(h(k1)(x))T
        b(k)logf(x)y=a(k)logf(x)y
        详见第六章
      • 计算下一层激励梯度
        h(k1)(x)logf(x)y=(W(k))T(a(k)(x)logf(x)y) ,详见第五章
      • 计算下一层预激励梯度
        a(k1)(x)logf(x)y=(h(k1)(x)logf(x)y)[,g(a(k)(x)),]
        详见第五章

    二、流图表示形式

    1.前向传播

    前向传播算法可以表示为如下图所示的一个无环图:
    这里写图片描述

    如图,从输入向量 x 开始,我们可以根据其子节点计算当前节点中的值。例如,要计算a(1)(x),则我们可以根据 x W(1)以及 b(1) 等子节点进行计算。前向传播的最终目的是计算出各层的预激励和激励,以及最终的误差函数。根据上面对反向传播算法的描述,不难看出,前向传播是反向传播算法的必要步骤。

    2.反向传播

    我们的最终目的是求参数的误差梯度。根据上述方法,我们已经具备了求每一个参数 θ={w(1),b(1),...,w(L+1),b(L+1)} 梯度的必要条件,只需从输出层开始,往下一层一层求各层参数梯度即可,故称为“反向传播”,其流图如下:
    这里写图片描述
    如图,此时我们从输出层开始,根据某节点的父节点计算该节点的梯度,过程在上面讲的很清楚,在此不再赘述。

    三、梯度检验

    梯度检验的作用是调试你的算法,确保BP算法正确。其原理如下:

    f(x)xf(x+ϵ)f(xϵ)2ϵ
    其中:

    • f(x) 是误差函数
    • x 是待检验的参数
    • f(x+ϵ)是原参数值加上一个很小的数 ϵ 后的误差函数值
    • f(xϵ) 是原参数值减去一个很小的数 ϵ 后的误差函数值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值