用梯度下降法对线性函数训练。的一点思考
y = k * x _ b
given x = 3 , y = 0.64
k ,b的初始值和each epoch 训练值如下:
k , b : 0.1707537467836899 0.2802512489278963 k , b : 0.16160299742695194 0.277200999142317 k , b : 0.15428239794156157 0.27476079931385355 k , b : 0.14842591835324928 0.2728086394510828 k , b : 0.14374073468259943 0.27124691156086617 k , b : 0.13999258774607956 0.26999752924869286 k , b : 0.13699407019686366 0.26899802339895423 k , b : 0.13459525615749096 0.26819841871916333 k , b : 0.1326762049259928 0.2675587349753306 k , b : 0.13114096394079428 0.26704698798026444 k , b : 0.12991277115263544 0.2666375903842115 k , b : 0.12893021692210838 0.26631007230736914
分析两个变量对 k,b 导数的影响。
g_k = 2 * (y - kx - b) * (-x)
g_b = 2 * (y - kx - b) * 1
loss = square(y - k * x - b)
1. 可以看出, g_k , g_b 与loss 的关系为线性关系, 切 b 只与loss 有关。
当loss 很大的时候, k ,b 的变化都很大。
当loss 很小的时候, k,b 的变化都很小。
2. g_k 与 x 的关系 : 正相关
如果 x 的范数非常大, 在loss 很小的时候 g_k 也会很大。
如果 x 的范数很小,在loss 很小的时候, g_k 也很小。
k 与 x 的关系是什么呢 ,一般想到的是 x 越大, k 越小。 但是这样就会造成 g_k 很大。 那么 g_k 可能远远大于 k ,造成图像抖动。
还有一种情况是 x 很大, k 也很大, 那么曲线的斜率很大, b 的绝对值也很大。 但是g_k 还是一样大。
那么 究竟是 大x + 大 k + 大b + 小g_k , 小_gb 的梯度容易收敛,
还是 大x + 小k + 小b + 小_g_k + 小g_b 容易收敛呢?, 或者说模型更容易收敛到 k 很大 还是 k 很小?