梯度下降实例演示参数更新和原理分析

梯度下降实例演示参数更新

YPred = a + bx (线性公式)
(LOSS)误差公式:SSE=½ (Y-YP)^2 = ½(Y-(a+bX))^2

梯度下降实例演示参数更新和原理分析_第1张图片
第一步:随机对比重(a,b)赋值并计算误差平方和(SSE)
梯度下降实例演示参数更新和原理分析_第2张图片
第二步:通过对误差比重(a,b)求导计算出误差梯度(注:YP即Ypred)
LOSS对参数a,b求偏导:
∂SSE/∂a = – (Y-YP)
∂SSE/∂b = – (Y-YP)X
∂SSE/∂a 和 ∂SSE/∂b 就被称之为梯度,他们代表a,b相对SSE移动的方向。
梯度下降实例演示参数更新和原理分析_第3张图片
第三步:通过梯度调整a,b,使得a,b最佳即所得SSE最小

New a = a – r * ∑∂SSE/∂a = 0.45 - 0.01 * 3.300 = 0.42
New b = b – r * ∑∂SSE/∂b = 0.75 - 0.01 * 1.545 = 0.73
在这里,r代表学习率 = 0.01,可以自设,是用来决定调整a,b快慢的。越大调整的越快,但越容易漏掉收敛的最佳点。

第四步:用新的a,b来求出新的SSE
梯度下降实例演示参数更新和原理分析_第4张图片
大家可以从图上看出,总的SSE值(Total SSE)从原来的0.677变为0.553。代表着我们的预测准度正在增加。

第五步:重复三四步直到调整a,b不会明显的影响SSE。到那时我们的预测准度就会达到最高
这就是梯度下降法,这个算法及他的变种是许多机器学习的算法,如神经式网络,深度学习的核心组成部分。

大家可以从图上看出,总的SSE值(Total SSE)从原来的0.677变为0.553。代表着我们的预测准度正在增加。

梯度下降法参数更新的原理

设想下有个函数,你的目标是:找到一个参数θ使得它的值 Y 最小。但它很复杂,你无法找到这个参数的解析解,所以你希望通过梯度下降法去猜这个参数。问题是怎么猜?
对于多数有连续性的函数来说,显然不可能把每个θ 都试一遍。所以只能先随机取一个θ,然后看看怎么调整它最有可能使得 Y 变小。把这个过程重复n遍,自然最后得到的 θ 的估值会越来越小。

现在问题是怎么调整?既然要调整,肯定是基于当前我们拥有的那个参数 θt ,所以有了:
θ(t+1)=θt+Δ
那现在问题是每次更新的时候这个Δ应该取什么值?

我们知道关于某变量的(偏)导数的概念是指当(仅仅)该变量往正向的变化量趋向于0时的其函数值变化量的极限。 所以现在若求 Y 关于θt的导数,得到一个值比如:5,那就说明若现在我们把 θt 往正向(即增大)一点点, Y 的值会变大,但不一定是正好+5。同理若现在导数是-5,那么把 θt 增大一点点 Y 值会变小。 这里我们发现不管导数值 Δ 是正的还是负的(正负即导数的方向),对于 θt 来说,-Δ 的最终方向(即最终的正负号,决定是增(+)还是减(-))一定是能将Y值变小的方向(除非导数为0)。所以有了:
θ(t+1)=θt+(-Δ)

但是说到底,Δ 的绝对值只是个关于Y的变化率,本质上和 θt 没关系。所以为了抹去Δ在幅度上对 θt 的影响,需要一个学习率来控制: α ∈ (0,1] 。所以有了:
θ{t+1}=θt+(-αΔ)=θt-αΔ
而这里的Δ就是那个偏导,有多少个参数,就有多少个不同的 Δ 。

现在分析在梯度下降法中最常听到的一句话:“梯度下降法就是朝着梯度的反方向迭代地调整参数直到收敛。” 这里的梯度就是 Δ ,而梯度的反方向就是 -Δ的符号方向—梯度实际上是个向量。所以这个角度来说,即使我们只有一个参数需要调整,也可以认为它是个一维的向量。 整个过程你可以想象自己站在一个山坡上,准备走到山脚下(最小值的地方),于是很自然地你会考虑朝着哪个方向走,方向由 -Δ的方向给出,而至于一次走多远,由 |αΔ| 来控制。 这种方式相信你应该能理解其只能找到局部最小值,而不是全局的。

你可能感兴趣的:(tensorflow,gradient)