zoukankan      html  css  js  c++  java
  • BP神经网络算法学习

    BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。

    一个神经网络的结构示意图如下所示。

    clip_image002

    BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。输入层神经元的个数由样本属性的维度决定,输出层神经元的个数由样本分类个数决定。隐藏层的层数和每层的神经元个数由用户指定。每一层包含若干个神经元,每个神经元包含一个而阈值clip_image004,用来改变神经元的活性。网络中的弧线clip_image006表示前一层神经元和后一层神经元之间的权值。每个神经元都有输入和输出。输入层的输入和输出都是训练样本的属性值。

    对于隐藏层和输出层的输入clip_image008 其中,clip_image006[1]是由上一层的单元i到单元j的连接的权;clip_image010是上一层的单元i的输出;而clip_image004[1]是单元j的阈值。

    神经网络中神经元的输出是经由赋活函数计算得到的。该函数用符号表现单元代表的神经元活性。赋活函数一般使用simoid函数(或者logistic函数)。神经元的输出为:

    clip_image012

    除此之外,神经网络中有一个学习率(l)的概念,通常取0和1之间的值,并有助于找到全局最小。如果学习率太小,学习将进行得很慢。如果学习率太大,可能出现在不适当的解之间摆动。

    交代清楚了神经网络中基本要素,我们来看一下BP算法的学习过程:

    BPTrain(){

          初始化network的权和阈值。

          while 终止条件不满足 {

                for samples中的每个训练样本X {

                // 向前传播输入

                for 隐藏或输出层每个单元j {

                      clip_image014;// 相对于前一层i,计算单元j的净输入 clip_image016;// 计算单元j的输出

                }

                // 后向传播误差

                for 输出层每个单元j {

                      clip_image018;// 计算误差

                }

                for 由最后一个到第一个隐藏层,对于隐藏层每个单元j {

                       clip_image020;// k是j的下一层中的神经元

                }

                for network中每个权clip_image006[2] {

                        clip_image022 ; // 权增值

                        clip_image024 ; // 权更新

                 }

                 for network中每个偏差clip_image004[2] {

                          clip_image027; // 偏差增值

                          clip_image029;// 偏差更新

                 }

          }

    }

    算法基本流程就是:

    1、初始化网络权值和神经元的阈值(最简单的办法就是随机初始化)

    2、前向传播:按照公式一层一层的计算隐层神经元和输出层神经元的输入和输出。

    3、后向传播:根据公式修正权值和阈值

    直到满足终止条件。

    算法中还有几点是需要说明的:

    1、关于clip_image031clip_image031[1]是神经元的误差。

    对于输出层神经元clip_image018[1],其中,clip_image010[1]是单元j的实际输 出,而clip_image035是j基于给定训练样本的已知类标号的真正输出。

    对于隐藏层神经元clip_image037,其中,clip_image039是由下一较高层中单元k到单元j的连接权,而clip_image041是单元k的误差。

    权值增量是clip_image022[1],阈值增量是clip_image027[1],其中clip_image043是学习率。

    对于clip_image031[2]的推导采用了梯度下降的算法。推导的前提是保证输出单元的均方差最小。clip_image046,其中P是样本总数,m是输出层神经元个数clip_image048是样本实际输出,clip_image050是神经网络输出。

    梯度下降思路就是对clip_image052clip_image039[1]的导数。

    对于输出层:

    clip_image054

    clip_image056

    其中的clip_image058就是clip_image018[2]

    对于隐藏层:

    clip_image060

    clip_image062

    其中clip_image064=clip_image066就是隐藏层的误差计算公式。

    2、关于终止条件,可以有多种形式:

    § 前一周期所有的clip_image068都太小,小于某个指定的阈值。

    § 前一周期未正确分类的样本百分比小于某个阈值。

    § 超过预先指定的周期数。

    § 神经网络的输出值和实际输出值的均方误差小于某一阈值。

    一般地,最后一种终止条件的准确率更高一些。

    在实际使用BP神经网络的过程中,还会有一些实际的问题:

    1、 样本处理。对于输出,如果只有两类那么输出为0和1,只有当clip_image070趋于正负无穷大的时候才会输出0,1。因此条件可适当放宽,输出>0.9时就认为是1,输出<0.1时认为是0。对于输入,样本也需要做归一化处理。

    2、 网络结构的选择。主要是指隐藏层层数和神经元数决定了网络规模,网络规模和性能学习效果密切相关。规模大,计算量大,而且可能导致过度拟合;但是规模小,也可能导致欠拟合。

    3、 初始权值、阈值的选择,初始值对学习结果是有影响的,选择一个合适初始值也非常重要。

    4、 增量学习和批量学习。上面的算法和数学推导都是基于批量学习的,批量学习适用于离线学习,学习效果稳定性好;增量学习使用于在线学习,它对输入样本的噪声是比较敏感的,不适合剧烈变化的输入模式。

    5、 对于激励函数和误差函数也有其他的选择。

    总的来说BP算法的可选项比较多,针对特定的训练数据往往有比较大的优化空间。

    作者:风中的雨 Email:service@saihui.wang 微信公众号:saihui_service(加关注此公众号,有机会获得1000元现金奖励) QQ:微信私聊:634165717
  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/jonesvale/p/6370343.html
Copyright © 2011-2022 走看看