2.9 优化函数、学习速率、反向传播算法
梯度:表明损失函数相对参数的变化率
学习速率:对梯度进行缩放的参数,是一种超参数(超参数写代码时需要自己设定),在具体实践中,可通过查看损失函数值随时间的变化曲线,来判断学习速率的选取是否合适
合适的学习速率,损失函数随时间下降,直到一个底部;不合适的学习速率,损失函数可能会发生震荡。
在调整学习速率时,急需要使其足够小,保证不至于发生超调,也要保证它足够大,以使损失函数能够尽快下降,从而可通过较少次数的迭代更快地完成学习。
局部极值点问题可通过将权值随机初始化来改善局部极值地问题,全职地初值使用随机值,可以增加从靠近全局最优点符进开始下降的机会。
如何将计算出的损失函数的梯度变化传递回前几层?
使用反向传播算法,是一种高效计算数据流图中梯度的技术,每一层的导数都是后一层的导数与前一层输出之积,这正是链式法则的奇妙之处,误差反向传播算法利用的正式这一特性。前馈时,从输入开始,逐一计算每个隐含层的输出,知道输出层,然后开始计算导数,并从输出层经各隐含层逐一反向转播,为了减少计算量,还需对所有已完成的元素进行复用。
优化器时编译模型的必需的两个参数之一,可以先实例化一个优化器对象,然后将它传入model.compile(),或者可以通过名称来调用优化器,在后一种情况下,将使用优化器的默认参数。
常见优化函数:
1.SGD 随机梯度下降优化器:和min-batch是同一个意思,抽取m个小批量(独立同分布)样本,计算平均梯度值。
相关参数:
lr float >=0 学习率
momentum float >=0 用于加速sgd在相关方向上前进,并抑制震荡。
decay float >=0 每次参数更新后学习率衰减值
nesterov boolean 是否使用Nesterov动量
2.RMSprop 被证明有效且使用的深度学习网络优化算法,增加了一个衰减系数来控制历史信息的获取多少,会对学习率进行衰减。常用于处理序列问题,例如文本分类。除了lr学习率之外,建议使用默认参数。常用于CNN循环神经网络。
3.Adam:可以看作是修正后的Momentum+RMSprop算法,通常被认为对超参数的选择相当鲁棒,学习率建议为0.001. 是一种可以替代传统随机梯度下降过程的一阶优化算法,能基于训练数据迭代地更新神经网络权重。通过计算梯度的一阶矩估计和二姐矩估计而为不同的参数设计独立的自适应学习率。
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001) 将optimizer=’adam’换成这个就可以设置学习速率