梯度
对多元函数的参数
α
\alpha
α求偏导数,把各个偏导数结合在一起,就是梯度。对于多元函数
f
=
(
x
1
,
x
2
,
x
3
.
.
.
.
.
.
x
n
)
f=(x_1,x_2,x_3......x_n)
f=(x1,x2,x3......xn)的梯度是一个长度为
n
n
n的向量,向量中第
k
k
k个值就是其对函数
f
f
f的偏导数。
Δ
f
(
x
1
,
x
2
,
x
3
.
.
.
.
.
.
x
n
)
=
(
(
α
f
α
x
1
)
,
(
α
f
α
x
2
)
.
.
.
.
.
(
α
f
α
x
n
)
)
\Delta f(x_1,x_2,x_3......x_n)=((\frac{\alpha f}{\alpha x_1}),(\frac{\alpha f}{\alpha x_2}).....(\frac{\alpha f}{\alpha x_n}))
Δf(x1,x2,x3......xn)=((αx1αf),(αx2αf).....(αxnαf))
梯度下降和梯度上升
梯度下降
- 假定线性回归的假设函数为 h θ ( x 1 , x 2 . . . . . x n ) = θ 0 + θ 1 x 1 + . . . . . + θ n x n h_{\theta}(x_1,x_2.....x_n)=\theta_0+\theta_1x_1+.....+\theta_nx_n hθ(x1,x2.....xn)=θ0+θ1x1+.....+θnxn,则对应的损失函数为: J ( θ 0 , θ 1 . . . . . θ n ) = 1 2 m Σ i = 0 m ( h θ ( x 1 , x 2 . . . . . x n ) − y i ) 2 J(\theta_0,\theta_1.....\theta_n)=\frac{1}{2m}\Sigma_{i=0}^m(h_{\theta}(x_1,x_2.....x_n)-y_i)^2 J(θ0,θ1.....θn)=2m1Σi=0m(hθ(x1,x2.....xn)−yi)2
- 初始化步长 α \alpha α,算法终止距离 ε \varepsilon ε,以及 θ 1 , θ 2 . . . . θ n \theta_1,\theta_2....\theta_n θ1,θ2....θn
- 过程:
- 确定当前损失函数的梯度,对于 θ i \theta_i θi为: α α j J ( θ 1 , θ 2 . . . . . θ n ) \frac{\alpha}{\alpha_j}J(\theta_1,\theta_2.....\theta_n) αjαJ(θ1,θ2.....θn)
- 用步长乘以当前损失函数得到下降距离
- 确定所有的 θ i \theta_i θi梯度下降是否都小于 ε \varepsilon ε,如果是则退出,否则进入步骤4
- 更新所有的 θ \theta θ,对于 θ i \theta_i θi: θ i = θ i − α α α i J ( θ 0 , θ 1 . . . . θ n ) \theta_i=\theta_i-\alpha\frac{\alpha}{\alpha_i}J(\theta_0,\theta_1....\theta_n) θi=θi−ααiαJ(θ0,θ1....θn),更新完毕后继续步骤1
梯度上升
和梯度下降一样,只是在更新
θ
\theta
θ的时候是加不是减
使用场景
梯度下降是求局部极小值,而梯度上升是求局部最大值
logistic的目标函数: l = Σ i = 1 m y i ∗ l o g ( p i ) + ( 1 − y i ) ∗ l o g ( 1 − p i ) l=\Sigma_{i=1}^my_i*log(p_i)+(1 - y_i)*log(1-p_i) l=Σi=1myi∗log(pi)+(1−yi)∗log(1−pi),因为是优化目标出现的概率,所以越大越好,需要用梯度上升。
线性回归的cost函数为: 1 2 Σ i = 1 m ( h i − y i ) 2 \frac{1}{2}\Sigma_{i=1}^m(h_i-y_i)^2 21Σi=1m(hi−yi)2对于cost函数我们需要越小越好,所以用逻辑下降。
Python实现:
github地址:https://github.com/mantoujiaozi/Learning/blob/master/Andrew Wu/batch-gradient-descent.py