参考资料:来自于老哥数学建模课程。
BP神经网络的背景
1986年,Rumelhart等提出了误差反向传播神经网络,简称BP网络(Back Propagation),该网络是一种单向传播的多层前向网络。误差反向传播的学习算法简称BP算法,其基本思想是梯度下降法,BP神经网络是到目前为止使用最多、最成熟、采用最速下降的学习方式,在训练过程中通过误差的反向传播不断调整网络的权值和阈值,使得网络的误差平方和最小。BP神经网络可以全局逼近任意非线性的映射,具有良好的泛化性能。除此只挖掘,BP神经网络还具有强大的容错能力、鲁棒性好,具有自学习、自组织和自适应性等优点。因此,该神经网络自提出之后就得到了众多研究人员关注,并已经应用于语言综合、语言识别、自适应控制等领域。
输入层、隐含层、输出层
输入层:指的就是我们输入数据的种类数量,输入几类,输入层神经元就有几层
隐含层:夹在输入层和输出层之间的神经元,数量可以自行设置,不过一般通过经验公式来确定:
h = m + n + a h=\sqrt{m+n+a} h=m+n+a,
其中,m,n分别为输入、输出层节点个数,a为1-10之间的调节常数。
输出层:指的就是我们相应得到的指标,一般就一个
权值
权值(Weight):输入层与隐含层之间
权值是神经元之间连接的强度,标示量一个神经元的输出与其输入直接的关联程度,在神经网络的每个连接中,都会有一个对应的权值。当一个神经元与另一个神经元连接时,输入信号会乘以对应的权值,然后传递给下一个神经元。权值可以看作是输入信号的重要性或权重,它决定了输入信号对神经元激活状态的影响程度。权值是神经网络训练的主要目标,通过反向传播算法等优化方法,调整权值使得神经网络能够更好地拟合训练数据,准确预测。
阈值
阈值(Biases):隐含层和输出层之间
阈值是神经元的激活门限值,用于控制神经元是否被激活。在神经元接收到加权输入后,会将输入值与对应的权值相加,然后与阈值进行比较。如果加权输入超过了阈值,神经元将被激活,产生输出。否则将保持非激活状态。阈值可以看作是神经元的敏感度,调整阈值可以改变神经元的激活情况。在神经网络的训练过程中,也会优化阈值,以使神经元的激活情况更符合预期输出。
需要注意的是,权值和阈值都是可以学习更新的,神经网络会自动调整,以优化神经网络的性能、准确性。
激活函数
常用的激活函数有两个:
- tanh(双曲正切)激活函数:
tanh函数的定义是:
f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x
这个函数的输出范围在-1到1之间,即在输入较大或较小时,都能产生较大的输出值,因此相对于Sigmoid函数,它的输出更接近于零中心化,有时能帮助神经网络更快地收敛。
- Sigmoid激活函数:
Sigmoid函数的定义是:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
这个函数的输出范围是0-1之间,当输入值较大/较小时,输出值接近于0/1,容易导致梯度消失问题,即在反向传播过程中梯度接近于0,使得网络难以更新权重。
这两种激活函数主要用于在神经元之间传递信号并引入非线性特性,它们的主要作用在于增加网络的表达能力,使得神经网络可以学习非线性函数。
Tanh函数的求导过程:
d tanh ( x ) d x = 1 − tanh 2 ( x ) \frac{d\tanh(x)}{dx} = 1 - \tanh^{2}(x) dxdtanh(x)=1−tanh2(x)
Sigmoid函数的求导过程:
d σ ( x ) d x = σ ( x ) ⋅ ( 1 − σ ( x ) ) \frac{d\sigma(x)}{dx} = \sigma(x) \cdot (1 - \sigma(x)) dx