eta=0.1 epsilon=1e-8 theta=0.0 while True: gradient=dJ(theta) last_theta=theta theta=theta-eta*gradient if(abs(J(theta)-J(last_theta))<epsilon): break print(theta) print(J(theta))
上述有一句theta=theta-eta*gradient,是为了逐步改变theta的值
在我看来,如果确认了theta的移动方向,实际上写成:theta=theta-eta,是不是也可以的?例如我知道了theta需要往右移时,我取一个正值的theta,theta需要往左移时,我取一个负值的theta
之所以要乘以gradient,是为了要确认theta移动的方向对吧?因为如果gradient(也就是导数)为正,那么说明theta下一次需要往x轴的负方向移动,如果gradient为负,那么说明theta下一次需要往x轴的正方向移动,这也是老师你在第1节说到的:导数可以代表方向,对应损失函数J增大的方向
所以乘以gradient的作用,就是为了确定正负方向
然后我还有一个问题,万一gradient的值非常大,那theta这个移动的距离不是会很大吗?对于我们获取极值来说,是不是会有影响?