神经网络

摘要

神经网络可以说是目前人工智能算法中应用最为广泛的算法之一,相比Linear regression 、logistics regression、decision tree等机器学习算法等会复杂不少,变化也很多。本文从向量矩阵的角度去理解BP神经网络的数学原理,这个过程会显得更加清晰、简洁。我们以最经典的神经网络三层网络二分类模型为例,逐步推导数学公式,三层网络简单说明如下:

img

 

符号定义

forward公式推导

其中(1)式即为信息正向传导的向量化公式相应的python代码实现:

其中 funcActivation 为隐藏层激活函数的封装,这里使用的Relu,funcOut为输出层激活函数的封装,使用的是sigmoid。

损失函数

最常用的有Mean Square Error均方差损失函数,用于分类的Cross Entropy等。本文以经典的MSE为例。如下(2)式是MSE损失函数的向量化表示。

误差反向传播

我们目的是最小化损失函数,通常使用梯度下降法,逐渐逼近最小极值点。需要逐渐求解参数主要是两个:

,下面分别计算对应损失函数的偏导数。

其中(3)式利用迹 的性质,所以前后两项一样(4)式到(5)式利用了迹的性质,其中表示矩阵各个元素相乘,对应numpy的multiply。神经网络梯度下降求解参数的时候,是从输出层到隐藏层逆着计算的,所以称之为“反向传播”,因此首先求对的偏导,此时相当于常数,故(6)式的 忽略,继续推导:

这里(7)式到(8)式利用了标量对向量或矩阵微分 的性质。对应python实现:

 

同理继续推导

对应的python的实现:

显式使用偏置的数学推导

以上是使用通过 增加全1的列的方式,省略偏置,下面再推导一下使用偏置的方式

其中 跟(8)式的结果相同,继续推导 :

下面推导 :

显然 跟(11)式的结果相同,继续推导 :

总结

程序实现

使用python库sklearn自带的数据集breast_cancer,共569行数据,30个维度。完整python实现代码: