机器学习笔记——7 神经网络(一个BP神经网络的python实现:手写数字识别)
本篇介绍神经网络,首先讨论神经网络的基本架构,然后讨论神经网络是依据什么进行学习的,进一步总结神经网络并讨论它的优势。
然后我们具体的讨论BP神经网络,它基于梯度迭代算法,我们讨论它的递推式和梯度更新公式,最后利用理论上的讨论结果,用python具体地实现一个识别手写数字的BP神经网络。
神经网络的基本架构
- 网络层(layer):从左往右,从0开始计数,第0层称为输入层,第 l − 1 l-1 l−1层称为输出层,中间的层称为隐藏层(hidden layer)。
- 神经元(neuron),即节点,可以理解为一个潜在特征。
- 激活函数(activation function),一般是非线性函数,常用的有sigmod函数,ReLU函数,softmax函数。
对于中间层的节点,可以选用sigmoid函数。对于输出层的节点,根据输出值的特点,选用相应的函数作为输出层节点的激活函数,如果是二分类的,选用sigmoid函数,多分类的选用softmax函数,只取非负值的选用ReLU函数。
神经网络的学习方式
神经网络寻找潜在特征的方式,实际上通过训练确定下各个连接权重值。这些权重值即是整个网络的参数。
训练参数的方法跟前面广义线性模型的训练方式是一样的,即是从某一准则确定出一个损失函数,最值化这个损失函数,在这个过程中调整网络的参数。
一般而言,可以从两个角度来确定损失函数:
- 几何角度。通过输出值与样本标签值的距离定义损失函数,当我们采用欧式距离时,损失函数为: J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 J(\theta) = \frac{1}{2m}\sum_{i = 1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 J(θ)=2m1i=1∑m(y(i)−y^(i))2
- 概率角度。如果输出值可以看成一个概率值,那么可以根据似然原理定义损失函数。对于k分类标签值,对数似然函数为: ℓ ( θ ) = 1 m ∑ i = 1 m ∑ j = 1 k y j ( i ) l o g ( y ^ j ( i ) ) \ell(\theta) =\frac{1}{m} \sum_{i = 1}^{m}\sum_{j = 1}^{k}y_j^{(i)}log(\hat{y}_j^{(i)}) ℓ(θ)=m1i=1∑mj=1∑kyj(i)log(y^j(i))
利用迭代算法来最值化损失函数,在BP神经网络中,用的是梯度迭代法。
梯度下降的拓展算法momentum
momentum算法是在梯度下降的基础上,对每一轮的梯度进行指数平滑,类似时间序列中的指数平滑模型。
数学上的表达式为
- v d W [ t ] = β v d W [ t ] + ( 1 − β ) ∂ J ∂ W [ t ] v_{dW^{[t]}} = \beta v_{dW^{[t]}} + (1-\beta)\frac{\partial J}{\partial W^{[t]}} vdW[t]=βvdW[t]+(1−β)∂W[t]∂J
- W [ t ] = W [ t ] − α v d W [ t ] W^{[t]} =W^{[t]} - \alpha v_{dW^{[t]}} W[t]=W[t]−αvdW[t]
分析可知,在该优化算法中,每一次梯度不仅结合了本轮计算的结果,还指数地综合了以往各轮的梯度,因此使得本轮的梯度更加地稳定。另外,可以形象地从物理学上运动和动量的角度理解该算法,所以算法称为momentum。
This technique has signi cantly helped neural networks during the training phase.——cs229, Andrew Ng
神经网络的创新之处
传统统计分析方法的局限
由于人类观测手段的有限,有很多决定输出的特征我们无从观测。因此我们只能将我们能观测到属性作为问题的输入。而从输入的各个属性,到我们期望的输出之间,隐藏着一些我们无法直接观测的特征,称之为潜在特征或潜在因子。
利用传统的多元统计方法因子分析,我们有可能通过主成分的旋转找到一些有实际意义的成分,从而提取出有可理解的特征。但是大多数问题,我们根本无从分析这些“有意义”的特征,无论是特征的形式及其量化形式。
神经网络(neural network)的优势
神经网络的优势在于它有较大规模数量的参数,这为各种可能的潜在特征映射提供了可能。但与此同时,神经网络需要数量更多的样本,以此来保证找到可靠的潜在特征(intermediate features)。神经网络通过输入端的属性值与输出端的标签值,来矫正和寻找潜在特征,这是神经网络一个很神奇的地方,这种方式也称为端到端学习 (end-to-end learining)。通过学习的成果,我们可能发现一些特征,但是这些特征不一定具备“可理解”的意义。
从退化的角度上看,神经网络是广义线性模型的一个扩展,其中激活函数所起的作用类似于广义线性模型中的典则相应函数。
BP(后向传播)神经网络
BP神经网络利用梯度下降法来最值化损失函数,因此其重点在于梯度表达式的推导。好的记号可以让大脑思考得更为高效,因此引入记号如下:
记号(notation)
- g [ i ] g^{[i]} g[i]:第 i i i层的激活函数
- z j [ i ] z^{[i]}_j zj[i]:第 i i i层第 j j j个节点的值
- a j [ i ] a^{[i]}_j aj[i]:第 i i i层第 j j