当涉及 MATLAB Neural Network Toolbox 中的 traingdx
和 traincgb
训练函数时,下面是它们的原理和表达公式的简要说明:
traingdx 的原理:
- traingdx实现了梯度下降法(Gradient Descent)与动量优化(Momentum Optimization)和自适应学习率(Adaptive Learning Rate)的结合。
- 它使用动量优化来加速收敛,并通过自适应学习率调整来提高稳定性和准确性。
动量优化原理:
- 动量优化通过在每次迭代中累积梯度的指数加权平均,以加速更新权重。这个指数加权平均称为动量(momentum),可以使梯度下降更加平稳。
- 具体地,动量项会根据上一次的梯度方向和当前梯度方向的差异进行调整,通过动量项,算法可以根据历史梯度的方向和当前梯度的方向的差异来调整权重的更新方向。如果历史梯度和当前梯度的方向一致,则动量项会增强这个方向上的权重更新;如果方向不一致,则动量项会减小这个方向上的权重更新使得在相同方向上持续前进的概率增加。
自适应学习率原理:
- 自适应学习率是通过根据梯度的变化情况动态调整每个权重的学习率。
- 一种常见的自适应学习率算法是根据梯度的二次变化来调整学习率。如果梯度变化较大,则减小学习率;如果梯度变化较小,则增加学习率。
traingdx表达公式:
动量项的公式如下所示:
其中,是动量项(momentum term),是动量参数(通常取值在 0 到 1 之间),是上一次迭代的动量项,是学习率,是当前迭代的梯度。
在权重更新时,动量项与权重的更新量相加,即:
其中,是权重的更新量。
通过动量项,权重的更新量不仅依赖于当前的梯度,还考虑了历史梯度的影响,从而加速收敛并提高算法在平坦或曲折表面上的性能。
权重更新公式:
学习率的自适应调整:
是根据梯度变化率和目标变化率之比来计算的
其中,是上一次迭代中梯度的变化量,是当前迭代中梯度的变化量。
这个公式的含义是,通过比较前一次迭代和当前迭代中梯度的变化率,来判断学习率的调整方向和幅度。如果当前梯度变化较小(较小),而前一次梯度变化较大(较大),则说明目标函数在当前权重附近变化较小,可以增大学习率;反之,如果当前梯度变化较大,而前一次梯度变化较小,则说明目标函数在当前权重附近变化较大,可以减小学习率。
traincgb的原理:
- traincgb实现了共轭梯度法(Conjugate Gradient)与 Barzilai-Borwein 学习率的结合。
- 共轭梯度法是一种优化算法,用于求解线性方程组或优化问题。
- Barzilai-Borwein 学习率是一种自适应学习率方法,基于共轭梯度法的特性来自动调整每个权重的学习率。
共轭梯度法原理:
- 共轭梯度法使用共轭梯度方向更新权重,以最小化损失函数。
- 共轭梯度法的关键思想是在每个迭代步骤中选择一个共轭方向,使得该方向与前一个方向的梯度无关。
Barzilai-Borwein 学习率原理:
-
Barzilai-Borwein 学习率根据共轭梯度法的历史梯度和权重变化来计算学习率。
- 具体地,根据历史梯度和权重变化计算一个自适应的学习率,以加快收敛速度并提高准确性。
traincgb表达公式:
-
更新权重的公式:
共轭梯度法原理:
共轭方向的计算:
Barzilai-Borwein 学习率原理:
学习率的计算: