梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 J ( θ 1 , θ 2 ) {J(\theta_1, \theta_2)} J(θ1,θ2) 的最小值。
梯度下降背后的思想是:
开始时我们随机选择一个参数的组合 ( θ 1 , θ 2 , . . . , θ n ) {(\theta_1, \theta_2, ..., \theta_n)} (θ1,θ2,...,θn) ,计算代价函数,在原来参数组合的基础上增加/减少一个数后,计算代价函数。我们持续这么做直到到到一个局部最小值 (lcalminimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
梯度下降算法公式:
其中
α
{\alpha}
α 是学习率,它决定了每次下降所减去的值。
对 J 的梯度决定了下降的方向。
上面的公式是对单个
θ
{\theta}
θ 操作,接下来的
θ
{\theta}
θ 代指整个
θ
{\theta}
θ 矩阵 (
θ
1
,
θ
2
,
.
.
.
,
θ
n
{\theta_1, \theta_2, ..., \theta_n}
θ1,θ2,...,θn)
算法:
- 首先对所有 θ {\theta} θ 值 ( θ 1 , θ 2 , . . . , θ n {\theta_1, \theta_2, ..., \theta_n} θ1,θ2,...,θn) 初始化 ,计算 J ( θ ) {J(\theta)} J(θ)
- θ : = θ − α ∂ ∂ θ J ( θ ) {\theta: = \theta - \alpha\frac{\partial}{\partial \theta}J(\theta)} θ:=θ−α∂θ∂J(θ), 至此求得第二次的 θ {\theta} θ 值
- 之后继续进行下一次的迭代,求得 θ {\theta} θ 值,计算 J ( θ ) {J(\theta)} J(θ) …
- 直到求得最小值,或者达到指定的迭代次数。
因为成本函数 J ( θ ) {J(\theta)} J(θ) 是 凸函数(详情点击)。所以每次迭代后, J ( θ ) {J(\theta)} J(θ) 的值都会降低, J ( θ ) {J(\theta)} J(θ) 最终会减为 0,达到极小值点。无论上一次迭代的 θ {\theta} θ 为何值, θ {\theta} θ 都不再改变。
我对梯度下降算法的理解就是这些,如果有什么问题,欢迎留言,我会在看到的第一时间回复。