当我们有一个假设函数时,我们需要一种方法去衡量假设函数值与真实数据之间的匹配程度。如何估计得到一个合适的参数,这就需要梯度下降,实现最小化J函数。
梯度下降
梯度下降的算法可以用于多参数的函数,此处为了简化,只是使用了两个参数。不断地改变和
的值,直到找到J的最小值或者局部最小值。
梯度下降1-局部最优1
梯度下降2-局部最优2
梯度下降对比(起始点不同)
你的起始点偏移了一些 ,即起始点的位置略有不同,你会得到一个非常不同的局部最优解,这就是梯度下降算法的一个特点。
收敛
符号 :=表示赋值,这是一个赋值运算符
等号 = ,这是一个判断为真的声明
a:=a+1 这意味着将 a的值再加上1,但我不会写 a=a+1 因为这本来就是错误的。a 和 a+1 永远不会是同一个值。
α表示学习速率。若把图片箭头走向看成下山,在梯度下降算法中,α控制了迈出多大的步子。因此如果 α值很大,那么相应的梯度下降过程中,我们会试图用大步子下山;如果α值很小,那么我们会迈着很小的小碎步下山。
设 temp0等于公式右边部分,设temp1等于公式右边部分,计算出公式右边这一部分,然后将计算出的结果一起存入 temp0和 temp1 之中,然后同时更新 θ0和θ1 。这才是正确的实现方法。
我们计算 temp0, 然后我们更新θ0 ,然后我们计算 temp1, 然后我们将 temp1 赋给θ1。右边的方法和左边的区别是,如果这个时候你已经更新了θ0,那么你会使用 θ0的新的值来计算这个微分项,所以由于你已经在这个公式中使用了新的 θ0的值 ,那么这会产生一个与左边不同的 temp1的值 。所以右边并不是正确地实现梯度下降的做法 。
同时更新是梯度下降中的一种常用方法,实际上同步更新是更自然的实现方法。当人们谈到梯度下降时,他们的意思就是同步更新。如果用非同步更新去实现算法,代码可能也会正确工作,但是右边的方法并不是人们所指的那个梯度下降算法,而是具有不同性质的其他算法。由于各种原因,这其中会表现出微小的差别。














网友评论