机器学习(二):梯度下降
在讲线性回归的时候我们最后推导出了参数的表达式:
θ
=
[
X
T
X
]
−
1
X
T
Y
\theta = [X^TX]^{-1}X^TY
θ=[XTX]−1XTY
然而并不是每一次都能求得矩阵的逆的,
所以我得回到目标函数去用一个更加普通(平民)的方法求解参数。
so 我们找到了梯度下降:
梯度下降(Gradient Descent):
梯度:在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。从几何意义上讲,就是函数变化增加最快的地方。
在引入了梯度概念后,回过头来看看,我们要求一组 θ \theta θ 使得 J ( θ J(\theta J(θ) 最小,那么使用梯度的概念就可以很好的解决。
下降: 照常来说我们所求导数是梯度上升的,但我们要求的目标函数是最小值,所以我们就需要用到梯度下降,也就是需要找到一个函数减小的方向。
机器学习中,在求最小损失函数时,可以通过梯度下降一步一步迭代得到最小化的损失函数,以及参数。
梯度下降直观描述:
想象一下小c 在一座深山老林中,小c 想要下山但是不知道该怎么走,思考了一下小c 想到可以找找当前位置的最往山脚的方向走,走一步以后再找一个接着走,就这样一步一步慢慢走到了山底,(当然如果小c 运气不好会走到一个小盆地的最底而不是山脚).
在这边小c 是以什么策略来找下山的方向呢,那就是刚才所说的梯度下降。每次找一个方向走几步再重新找一个方向(更新),反复,虽然最后不一定找到最优解,但一定能找到局部最优解。
接下来我们在简单了解一些概念:
步长(Learning rate):步长是在梯度下降中每一步沿下降方向走的长度。(就是上述例子中小c 每次走的步数)
特征(Feature):样本输入部分,简单理解为x。
拟合函数(Fitting Function):用于拟合样本(可见线性回归篇)。
损失函数(Loss Function):我们通过用损失函数来评估模型拟合程度。损失函数极小化,表示拟合效果好,可得到最优参数集。损失函数通常为样本输出和拟合函数的差取平方(例如:线性回归中的最小二乘)。
了解了这些后我们开始来看看公式吧:
假设目标函数(损失函数):(注意这边单独一个x 是单独的一个特征)
J
(
θ
0
,
θ
1
,
θ
2
,
θ
3
.
.
.
,
θ
n
)
J(\theta_0,\theta_1,\theta_2,\theta_3...,\theta_n)
J(θ0,θ1,θ2,θ3...,θn)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
0
(
i
)
,
x
1
(
i
)
,
x
2
(
i
)
,
x
3
(
i
)
.
.
.
,
x
n
(
i
)
)
−
y
(
i
)
)
2
\frac 1{2m} \sum_{i=1}^{m}(h_\theta(x_0^{(i)},x_1^{(i)},x_2^{(i)},x_3^{(i)}...,x_n^{(i)})-y^{(i)})^2
2m1∑i=1m(hθ(x0(i),x1(i),x2(i),x3(i)...,xn(i))−y(i))2
(m 为样本数,再一次这边出现
1
2
\frac 12
21 只是为了方便计算)(寻求最低点,也就是目标函数的终点,求什么样的参数能使得目标函数达到极值点)
算法过程:
1) 确定当前位置梯度:
∂
∂
θ
i
J
(
θ
0
,
θ
1
.
.
.
.
θ
n
)
\frac {\partial}{\partial_{\theta_i}} J(\theta_0,\theta_1....\theta_n)
∂θi∂J(θ0,θ1....θn)
2) 沿梯度下降方向走步长(
α
\alpha
α)长度:
α
∂
∂
θ
i
J
(
θ
0
,
θ
1
.
.
.
.
θ
n
)
\alpha \frac {\partial}{\partial_{\theta_i}} J(\theta_0,\theta_1....\theta_n)
α∂θi∂J(θ0,θ1....θn)
3) 确认是否走到底端(确认所有
θ
i
\theta_i
θi 是否小于
ϵ
\epsilon
ϵ (趋近于0),若是则表示所有
θ
i
\theta_i
θi 都趋近于0 表示已走到底端,若不是就接着更新参数):
α
∂
∂
θ
i
J
(
θ
0
,
θ
1
.
.
.
.
θ
n
)
\alpha \frac {\partial}{\partial_{\theta_i}} J(\theta_0,\theta_1....\theta_n)
α∂θi∂J(θ0,θ1....θn)
4)更新所有参数:
θ
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)
以上是**梯度下降的代数描述**我们还可以用**梯度下降矩阵方式**来描述,大致过程是一样的,就是把代数式改为矩阵形式来表达,各位看博客的大佬可以自行研究一下,来看看自学的成果(没错小c 只是因为太懒了不想写(哈哈哈哈))
算法调优
- 步长选择:我们可以选择不同的步长都给模型进行尝试,看看迭代效果,然后取相对比较好的。有一点需要注意一下就是:如果步长太大,会导致迭代过快,容易错过最优解。当然如果步长太短,虽然能获得比较好的解,但是需要消耗很长时间,消耗大量资源。所以对于步长的选择需要你结合本生算法,数据集,可用资源来选择。
- 参数初始值选择: 初始值不同会使得最终所获的最小值也不同,因此梯度下降所求的是局部最优解,当然如果损失函数是凸函数那就一定会获得最优解。那么由于有局部最优解的存在,我们需要多次使用不同的初始值来获得最优解。
- 归一化:由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化。
不同的梯度下降策略
1.批量梯度下降(Batch Gradient Descent):
批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,以获得当前最优的参数(方向)。
对应的更新公式:
θ
i
=
θ
i
−
α
∑
j
=
1
m
(
h
θ
(
x
0
(
j
)
,
x
1
(
j
)
,
.
.
.
,
x
n
(
j
)
)
−
y
i
)
x
i
(
j
)
\theta_i = \theta_i -\alpha \sum_{j=1}^{m}(h_\theta(x_0^{(j)},x_1^{(j)},...,x_n^{(j)})-y_i)x_i^{(j)}
θi=θi−α∑j=1m(hθ(x0(j),x1(j),...,xn(j))−yi)xi(j)
2.随机梯度下降(Stochastic Gradient Descent):
随机梯度下降,与批量梯度下降类似,区别在于批量梯度下降用到的是所有样本集 m ,而对于随机梯度下降来说用到的是一个单一的样本 j
对应的更新公式:
θ
i
=
θ
i
−
α
(
h
θ
(
x
0
(
j
)
,
x
1
(
j
)
,
.
.
.
,
x
n
(
j
)
)
−
y
i
)
x
i
(
j
)
\theta_i = \theta_i -\alpha (h_\theta(x_0^{(j)},x_1^{(j)},...,x_n^{(j)})-y_i)x_i^{(j)}
θi=θi−α(hθ(x0(j),x1(j),...,xn(j))−yi)xi(j)
3.小批量梯度下降(Min-batch Gradient Descent):
小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。
对应的更新公式:
θ
i
=
θ
i
−
α
∑
j
=
t
t
+
x
−
1
(
h
θ
(
x
0
(
j
)
,
x
1
(
j
)
,
.
.
.
,
x
n
(
j
)
)
−
y
i
)
x
i
(
j
)
\theta_i = \theta_i -\alpha \sum_{j=t}^{t+x-1}(h_\theta(x_0^{(j)},x_1^{(j)},...,x_n^{(j)})-y_i)x_i^{(j)}
θi=θi−α∑j=tt+x−1(hθ(x0(j),x1(j),...,xn(j))−yi)xi(j)
策略对比:批量梯度下降 和 随机梯度下降 对于梯度下降来说是两个极端,一个运用到了所有样本 m ,一个就只是运用到了单个样本 j 。
对于训练速度来说:随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。
对于训练准确率来说:随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。
对于收敛速度来说:由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
那么我们可以取一个折中的方式就是小批量梯度下降(一般在实际应用中会用这个策略)。
在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。(这东西小c 还没有接触到,所以请大佬们绕道度娘或者谷歌吧)。
由于篇幅的原因我就将逻辑回归放到下一篇再将啦(哈哈哈哈,欲知后事如何,请听下回分解,拜拜了您嘞)
(累死小c 了)