目录
一、梯度下降算法
梯度下降算法是一种致力于找到函数极值点的算法。
模型学习的本质就是不断改变模型的参数,以便通过大量的训练步骤将损失最小化,即梯度下降算法应用于寻找损失函数的极值点便会构成依据输入数据学习的模型学习。
1、梯度的含义
梯度的输出是一个由若干偏导数构成的向量,它的每个分量对应于函数对输入向量的相应分量的偏导:
梯度的输出向量表明了在每个位置损失函数增长最快的方向,可将它视为表示了在函数每个位置向哪个方向移动函数值可以增长。
2、通过实例理解:
以上节线性回归为例,设损失函数为z,则z=,z主要受两个权重影响,分别为a和b,在深度学习中,采用随机初始化的方法,初始化a,b。且它会随机初始化大量的a,b组合。接着需要计算梯度,使梯度z变化最快的方向,不断改变学习速率(每次向极值方向移动,损失函数不断减少),进而使a,b发生变化,求得极值,进而求得最小值。
结论:在深度学习中,不用考虑局部极值点,因为本身初始化就是采用的随机初始化,更深的不予讲解。
二、学习速率
1、学习速率的定义
梯度就是表明损失函数相对参数的变化率,而对梯度进行缩放的参数被称为学习速率。
2、学习速率的大小设置
学习速率是一种超参数或对模型的一种手工可配置的设置。
1)学习速率选取不当的缺点
学习速率过小,则需要迭代的次数过多;学习速率过大,有可能跨过当前的极值点,并在极值点左右附近来回跳动,而永远无法找到极小值点,故需要为它指定正确的值。选取合适的学习速率损失函数会随着时间下降,直至到达底部但若选取了不合适的学习速率,损失函数就可能会发生震荡。
2)选取学习速率的原则
可以根据不同的优化函数进行选取学习速率,在调整学习速率时,既需要使其足够小,保证不至于发生超调,也要保证它足够大,以使损失函数能够尽快下降,从而可通过较少次数的迭代更快地完成学习。
3、判断学习速率是否合理
在具体实践中,可通过查看损失函数值随时间的变化曲线,来判断学习速率的选取是否是合适的。
三、优化函数
优化器(optimizer) 是编译模型的所需的两个参数之一。你可以先实例化一个优化器对象,然后将它传入model.compile(),或者你可以通过名称来调用优化器。在后一种情况下,将使用优化器的默认参数。
神经网络要优化的原因:①网络结构多样性 ②高维变量的非凸优化
1、SGD:随机梯度下降优化器
SGD:随机梯度下降优化器随机梯度下降优化器SGD和min-batch是同一个意思,抽取m个小批量(独立同分布)样本,通过计算他们平梯度均值。
2、RMSprop优化器
RMSprop经常用于序列化问题上,比如文本分类、序列预测等。建议使用优化器的默认参数(除了学习率lr,它可以被自由调节)这个优化器通常是训练循环神经网络RNN的不错选择。
3、Adam优化器
Adam 是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率,是最常用的一种优化器。
1)优点
1. Adam算法可以看做是修正后的Momentum+RMSProp算法。
2. Adam通常被认为对超参数的选择相当鲁棒。
3. 学习速率建议为0.001。
2)配置优化器两种方式
#方式一
model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate = 0.01)#自己定义学习速率
loss = ' '
metrics = ['acc']
)
#方式二
model.compile(optimizer = 'adam'#默认使用adam的参数,速率为0.001
loss = ' '
metrics = ['acc']
)
四、反向传播
反向传播算法是一种高效计算数据流图中梯度的技术。每一层的导数都是后一层的导数与前一层输出之积,这正是链式法则的奇妙之处,误差反向传播算法利用的正是这一特点。
前馈运用损失函数计算损失时,从输入开始,逐一计算每个隐含层的输出,直到输出层。然后开始计算导数,并从输出层经各隐含层逐一反向传播。为了减少计算量,还需对所有已完成计算的元素进行复用。这便是反向传播算法名称的由来。