精华内容
下载资源
问答
  • 反向传播算法(过程及公式推导)

    多人点赞 2019-04-21 15:46:02
    反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出...
    反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
    (1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
    (2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
    (3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。

            反向传播算法的思想比较容易理解,但具体的公式则要一步步推导,因此本文着重介绍公式的推导过程。


    1. 变量定义



            上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
            表示第层的第个神经元连接到第层的第个神经元的权重;
            表示第层的第个神经元的偏置;
            表示第层的第个神经元的输入,即:
            表示第层的第个神经元的输出,即:
            其中表示激活函数。

    如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

    2. 代价函数

            代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):

            其中,表示输入的样本,表示实际的分类,表示预测的输出,表示神经网络的最大层数。

    3. 公式及其推导

            本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。
            首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:


            本文将以一个输入样本为例进行说明,此时代价函数表示为:


    公式1(计算最后一层神经网络产生的错误):



            其中,表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:



    公式2(由后往前,计算每一层神经网络产生的错误):



            推导过程:


    公式3(计算权重的梯度):



            推导过程:



    公式4(计算偏置的梯度):



            推导过程:



    4. 反向传播算法伪代码


    • 输入训练集

    • 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值
      • 前向传播:
    , 
      • 计算输出层产生的错误:

      • 反向传播错误:


    • 使用梯度下降(gradient descent),训练参数:

     








    展开全文
  • Wiki: 反向传播(Back propagation 或者BP),是“误差反向传播”的简称,它是一种用来训练人工神经网络的常见方法,一般与梯度下降结合使用。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化...

    在这里回顾一下上学期学的方向传播算法。下面是一些读书笔记。毕竟好记性不如烂笔头!!

    Wiki: 反向传播(Back propagation 或者BP),是“误差反向传播”的简称,它是一种用来训练人工神经网络的常见方法,一般与梯度下降结合使用。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

    它通常被认为是一种监督学习方法,因为反向传播需要根据输入值期望得到的已知输出,来计算损失函数的梯度,进而更新权值。但是它也可以应用在无监督网络中。它可以使用链式法则对网络的每层迭代计算梯度,因此,每个节点(神经元)的激励函数必须是可微。

    1. 算法概述

    BP算法主要是由激励传播、权重更新 循环迭代构成,直到网络的输出满足一定条件才停止。

    激励传播

    1. 前向传播阶段: 将输入数据送入网络以获得激励响应,即计算每层的预估值;
    2. 反向传播阶段: 将激励响应同对应的目标输出求差,获得隐层与输出层的响应误差。

    权重更新

    1. 将输入激励和响应误差相乘,获得权重的梯度;
    2. 将这个梯度乘上一个学习率,并取反后加到权重上。

    因为梯度是指向误差扩大的方向,而我们是想要往权重减小的方向,所以更新权重的时候需要对其取反。

    2. 推导过程

    2.1 神经元结构

    52db3fc9ffd19e4768cac2ab373245b3.png
    神经元结构

    首先,看下神经元的结构,每个神经元由两个部分组成:

    1. 权重与输入
    2. 激活函数,非线性函数
      ,j 表示第j个神经元,即对应上图的

    每个神经元的输出则为

    表示神经元i 跟j之间的权值,这里神经元i是j的上一层,
    则是上一层神经元的输出

    2.2 误差函数

    在BP算法中,误差函数为

    ,常数只是为了方便计算,t 是目标输出,y是神经元的实际输出。

    其倒数为

    2.3 计算误差对于权重的偏导数 (最关键部分)

    采用梯度下降的方式更新权重,所以在下面的表达式中,关键是要得到误差对于权重的偏导数

    m 表示第m次迭代

    其中

    是学习率

    根据链式法, 偏导数变成

    (1)

    因为

    , 则
    , 即上一层的输出

    (2)

    它则表示的是激活函数的导数

    e.g. 激活函数是sigmoid函数

    (3)

    a. 如果神经元在输出层 , 则

    b. 如果神经元位于网络的内层,则求起来比较麻烦

    假设E为接受来自神经元j的输入的所有神经元

    的输入的函数

    它可以化简为一个递归表达式

    如果我们定义

    9af6038331d3381223cbb7b852edced9.png

    所以

    3. BP例子

    以下是一个三层神经网络,具有两个输入,一个输出

    99fb38374bf3a7207e929dd524e650d9.png
    1. 前向传播阶段

    从输入信号开始,计算每个神经元的输出信号

    ,总共有n个神经元。

    5ec252e2bb26ba33afde88b54f1356eb.png

    f5d6fd3e18dc534d9a732792a08c99a9.png

    个别节点忽略。最终到输出层

    3aaf60980a6ff2f8e1bb2048fd642ffd.png

    2. 反向传播阶段:计算

    我个人觉得下面的图例中 公式需要乘多一个激活函数的偏导数

    如下图,

    64c570ae118d00684ea65dc9a260acbc.png

    06e3f7f143b48903dd8007384dd3815b.png

    再依次计算

    , ...

    90299c831b4f6c81588e221b81b16ae7.png

    3. 更新权值

    新的权重为

    由于上面

    理解的与图片中的不一样,所以下面的公式,我认为应该是

    , ...

    d2f4bf465a208058ebe3c8a14bec1cb7.png

    到了第二层隐层

    b798900513b1bab58e554e5fbbfde05e.png

    最后一层

    40354db36854d2f1c18019e63eee520d.png

    到此,一个回合结束,紧接着则重复该过程,直到满足退出条件为止。

    Reference

    反向传播算法www.jiqizhixin.com
    f7af5d0c5cd7e26ef41090f7f091b766.png
    https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95zh.wikipedia.orgBackpropagationgalaxy.agh.edu.pl
    0afa601434ce08c2435f2f6ba038deca.png
    展开全文
  • 首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。...

    一、定义

    首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。 该方法对网络中所有权重计算损失函数的梯度。 这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。(误差的反向传播)


    二、案例1

    首先明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重,只要能明确上面两点,那么下面的例子,只要会一点链式求导规则,就一定能看懂!

    BP算法,也叫δ算法,下面以3层的感知机为例进行举例讲解。


    上图的前向传播(网络输出计算)过程如下:(此处为网络的整个误差的计算,误差E计算方法为mse) 

     

    上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

    误差E有了,怎么调整权重让误差不断减小?
    E是权重w的函数,何如找到使得函数值最小的w。
    解决上面问题的方法是梯度下降算法(简单图示如下),大家如有不太懂的可先行查阅别的资料,只要能达到理解线性回归梯度下降算法的水平即可,这里不再赘述。

    就算上面的所有东西你都看的迷迷糊糊,通过下面的例子,相信绝大多数人也能很轻松的理解BP算法。如图是一个简单的神经网络用来举例: 

     

    下面是前向(前馈)运算(激活函数为sigmoid):

     

    下面是反向传播(求网络误差对各个权重参数的梯度):

    我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:


     

    导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程: 

     如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:

    展开全文
  • 输出层误差计算公式 III . 隐藏层层误差计算公式 IV . 使用误差更新 连接权值 V . 使用误差更新 单元偏置 VI . 反向传播 过程 VII . 损失函数 简介 VIII . 损失函数 IX . 损失函数 举例 X . 损失函数 优化过程



    I . 向后传播误差 简介



    1 . 后向传播误差 : 计算每层每个单元的误差 , 根据该误差更新 权值 和 偏置 设置 ;


    2 . 计算误差的目的 : 使用计算出来的误差 , 更新单元连接的 权值 , 和 单元 本身的偏置 参数 , 用于实时反映出前向传播输入的误差 ;




    II . 输出层误差计算公式



    输出层误差计算 :


    ① 输出层单元 jj , 误差计算公式 :

    Errj=Oj(1Oj)(TjOj)Err_j = O_j ( 1 - O_j ) ( T_j - O_j )


    OjO_j 是单元 jj 的输出 ;


    TjT_j 是样本分类的真实的属性值 , 取值 0 或 1 , 输出层每个单元的节点输出都是 0 或 1 , 如果分类有多个离散值 , 那么输出层使用多个节点表示这些分类 ;


    ② 公式来源 : 该公式来源于 损失函数 , 对损失函数进行求导 ;



    III . 隐藏层层误差计算公式



    隐藏层误差计算 :


    Errj=Oj(1Oj)(k=1nErrkwjk)Err_j = O_j ( 1 - O_j ) ( \sum_{k=1}^n Err_k w_{jk} )


    OjO_j 是本层单元 jj 的输出 ;


    ErrkErr_k 是下一层第 kk 个单元的误差 ;


    wjkw_{jk} 是本单元 与 下一层第 kk 个单元连接的 权值 ;


    k=1nErrkwjk\sum_{k=1}^n Err_k w_{jk} 是一个线性组合 , 本层的 jj 单元 , 连接下一层的 nn 个单元 , 计算下层每个节点的误差 ErrkErr_k , 乘以连接的权值 wjkw_{jk} , 再将多个下层节点的 ErrkwjkErr_k w_{jk} 计算值累加 ;



    IV . 使用误差更新 连接权值



    1 . 计算误差的目的 : 使用计算出来的误差 , 更新单元连接的 权值 , 和 单元 本身的偏置 参数 , 用于实时反映出前向传播输入的误差 ;


    2 . 权值更新公式 : 修改 单元 ii 和 单元 jj 连接的权值 , 注意连接方向是 单元 ii 连接到单元 jj , iijj 的前一层 ;


    Δwij=(l)ErrjOi\Delta w_{ij} = (l) Err_j O_i

    wij=wij+Δwijw_{ij}' = w_{ij} + \Delta w_{ij}


    Δwij\Delta w_{ij} 是 单元 ii 和 单元 jj 的连接的权值的改变值 ;

    ll 是学习率 , 一般是 0.80.8 , 0.90.9(0,1)(0,1) 区间内的数值 ;

    ErrjErr_j 是单元 jj 的误差 ;

    OiO_i 表示 单元 ii 的输出 ;

    ErrjOiErr_j O_i 是通过求导得出的梯度 ;

    wijw_{ij}' 表示新的权值 ;

    wijw_{ij} 表示老的权值 ;


    3 . 连接权值更新总结 : 该公式是梯度公式 , 后向传播算法是梯度下降算法 , 其权值更新是 旧的权值 , 加上权值的改变 , 计算出新的连接权值 ;



    V . 使用误差更新 单元偏置



    1 . 计算误差的目的 : 使用计算出来的误差 , 更新单元连接的 权值 , 和 单元 本身的偏置 参数 , 用于实时反映出前向传播输入的误差 ;


    2 . 偏置更新公式 : 修改 单元 jj 的偏置 ;

    Δθj=(l)Errj\Delta \theta_j = (l) Err_j

    θ=θj+Δθj\theta' = \theta_j + \Delta \theta_j


    Δθj\Delta \theta_j 是偏置的改变 ;

    ll 是学习率 , 一般是 0.80.8 , 0.90.9(0,1)(0,1) 区间内的数值 ;

    ErrjErr_j 是单元 jj 的误差 ;

    θ\theta' 是新的偏置 ;

    θ\theta 是老的偏置 ;


    3 . 偏置更新总结 : 当前节点的误差 , 乘以学习率 , 就是偏置的改变 ; 旧的偏置值 , 加上偏置改变 , 可计算出新的偏置值 ;



    VI . 反向传播 过程



    1 . 权值 偏置 更新操作 : 先计算误差 , 然后根据误差计算 权值 和 偏置的改变值 , 再将原来的 权值 和 偏置 值 加上对应的改变值 , 计算出新的权值和偏置值 ;


    2 . 反向传播的过程 : 将误差从后向前传播 , 根据误差 , 从后到前依次修改权值和偏置值 ;


    ① 向后传播误差本质 : 使用梯度下降方法 , 优化损失函数 , 使损失函数取最小值 , 在这个过程中 , 不停地迭代修改 单元连接权值 , 和 每个单元的偏置 ;

    33 种梯度下降方法 : 随机梯度下降 , 批量梯度下降 , 小批量梯度下降方法 ;

    ③ 损失函数 : 类似于评分函数 ; 如 误差平方和 ;

    ④ 两个核心 : 首先 , 采用什么样的损失函数 , 其次 , 如何进行迭代修改 权值和偏置 ;



    VII . 损失函数 简介



    1 . 损失函数 作用 :


    ① 训练输出 : 神经网络 学习训练样本有一个输出输出 ;

    ② 样本实际值对应输出 : 数据集样本的真正的属性值对应的输出 , 0011 ;

    ③ 引入损失函数 : 使用损失函数 计算 上述 训练输出 和 样本实际值对应输出 的差别 ;

    ④ 损失函数最小值 : 训练输出 和 样本实际值对应输出 的差别越小越好 , 因此损失函数进行优化时 , 损失函数的值越小越好 ;


    2 . 损失函数优化 :


    ① 损失函数 优化过程 : 在优化使损失函数取最小值的过程 , 就是使对应的 单元连接权值 , 和 单元的偏置 , 等参数不断优化的过程 ;

    ② 损失函数最小值 与 最佳参数 : 最终损失函数最小值的状态的 权值 和 偏置就是 学习出的最佳参数值 ;


    3 . 损失函数本质 : 损失函数 最小值 计算过程 , 就是通过 梯度下降方法 , 逐步迭代获取 最佳 权值 与 偏置过程 ;



    VIII . 损失函数



    1 . 损失函数作用 : 度量 预测结果实际结果 差异 ;

    ① 神经网络学习训练目的 : 使 损失函数 取值最小 ;

    ② 损失函数要求 : 预测结果越好 , 损失越小 ;


    2 . 损失函数选择 :


    ① 分布比较 : 比较的两个属性是 分布 , 那么使用 交叉熵 损失函数 ;

    ② 数值比较 : 如果是两个 数值属性 之间比较 , 使用 误差平方和 损失函数 ;



    IX . 损失函数 举例



    1 . 样本示例 :


    ① 样本个数 : nn 个 ;

    ② 样本属性 : 取值有两种 , 0011 , 即样本的属性值只能从 {0,1}\{0, 1\} 集合中取值 ;

    ③ 实际属性值 : yiy_i 为实际属性值 , 并且有 yi{0,1}y_i \in \{0, 1\} ;

    ④ 预测属性值 : xix_i 为预测属性值 , 并且有 xi[0,1]x_i \in [0, 1] , 在 误差平方和 ( Mean squared error ) 损失函数中 , xix_i 取值范围可以是全体实数 ;


    2 . 误差平方和 ( 均方误差 Mean Squared Error ) 损失函数


    误差平方和公式 : 误差平方和 , 又叫均方误差 , 英文全称 Mean squared error , 简称 MSE ;


    =1ni=1n(xiyi)2误差平方和 = \dfrac{1}{n} \sum_{i = 1}^{n} (x_i - y_i)^2


    预测属性 减去 实际属性 得到差值 , 将该差值平方 , 目的是去掉差值的符号 ( 正负号 ) , 得到误差平方 , 再将 nn 个误差平方加起来 , 得到平方和 , 然后除以 nn 取平均值 , 即得到 nn 个样本的 平均的 误差平方 , 因此叫做 均方误差 , 又叫误差平方和 ;


    3 . 交叉熵 ( Cross Entropy ) 损失函数


    交叉熵公式 :


    =1ni=1n[yi×log(xi)+(1yi)×log(1xi)]交叉熵 = - \dfrac{1}{n} \sum_{i = 1}^{n} [ y_i \times log(x_i) + (1 - y_i) \times log(1 - x_i) ]


    该 交叉熵公式 通常用于比较分布之间的差别 ;



    X . 损失函数 优化过程



    1 . 损失函数作用 : 损失函数的目的是为神经网络优化 每个连接的 权值 和 每个单元的 偏置 , 使数据集的损失函数最小 ;


    2 . 损失函数优化注意事项 :

    ① 参数个数 : 参数数量很多 , 搜索算法空间很大 , 可能有百万级 ;

    ② 参数取值 : 参数取值范围很广 , 取值范围从 负无穷 到 正无穷 ;

    ③ 损失函数复杂 : 损失函数 与 参数 的关系很复杂 ;

    ④ 计算能力 : 对于海量的大数据 , 训练时不能一次性训练所有的数据 , 计算能力也是有限制的 ;

    ⑤ 过拟合问题 : 训练集上损失函数达到最小值 , 在测试模型时 , 不一定能得到该结果 ;

    展开全文
  • 反向传播算法详细推导 反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失...
  • 考研对信息的获取至关重要,此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的...这是一场以误差(Error)为主导的反向传播(Back Propagation)运动,旨在得到最优的全局参数矩阵,进而...
  • https://blog.csdn.net/weixin_42398658/article/details/83859131 but 24式有个小错误,f'(netj)应该时f'(netk)
  • 反向传播算法.doc

    2020-06-27 13:45:32
    反向传播算法 神经元j在迭代n时即呈现第n个训练例子输出误差信号定义如下 e(n)=d(n)-y(n) 神经元j是输出节点 4.1 我们将神经元j的误差能量瞬间定义为1/2e(n相应的整个误差能量的瞬间值即为输出层的所以神经元的误差...
  • 1. 前向传播算法 所谓的前向传播算法就是:将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止。...2. 反向传播算法(BP算法) 反向传播(back propagation, BP) 算法是 “误差反向传播
  •  反向传播的最终目的是求得使代价C最小时w、b的最佳值,为了方便计算引入了神经单元误差δ_j^l,其定义为误差C关于某个神经单元z的关系;  其定义如上所示,某神经元误差为代价C(总误差)关于z的偏导数,其中l为...
  • 在讲解误差反向传播算法之前,我们来回顾一下信号在神经网络中的流动过程。请细细体会,当输入向量\(X\)输入感知器时,第一次初始化权重向量\(W\)是随机组成的,也可以理解成我们任意设置了初始值,并和输入做点积...
  • BP神经网络算法即误差传播算法(error Back Propagation),先将输入层输入的数据提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结构;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据...
  • 反向传播算法是人工神经网络训练时采用的一种通用方法,在现代深度学习...反向传播算法从神经网络的输出层开始,利用递推公式根据后一层的误 差计算本层的误差,通过误差计算本层参数的梯度值,然后将差项传播到前一层
  • 推导(一) 概念及基本思想(二)信息的前向传播(三)误差反向传播(1)输出层的权重参数更新(2)隐藏层的权重参数更新(3)输出层与隐藏层的偏置参数更新(4)反向传播算法的4个核心公式(5)BP算法计算:某个...
  • 反向传播BP算法

    2019-10-28 15:02:02
    目录 反向传播的作用 反向传播的公式推导 误差反向传播 输出层的权重参数更新 隐藏层的权重参数更新 ...而反向传播算法就是用于计算该梯度的具体方法,其本质是利用链式法则对每个参数求偏导。 ...
  • 神经网络的反向传播算法1 反向传播算法和BP网络简介2 信息的前向传播3 误差反向传播3.1 输出层的权重参数更新3.2 隐藏层的权重参数更新3.3输出层和隐藏层的偏置参数更新3.4 BP算法四个核心公式3.5 BP 算法计算某个...
  • 反向传播算法原理

    2019-10-01 10:06:00
    2、使用随机梯度下降法进行优化时要计算每一个权值通过全导公式计算这个偏导,要想到这个w是通过影响j的加权输入来影响网络中的其他部分的,所以可以转变成: 就转变成求下面这个偏导了,这个偏导的相反数就是所...
  • 算法通过神经网络往输入端方向传递信息,计算对应参数造成损失的梯度,是以误差为主导,根据损失函数梯度指明的方向,不断前进,从而不断减少误差,达到局部最优的算法。 本文主要详细阐述BP算法的迭代计算过程,...
  • 而是直接利用均方差误差函数计算与One-hot 编码的真实标签之间的误差,所有的网络激活函数全部采用Sigmoid 函数,这些设计都是为了能直接利用梯度推导公式。 二、数据集 通过scikit-learn 库提供的便捷工具生成...
  • 本章节有很多公式没有显示出来,去看本人原版论文吧。 第二章 深度神经网络的理论基础 2.1 神经网络的结构 2.1.1 人工神经元模型 神经网络的设计是类比人类大脑进行设计的,神经生物学家将人工神经网络视为一种解释...
  • 我们将实现一个4层的全连接网络,来完成二...而是直接利用均方误差函数计算与One-hot编码的真实标签之间的误差,所有的网络激活函数全部采用 Sigmoid函数,这些设计都是为了能直接利用我们的梯度传播公式。 ...
  • Q1代价函数 (1)假设神经网络的训练样本有m个,每一个包含一组输入x和...误差计算公式,注意第一列作为输入是没有误差的。 前向传播算法: 用δ表示误差,则δ(4)=a(4)-y 前一层的误差为: 再前一...
  • 相关公式 ∂z∂ωi∂z∂ωi\frac{\partial z}{\partial ω^i} 用于该层参数更新: ∂z∂xi∂z∂xi\frac{\partial z}{\...反向传播算法 为了省事,直接截图: 简而言之 每一轮: \qquad当训练数据未...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

反向传播算法误差计算公式