理论篇
1、神经网络
神经网络其实就是按照一定规则连接起来的多个神经元。上图展示了一个全连接(full connected, FC)神经网络,通过观察上面的图,我们可以发现它的规则包括:
神经元按照层来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的。
同一层的神经元之间没有连接。
第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入。
每个连接都有一个权值。
上面这些规则定义了全连接神经网络的结构。事实上还存在很多其它结构的神经网络,比如卷积神经网络(CNN)、循环神经网络(RNN),他们都具有不同的连接规则。
2、神经网络某一节点输出值计算公式:
其中W为连接此节点的元素的权值,x为输入向量,a为输出向量
式2说明神经网络的每一层的作用实际上就是先将输入向量左乘一个数组进行线性变换,得到一个新的向量,然后再对这个向量逐元素应用一个激活函数。
3、神经网络的训练
我们可以说神经网络是一个模型,那么这些权值就是模型的参数,也就是模型要学习的东西。然而,一个神经网络的连接方式、网络的层数、每层的节点数这些参数,则不是学习出来的,而是人为事先设置的。对于这些人为设置的参数,我们称之为超参数(Hyper-Parameters)。
反向传播算法:
(1)首先使用前向传播计算出最终结果
(2)使用如下公式计算每个节点的误差值
对于隐藏层节点:
意思就是从后向前传播误差值,将后一层每个节点计算出的误差值乘以其权重传到前面这一层来,当成这一层的误差值
(3)误差值计算出来后使用梯度下降等算法更新权重
总结:
我们已经介绍了神经网络每个节点误差项的计算和权重更新方法。显然,计算一个节点的误差项,需要先计算每个与其相连的下一层节点的误差项。这就要求误差项的计算顺序必须是从输出层开始,然后反向依次计算每个隐藏层的误差项,直到与输入层相连的那个隐藏层。这就是反向传播算法的名字的含义。当所有节点的误差项计算完毕后,我们就可以根据式5来更新所有的权重
4、反向传播推导(省略)
关于神经网络的几个问题
1、神经网络适用范围
参考链接
神经网络主要适用于多个特征,多个变量的情况
2、神经网络适用的数据格式
神经网络只能识别数字,即int或float,我们的文本啊,图片啊,语音啊都要转化为相应的数字才能处理,我们针对不同的载体,每种类型的数字格式是不同的
(2)神经网络中可以使用的数据格式
参考链接
3、神经网络优缺点
3.1优点:
(1)可以很好的解决多特征值问题,当一个问题存在许多个变量的时候,简单的线性回归与逻辑回归不能很好的解决问题
(2)多层前向BP网络的优点
网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题;
网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;
网络具有一定的推广、概括能力。
3.2缺点:
(1)收敛速度很慢
bp神经网络学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的。
因为神经网络需要使用梯度下降等类似方法一步步收敛,如果学习速率过大很有可能出现震荡不能收敛的情况
(2)网络训练失败的可能性较大
从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败
4、BP神经网络的基本原理
利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。
5、神经网络的限制
参考链接:BP神经网络的限制与改进方法
(1)学习速率与稳定性的矛盾
当使用较小学习率时,收敛速度较慢,比较耗费时间
使用较大学习率时,会产生动荡的情况,不能收敛
二者相互矛盾
(2)学习速率的选择缺乏有效的方法
不同于线性网络,还没有找到一个简单易行的方法以解决非线性网络选择学习速率的问题。
(3)训练过程可能陷于局部最小
BP网络通常在训练过程中也可能找不到某个具体问题的解,比如在训练过程中陷入局部最小的情况。当BP网络在训练过程中陷入误差性能函数的局部最小时,可以通过改变其初始值和经过多次训练来获得全局最小
(4)没有确定隐层神经元个数的有效方法
确定多层神经网络隐层神经元数也是一个很重要的问题,太少的神经元会导致网络“欠适配”,太多的隐层神经元会导致“过适配”。
(欠拟合和过拟合问题)