梯度下降算法可以用在更一般的问题上,比如计算minimize J(θ0…θn),用以优化代价函数。
不断地改变θ0和θ1的值,直到代价函数J达到最小值。
梯度下降法的一大特点就是,不同位置出发,得到的可能是局部最优解,而非整体最优解。
repeat until convergence -> 重复执行,直到收敛
:=代表赋值,=代表真假判断
α称为学习率,控制以多大的幅度更新参数θj,即控制我们每次走一步步数的大小。
α越大,梯度下降越快。
会用到偏导数和导数的知识。
梯度下降中,θ0, θ1…θn都是同步更新的,不能将刚更新的值用来计算下一个参数。
假设我们想最小化的函数只有一个参数θ1
初始值不同的两种情况,粉色框对应的值为J(θ1)点的斜率。
θ1 在运算过程中一直在减小(下降)。
初始值在左侧时,斜率从负数增加到0;
初始值在右侧是,斜率从正数减小到0;
α学习率肯定是正数
如果学习率太小,梯度下降的过程会很慢。
如果学习率太大,很有可能会越过最优解点,并使得结果愈发远离理想结果,甚至发散。
当θ1相对上一次θ1没有改变,则到达局部最优解(因为局部最优解处斜率为0)
当结果接近局部最优解时,梯度下降会逐渐减小速度 / 步伐,因为斜率是主键趋于0的。
因此,在执行过程中不需要再修改α学习率。