BP神经网络的认识
BP神经网络是最基础的神经网络,其输出结果采用前向传播,误差采用反向(Back Propagation)传播方式进行。在我看来BP神经网络就是一个”万能的模型+误差修正函数“,每次根据训练得到的结果与预想结果进行误差分析,进而修改权值和阈值,一步一步得到能输出和预想结果一致的模型。举一个例子:比如某厂商生产一种产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,从而生产出让消费者更满意的产品。这就是BP神经网络的核心。
看这样一个问题,假如我手里有一笔钱,N个亿吧,我把它分别投给5个公司,分别占比 M1,M2,M3,M4,M5(M1到M5均为百分比 %)。而每个公司的回报率是不一样的,分别为 A1, A2, A3, A4, A5,(A1到A5也均为百分比 %)那么我的收益应该是多少?这个问题看起来应该是够简单了,你可能提笔就能搞定 收益 = NM1A1 + NM2A2+NM3A3+NM4A4+NM5A5 。这个完全没错,但是体现不出水平,我们可以把它转化成一个网络模型来进行说明。如下图:
上面的问题是不是莫名其妙的就被整理成了一个三层的网络,N1到N5表示每个公司获得的钱,R表示最终的收益。R = NM1A1 + NM2A2+NM3A3+NM4A4+NM5A5 。我们可以把 N 作为输入层 ,R作为输出层,N1到N5则整体作为隐藏层,共三层。而M1到M5则可以理解为输入层到隐藏层的权重,A1到A5为隐藏层到输出层的权重。
这里提到了四个重要的概念 输入层(input) , 隐藏层 (hidden),输出层(output)和权重(weight) 。而所有的网络都可以理解为由这三层和各层之间的权重组成的网络,只是隐藏层的层数和节点数会多很多。
输入层:信息的输入端,上图中 输入层 只有 1 个节点(一个圈圈),实际的网络中可能有很多个
隐藏层:信息的处理端,用于模拟一个计算的过程,上图中,隐藏层只有一层,节点数为 5 个。
输出层:信息的输出端,也就是我们要的结果,上图中,R 就是输出层的唯一一个节点,实际上可能有很多个输出节点。
权重:连接每层信息之间的参数,上图中只是通过乘机的方式来体现。
在上面的网络中,我们的计算过程比较直接,用每一层的数值乘以对应的权重。这一过程中,权重是恒定的,设定好的,因此,是将 输入层N 的 信息 ,单向传播到 输出层R 的过程,并没有反向传播信息,因此它不是神经网络,只是一个普通的网络。
而神经网络是一个信息可以反向传播的网络,而最早的Bp网络就是这一思想的体现。先不急着看Bp网络的结构,看到这儿你可能会好奇,反向传播是什么意思。再来举一个通俗的例子,猜数字:
当我提前设定一个数值 50,让你来猜,我会告诉你猜的数字是高了还是低了。你每次猜的数字相当于一次信息正向传播给我的结果,而我给你的提示就是反向传播的信息,往复多次,你就可以猜到我设定的数值 50 。 这就是典型的反向传播,即根据输出的结果来反向的调整模型,只是在实际应用中的Bp网络更为复杂和数学,但是思想很类似。
2.BP神经网络的训练过程
BP神经网络训练。该过程主要利用原始数据集进行BP神经网络的训练,最终形成特定的具有预测功能的神经网络,训练完成后将神经网络保存为net;
该算法的具体流程(训练)如下:
利用BP神经网络进行预测。该过程只需要将先前训练好的神经网络载入即可,然后同样对数据进行归一化等操作处理后,即可运行BP神经网络算法,产生一组概率向量。.
影响BP神经网络性能的参数主要有:隐含层节点的个数、激活函数的选择以及学习率的选择等。隐层神经元的个数越少,BP神经网络模拟的效果越差,隐层神经元个数越多模拟的效果越好,然而会使得训练较慢。激活函数对于识别率和收敛速度都有显著的影响,在逼近高次曲线时,S形函数精度比线性函数要高得多,但另一方面计算量也要大得多。学习率直接影响网络的收敛速度,以及网络是否能够收敛。学习率设置偏低虽然能够保证网络收敛,但是收敛速度会很慢,反之如果学习率设置偏高,可能直接导致网络无法收敛,进而降低识别率。
BP神经网络的总结
a.对于一个神经网络来说,更宽更深的网络,能够学到更加复杂的特征,其能够解决的问题也就越复杂,但是其计算过程也越繁琐,参数越多,越容易出现过拟合的情况(过拟合即网络过度学习了数据的特征,将噪声也同时考虑到了网络中,造成网络只在训练集上表现良好,而无法泛化到其他数据上,说白了就是这个网络已经学傻了…),因此要根据数据的实际情况来设计网络的层数,节点数,激励函数类型以及学习率。
b.对于一个神经网络来说,用来训练神经网络的数据集的质量,很大程度上决定了网络的预测效果。数据越丰富,神经网络越能够贴近实际关系,泛化能力越强。
c.Bp神经网络是区别于传统数据处理的一种方法,其特点在于寻找数据之间的相关性,并非严格地数学关系,因此是一种有效但是并非严格地网络。对于实际问题的处理非常有用,但不能作为严谨数学计算的方法。
Bp网络的出现,为后来的 AI 技术提供了理论基础,无论是 AlphaGo ,计算机视觉,还是自然语言处理等复杂问题,都可以理解为这一结构的升级和变种(不过升级幅度有点大,变化样式有点多···)。