深度学习笔记(参数优化,loss)

机器学习三步走

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} ηwL w=w0为0
具体计算

∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w} \bigg|_{w = w^0} wL 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ηwL w=w0

以下是一些优化方法的详细计算步骤

1. 梯度下降(Gradient Descent)

梯度下降是一种迭代优化算法,用于找到一个函数的局部最小值。它通过在参数空间中沿着梯度的反方向移动来减少目标函数值。

公式:
w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} wwηwL
其中, η \eta η 是学习率, ∂ L ∂ w \frac{\partial L}{\partial w} wL 是损失函数 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} wwηwLi
其中, 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} wwηm1i=1mwLi
其中, 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=γvt1+ηwL
w ← w − v t w \leftarrow w - v_t wwvt
其中, γ \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=Gt1+(wL)2
w ← w − η G t + ϵ ∂ L ∂ w w \leftarrow w - \frac{\eta}{\sqrt{G_t + \epsilon}} \frac{\partial L}{\partial w} wwGt+ϵ ηwL
其中, 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]t1+(1γ)(wL)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} wwE[g2]t+ϵ ηwL
其中, 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=β1mt1+(1β1)wL
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=β2vt1+(1β2)(wL)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} wwη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} wwH1wL
其中, H H H是 Hessian 矩阵,包含目标函数的二阶导数。

9. 共轭梯度法(Conjugate Gradient Method)

共轭梯度法用于解决大规模线性方程组和二次优化问题,适用于大规模机器学习模型。

步骤:

  1. 初始化:设定初始解 w 0 w_0 w0和初始搜索方向 p 0 = − ∂ L ∂ w 0 p_0 = -\frac{\partial L}{\partial w_0} p0=w0L
  2. 迭代:
    • 计算步长 α 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)

预先设置的超参数

超参数是在学习过程开始之前设置的参数,它们的值不是通过训练过程中的数据来学习的。超参数在机器学习模型的性能中起着关键作用。以下是一些关键的超参数及其重要性:

  1. 学习率 (Learning Rate, α)

    • 控制每次更新模型权重时响应估计误差的变化幅度。
    • 学习率过高(high learning rate)可能导致模型过快收敛到次优解。
    • 学习率过低(low learning rate)可能导致训练过程过长。
  2. 批量大小 (Batch Size)

    • 一次迭代中使用的训练示例数量。
    • 较小的批量大小(small batch size)会导致梯度估计更加噪声化,但提供正则化效果。
    • 较大的批量大小(large batch size)会导致训练速度更快,但可能收敛到次优解。
  3. 训练轮数 (Number of Epochs)

    • 对整个训练数据集的完整遍历次数。
    • 更多的训练轮数(more epochs)可以带来更好的学习效果,但如果过高可能导致过拟合。
  4. 动量 (Momentum)

    • 帮助加速梯度向量朝正确方向前进,从而更快收敛。
    • 有助于减少震荡。
  5. 权重初始化 (Weight Initialization)

    • 初始化网络权重的方法。
    • 适当的初始化(proper initialization)可以加快梯度下降的收敛速度并避免陷入差的局部最优解。
  6. 正则化参数 (Regularization Parameters, L1, L2)

    • 通过惩罚大权重来防止过拟合。
    • L1正则化(L1 regularization)可以导致稀疏模型。
    • L2正则化(L2 regularization)有助于保持权重较小,通常在实践中效果良好。
  7. Dropout 率 (Dropout Rate)

    • 训练过程中要丢弃的单元的比例以防止过拟合。
    • Dropout是一种正则化技术,在训练过程中随机将一些神经元的激活值设为零。
  8. 衰减率 (Decay Rates)

    • 随着训练的进行调整学习率。
    • 学习率衰减(learning rate decay)有助于微调学习过程,允许快速初始学习和较慢的精细调整。
  9. 隐藏层和单元数量 (Number of Hidden Layers and Units)

    • 决定神经网络的容量。
    • 更多的层和单元(more layers and units)可以建模更复杂的数据,但也增加了过拟合风险和计算成本。
  10. 优化器 (Optimizer)

    • 用于改变神经网络属性(如权重和学习率)的算法,以减少损失。
    • 例子包括SGD(Stochastic Gradient Descent)、Adam、RMSprop等。

选择合适的超参数集通常通过称为超参数调优(hyperparameter tuning)的过程来完成,这可能涉及网格搜索(grid search)、随机搜索(random search)或更高级的方法如贝叶斯优化(Bayesian optimization)。

在机器学习模型中,参数通常包括权重( w w w)和偏置( b b b)等不同类型的参数。虽然它们在模型中的作用不同,但在梯度下降优化过程中,它们的处理方式是相同的。以下是详细解释以及为什么不用担心微分和分批处理的问题:

参数类型

  1. 权重(Weights, w w w:连接输入和神经元的参数,决定输入在计算输出时的贡献。
  2. 偏置(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 wL=N1i=1N(wxi+byi)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) bL=N1i=1N(wxi+byi)```

参数更新

在每次迭代中,使用梯度下降法更新权重和偏置:

w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} wwηwL

b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} bbηbL```

随机梯度下降和小批量梯度下降

在随机梯度下降(SGD)和小批量梯度下降(Mini-Batch Gradient Descent)中,训练数据被分成小批量,然后在每个小批量上计算梯度并更新参数。这种方法使得模型能够更稳定和高效地收敛。

以下是小批量梯度下降的过程:

  1. 划分批量
    将训练数据集划分成多个小批量,例如每个批量包含 m m m个样本。

  2. 批量梯度计算
    对每个小批量数据计算梯度:

∂ 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 wL=m1i=1m(wxi+byi)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) bL=m1i=1m(wxi+byi)```

  1. 更新参数
    对每个小批量数据使用计算出的梯度更新参数:

w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} wwηwL

b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} bbηbL ```

为什么不会出问题

  1. 梯度计算的独立性
    每个参数(无论是 w w w还是 b b b)的梯度计算是独立的,且不受其他参数的类型影响。

  2. 批量处理的一致性
    在小批量梯度下降中,计算每个小批量的梯度与计算整个数据集的梯度的原理相同,只是数据量较小,计算更高效且具有随机性,帮助模型逃离局部最优。

  3. 参数更新的一致性
    无论是权重还是偏置,更新公式一致,都是沿着梯度方向进行调整,因此不需要对不同类型的参数做特殊处理。

示例

假设我们有一个简单的线性模型,包含一个权重 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=1N(yi(wxi+b))2```

初始参数 w w w b b b设为 0,学习率 η \eta η设为 0.01。

随机梯度下降步骤:
  1. 随机选择一个样本,例如 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)

  2. 计算梯度:
    ∂ L ∂ w = ( w x 1 + b − y 1 ) x 1 \frac{\partial L}{\partial w} = (wx_1 + b - y_1) x_1 wL=(wx1+by1)x1
    ∂ L ∂ b = ( w x 1 + b − y 1 ) \frac{\partial L}{\partial b} = (wx_1 + b - y_1) bL=(wx1+by1) ```

  3. 更新参数:
    w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} wwηwL
    b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} bbηbL

通过重复上述步骤,参数 w w w b b b将逐渐优化,以最小化损失函数。

总之,尽管模型参数包括不同类型的参数(如权重和偏置),但在梯度下降优化过程中,它们的处理方法是一致的,且批量处理不会导致问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别吃我麻辣烫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值