码迷,mamicode.com
首页 > 其他好文 > 详细

BP神经网络推导过程详解

时间:2015-06-21 00:47:45      阅读:1160      评论:0      收藏:0      [点我收藏+]

标签:

BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的。

一、多层神经网络结构及其描述

下图为一典型的多层神经网络。

技术分享

通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2~L-1层)。

令输入向量为:

\[ \vec x = [x_1 \quad x_2 \quad \ldots \quad x_i \quad \ldots \quad x_m],i=1,2,...,m \]

 

输出向量为:

     \( \vec y = [y_1 \quad y_2 \quad \ldots \quad y_\quad \ldots \quad y_n],k=1,2,...,n \)

l隐含层各神经元的输出为:

    \[ h^{(l)}=[h_1^{(l)} h_2^{(l)} \quad \ldots h_j^{(l)} \quad \ldots \quad h_{s_l}^{(l)}],j=1,2,...,s_\]

其中,技术分享为第l层神经元的个数。

技术分享为从l-1层第j个神经元与l层第i个神经元之间的连接权重;技术分享为第l层第i个神经元的偏置,那么:

    技术分享

    技术分享

其中,技术分享l层第i个神经元的输入,技术分享为神经元的激活函数。通常在多层神经网络中采用非线性激活函数,而不是用线性激活函数,因为采用基于线性激活函数的多层神经网络本质上还是多个线性函数的叠加,其结果仍然为一个线性函数。

二、激活函数

BP神经网络通常使用下面两种非线性激活函数:

    技术分享

    技术分享

第一种称为sigmod函数或者logistics函数,第二种为双曲正切函数。

Sigmod函数的图像如下图所示,它的变化范围为(0, 1),其导数为技术分享

技术分享

双曲正切函数的图像如下图所示,它的变化范围为(-1, 1),其导数为技术分享

技术分享

三、BP算法推导过程

假定我们有m个训练样本技术分享,其中技术分享为对应输入技术分享的期望输出。BP算法通过最优化各层神经元的输入权值以及偏置,使得神经网络的输出尽可能地接近期望输出,以达到训练(或者学习)的目的。

采用批量更新方法,对于给定的m个训练样本,定义误差函数为:

    技术分享

其中,E(i)为单个样本的训练误差:

    技术分享

因此,

    技术分享

BP算法每一次迭代按照以下方式对权值以及偏置进行更新:

    技术分享

    技术分享

其中,技术分享为学习速率,它的取值范围为(0, 1)BP算法的关键在于如何求解技术分享技术分享的偏导数。

对于单个训练样本,输出层的权值偏导数计算过程:

    技术分享

即:

    技术分享

同理可得,

    技术分享

令:

    技术分享

则:

    技术分享

    技术分享

对隐含层L-1层:

技术分享

因为,

    技术分享

所以,

    技术分享

同理,

    技术分享

令:

    技术分享

则:

    技术分享

    技术分享

 

由上可推,第l层(技术分享)的权值和偏置的偏导可以表示为:

    技术分享

    技术分享

其中,

    技术分享

四、BP算法过程描述

采用批量更新方法对神经网络的权值和偏置进行更新:

  1. 对所有的层技术分享,设技术分享,这里技术分享技术分享分别为全零矩阵和全零向量;
  2. For i = 1:m
    1. 使用反向传播算法,计算各层神经元权值和偏置的梯度矩阵技术分享和向量和技术分享
    2. 计算技术分享
    3. 计算技术分享
  3. 更新权值和偏置:
    1. 计算技术分享
    2. 计算技术分享

    

BP神经网络推导过程详解

标签:

原文地址:http://www.cnblogs.com/biaoyu/p/4591304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!