Digit Recognizer

batch梯度下降算法

梯度下降算法并不能保证被优化的函数达到全局最优解,只有当损失函数为凸函数时才能保证达到了全局最优解。除了不能达到全局最优解,梯度下降算法的另外一个问题就是计算时间太长,因为要在全部训练数据上最小化损失,在每一轮的迭代过程中都要计算全部数据上的损失函数。

随机梯度下降(SGD)

为了加速训练过程,可以使用随机梯度下降算法(Stochastic Gradient Descent),这个算法在每一轮迭代过程中随机优化某一条数据上的损失函数,更新的速度就大大加快了,由于每次只是在一条数据上计算损失,并不能代表在全部数据上的损失函数更小,所以随机梯度下降算法甚至可能无法达到局部最优。另外随机梯度下降算法永远不会收敛,只会在最小值附近不断地波动。另一个很大的缺点是不能使用向量化进行加速,因为他每次只选用了一个样本。

Mini_batch梯度下降

批梯度下降算法:每次计算一小部分数据的损失函数,进行一次参数的更新,这一小部分数据称为一个batch,每次使用一个batch可以大大减小需要迭代的次数,同时可以使收敛的结果更加接近梯度下降。
下降算法比较
batch_size = 84
batch_size = 128
batch_size = 256
batch_size为批处理参数,即经过batc_size个样本则进行一次梯度下降,当数据量比较小时,可以将batch_size设置为全数据集。

例如有500万的训练集,划分为每个子集为1000个样本,那么会有5000个这样的子集,每一次对1000个样本进行整体梯度下降更新参数。当计算完5000个子集时即完成了一个epoch(遍历整个数据集)

三种梯度下降算法的比较

在batch梯度下降中,单次迭代的成本是下降的,在mini_batch梯度下降中,并不是每次都会下降,但是整体趋势是下降的,会有更多的噪音,因为每次选取的数据不一样,遇到好处理的成本就低,难处理的成本就高。
compare

如何选择参数batch_size

如果训练集较小(小于2000)可以直接使用Batch Gradient Descent,一般batch_size的大小选择2的幂次计算较快(64-512)是为了符合CPU/GPU的内存要求

过拟合

欠拟合(unoverfitting):根本原因是特征维度过少,模型过于简单,导致函数无法满足训练集,误差较大。表现为高偏差(训练集与验证集上的损失都比较高(High bias)),可以通过以下方法改进:
1、调整更深更大的网络结构(Bigger Network)
2、增加更多的训练时间(Time Longer)
3、寻找其他的网络结构(NN Architecture Search)

过拟合(overfitting):当模型过于复杂或者训练次数太多,导致在未知数据上预测的准确性明显低于在训练数据上的准确率,表现为高方差(High Variance)如下图:在训练集的准确率明显有高于在验证集上的准确率
在这里插入图片描述
解决过拟合的方法:
1、交叉验证(Cross Validation)
2、使用更多的训练数据或者使用数据增广的方法(Train with more data)
3、提前结束训练(Early Stopping)

在这里插入图片描述
4、正则化(Regularization):让模型变得简单
5、随机失活(Dropout)

数据增广之后的效果如下,可以很明显的看出避免了过拟合,并且准确率较高
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值