机器学习算法=模型表征+模型评估+优化算法
优化算法所做的事情就是在模型表征空间中找到模型评估指标最好的模型。
1. 有监督学习的损失函数
在有监督学习中,损失函数刻画了模型和训练样本的匹配程度。
-
二分类问题损失函数
- 0-1损失
- Hinge损失
- Logistic损失函数
- 交叉熵 Cross Entropy
-
回归问题
- 最常用的损失函数:平方损失函数。
L
s
q
u
a
r
e
(
f
,
y
)
=
(
f
−
y
)
2
L_{square}(f,y) = (f-y)^2
Lsquare(f,y)=(f−y)2
平方损失函数是光滑函数,能够用梯度下降法进行优化。 - 绝对损失函数 L a b s o l u t e ( f , y ) = ∣ f − y ∣ L_{absolute}(f,y) = |f-y| Labsolute(f,y)=∣f−y∣
- Huber损失函数
- 最常用的损失函数:平方损失函数。
L
s
q
u
a
r
e
(
f
,
y
)
=
(
f
−
y
)
2
L_{square}(f,y) = (f-y)^2
Lsquare(f,y)=(f−y)2
L_{Huber}(f,y) = \begin{cases}
(f-y)^2 &\text|f-y| \leq \delta \\
2\delta|f-y|-\delta^2 &\text|f-y|> \delta
\end{cases}
2. 机器学习中的优化问题
- 凸函数:当且仅当对定义域中的任意两点x,y和任意实数 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1]总有:
L
(
λ
x
+
(
1
−
λ
)
y
)
≤
λ
L
(
x
)
+
(
1
−
λ
)
L
(
y
)
L(\lambda x+(1-\lambda)y) \leq \lambda L(x)+(1-\lambda)L(y)
L(λx+(1−λ)y)≤λL(x)+(1−λ)L(y)
直观解释:凸函数曲面上任意两点连接而成的线段,其上的任意一点都不会处于该函数曲面的下方。
对于凸优化问题,所有的局部极小值都是全局极小值,因此这类问题是比较容易求解的。
另外,主成分分析对应的优化问题是非凸优化问题。
3. 经典优化算法
- 无约束优化问题的优化方法
- 直接法
- 迭代法
直接法要求目标函数需要满足两个条件:
- L L L是凸函数。 θ ∗ \theta^* θ∗是最优解的充分必要条件是 L L L在 θ ∗ \theta^* θ∗处的梯度为0。
-
∇
L
(
θ
∗
)
=
0
\nabla L(\theta^*) = 0
∇L(θ∗)=0 有闭式解。
经典例子:岭回归 Ridge Regression
迭代法就是迭代地修正最最优解的估计。可以分为一阶法和二阶法两类。
- 一阶法 即为梯度下降法
- 二阶法 即为牛顿法
4. 随机梯度下降法
-
经典的梯度下降法在每次迭代时需要使用所有训练数据,给求解大规模数据的优化问题带来挑战。
-
随机梯度下降法(Stochastic Gradient Descent,SGD)用单个训练样本的损失函数来近似平均损失,即:
L
(
θ
;
x
i
,
y
i
)
=
L
(
f
(
x
i
,
θ
)
,
y
i
)
L(\theta;x_i,y_i)=L(f(x_i,\theta),y_i)
L(θ;xi,yi)=L(f(xi,θ),yi)
∇
L
(
θ
;
x
i
,
y
i
)
=
∇
L
(
f
(
x
i
,
θ
)
,
y
i
)
\nabla L(\theta;x_i,y_i)=\nabla L(f(x_i,\theta),y_i)
∇L(θ;xi,yi)=∇L(f(xi,θ),yi)
因此SGD用单个训练数据即可对模型参数进行一次更新,大大加快收敛速率。也非常适用于数据远远不断到来的在线更新场景。
- 小批量梯度下降法(Mini-Batch Gradient Descent)
为了降低随机梯度的方差,使迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中会同时处理若干训练数据。
假设需要同时处理m个训练数据
{
(
x
i
1
,
y
i
1
)
,
.
.
.
,
(
x
i
m
,
y
i
m
)
}
\{ (x_{i_1},y_{i_1}),...,(x_{i_m},y_{i_m}) \}
{(xi1,yi1),...,(xim,yim)},则目标函数及梯度为:
L
(
θ
)
=
1
m
∑
j
=
1
m
L
(
f
(
x
i
j
,
θ
)
,
y
i
j
)
L(\theta)={1 \over m} \sum_{j =1}^mL(f(x_{i_j},\theta),y_{i_j})
L(θ)=m1j=1∑mL(f(xij,θ),yij)
∇
L
(
θ
)
=
1
m
∑
j
=
1
m
∇
L
(
f
(
x
i
j
,
θ
)
,
y
i
j
)
\nabla L(\theta)={1 \over m}\sum_{j =1}^m\nabla L(f(x_{i_j},\theta),y_{i_j})
∇L(θ)=m1j=1∑m∇L(f(xij,θ),yij)
- SGD使用注意点:
- 选取m,一般选2的幂次
- 先对所有数据进行随机排序,每次迭代时按顺序挑选m个训练数据直至遍历完所有数据。
- 为了加快收敛速率,同时提高求解精度,采用衰减学习速率:一开始采用较大学习速率,误差曲线进入平台期后,精细调整减小学习速率。
5. SGD的加速
6. L1正则化与稀疏性
- L1正则化使得模型参数具有稀疏性的原理
- 解空间形状
- 函数叠加
- 贝叶斯先验
参考:《百面机器学习》