采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
按照老师的意思,是因为原数据中有些特征的数值过大,导致步长乘以偏导数过大所以出现了 overflow 的现象。
但是有些特征值乘以对应的偏导数也在合理范围内,为什么它们最终也会是 nan ?
这块我理解的应该有问题,还请老师抽空解答一下:)
因为步长越累越高,导致最终搜索的点,越来越远离真正的最优解。
注意,是所有的 theta 组成了搜索空间,我们是在这个空间中做搜索。如果存在一个最优解的话,远离最优解,就意味着离所有的正确的 theta 都越来越远。
如果你说是不是会有某个瞬间,不是所有的结果都是 nan,我只能说有可能,但是要找相应的数据。因为步长越来越大,大概率的,最终一个巨大的步长“压垮”了所有的特征。
继续加油!:)
感谢老师的及时解答。关于老师的第二段话:“注意,是所有的 theta 组成了搜索空间,我们是在这个空间中做搜索。如果存在一个最优解的话,远离最优解,就意味着离所有的正确的 theta 都越来越远。”我还是有点蒙。 根据目前的梯度下降公式,老师,您的意思是不是说当更新具体某一个 theta 值的时候,目前的梯度下降算法需要所有的 theta 值参与运算,因此,一个极端值出现的话就会影响整体的结果。
对!虽然其实在这个问题里,并不是个别“极端值”的问题,而是数据尺度不一样,导致我们需要小心地选择合适的 eta,否则很容易从某个维度开始偏离,最终越来越远。解决这个问题的另一个方式是对求解出的搜索方向做归一化,只取方向,而步长完全由 eta 决定。可以参考这里:http://coding.imooc.com/learn/questiondetail/113270.html
老师,看了您推荐的解答,有一个点还是蒙。 这是您另一个解答中的一段话:“这样,每次theta的改变,不再受gradient大小的影响,gradient只提供方向,更容易靠eta控制搜索的步长。” 按我的理解,特征标准化改变了特征的分布情况,使得它们整体更有规律。这和提供方向有什么联系,怎么理解?我唯一想到的是向量标准化变成单位向量,不考虑大小,只有方向。这里的标准化和向量标准化不一样吧?
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
3.0k 15
1.6k 15
1.5k 14