tensorflow学习010——优化函数、学习速率、反向传播算法、网络优化、超参数
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’换成这个就可以设置学习速率
网络容量:可以认为与网络中的可训练参数成正比。网络容量越大,则网络中神经单元数约到,层数越多,神经网络的你和能力越强,但是训练速度、难度越大,越容易产生过拟合。
超参数:在搭建神经网络中,需要我们自己选择的参数,比如中间层的神经元个数,学习速率。
如何提高网络拟合能力:增加曾或者增加隐藏神经元个数。
单纯增加神经元个数对于网络性能的提高并不明显,增加层会大大提高网络的拟合能力。
需要注意的是,单层神经元的个数也不能太少,斗则会造成信息平静,使得模型欠拟合。
参数选择原则:
首先开发一个过拟合模型:
1)添加更多的层
2)让每一层变得更大
3)训练更多的轮次
然后抑制过拟合(最好的办法是增加训练数据)
1)dropout
2)正则化
3)图像增强
总原则:增大网络容量,知道过拟合;采取措施抑制过拟合;继续增大网络容量,知道过拟合会得到一个不错的得分。
作者:孙建钊
出处:http://www.cnblogs.com/sunjianzhao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。