机器学习三步走
Step 1: function with unknown
- 函数与未知数:
在这个步骤中,我们定义一个模型或函数,该模型包含一些需要学习的未知参数。这个函数是用来描述输入数据和输出结果之间关系的数学表达式。例如,在一个线性回归模型中,这个函数可能是 (y = w \cdot x + b),其中 (w) 和 (b) 是需要通过训练数据来学习的参数。
Step 2: define loss from training data
- 从训练数据定义损失函数:
这个步骤涉及定义一个损失函数(或目标函数),该函数用于衡量模型预测输出与实际输出之间的差异。损失函数的选择取决于具体的任务,例如分类任务可以使用交叉熵损失(Cross-Entropy Loss),回归任务可以使用均方误差(Mean Squared Error, MSE)。损失函数帮助我们评估模型的性能,并为后续的优化过程提供指导。
Step 3: optimization
- 优化:
在这个步骤中,我们使用优化算法来调整模型的参数,以最小化损失函数的值。常用的优化算法包括梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)、Adam等。优化的目标是找到一组参数,使得模型在训练数据上的损失最小。
综合训练过程(Training)
这三个步骤一起构成了机器学习模型的训练过程。通过不断地调整模型参数,优化算法使得模型能够更好地拟合训练数据,并在未知数据上做出准确的预测。
总结
- Step 1: 定义包含未知参数的模型函数。
- Step 2: 从训练数据中定义损失函数来衡量模型性能。
- Step 3: 通过优化算法调整模型参数以最小化损失函数。
这三个步骤是机器学习模型训练的基础,通过反复迭代执行这些步骤,模型能够从数据中学习并改善其预测能力。
Optimization
优化,例如进行梯度更新,也就是相当于在某一点进行求导,左大右小就往小的地方下降,导数越大下降越快,直到达到预设的步数或者
η
∂
L
∂
w
∣
w
=
w
0
\eta \frac{\partial L}{\partial w} \bigg|_{w = w^0}
η∂w∂L
w=w0为0
具体计算
∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w} \bigg|_{w = w^0} ∂w∂L w=w0
w 1 = w 0 − η ∂ L ∂ w ∣ w = w 0 w^1= w^0 - \eta \frac{\partial L}{\partial w} \bigg|_{w = w^0} w1=w0−η∂w∂L w=w0
以下是一些优化方法的详细计算步骤
1. 梯度下降(Gradient Descent)
梯度下降是一种迭代优化算法,用于找到一个函数的局部最小值。它通过在参数空间中沿着梯度的反方向移动来减少目标函数值。
公式:
w
←
w
−
η
∂
L
∂
w
w \leftarrow w - \eta \frac{\partial L}{\partial w}
w←w−η∂w∂L
其中,
η
\eta
η 是学习率,
∂
L
∂
w
\frac{\partial L}{\partial w}
∂w∂L 是损失函数
L
L
L 对参数
w
w
w的梯度。
2. 随机梯度下降(Stochastic Gradient Descent, SGD)
SGD 是梯度下降的一种变体,它在每次迭代时使用一个单一的训练样本来更新参数。
公式:
w
←
w
−
η
∂
L
i
∂
w
w \leftarrow w - \eta \frac{\partial L_i}{\partial w}
w←w−η∂w∂Li
其中,
L
i
L_i
Li 是第
i
i
i个样本的损失函数。
3. 小批量梯度下降(Mini-Batch Gradient Descent)
小批量梯度下降在每次迭代时使用一个小批量样本来更新参数,这种方法在效率和稳定性之间取得了平衡。
公式:
w
←
w
−
η
1
m
∑
i
=
1
m
∂
L
i
∂
w
w \leftarrow w - \eta \frac{1}{m} \sum_{i=1}^{m} \frac{\partial L_i}{\partial w}
w←w−ηm1i=1∑m∂w∂Li
其中,
m
m
m是小批量的大小。
4. 动量优化(Momentum Optimization)
动量优化通过在参数更新中引入动量项来加速收敛并减少震荡。
公式:
v
t
=
γ
v
t
−
1
+
η
∂
L
∂
w
v_t = \gamma v_{t-1} + \eta \frac{\partial L}{\partial w}
vt=γvt−1+η∂w∂L
w
←
w
−
v
t
w \leftarrow w - v_t
w←w−vt
其中,
γ
\gamma
γ是动量因子(通常接近 1),
v
t
v_t
vt是第
t
t
t 次迭代的速度。
5. AdaGrad
AdaGrad 通过调整每个参数的学习率,使得那些更新频率较少的参数具有较大的学习率。
公式:
G
t
=
G
t
−
1
+
(
∂
L
∂
w
)
2
G_t = G_{t-1} + \left( \frac{\partial L}{\partial w} \right)^2
Gt=Gt−1+(∂w∂L)2
w
←
w
−
η
G
t
+
ϵ
∂
L
∂
w
w \leftarrow w - \frac{\eta}{\sqrt{G_t + \epsilon}} \frac{\partial L}{\partial w}
w←w−Gt+ϵη∂w∂L
其中,
G
t
G_t
Gt 是累计梯度平方和,
ϵ
\epsilon
ϵ 是一个小常数,用于避免除以零。
6. RMSprop
RMSprop 对 AdaGrad 进行了改进,通过使用指数加权平均来调整学习率。
公式:
E
[
g
2
]
t
=
γ
E
[
g
2
]
t
−
1
+
(
1
−
γ
)
(
∂
L
∂
w
)
2
E[g^2]_t = \gamma E[g^2]_{t-1} + (1 - \gamma) \left( \frac{\partial L}{\partial w} \right)^2
E[g2]t=γE[g2]t−1+(1−γ)(∂w∂L)2
w
←
w
−
η
E
[
g
2
]
t
+
ϵ
∂
L
∂
w
w \leftarrow w - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \frac{\partial L}{\partial w}
w←w−E[g2]t+ϵη∂w∂L
其中,
E
[
g
2
]
t
E[g^2]_t
E[g2]t是梯度平方的指数加权移动平均。
7. Adam(Adaptive Moment Estimation)
Adam 结合了动量优化和RMSprop的优点,适用于处理稀疏梯度和噪声梯度的情况。
公式:
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
∂
L
∂
w
m_t = \beta_1 m_{t-1} + (1 - \beta_1) \frac{\partial L}{\partial w}
mt=β1mt−1+(1−β1)∂w∂L
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
(
∂
L
∂
w
)
2
v_t = \beta_2 v_{t-1} + (1 - \beta_2) \left( \frac{\partial L}{\partial w} \right)^2
vt=β2vt−1+(1−β2)(∂w∂L)2
m
^
t
=
m
t
1
−
β
1
t
\hat{m}_t = \frac{m_t}{1 - \beta_1^t}
m^t=1−β1tmt
v
^
t
=
v
t
1
−
β
2
t
\hat{v}_t = \frac{v_t}{1 - \beta_2^t}
v^t=1−β2tvt
w
←
w
−
η
m
^
t
v
^
t
+
ϵ
w \leftarrow w - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
w←w−ηv^t+ϵm^t
其中,
m
t
m_t
mt和
v
t
v_t
vt分别是梯度的一阶和二阶矩的估计,
β
1
\beta_1
β1和
β
2
\beta_2
β2是超参数(通常取 0.9 和 0.999),
m
^
t
\hat{m}_t
m^t和
v
^
t
\hat{v}_t
v^t是偏差校正后的估计。
8. 牛顿法(Newton’s Method)
牛顿法使用二阶导数(Hessian 矩阵)来找到最优解,适用于具有光滑且可微的目标函数。
公式:
w
←
w
−
H
−
1
∂
L
∂
w
w \leftarrow w - H^{-1} \frac{\partial L}{\partial w}
w←w−H−1∂w∂L
其中,
H
H
H是 Hessian 矩阵,包含目标函数的二阶导数。
9. 共轭梯度法(Conjugate Gradient Method)
共轭梯度法用于解决大规模线性方程组和二次优化问题,适用于大规模机器学习模型。
步骤:
- 初始化:设定初始解 w 0 w_0 w0和初始搜索方向 p 0 = − ∂ L ∂ w 0 p_0 = -\frac{\partial L}{\partial w_0} p0=−∂w0∂L。
- 迭代:
- 计算步长 α k = r k T r k p k T H p k \alpha_k = \frac{r_k^T r_k}{p_k^T H p_k} αk=pkTHpkrkTrk。
- 更新参数: w k + 1 = w k + α k p k w_{k+1} = w_k + \alpha_k p_k wk+1=wk+αkpk。
- 计算新的残差: r k + 1 = r k + α k H p k r_{k+1} = r_k + \alpha_k H p_k rk+1=rk+αkHpk。
- 计算新的搜索方向:
p
k
+
1
=
−
r
k
+
1
+
β
k
p
k
p_{k+1} = -r_{k+1} + \beta_k p_k
pk+1=−rk+1+βkpk,其中
β
k
=
r
k
+
1
T
r
k
+
1
r
k
T
r
k
\beta_k = \frac{r_{k+1}^T r_{k+1}}{r_k^T r_k}
βk=rkTrkrk+1Trk+1。
。
学习率(learning rate)
预先设置的超参数
超参数是在学习过程开始之前设置的参数,它们的值不是通过训练过程中的数据来学习的。超参数在机器学习模型的性能中起着关键作用。以下是一些关键的超参数及其重要性:
-
学习率 (Learning Rate, α):
- 控制每次更新模型权重时响应估计误差的变化幅度。
- 学习率过高(high learning rate)可能导致模型过快收敛到次优解。
- 学习率过低(low learning rate)可能导致训练过程过长。
-
批量大小 (Batch Size):
- 一次迭代中使用的训练示例数量。
- 较小的批量大小(small batch size)会导致梯度估计更加噪声化,但提供正则化效果。
- 较大的批量大小(large batch size)会导致训练速度更快,但可能收敛到次优解。
-
训练轮数 (Number of Epochs):
- 对整个训练数据集的完整遍历次数。
- 更多的训练轮数(more epochs)可以带来更好的学习效果,但如果过高可能导致过拟合。
-
动量 (Momentum):
- 帮助加速梯度向量朝正确方向前进,从而更快收敛。
- 有助于减少震荡。
-
权重初始化 (Weight Initialization):
- 初始化网络权重的方法。
- 适当的初始化(proper initialization)可以加快梯度下降的收敛速度并避免陷入差的局部最优解。
-
正则化参数 (Regularization Parameters, L1, L2):
- 通过惩罚大权重来防止过拟合。
- L1正则化(L1 regularization)可以导致稀疏模型。
- L2正则化(L2 regularization)有助于保持权重较小,通常在实践中效果良好。
-
Dropout 率 (Dropout Rate):
- 训练过程中要丢弃的单元的比例以防止过拟合。
- Dropout是一种正则化技术,在训练过程中随机将一些神经元的激活值设为零。
-
衰减率 (Decay Rates):
- 随着训练的进行调整学习率。
- 学习率衰减(learning rate decay)有助于微调学习过程,允许快速初始学习和较慢的精细调整。
-
隐藏层和单元数量 (Number of Hidden Layers and Units):
- 决定神经网络的容量。
- 更多的层和单元(more layers and units)可以建模更复杂的数据,但也增加了过拟合风险和计算成本。
-
优化器 (Optimizer):
- 用于改变神经网络属性(如权重和学习率)的算法,以减少损失。
- 例子包括SGD(Stochastic Gradient Descent)、Adam、RMSprop等。
选择合适的超参数集通常通过称为超参数调优(hyperparameter tuning)的过程来完成,这可能涉及网格搜索(grid search)、随机搜索(random search)或更高级的方法如贝叶斯优化(Bayesian optimization)。
在机器学习模型中,参数通常包括权重( w w w)和偏置( b b b)等不同类型的参数。虽然它们在模型中的作用不同,但在梯度下降优化过程中,它们的处理方式是相同的。以下是详细解释以及为什么不用担心微分和分批处理的问题:
参数类型
- 权重(Weights, w w w):连接输入和神经元的参数,决定输入在计算输出时的贡献。
- 偏置(Biases, b b b):为每个神经元添加的常数项,允许模型在不依赖输入的情况下调整输出。
梯度计算
梯度计算涉及对损失函数 L L L关于每个参数(包括权重和偏置)计算偏导数。即使参数类型不同,梯度计算的过程依然相同。
例如,对于一个简单的线性模型 y = w x + b y = wx + b y=wx+b,损失函数 L L L(例如均方误差)关于 w w w和 b b b的梯度分别为:
∂ L ∂ w = 1 N ∑ i = 1 N ( w x i + b − y i ) x i \frac{\partial L}{\partial w} = \frac{1}{N} \sum_{i=1}^N (wx_i + b - y_i) x_i ∂w∂L=N1i=1∑N(wxi+b−yi)xi
∂ L ∂ b = 1 N ∑ i = 1 N ( w x i + b − y i ) \frac{\partial L}{\partial b} = \frac{1}{N} \sum_{i=1}^N (wx_i + b - y_i) ∂b∂L=N1i=1∑N(wxi+b−yi)```
参数更新
在每次迭代中,使用梯度下降法更新权重和偏置:
w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} w←w−η∂w∂L
b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} b←b−η∂b∂L```
随机梯度下降和小批量梯度下降
在随机梯度下降(SGD)和小批量梯度下降(Mini-Batch Gradient Descent)中,训练数据被分成小批量,然后在每个小批量上计算梯度并更新参数。这种方法使得模型能够更稳定和高效地收敛。
以下是小批量梯度下降的过程:
-
划分批量:
将训练数据集划分成多个小批量,例如每个批量包含 m m m个样本。 -
批量梯度计算:
对每个小批量数据计算梯度:
∂ L ∂ w = 1 m ∑ i = 1 m ( w x i + b − y i ) x i \frac{\partial L}{\partial w} = \frac{1}{m} \sum_{i=1}^m (wx_i + b - y_i) x_i ∂w∂L=m1i=1∑m(wxi+b−yi)xi
∂ L ∂ b = 1 m ∑ i = 1 m ( w x i + b − y i ) \frac{\partial L}{\partial b} = \frac{1}{m} \sum_{i=1}^m (wx_i + b - y_i) ∂b∂L=m1i=1∑m(wxi+b−yi)```
- 更新参数:
对每个小批量数据使用计算出的梯度更新参数:
w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} w←w−η∂w∂L
b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} b←b−η∂b∂L ```
为什么不会出问题
-
梯度计算的独立性:
每个参数(无论是 w w w还是 b b b)的梯度计算是独立的,且不受其他参数的类型影响。 -
批量处理的一致性:
在小批量梯度下降中,计算每个小批量的梯度与计算整个数据集的梯度的原理相同,只是数据量较小,计算更高效且具有随机性,帮助模型逃离局部最优。 -
参数更新的一致性:
无论是权重还是偏置,更新公式一致,都是沿着梯度方向进行调整,因此不需要对不同类型的参数做特殊处理。
示例
假设我们有一个简单的线性模型,包含一个权重 w w w和一个偏置 b b b:
y = w x + b y = wx + b y=wx+b```
定义损失函数 L L L为均方误差:
L = 1 2 N ∑ i = 1 N ( y i − ( w x i + b ) ) 2 L = \frac{1}{2N} \sum_{i=1}^N (y_i - (wx_i + b))^2 L=2N1i=1∑N(yi−(wxi+b))2```
初始参数 w w w和 b b b设为 0,学习率 η \eta η设为 0.01。
随机梯度下降步骤:
-
随机选择一个样本,例如 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)。
-
计算梯度:
∂ L ∂ w = ( w x 1 + b − y 1 ) x 1 \frac{\partial L}{\partial w} = (wx_1 + b - y_1) x_1 ∂w∂L=(wx1+b−y1)x1
∂ L ∂ b = ( w x 1 + b − y 1 ) \frac{\partial L}{\partial b} = (wx_1 + b - y_1) ∂b∂L=(wx1+b−y1) ``` -
更新参数:
w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} w←w−η∂w∂L
b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} b←b−η∂b∂L
通过重复上述步骤,参数 w w w和 b b b将逐渐优化,以最小化损失函数。
总之,尽管模型参数包括不同类型的参数(如权重和偏置),但在梯度下降优化过程中,它们的处理方法是一致的,且批量处理不会导致问题。