前言
最近准备开始学习机器学习,后续将对学习内容进行记录,该文主要记录机器学习中的优化方法梯度下降!同时也准备建一个群,大家可以进行交流,微信:ffengjixuchui
一、引入梯度下降与梯度上升
通过前面线性回归算法的学习,我们知道,模型最佳参数的求解往往是在损失函数最小时取得(线性回归算法中的损失函数可理解为
J
(
θ
)
J(\theta)
J(θ)函数),但是需要注意损失函数求解最小问题并不一定可解,线性回归可当作一个特例。 ? 这时就需要引入梯度下降方法,可以通过梯度下降来进行一步步迭代求解,得到最小化的损失函数,和模型参数值。与梯度下降相反的方法则是梯度上升,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。 ? 梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,问题就转化成了使用梯度上升法求解。下面就针对梯度下降算法进行详细说明。
二、梯度下降的理解
1.形象解释
梯度下降的迭代求解可以理解为下山问题,想象一下我们此刻位于山的某一个位置,我们的目标是下到山底(目标函数),但是我们并不清楚具体的路途,只能走一步看一步,那么怎么走才能保证我们下山的效率最高呢?很容易想到我们求解当前所处位置的梯度(表示某一函数在该点处的方向导数沿着该方向取得最大值),然后沿着梯度的负方向也就是最陡峭的地方走一步,然后继续求解当前位置梯度,这样一步步地走下去(迭代过程),一直走到我们觉得到了山底。 ? 通过上面的理解,相信大家对于梯度下降已经有了自己的理解,这里还需要注意到的问题是,梯度下降不一定能够保证我们走到了真正的山底,我们可能到了某一个山峰低处就误认为我们到了山底,也就是说梯度下降不一定能够找到全局的最优解,有可能是一个局部的最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
2.梯度下降家族BGD、SGD、MBGD
将根据线性回归算法中的目标函数进行说明。 损失函数为
J
(
θ
)
=
1
2
∑
i
=
1
m
(
y
(
i
)
?
h
θ
(
x
i
)
)
2
J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))^2
J(θ)=21?∑i=1m?(y(i)?hθ?(xi))2,当这个函数取最小值时,求得模型参数。对每一个特征
θ
\theta
θ求偏导有
?
J
(
θ
)
?
θ
j
=
?
∑
i
=
1
m
(
y
(
i
)
?
h
θ
(
x
i
)
)
x
j
i
\frac{\partial J(\theta)}{\partial \theta_j}=-\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))x_j^i
?θj??J(θ)?=?i=1∑m?(y(i)?hθ?(xi))xji? 1.批量梯度下降BGD 具体做法也就是在更新参数时使用所有的样本来进行更新。以线性回归算法为例
θ
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_j^i
θj′?=θj?+m1?∑i=1m?(y(i)?hθ?(xi))xji? 由于是根据使用得所有样本进行更新,故这个m代表样本的数量 优缺点: ①一次迭代运用了所有样本进行计算,实现了并行。 ②全数据集确定的方向能更好代表样本总体。当目标函数为凸函数时,BGD一定能够得到全局最优。 ③当样本数目m很大时,每迭代一步都需要对所有样本进行计算,训练过程会很慢。 ? 2.随机梯度下降SGD 区别在与求梯度时没有用所有的样本的数据,而是仅仅选取一个样本来求梯度。以线性回归算法为例
θ
j
′
=
θ
j
+
(
y
(
i
)
?
h
θ
(
x
i
)
)
x
j
i
\theta_j'=\theta_j+(y^{(i)}-h_\theta(x^i))x_j^i
θj′?=θj?+(y(i)?hθ?(xi))xji? 优缺点: ①随机梯度下降法训练速度很快,而批量梯度下降法在样本量很大的时候训练速度不能让人满意。 ②对于准确度来说,随机梯度下降法仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,随机梯度下降法一次迭代一个样本,导致迭代方向变化大(可能出现变化一会大一会小,取决于所选取的那一个样本),不能很快的收敛到局部最优解。 ? 3.小批量梯度下降MBGD 小批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,首先根据内存和效率设定batchSize,一般为16,32,64等。在更新参数时使用设定的batchSize数来进行更新。
θ
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_j^i
θj′?=θj?+m1?∑i=1m?(y(i)?hθ?(xi))xji? 由于是根据使用得设定的batchSize进行更新,故这个m等于batchSize。 优缺点: ①通过矩阵运算,每次在一个batch上优化参数并不会比单个数据慢太多。 ②每次使用一个batch可以大大减少收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。 ③可实现并行化
3.学习率(步长)
前面的讲解已经能够确定下山的方向,接下来就是该走多远的问题了,这就引入了学习率(步长)这个概念,步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。 若步长选择过大,可能会导致迭代不平稳,步长选择过小,则会带来更多的迭代次数,故需要选择合理的步长。
|