前馈神经网络
前馈神经网络,又称 FNN(Feedforward Neural Network) ,是一种最简单的神经网络结构, FNN 结构是由最基本的神经元( neuron )堆叠而成;在每个神经元会做两步操作:1.与对应权重相乘累加,称为神经元状态。2.累加后的结果传入激活函数 。激活函数的值即为一个神经元的输出。
总的来说, FNN 的模型可以描述成: 每经过一个隐含层就再给其增加一个中间函数,而每个隐含层所代表的具体的中间函数形式,是比较难解释。
与其他机器模型一样, FNN 也需要模型训练时需要的目标 cost function ,也叫做 loss function 。常用的 loss function 有:
与 linear regression 和 logistic regression 有些不同,模型的 cost function 可以通过极大似然估计这个角度切入,而前馈神经网络的 cost function ,笔者暂时还未深入了解,为何是如此设置。
而当有了 cost function ,则模型训练的目标变成最小化损失函数,变成了一个无约束优化问题。
FNN 参数的训练,可以使用反向传播算法,其基本思想是:1. 计算每一层的状态值和激活值,直至最后一层(前向传播);2. 从最后一层开始,计算每一层的误差,不断地向前推进(反向传播);3. 利用误差迭代参数,直至满足相应条件(达到迭代次数或误差得到满足)
以下图的3层前馈神经网络为例:
第二层神经元的状态值和激活值为:
而第三层神经元的状态值和激活值则为:
如果若以矩阵形式来描述,则前向传播可以写成如下:
先对 cost function 进行扩展
因此,若对输出层的神经元求偏导,则有:
若写成矩阵形式,则为:
继续对 cost function 进行进一步扩展
对隐含层的神经元求偏导有:
设 ,则上式可写成:
这里 是指,与第 层的第 个神经元连接的第 层的神经元所组成的集合。由于上述的 FNN 各层之间是一种全连接方式,因此上述 写成矩阵形式为: 而 写成矩阵形式则为:
针对上述前馈神经网络,BP算法最后可以总结为四条公式:
选用不同的 cost funtion ,最后公式的形式可能会有所不同,但整个BP算法的流程是一样的。使用BP算法训练的神经网络,也被称为BP神经网络。深度学习中很多网络都可以使用BP算法来进行参数训练。
这里使用的是吴恩达在Coursera中machine learning的一个实验例子;在实验中,是通过搭建一个简单的神经网络,做到手写体数字识别的效果。
激活函数:
神经网络结构规格:
BP算法:
最后网络在数据集上训练了300次,在训练集上的准确率达到了96%,与在Coursera里的实验相比,上述该例子的实现中并没有进行正则化,并且在训练次数较多;上述仅用最简的方法实现BP算法,较为粗糙。
前馈神经网络是最为简单的神经网络结构,是神经网络中的基础知识。当隐含层层数增加时,神经网络则可称之为深度网络。上述也对训练神经网络的BP算法做了简单介绍,也进行了较为粗略地实现。