深度学习入门教程(6)MNIST手写数字识别

one_hot:

在多分类的网络输出层,我们会对于每一个输出都有输出一个概率矩阵表示该输入对应每个分类的概率有多少,而我们实际的数据,为了力求分类准确,应该是一个正确类别概率为0,其余分类概率均为0的矩阵。而one_hot就是将我们把分类概率矩阵变为0-1矩阵。

Batch:

我们有N个样本参与训练,每个样本都会给不同方向的梯度带来一个动量,但是一次全部计算是不现实的事情,尤其是在面对大数据量的时候,现有的硬件条件和速度并不能满足要求,但是我们可以采用Batch的方法,一次只将部分的数据放入网络训练,虽然这样做有失一定的准确性,但是只要Batch设置的合理,整个函数的走向大趋势依旧是往最小值点去的。一般将Batch设为2的次幂,本人一般都是设在64左右,调整都以2的倍数进行,以满足内存对齐的需求。

如果我们用全部的训练集去训练,走的曲线可能会贴近下面那条较为平稳的线,但鉴于实际情况,我们可能无法一次训练整个训练集,我们采用Batch方法部分训练,这样走的方向可能更贴近上面的线,虽然迭代次数会增加,但是大方向是正确的,而且由于一次参与的数据量小,迭代过程进行得也比较快。

MNIST数据集训练:

准确率上升趋势:

这里要提及一下,交叉熵损失函数里传的logits是不需要经过sotfmax激活的,而是在这个函数的第一步会将logits进行sotfmax处理。

关于梯度消失与梯度爆炸:详见吴恩达深度学习教程

梯度消失:整个网络只有最后面的层在有较大幅度的学习,而前面几层的改变十分缓慢,以至于效果上仅仅是使得输入的数据稍微波动了一点。

梯度爆炸:前面的层改变太快,使得到后面的层的时候梯度过大,无法进行权值的更新。

可以见到,准确率在起初的上升还是比较快的,随着迭代次数的增加,准确率趋于稳定,在某一个值震荡。

引起震荡有三种可能:

1)鞍点:在多元函数中,会存在一种点,他对于某些变量的梯度很大,对于某些变量的梯度很小,这可能导致我们的值不能按照目的往最低点去而是在鞍点附近震荡。

2)局部最小值:有可能因为我们的步长设的过小,导致网络的迭代陷入了某个局部最小值而没有足够的步长跳出,从而导致振荡现象。

3)全局最低点:我们知道,全局最低点只是一个点,想要通过梯度下降完全找到,在复杂的多元函数中,是十分困难的,要求的精度实在是太高,而我们的步长可能相对来说过大,因此也会在全局最低点附近震荡。

关于超参数:也就是需要我们凭借经验设置的对网络性能和准确度有所影响的参数

1.学习率α:每一次值的更新都是w'=α-αdw的形式。

2.batch_size:每一次载入的训练集的大小

3.迭代次数:迭代次数也是一种超参数,迭代过少网络欠拟合,迭代过多网络过拟合。

                                                  网络欠拟合现象

                                               网络过拟合现象

                                               较为满意的拟合

简单点来说就是物理上的画图,我们对于最终的线段要求是平滑曲线或者是尽可能过多的点的直线,将那些误差较大的点当作是错误数据不进行拟合,这样可以最大程度地减小总的误差。神经网络也是一样的道理,如果我们力求尽可能完美地拟合训练集[上图中的黑色点],那么真实数据[类似于上图中的粉色点]就会与拟合出来的网络存在较大偏差,同样地,如果迭代次数过少,连训练集都不能拟合理想,那么真实的数据也不会太理想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值