zoukankan      html  css  js  c++  java
  • 神经网络学习笔记二——反向传导

    参考自 http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95

    神经网络的代价函数

    假设我们有一个固定样本集。当使用批量梯度下降法求解时,单个样例的代价函数为:

    这是个方差代价函数,对于整体的代价函数则为:

    后面的项为规则化项,目的是防止过拟合

    我们的目标是针对参数W,和b(其实可以设定一个x0=1以及W0来把b规避掉)来求其函数J(W,b)的最小值。这里的处理方式与普通的线性回归和逻辑回归不同,参数的初始化不能再简单的全部置0,而是使用随机值,比如使用正态分布 Normal(0,ε2)生成的随机值,ε取0.01,然后再使用梯度下降法。否则会法制最后所有隐藏单元最终会得到与输入值有关的、相同的函数

    使用梯度下降法中每一次迭代都按照如下公式对参数W和b进行更新:

    α是学习速率

    其关键在于计算偏导数,这里有一种有效的方法,就是后向传播算法(BP)

    后向传播算法

    后向传播的实质是在求各层的损失函数的导函数时,由于每一层的输入是前一层的输出的线性组合,所以该层的导函数一定与前一层的损失函数的导数相关相关

    具体来说,各层的代价函数的导函数如下:

    下面少一项是因为规则项不作用于常数项上

    反向传播的具体执行思路为,

    1)先进行前导计算,算出直到最后一层(输出层)的激活值(输出值)

    2)最后一层的每个输出单元i,根据以下公式计算残差:

    (其实和普通的线性回归没差)

    3)对于l = nl-1,nl-2,nl-3...的各层,第l层的第i个节点的残差计算方法如下:

    推导公式如下(以nl和nl-1层为例,其他的类推即可)

    4)计算我们需要的偏导数,方法为:

    以上步骤写作向量形式为:

    1)前向计算

    2)对于输出层

         中间的大黑点表示matlab中.*的运算

    3)对于输出层前面的各层

    4)计算最终需要的偏导数值:

    若f(z)是sigmoid的函数,且我们在前向计算中已经算到了。我们可以利用前面的结论得到

    最后整个算法可以表示如下:

    1)对于所有l,有(设为全零向量或全零矩阵)这是为了存储所有的损失函数导函数

    2)对于i = 1 to m(所有训练样本)

      a.使用反向传播算法计算

      b.计算

      c.计算

    3)更新权重参数:

    这只是一次迭代的操作,反复进行该操作,以减小代价函数(损失函数)J,最终求解该神经网络

      

      

  • 相关阅读:
    javascript cookie
    mark几个比较好的配色网站
    Javascrip 淡入淡出思路
    实验报告:统计字符串中子字符串出现的次数
    Javascript计算器
    《node入门》学习
    配置ionic(低版本)
    eclipse环境配置
    关于文档加载的方法
    javascript基础-《web前端最佳实践》
  • 原文地址:https://www.cnblogs.com/zodiac7/p/9265199.html
Copyright © 2011-2022 走看看