? BP算法推算过程

BP算法推算过程

当加入第$k$个输入时,隐蔽层$h$结点的输入加权和为:

\[s_h^k = \sum\limits_i {w_{ih} x_i^k }\]

相应点的输出:

\[y_h^k = F(s_h^k ) = F(\sum\limits_i {w_{ih} x_i^k } )\]

同样,输出层$j$结点的输入加权和为:

\[s_j^k = \sum\limits_h {w_{hj} y_h^k } = \sum\limits_h {w_{hj} F(\sum\limits_i {w_{ih} x_i^k } )}\]

相应点的输出:

\[y_j^k = F(s_j^k ) = F(\sum\limits_h {w_{hj} y_h^k } ) = F[\sum\limits_h {w_{hj} F(\sum\limits_i {w_{ih} x_i^k } )} ]\]

这里,各结点的阈值等效为一个连接的加权$\theta=w_{oh}\text{or} w_{oj}$,这些连接由各结点连到具有固定值-1的偏置结点,其连接加权也是可调的,同其它加权一样参与调节过程。

误差函数为:

\[E(W) = \frac{1}{2}\sum\limits_{k,j} {(T_j^k - y_j^k )^2 } = \frac{1}{2}\sum\limits_{k,j} {\{ T_j^k - F[\sum\limits_h {w_{hj} F(\sum\limits_i {w_{ih} x_i^k } )} ]\} ^2 }\]

为了使误差函数最小,用梯度下降法求得最优的加权,权值先从输出层开始修正,然后依次修正前层权值,因此含有反传的含义。

根据梯度下降法,由隐蔽层到输出层的连接的加权调节量为:

\[\Delta w_{hj} = - \eta \frac{{\partial E}}{{\partial w_{hj} }} = \eta \sum\limits_k {(T_j^k - y_j^k )F‘(s_j^k )y_h^k = } \eta \sum\limits_k {\delta _j^k y_h^k }\]

其中$\delta_j^k$为输出结点的误差信号:

\[\delta _j^k = F‘(s_j^k )(T_j^k - y_j^k ) = F‘(s_j^k )\Delta _j^k \quad\quad (1)\]

\[\Delta _j^k = T_j^k - y_j^k\]

对于输入层到隐蔽层结点连接的加权修正量$\Delta w_{ij}$,必须考虑将$E(W)$对$w_{ih}$求导,因此利用分层链路法,有:

\[\begin{array}{l}\Delta w_{ih} = - \eta \frac{{\partial E}}{{\partial w_{ih} }} = - \eta \sum\limits_k {\frac{{\partial E}}{{\partial y_h^k }}} \cdot \frac{{\partial y_h^k }}{{\partial w_{ih} }} = \eta \sum\limits_{k,j} {\{ (T_j^k - y_j^k )F‘(s_j^k )w_{hj} \cdot F‘(s_h^k )x_i^k } \} \\ \quad \quad = \eta \sum\limits_{k,j} {\delta _j^k w_{hj} F‘(s_h^k )x_i^k } = \eta \sum\limits_k {\delta _h^k x_i^k } \\ \end{array}\]

其中:

\[\delta _h^k = F‘(s_h^k )\sum\limits_j {w_{hj} \delta _j^k } = F‘(s_h^k )\Delta _h^k \quad\quad (2)\]

\[\Delta _h^k = \sum\limits_j {w_{hj} \delta _j^k }\]

可以看出,式(1)和(2)具有相同的形式,所不同的是其误差值的定义,所以可定义BP算法对任意层的加权修正量的一般形式:

\[\Delta w_{pq} = \eta \sum\limits_{vector\_no\_P} {\delta _o y_{in} }\]

若每加入一个训练对所有加权调节一次,则可写成:

\[\Delta w_{pq} = \eta \delta _o y_{in}\]

其中,下标o和in指相关连接的输出端点和输入端点,$y_{in}$代表输入端点的实际输入,$\delta_o$表示输出端点的误差,具体的含义由具体层决定,对于输出层由式(1)给出,对隐蔽层则由式(2)给出。

输出层$\Delta _j^k = T_j^k - y_j^k $可直接计算,于是误差值$\delta_j^k$很容易得到。对前一隐蔽层没有直接给出目标值,不能直接计算$\Delta _h^k $,而需利用输出层的$ \delta _j^k $来计算:

\[\Delta _h^k = \sum\limits_j {w_{hj} \delta _j^k }\]

因此,算出$\Delta _h^k $后,$ \delta _h^k $也就求出了。

如果前面还有隐蔽层,用$ \delta _h^k $再按上述方法计算$\Delta _1^k $和$\delta _1^k $,以此类推,一直将输出误差$\delta$一层一层推算到第一隐蔽层为止。各层的$\delta$求得后,各层的加权调节量即可按上述公式求得。由于误差$ \delta _j^k $相当于由输出向输入反向传播,所以这种训练算法成为误差反传算法(BP算法)。

BP训练算法实现步骤

准备:训练数据组。设网络有$m$层,$y_j^m$表示第$m$中第$j$个节点的输出,$y_^0$(零层输出)等于$x_j$,即第$j$个输入。$w_{ij}^m$表示从$y_i^{m-1}$到$y_j^m$的连接加权。这里,$m$代表层号,而不是向量的类号。

1.将各加权随机置为小的随机数。可用均匀分布的随机数,以保证网络不被大的加权值所饱和。

2. 从训练数据组中选一数据对$x^k,T^k$, 将输入向量加到输入层$(m=0)$,使得对所有端点$i$:         $y_i^0=x_i^k$, $k$表示向量类号

3. 信号通过网络向前传播,即利用关系式:

\[y_j^m=F(s_j^m)=F(\sum_iw_{ij}^my_i^{m-1})\]

