返回信息流比如说我有个目标函数http://latex.codecogs.com/svg.latex?J(\theta),m个样本http://latex.codecogs.com/svg.latex?x_{1},y_{1},...,x_{m},y_{m}
然后已经算出来:
http://latex.codecogs.com/svg.latex?\frac{\partial}{\partial\theta}J(\theta)=\frac{1}{m} \sum f(x_{i},y_{i})
其中f为通过J(theta)求导出来的某函数。
那么我对theta更新的时候,是来一个样本更新一次,还是对整个样本集进行累加然后对theta更新一次?有什么区别?
求指点0 0
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #12951同步于 2014/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
关于梯度下降算法的一点细节
a27400
2014/4/14镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
一个样本更新一次 -- 一种SGD,还是对整个样本集进行累加然后对theta更新一次 -- GD. GD求出来的才是J函数在完整数据集上的真实导数,SGD只是一种估计,并不是准确的导数。但是很多情况下SGD也能够很好的模拟GD,收敛到类似的点,而SGD比GD会快不少。
【 在 chentingpc 的大作中提到: 】
: 一个样本更新一次 -- 一种SGD,还是对整个样本集进行累加然后对theta更新一次 -- GD. GD求出来的才是J函数在完整数据集上的真实导数,SGD只是一种估计,并不是准确的导数。但是很多情况下SGD也能够很好的模拟GD,收敛到类似的点,而SGD比GD会快不少。
学习了!十分感谢
呀哈。。。刚看完。。。更新的时候只用一个随机的样本叫随机梯度下降。。。肯定速度会快不少。。。使用整个训练集去更新的话就是普通的梯度下降,这样理论上比较准确。。。
http://hi.baidu.com/dream_eagle/item/320c3439f9f246362e20c422
【 在 phantomlyc 的大作中提到: 】
: 呀哈。。。刚看完。。。更新的时候只用一个随机的样本叫随机梯度下降。。。肯定速度会快不少。。。使用整个训练集去更新的话就是普通的梯度下降,这样理论上比较准确。。。
: http://hi.baidu.com/dream_eagle/item/320c3439f9f246362e20c422
呀哈。。。我今天下午也看了下……发现自己写错了= =
请问这两种梯度下降法估计出来的参数哪个最后的准确度会更高呢?
【 在 chentingpc 的大作中提到: 】
: 一个样本更新一次 -- 一种SGD,还是对整个样本集进行累加然后对theta更新一次 -- GD. GD求出来的才是J函数在完整数据集上的真实导数,SGD只是一种估计,并不是准确的导数。但是很多情况下SGD也能够很好的模拟GD,收敛到类似的点,而SGD比GD会快不少。
这个得根据具体的问题和具体的SGD算法(SGD有很多具体的算法)来考虑。我觉得一般GD会更好些,但是很慢,如果用GD,可能有限时间里面出来的结果就比SGD差。对于某些特定的问题,有人做出很牛的SGD算法,很可能又快又好,可以搜一些文献看看。
【 在 cain 的大作中提到: 】
: 请问这两种梯度下降法估计出来的参数哪个最后的准确度会更高呢?
:
【 在 a27400 的大作中提到: 】
: 比如说我有个目标函数,m个样本
: 然后已经算出来:
:
: ...................
Andrew Ng还专门说过这两种的区别~来一个样本算一次的话,虽然快,但是不一定到得了局部极小值,可能会一直在周边打转