梯度下降概述
梯度下降是机器学习中的一种真正的求解的思路(优化算法)
引入
当我们得到了一个目标函数后,如何进行求解?直接求解?
并不一定可解,线性回归可以当做是一个特例,在所有的机器学习问题当中,除了线性回归中可以直接求解,其他问题是无法直接解出最终的真实答案
常规套路
机器学习的套路就是交给机器一堆数据,然后告诉它以什么样的学习方式是对的(目标函数),然后让它朝着这个方向去做
如何优化
求当前位置梯度方向、根据梯度方向的反方向一步步走,完成迭代,直到损失值趋于稳定
参数更新方法
定义目标函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
J(\theta _0,\theta _1) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))
此目标函数显示,
θ
0
\theta _0
θ0,
θ
1
\theta _1
θ1 都会对求解有影响,所以对
θ
0
\theta _0
θ0,
θ
1
\theta _1
θ1 都要进行优化,由于数据样本是独立的,
θ
0
\theta _0
θ0,
θ
1
\theta _1
θ1 具有独立性,所以要对
θ
0
\theta _0
θ0,
θ
1
\theta _1
θ1 分别进行优化,优化的目标就是寻找最低点,也就是我们目标函数的终点。
更新参数的步骤:
- 找到当前最合适的梯度方向
- 根据梯度方向的反方向走一小步
- 按照方向与步伐去更新我们的参数
进行梯度下降时,不能一步走的太长了,可能会出现收敛不好的结果
定义目标函数:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
y
i
−
h
θ
(
x
i
)
)
J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(y^i-h_\theta(x^i))
J(θ)=2m1i=1∑m(yi−hθ(xi))
求偏导:
∂
J
(
θ
)
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
−
h
θ
(
x
i
)
)
x
j
i
\frac{\partial J(\theta)}{\theta_j} = -\frac{1}{m}\sum_{i=1}^{m}(y^i-h_\theta(x^i))x^i_j
θj∂J(θ)=−m1i=1∑m(yi−hθ(xi))xji
- 批量梯度下降:
θ j ′ = θ j + 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i {\theta}'_j = \theta_j+\frac{1}{m}\sum_{i=1}^{m}(y^i-h_\theta(x^i))x^i_j θj′=θj+m1i=1∑m(yi−hθ(xi))xji
优点:容易得到最优解
缺点:但是由于每次考虑所有样本,速度很慢 - 随机梯度下降:
θ j ′ = θ j + ( y i − h θ ( x i ) ) x j i {\theta}'_j = \theta_j+(y^i-h_\theta(x^i))x^i_j θj′=θj+(yi−hθ(xi))xji
随机梯度下降是每次找一个样本,迭代速度快,但可能在训练集中有个别数据会出现问题,所以不一定每次都朝着收敛的方向,不太可控。 - 小批量梯度下降:
θ j ′ = θ j + α 1 10 ∑ k = i i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) {\theta}'_j = \theta_j+\alpha \frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x^{(k)}_j θj′=θj+α101k=i∑i+9(hθ(x(k))−y(k))xj(k)
每次更新选择一小部分数据进行迭代(设置batch值)
优化参数设置
学习率(步长):对结果会产生巨大的影响,一般小一些,常见的值0.001、0.0001
如何设置学习率:从小数值开始,例如0.001,再根据训练效果进行调整
批处理数量(batch):32,64,128都可以,一般围绕
2
n
2^n
2n 进行设置,有时还得考虑内存和效率
普遍情况下,机器学习都是使用优化算法进行求解,而不是像线性回归那样直接求解,梯度下降是最常用、最经典的优化方法。