1、梯度下降算法
梯度下降就是一种寻找使得损失函数最小化的方法。
E损失函数,W权重, η学习率,如果学习率过小训练的成本就会增加,如果学习率过大可能会跳过最优解。所以学习率也需要根据训练的进行而变化。
1.1、梯度下降算法分类
根据在进行迭代时使用的样本数量,将梯度下降算法分为3类:
2、反向传播算法(BP算法)
利用反向传播算法对神经网络进行训练,该方法与梯度下降算法相结合,对网络中所有权重计算损失函数的梯度,并利用梯度值来更新权值以最小化损失函数。
2.1、前向传播和反向传播
前向传播是指数据输入的神经网络中,逐层向前传输,一直运算到输出层为止。
在网络的训练过程中经过前向传播后得到的最终结果跟样本的真实值总是存在误差,误差使用损失函数衡量。想要减小这个误差,就用损失函数Error,从后向前,依次求出各个参数的偏导,这就是反向传播。
2.2、链式法则
2.3、反向传播算法
反向传播算法利用链式法则对神经网络中的各个节点的权重进行更新。
3、梯度下降优化方法
3.1、动量梯度下降算法
(1)指数加权平均数
动量算法主要针对鞍点问题,介绍动量算法之前,首先看下指数加权平均数的计算方法。
由于绿色点的波动比较大,可以使用前一天的值与一个权重值相乘再加上权重和当前值
(2)动量(Momentum)算法
与原始的相比,下降趋势更平滑,α学习率,β动量参数(momentum),对梯度进行修正
opt = tf.keras.optimizers.SGD(learning_rate=0.1, momentum=0.9)
(3)AdaGrad算法
tf.keras.optimizers.Adagrad(learning_rate=0.001, initial_accumulator_value=0.1, epsilon=1e-07)
(4)RMSprop算法
AdaGrad在迭代后期时由于学习率过小,很难找到最优解。为了解决这个问题,RMSprop算法对其进行了修改,RMSprop算法将这些梯度按照元素平方做指数加权移动平均(β=rho),这两个算法都是对学习率进行修正
tf.keras.optimizers.RMSprop(learning_rate=0.1, rho=0.9, momentum=0.0, epsilon=1e-07, centered=False)
(5)Adam算法
对梯度和学习率进行修正
tf.keras.optimizers.Adam(learning_rate=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-07)