不同优化器下BP神经网络与LR的MNIST识别情况比较
引言
最近在上模式识别的课,期末的作业是对MNIST库进行两种手段的识别并且比较两者之间的差异,这个是我最终的论文,放到优快云上供大家学习参考使用。当然有很多话是比较客套的,想要直接使用的同学可以删掉。
源码以及排版好的报告已经放到了我的优快云下载链接:
BP网络识别MNIST三种优化器
markdown报告文档
当中。
Back Propagation神经网络
和Logistic Regression
在各类模式识别以及算法当中应用十分广泛,同时这两种识别算法需要一定的优化器来使得算法能够更加逼近最优解并且还能够加快收敛速度;同时手写数字识别由于书写较为随意,所以有一定的识别难度,尤其是在以追求完全正确识别率为目标的识别中各种优化算法有着很高的价值。
各类优化器(Optimizer)介绍:
优化器是智能识别中重要组成部分,由于算法本身收敛速度和对全局最优解的搜索能力有较大差异,所以需要优化器来加快算法本身的收敛并且脱离局部最优解以缩短算法所需要的时间并且提高准确率。
常见的优化器如下:
1.Batch Gradient Descent(BGD)
更新梯度的规则:对整个训练集的数据计算 cost function 对参数的梯度:
θ = θ − η ⋅ ∇ θ J ( θ ) \theta=\theta-\eta \cdot \nabla_{\theta} J(\theta) θ=θ−η⋅∇θJ(θ)
由于这种方法仅仅在一次更新里,就要对整个数据集计算梯度,所以计算时间很长,当遇到大量的数据集时会非常棘手,并且这种优化器不能让新数据实时 更新模型。
2.Mini-Batch Gradient Descent(MBGD)
更新梯度的规则:每一次仅仅利用一小批的样本,即 n 个样本进行计算,每一次循环作用于该批次的样本数据:
θ = θ − η ⋅ ∇ θ J ( θ ; x ( i : i + n ) ; y ( i : i + n ) ) \theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i : i+n)} ; y^{(i : i+n)}\right) θ=θ−η⋅∇θJ(θ;x(i:i+n);y(i:i+n))
Momentum通过对梯度mean的估计,使得梯度在纵向上的正负步长逐步抵消,横向上的步长逐步累积,从而减少了震荡,加快了学习速率。
3.Momentum
更新梯度的规则:引入参数 γ v t − 1 \gamma v_{t-1} γvt−1
v t = γ v t − 1 + η ∇ θ J ( θ ) θ = θ − v t \begin{array}{l}{v_{t}=\gamma v_{t-1}+\eta \nabla_{\theta} J(\theta)} \\ {\theta=\theta-v_{t}}\end{array} vt=γvt−1+η∇θJ(θ)θ=θ−vt
4. Adadelta
Adadelta优化算法会对低频的参数做的更新会比较大,同时对高频的做的更新会比较小,所以对于稀疏的数据Adadelta优化器的表现很好,能够比较好地提高 SGD 的鲁棒性。
梯度更新规则:
θ t + 1 , i = θ t , i − η Δ θ t + ϵ ⋅ g t , i \theta_{t+1, i}=\theta_{t, i}-\frac{\eta}{\sqrt{\Delta \theta_{t}+\epsilon}} \cdot g_{t, i} θt+1,i=θt,i−Δθt+ϵη