返回信息流这两天在学BPNN,就自己写了个BPNN去分类。有8W的样本,发现随机梯度下降到4,5K的时候就收敛了,然后跑测试集感觉效果也还好。但是觉得这种情况下8W的样本大多数都浪费了。想问下这种情况下如何处理?是要把所有的样本都跑一遍么?
然后我还发现了一个叫Mini-Batch Gradient Descent的方法,大致思想就是每次梯度下降处理m个样本,对这m个样本做整体梯度下降,感觉类似整体梯度和随机梯度的中和,应该能做到比随机梯度下降更好,但是实际跑的时候发现效果很差,基本很容易陷入局部最优出不来。这是为啥?
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #17459同步于 2015/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
梯度下降的一个小问题
hyx2011
2015/11/27镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
"跑测试集感觉效果也还好"——LZ是怎么感觉出来的?一般做实验有对比才有说服力,建议LZ用一些基本的分类器当作baseline做一下对比实验。至于你说的样本浪费的问题,如果你的梯度下降是真的收敛了,那就不存在数据浪费的问题,多的数据不用也没事。还有mini-batch GD理论上效果应该至少不会比SGD差,LZ多跑几次实验,模型参数随机初始化,尽量避免陷入局部最优。
mini-batch我跑过很多次了,都是局部最有解。。。。。。至于对比测试,和SVM,贝叶斯什么的比较了,确实要好一点
【 在 LJ10211289 (ColdStart) 的大作中提到: 】
: "跑测试集感觉效果也还好"——LZ是怎么感觉出来的?一般做实验有对比才有说服力,建议LZ用一些基本的分类器当作baseline做一下对比实验。至于你说的样本浪费...
NN 是非凸的,里面都是局部最优解。所以说 “很容易陷入局部最优出不来” 这是概念性错误。你找到的解都是局部的,只是在评价指标下有好坏之分。
“但是觉得这种情况下8W的样本大多数都浪费了。想问下这种情况下如何处理?是要把所有的样本都跑一遍么?”
再是没什么数据浪费,在深度学习里,你的数据量越大越好,100W 的数据量都嫌不够,还要做数据增广,8W 数据哪有什么浪费。虽然 SGD 的本意是一个样本一个样本的训练,但现在的 SGD 一般都暗指 mini batch gd,你看看 caffe 里面的 solver 就知道了。你跑 SGD 的时候,是对所有样本迭代,相当于概率论里的不放回抽样,所有的样本都会被输送到网络里参与训练,不会造成浪费。
“感觉类似整体梯度和随机梯度的中和,应该能做到比随机梯度下降更好”
在梯度下降过程中引入随机性 batch 好处是很多的,这一点在上世纪 Lecun 就已经讨论过了,楼主可以看看 Lecun 早年的论文。另外 google的 batch normalization 论文里也对 batch 的好处做了总结。大致上 mini batch gd 的好处有 1)可以用 vectorized 方式来编程做数据并行,同时处理 batch 个样本,来加速计算;2)batch 求得的梯度可以作为整个训练集的梯度的估计,取 batch 可以一定程度上抵抗训练集的误差。
“但是实际跑的时候发现效果很差,基本很容易陷入局部最优出不来。”
不收敛有两种情况,一种是 vanish gradient,梯度太小导致网络收敛不了;另一种是 overflow gradient,梯度爆炸导致网络变 NAN。后者的主要原因是网络参数的尺度不平衡。楼主如果遇到的是前者的话,那得说说你用的网络结构是什么,参数都是哪些才能找原因。
=.=感觉并不是啊。。。。。我会说我把最后一层换成softmax之后整个网络都跑挂了么。。。。。。
【 在 xukez2 的大作中提到: 】
: 窝觉得可能是vanish gradient了??河神好厉害啊。。手写bpnn给跪了。。
: 发自「贵邮」