-
引入批量归一化的背景:
- 如果误差表面崎岖则训练困难,批量归一化(BN)是 “把山铲平” 让训练变得容易的一种方法。
- 当固定学习率时,因参数对损失的斜率差别大(如在不同方向上斜率变化不同),可能难以得到好的训练结果,需要自适应学习率或更进阶的优化方法,也可直接改变误差表面使其更易训练。
-
产生不好训练的误差表面的原因及解决办法:
- 原因:在线性模型中,当输入特征不同维度的值范围差距很大时,可能导致误差表面在不同方向上的斜率不同,从而使训练变得困难。
- 解决办法:通过特征归一化,给特征里不同的维度赋予同样的数值范围,从而制造较好的误差表面。例如采用 z 值归一化(标准化),将每个维度的数值减去该维度的平均值再除以标准差,使归一化后该维度数值的平均值为 0,方差为 1,分布在 0 上下,有助于训练时损失收敛更快。
-
深度学习中的批量归一化:
- 归一化过程:
- 虽然输入特征已归一化,但通过后不同维度数值分布仍可能有差异,所以应对或(或是一种特征)做归一化。以对归一化为例,先计算的平均值和标准差,然后根据和进行归一化:(除号代表逐元素相除)。
- 由于特征归一化后,改变的值会使、和改变,进而影响的值,所以做特征归一化时,可把整个过程当做网络的一部分。但因训练数据多,GPU 显存无法加载所有样本,实际实现时只考虑一个批量内的样本(如批量设为 64,就对这 64 笔数据计算并做归一化),这种只对批量数据做归一化的技巧称为批量归一化。
- 相关操作:在批量归一化时,往往还会进行的操作(代表逐元素相乘),其中可视为网络参数需另外学习。加入是因为归一化后的平均值为 0 可能给网络带来限制,而让网络学习来调整输出分布从而调整的分布。初始时设为值全为 1 的向量,设为零向量,训练一段时间后再将慢慢加进去,对训练有帮助。
- 归一化过程:
-
测试时的批量归一化:
- 测试时面临的问题是若批量大小设为 64,不能等 64 笔数据都进来才做运算。
- 实际解法是在训练时,对每个批量计算出的计算移动平均(如,设为 0.1),测试时直接用和(即在训练时的移动平均)取代原来的。
-
批量归一化的作用及相关讨论:
- 作用:从实验结果(图 3.46)看,做批量归一化训练速度更快(红色虚线比黑色虚线快),能在较短时间内达到相同准确率,且即使是较难训练的 sigmoid 函数加批量归一化后也可训练(sigmoid 不加批量归一化根本训练不起来)。此外,因批量归一化使误差表面更平滑,可将学习率设大一点。
- 相关讨论:
- 原始论文提出内部协变量偏移概念,认为每次做批量归一化会使前一层输出的分布更接近,从而对训练有帮助,但另一篇论文认为该观点有问题,内部协变量偏移不一定是训练网络的主要问题,也不一定是批量归一化好的关键。
- 批量归一化可改变误差表面使其不崎岖,这有理论支持和实验佐证,但让误差表面不崎岖不一定要用批量归一化,还有很多其他方法,批量归一化是一种偶然发现但有用的方法。此外,还有很多其他归一化方法,如批量重归一化、层归一化、实例归一化、组归一化、权重归一化和谱归一化等。
“Datawhale X 李宏毅苹果书 AI夏令营”深度学习-第三章 深度学习基础3.7 批量归一化
最新推荐文章于 2024-09-27 10:58:53 发布