计算从第一层开始的各层内每个节点$i$的输出$y_j^m$,直到输出层的每个节点的输出计算完为止。

4. 计算输出层每个结点的误差值(利用公式(1))

\[\delta_j^m=F‘(s_j^m)(T_j^k-y_i^m)=y_j^m(1-y_j^m)(T_j^k-y_j^m),(\text{对Sigmod函数})\]

它是由实际输出和要求目标值之差获得。

5. 计算前面各层结点的误差值(利用公式(2))

\[\delta_j^{m-1}=F‘(s_j^{m-1}\sum_iw_{ji}\delta_i^m)\]

这里逐层计算反传误差,直到将每层类每个结点的误差值算出为止。

6. 利用加权修正公式

\[
\Delta w_{ij}^m = \eta \delta _j^m y_i^{m - 1} 
\]

和关系

\[
w_{ij}^{new} = w_{ij}^{old} + \Delta w_{ij} 
\]

修正所有连接权。一般$\eta=0.01--1$,称为训练速率系数。

7. 返回第2步,为下一个输入向量重复上述步骤,直至网络收敛。

时间: 2024-10-01 04:36:09

? BP算法推算过程的相关文章

今天开始学Pattern Recognition and Machine Learning (PRML),章节5.2-5.3,Neural Networks神经网络训练(BP算法)

转载请注明出处:Bin的专栏,http://blog.csdn.net/xbinworld 这一篇是整个第五章的精华了,会重点介绍一下Neural Networks的训练方法--反向传播算法(backpropagation,BP),这个算法提出到现在近30年时间都没什么变化,可谓极其经典.也是deep learning的基石之一.还是老样子,下文基本是阅读笔记(句子翻译+自己理解),把书里的内容梳理一遍,也不为什么目的,记下来以后自己可以翻阅用. 5.2 Network Training 我们可

BP神经网络推导过程详解

BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 下图为一典型的多层神经网络. 通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2层~第L-1层). 令输入向量为: \[ \vec x = [x_1 \quad x_2 \quad \ldots \quad x_i \quad

BP算法

1986年Rumelhart和McCelland在<并行分布式处理>中提出了BP算法,即非线性连续变换函数的多层感知器网络误差反向传播算法. 该算法的思想是:学习过程分为信号的正向传播与误差的反向传播两个过程. 正向传播时,输入样本从输入层传入,经各隐含层逐层处理后传向输出层,若输出层的实际输出与期望输出不符,则转入误差反向传播阶段. 误差反传是将输出误差以某种形式通过隐含层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层的误差信号,此信号即作为修正各单元权值的依据. 上述两个过程

误差逆传播(error BackPropagation, BP)算法推导及向量化表示

1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes on Convolutional Neural Networks,结果刚看到第2章教材对BP算法的回顾就犯难了,不同于之前我学习的对每一个权值分别进行更新的公式推导,通过向量化表示它只用了5个式子就完成了对连接权值更新公式的描述,因此我第一眼看过去对每个向量的内部结构根本不清楚.原因还估计是自己当初

BP算法与公式推导

BP(backpropgationalgorithm ):后向传导算法,顾名思义就是从神经网络的输出(顶层)到输入(底层)进行求解.那么求解什么呢,求解的就是神经网络中的参数的导数,即参数梯度方向,从而就可以使用梯度下降等求解无约束问题(cost function的最值)的方法求得最终的参数.神经网络前向传播的过程比较简单,这里不做讲解(如果不了解,可以参看文献). 1.问题分析 1.1 Cost function 假设我们有一个固定样本集,它包含 m 个样例.我们可以用批量梯度下降法来求解神经

stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(training instance),每个训练实例是一个400维特征的列向量(20*20 pixel image).用 X 矩阵表示整个训练集,则 X 是一个 5000*400 (5000行 400列)的矩阵 另外,还有一个5000*1的列向量 y ,用来标记训练数据集的结果.比如,第一个训练实例对应的输出

深度学习BP算法的推导(附加RNN,LSTM的推导说明)

注:1)这篇文章主要参考Alex Graves的博士论文<Supervised Sequence Labelling with Recurrent Neural Networks> 详细介绍其关于BP算法的推导过程. 2)论文没有提到过偏差的处理,不过如果能耐心推导出论文给出的公式,那么这将十分简单. 3)由于是结合语音训练的,最后是softmax出来是获得有限结果的概率值,然后做交叉熵作为目标函数,所以可能与其他的网络不一致,但是反馈的推导应该是一样的,除了输出层和最后一个隐层之间的个推导.

(转)神经网络和深度学习简史(第一部分):从感知机到BP算法

深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chenxiaoqing.范娜Fiona.杨超.微胖.汪汪.赵巍 导读:这是<神经网络和深度学习简史>第一部分.这一部分,我们会介绍1958年感知机神经网络的诞生,70年代人工智能寒冬以及1986年BP算法让神经网络再度流行起来. 深度学习掀起海啸 如今,深度学习浪潮拍打计算机语言的海岸已有好几年,但是,

关于BP算法在DNN中本质问题的几点随笔 [原创 by 白明] 微信号matthew-bai

随着deep learning的火爆,神经网络(NN)被大家广泛研究使用.但是大部分RD对BP在NN中本质不甚清楚,对于为什这么使用以及国外大牛们是什么原因会想到用dropout/sigmoid/ReLU/change learnRate/momentum/ASGD/vanishment等问题等呢.要想了解国外大牛的思考过程,需要学习到BP在NN中的本质问题,其中涉及到NN训练对于判决边界如何形成?ASGD为什么尤其在NN中效果比二阶信息效果好?如何选择激活函数合适?为何语音识别中误差函数选择互