A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[size=0.8]介绍一些神经网络中常用的优化方法。包括动态学习率、正则化防止过拟合、滑动平均模型。
[size=0.8]TensorFlow提供了一种学习率设置方法——指数衰减法。全部方法见Decaying_the_learning_rate
[size=0.8]tf.train.exponential_decay函数先使用较大的学习率来快速得到较优解,然后随着训练步数的增多,学习率逐步降低,最后进行微调。
[size=0.8]该函数的官网介绍:exponential_decay、GitHub介绍。
[size=0.8]函数定义如下:
[size=0.8]该函数通过步数动态的计算学习率,计算公式如下:
[size=0.8]其中:
[size=0.8]staircase如果为True,则global_step / decay_steps会转化为整数,这使得学习率变化函数从平滑曲线变为了阶梯函数(staircase function)。
[size=0.8]示例代码如下:
[size=0.8]完整代码见后文。
[size=0.8]有关过拟合,即通过训练得到的模型不具有通用性,在测试集上表现不佳。
[size=0.8]为了避免过拟合,常用方法有dropout、正则化(regularization)。
[size=0.8]正则化的思想就是在损失函数中加入刻画模型复杂度的指标。如何刻画复杂度,一般做法是对权重W进行正则化。
[size=0.8]正则化包含L1正则化和L2正则化。多用L2正则化。原文对比见github
[size=0.8]L2比L1好用的原因: 1. L1使得参数变得更稀疏,即一些参数会变为0。L2会使得参数保持一个很小的数字,比如0.001。 2. L1正则化公式不可导,L2正则化公式可导。
[size=0.8]L1和L2的测试代码如下:
[size=0.8]输出如下:
[size=0.8]计算方法如下:
[size=0.8]0.5为正则化项的权重lambda。TensorFlow将L2的正则化损失值除以2使求导得到的结果更加简洁。
[size=0.8]思路:将所有的权重向量加入到一个集合中,最后累加这个集合中的变量。
[size=0.8]示例,构建5层神经网络代码如下:
[size=0.8]在采用随即梯度下降算法训练时,使用滑动平均模型会在一定程度上提供最终模型在测试数据上的性能。
[size=0.8]类tf.train.ExponentialMovingAverage(DOC、GitHub)
[size=0.8]初始化函数
[size=0.8]其中decay为衰减率。用来控制模型更新的速度。区间为(0,1)。一般取0.999,0.9999等。越大模型越趋于稳定。
[size=0.8]num_updates用来动态设置decay的大小。一般情况下可以用训练步数作为此参数。如果设置了该变量,则衰减率一开始会比较小,后期会越来越大。每次的衰减率计算公式为:min(decay, (1 + num_updates) / (10 + num_updates))
[size=0.8]ExponentialMovingAverage通过调用apply会对参数列表中的每一个Variable维护一个影子变量(shadow variables)。影子变量的初始值是相应变量的初始值,当每次模型更新时,影子变量的值会更新为:shadow_variable = decay * shadow_variable + (1 - decay) * variable
[size=0.8]文档示例代码
[size=0.8]其他示例见Github
[size=0.8]使用上文所属的三种方法来优化MNIST全连接神经网络,代码如下:
[size=0.8]原文代码地址github
[size=0.8]inference函数中最后输出未使用softmax的原因:在计算损失函数时会一并计算softmax函数,所以这里不需要激活函数。而且不加入softmax不会影响预测结果。因为预测时采用的是不同类别对应节点输出值的相对大小,有没有softmax层对最后分类结果的计算没有影响。于是在计算整个神经网络的前向传播时可以不加入最后的softmax层。

1 个回复

倒序浏览
学习了,谢谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马