机器学习的相关知识-梯度下降
这个知识点之前也是来来回回看了好久,我的理解是,因为没有办法一次性算出符合所有样本的目标函数,所以就只能每次一小步一小步地接近最优解,要知道其实一个样本就可以算出最优解了,但是还要兼顾其他样本。
还是做的500问的笔记
核心思想归纳:
- 初始化参数,随机选取取值范围内的任意数;
- 迭代操作:
a)计算当前梯度;
b)修改新的变量;
c)计算朝最陡的下坡方向走一步;
d)判断是否需要终止,如否,返回a); - 得到全局最优解或者接近全局最优解。
我理解就是,代价函数或者损失函数找最小值,那就是可以求一些参数的偏导,偏导为零那就是极值。随机一个参数,计算偏导数,大于零的话,说明是递增的,反方向取,小于零递减的,也是反方向取。取完之后算算值,下一次接着走,直到最优解,或者说代价函数或损失函数最小。
偏导可以认为是梯度
梯度就是导数
举个例子?
假设有 m m m个 ( x , y ) (x, y) (x,y),每个 x x x向量包含 n n n个数,线性回归函数为 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随机初始化 θ i \theta_i θi,损失函数就是 J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 0 m ( h θ ( x 0 ( j ) , x 1 ( j ) , . . . , x n ( j ) ) − y j ) 2 J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum^{m}_{j=0}(h_\theta (x^{(j)}_0 ,x^{(j)}_1,...,x^{(j)}_n)-y_j)^2 J(θ0,θ1,...,θn)=2m1j=0∑m(hθ(x0(j),x1(j),...,xn(j))−yj)2然后就是求极值,直接算太麻烦了,一步一步来,第一步就求所有参数 θ i \theta_i θi偏导的和,也就是在损失函数中看下当前位置的梯度(可以把 x , y x,y x,y看成已知量,我们最终目的是求 θ i \theta_i θi)。 ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 0 m ( h θ ( x 0 ( j ) , x 1 ( j ) , . . . , x n ( j ) ) − y j ) 2 \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n)=\frac{1}{2m}\sum^{m}_{j=0}(h_\theta (x^{(j)}_0 ,x^{(j)}_1,...,x^{(j)}_n)-y_j)^2 ∂θi∂J(θ0,θ1,...,θn)=2m1j=0∑m(hθ(x0(j),x1(j),...,xn(j))−yj)2第二步计算下次 θ i \theta_i θi的选值,既然要取极值,那肯定是要往偏导为零的方向走,那就是和现在偏导相反就是取负就可以,方向定了,移动多少呢?定义每次移动的步长就好了如下 φ i = α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) {\varphi}_i={\alpha} \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n) φi=α∂θi∂J(θ0,θ1,...,θn) α {\alpha} α就是每次移动的步长,一般设的蛮小的。一般在这个时候,会算下终止条件,就是说确定是否所有 θ i {\theta}_i θi梯度下降的距离 φ i {\varphi}_i φi都小于终止距离 ζ {\zeta} ζ,如果都小于 ζ {\zeta} ζ,则算法终止,不终止就继续。有了下次移动的距离,那么下次的 θ i \theta_i θi也就可以算出来了 θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) {\theta}_i={\theta}_i-\alpha \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n) θi=θi−α∂θi∂J(θ0,θ1,...,θn)刷新完 θ i \theta_i θi再从第一步进行操作,直到跳出循环。
可以看出来每次循环都要把 m m m个样本都压进去,这样有点耗时,接下来就是优化了。
随机梯度下降(SGD)
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
=
1
m
∑
j
=
0
m
(
y
j
−
h
θ
(
x
0
j
,
x
1
j
,
.
.
.
,
x
n
j
)
)
2
=
1
m
∑
j
=
0
m
c
o
s
t
(
θ
,
(
x
j
,
y
j
)
)
J(\theta_0, \theta_1, ... , \theta_n) = \frac{1}{m} \sum^{m}_{j=0}(y^j - h_\theta (x^{j}_0 ,x^{j}_1,...,x^{j}_n))^2 = \frac{1}{m} \sum^{m}_{j=0} cost(\theta,(x^j,y^j))
J(θ0,θ1,...,θn)=m1j=0∑m(yj−hθ(x0j,x1j,...,xnj))2=m1j=0∑mcost(θ,(xj,yj))
应该是从
m
m
m个样本中,随机拿了一个
j
j
j,做
θ
i
=
θ
i
+
(
y
j
−
h
θ
(
x
0
j
,
x
1
j
,
.
.
.
,
x
n
j
)
)
\theta_i = \theta_i + (y^j - h_\theta (x^{j}_0, x^{j}_1, ... ,x^{j}_n))
θi=θi+(yj−hθ(x0j,x1j,...,xnj))
批量就是拿全部,随机就是拿一个,那可不就快了莫
小批量(Mini-Batch)梯度下降
θ i = θ i − α ∑ j = t t + n − 1 ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) x i j \theta_i = \theta_i - \alpha \sum^{t+n-1}_{j=t} ( h_\theta (x^{j}_{0}, x^{j}_{1}, ... , x^{j}_{n} ) - y^j ) x^{j}_{i} θi=θi−αj=t∑t+n−1(hθ(x0j,x1j,...,xnj)−yj)xij不拿一个,拿若干个,嗯也差不多。
| 方法 | 特点 |
|---|---|
| 批量梯度下降 | a)采用所有数据来梯度下降。 b)批量梯度下降法在样本量很大的时候,训练速度慢。 |
| 随机梯度下降 | a)随机梯度下降用一个样本来梯度下降。 b)训练速度很快。 c)随机梯度下降法仅仅用一个样本决定梯度方向,导致解有可能不是全局最优。 d)收敛速度来说,随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。 |
| BGD | SGD | Mini-batch GD | Online GD | |
|---|---|---|---|---|
| 训练集 | 固定 | 固定 | 固定 | 实时更新 |
| 单次迭代样本数 | 整个训练集 | 单个样本 | 训练集的子集 | 根据具体算法定 |
| 算法复杂度 | 高 | 低 | 一般 | 低 |
| 时效性 | 低 | 一般 | 一般 | 高 |
| 收敛性 | 稳定 | 不稳定 | 较稳定 | 不稳定 |
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/17137425.html

浙公网安备 33010602011771号