梯度下降算法
重复直到收敛{
[{ heta _j}: = { heta _j} - alpha frac{partial }{{partial { heta _j}}}Jleft( {{ heta _0},{ heta _1}} ight)left( {for{ m{ j = 0 and j = 1}}} ight)]
}
线性回归模型{
[{h_ heta }left( x ight) = { heta _0} + heta_1 {x_1}]
[Jleft( {{ heta _0},{ heta _1}} ight) = frac{1}{{2m}}sumlimits_{i = 1}^m {{{left( {{h_ heta }left( {{x^{(i)}}} ight) - {y^i}} ight)}^2}} ]
}
我们的目的是将梯度下降算法应用到线性回归中,最小化J(θ0, θ1)。
关键在于确定 [frac{partial }{{partial { heta _{ m{j}}}}}Jleft( {{ heta _0},{ heta _1}} ight)]
下面是推导过程
[egin{array}{l}
frac{partial }{{partial { heta _{
m{j}}}}}Jleft( {{ heta _0},{ heta _1}}
ight) = frac{partial }{{partial { heta _{
m{j}}}}}frac{1}{{2m}}sumlimits_1^m {{{left( {{h_ heta }left( {{x^{left( i
ight)}}}
ight) - {y^{left( i
ight)}}}
ight)}^2}} \
= frac{partial }{{partial { heta _{
m{j}}}}}frac{1}{{2m}}sumlimits_{i = 1}^m {{{left( {{ heta _0} + { heta _1}{x^{left( i
ight)}} - {y^{left( i
ight)}}}
ight)}^2}}
end{array}]
当j=0时 [frac{partial }{{partial { heta _0}}}Jleft( {{ heta _0},{ heta _1}} ight) = frac{1}{m}sumlimits_{i = 1}^m {left( {{h_ heta }left( {{x^{left( i ight)}}} ight) - {y^{left( i ight)}}} ight)} ]
当j=1时 [frac{partial }{{partial { heta _1}}}Jleft( {{ heta _0},{ heta _1}} ight) = frac{1}{m}sumlimits_{i = 1}^m {left( {{h_ heta }left( {{x^{left( i ight)}}} ight) - {y^{left( i ight)}}} ight)} {x^{left( i ight)}}]
现在梯度下降算法就可以表示为
重复直到收敛{
[egin{array}{l}
{ heta _0}: = { heta _0} - alpha frac{1}{m}sumlimits_{i = 1}^m {left( {{h_ heta }left( {{x^{left( i
ight)}}}
ight) - {y^{left( i
ight)}}}
ight)} \
{ heta _1}: = { heta _1} - alpha frac{1}{m}sumlimits_{i = 1}^m {left( {{h_ heta }left( {{x^{left( i
ight)}}}
ight) - {y^{left( i
ight)}}}
ight)} {x^{left( i
ight)}}
end{array}]
}
下面时梯度下降的示意图
梯度下降算法会根据不同初始点的选取陷入不同的局部最小。
但是就线性回归问题而言,它的代价函数的图形总是凸面函数(convex function)
为方便起见,我们依然使用“等高线”图表示
假设初始点红叉所在位置,对应的h(θ)可能是右边的图
慢慢收敛到最佳的(θ0, θ1)
这里的梯度下降又称为批处理梯度下降("Batch" Gradient Descent)
"Batch": Each step of gradient descent uses all the training examples.
梯度下降的每个步骤都使用所有训练示例。