1 2 3 4 5 6 7 8 9 10 11 | 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这个移动的距离不是会很大吗?对于我们获取极值来说,是不是会有影响?