1.滑动平均模型:
用途:用于控制变量的更新幅度,使得模型在训练初期参数更新较快,在接近最优值处参数更新较慢,幅度较小
方式:主要通过不断更新衰减率来控制变量的更新幅度。
衰减率计算公式 :
decay = min{init_decay , (1 + num_update) / (10 + num_update)}
其中 init_decay 为设置的初始衰减率 ,num_update 为模型参数更新次数,由此可见,随着 num_update 更新次数的增加,(1 + num_update) / (10 + num_update 这一项的计算结果越接近1
参数更新公式:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
其中 shadow_variable 为变量更新前的数值,variable为变量更新后的数值
例如:
x = 0
x = 1
此时 shadow_variable 就是 0 , variable 就是 1 , 假如此时的 衰减率 decay 是 0.5,则更新后的 x 取值为 0.5 * 0 + (1 - 0.5) * 1 = 0.5
通过以上公式可以发现,随着模型迭代次数的增加,(1 + num_update) / (10 + num_update) 这一项的计算结果越接近1,也就是 (1 - decay) * variable 更接近于 0 ,此时模型参数变化幅度减小 , 也就是 shadow_variable == decay * shadow_variable 等式越成立。
2.
使用验证数据集判断模型效果:虽然一个神经网络模型的效果最终是通过测试数据来评判的,但不能直接通过模型在测试数据上的效果来选择参数。
使用测试数据来选择参数可能会导致神经网络模型过度你和测试数据,从而失去对未知数据的预判能力。
因此一般会从训练数据中抽取一部分作为验证是数据。
交叉验证(cross validation):在海量数据下,花费时间比较长,一般会更多地采用验证数据集的形式来评测模型的效果。
3.在神经网络结构的设计上: 1)使用激活函数 2)多层隐藏层
在神经网络优化上:1)使用指数衰减的学习率 2)加入正则化的损失函数 2)滑动平均模型
4.通过MNIST数据集有效地验证了激活函数、隐藏层可以给模型的效果带来质的飞跃。此外,由于MNIST问题本身相对简单,滑动平均模型、指数衰减的学习率和正则化损失对最终正确率的提升效果不明显。
5.变量管理:
原文地址:https://www.cnblogs.com/bjut-lqq/p/9591086.html