深度学习中一些设置的理解
深度学习中一些设置的理解
1. batch_size: 为什么要设置batch_size
batch_size=1单个样本训练计算loss形象的说就是你让野人(模型)学习辨别猫狗,但是你每次只给他看一张图(仅一种形态的猫或狗),这样会有2个不可避免的问题:
- 梯度更新不稳定:就算前后两次都给dog图片,但两种品种的dog特征可能差距巨大,这时候需要更新权重(野人会困惑)的方向差异很大(就是梯度的方差大),更新会不稳定,且如果数据集没有经过清洗,很可能会朝错误的方向学习,最后导致训练震荡。相反,如果使用较大的 batch_size,梯度更新会更加平滑和稳定,模型能够更好地学到数据的总体分布特征;
- 计算效率问题:batch的话可以多多利用GPU的并行计算能力嘛。另外大batch也可以更快训练完成,收敛快。
看了上面可能会觉得是不是直接每次更新都把全部训了就好了,没错 [脱单doge]这样训练集是可以很快学好,但是这会导致另外一个问题→过拟合,这意味着模型在训练集上看起来很牛,但在未知数据上表现较差,因为它只是记住了训练集的具体样本特征,而没有学到数据的泛化特征(类似你把猫狗就分别摆在野人左右两边 让他学什么是猫什么是狗,你随便拿起一个问他说这是猫还是狗?他全部答对 acc=100%,那么[奥比岛_点赞]他有可能只是记住了左猫右狗),你拿新的猫狗测试集来问他,他就分辨不出来了,这就是过拟合了没有泛化能力。
综上,一般我们会选择合适的batchsize去训练,(但其实大数据集全跑 gpu也训不了。),我们工业上给现场用的话,统一告诉一个每张显卡下 不同尺寸图像的最大batch就完事了,大多数情况用了预训练模型都没啥问题,但是如果你要训练一个新的模型,还是要根据实际情况去调整batchsize,不过一般来说,batchsize=32-128是比较合适的选择。
–B站用户
2. L1 正则化,为什么会降低模型复杂度
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JLChenBlog!
评论