|
9 | 9 | ## 14.1 写在前面
|
10 | 10 | 关于训练深度学习模型最难的事情之一是你要处理的参数的数量。无论是从网络本身的层宽(宽度)、层数(深度)、连接方式,还是损失函数的超参数设计和调试,亦或者是学习率、批样本数量、优化器参数等等。这些大量的参数都会有网络模型最终的有效容限直接或者间接的影响。面对如此众多的参数,如果我们要一一对其优化调整,所需的无论是时间、资源都是不切实际。结果证实一些超参数比其它的更为重要,因此认识各个超参数的作用和其可能会造成的影响是深度学习训练中必不可少的一项重要技能。
|
11 | 11 |
|
12 |
| - 本章节不会过多阐述所有超参数的详细原理,如果需要了解这部分,您可以翻阅前面的基础章节或者查阅相关文献资料。当然,下面会讲到的一些超参数优化的建议是根据笔者们的实践以及部分文献资料得到认知建议,并不是非常严格且一定有效的,很多研究者可能会很不同意某些的观点或有着不同的直觉,这都是可保留讨论的,因为这很依赖于数据本身情况。 |
| 12 | + 目前,超参数调整一般分为手动调整和自动优化超参数两种。本章节不会过多阐述所有超参数的详细原理,如果需要了解这部分,您可以翻阅前面的基础章节或者查阅相关文献资料。当然,下面会讲到的一些超参数优化的建议是根据笔者们的实践以及部分文献资料得到认知建议,并不是非常严格且一定有效的,很多研究者可能会很不同意某些的观点或有着不同的直觉,这都是可保留讨论的,因为这很依赖于数据本身情况。 |
13 | 13 |
|
14 | 14 | ## 14.2 参数和超参数的区别
|
15 | 15 |
|
|
32 | 32 |
|
33 | 33 | - 首先, 学习率,损失函数上的可调参数。在网络参数、优化参数、正则化参数中最重要的超参数可能就是学习率了。学习率直接控制着训练中网络梯度更新的量级,直接影响着模型的**有效容限能力**;损失函数上的可调参数,这些参数通常情况下需要结合实际的损失函数来调整,大部分情况下这些参数也能很直接的影响到模型的的有效容限能力。这些损失一般可分成三类,第一类辅助损失结合常见的损失函数,起到辅助优化特征表达的作用。例如度量学习中的Center loss,通常结合交叉熵损失伴随一个权重完成一些特定的任务。这种情况下一般建议辅助损失值不高于或者不低于交叉熵损失值的两个数量级;第二类,多任务模型的多个损失函数,每个损失函数之间或独立或相关,用于各自任务,这种情况取决于任务之间本身的相关性,目前笔者并没有一个普适的经验由于提供参考;第三类,独立损失函数,这类损失通常会在特定的任务有显著性的效果。例如RetinaNet中的focal loss,其中的参数***γ***,***α***,对最终的效果会产生较大的影响。这类损失通常论文中会给出特定的建议值。
|
34 | 34 |
|
35 |
| -- 其次,批样本数量,动量优化器(Gradient Descent with Momentum)的动量参数***β***。批样本决定了数量梯度下降的方向。过小的批数量,极端情况下,例如batch size为1,即每个样本都去修正一次梯度方向,样本之间的差异越大越难以收敛。若网络中存在批归一化(batchnorm),batch size过小则更难以收敛,甚至垮掉。这是因为数据样本越少,统计量越不具有代表性,噪声也相应的增加。而过大的batch size,会使得梯度方向基本稳定,容易陷入局部最优解,降低精度。一般参考范围会取在(1:1024]之间,当然这个不是绝对的,需要结合具体场景和样本情况;动量衰减参数 ***β***是计算梯度的指数加权平均数,并利用该值来更新参数,设置为 0.9 是一个常见且效果不错的选择; |
| 35 | +- 其次,批样本数量,动量优化器(Gradient Descent with Momentum)的动量参数***β***。批样本决定了数量梯度下降的方向。过小的批数量,极端情况下,例如batch size为1,即每个样本都去修正一次梯度方向,样本之间的差异越大越难以收敛。若网络中存在批归一化(batchnorm),batch size过小则更难以收敛,甚至垮掉。这是因为数据样本越少,统计量越不具有代表性,噪声也相应的增加。而过大的batch size,会使得梯度方向基本稳定,容易陷入局部最优解,降低精度。一般参考范围会取在[1:1024]之间,当然这个不是绝对的,需要结合具体场景和样本情况;动量衰减参数 ***β***是计算梯度的指数加权平均数,并利用该值来更新参数,设置为 0.9 是一个常见且效果不错的选择; |
36 | 36 |
|
37 | 37 |
|
38 | 38 | - 最后,Adam优化器的超参数、权重衰减系数、丢弃法比率(dropout)和网络参数。在这里说明下,这些参数重要性放在最后**并不等价于这些参数不重要**。而是表示这些参数在大部分实践中**不建议过多尝试**,例如Adam优化器中的***β1,β2,ϵ***,常设为 0.9、0.999、10−8就会有不错的表现。权重衰减系数通常会有个建议值,例如0.0005 ,使用建议值即可,不必过多尝试。dropout通常会在全连接层之间使用防止过拟合,建议比率控制在[0.2,0.5]之间。使用dropout时需要特别注意两点:一、在RNN中,如果直接放在memory cell中,循环会放大噪声,扰乱学习。一般会建议放在输入和输出层;二、不建议dropout后直接跟上batchnorm,dropout很可能影响batchnorm计算统计量,导致方差偏移,这种情况下会使得推理阶段出现模型完全垮掉的极端情况;网络参数通常也属于超参数的范围内,通常情况下增加网络层数能增加模型的容限能力,但模型真正有效的容限能力还和样本数量和质量、层之间的关系等有关,所以一般情况下会选择先固定网络层数,调优到一定阶段或者有大量的硬件资源支持可以在网络深度上进行进一步调整。
|
39 | 39 |
|
40 |
| -## 14.5 各类超参数对模型的影响 |
| 40 | + |
| 41 | + |
| 42 | +## 14.5 超参数如何影响模型性能 |
| 43 | + |
| 44 | +| 超参数 | 如何影响模型容量 | 原因 | 注意事项 | |
| 45 | +| :----------------: | :------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | |
| 46 | +| 学习率 | 调至最优,提升有效容量 | 过高或者过低的学习率,都会由于优化失败而导致降低模型有效容限 | 学习率最优点,在训练的不同时间点都可能变化,所以需要一套有效的学习率衰减策略 | |
| 47 | +| 损失函数部分超参数 | 调至最优,提升有效容量 | 损失函数超参数大部分情况都会可能影响优化,不合适的超参数会使即便是对目标优化非常合适的损失函数同样难以优化模型,降低模型有效容限。 | 对于部分损失函数超参数其变化会对结果十分敏感,而有些则并不会太影响。在调整时,建议参考论文的推荐值,并在该推荐值数量级上进行最大最小值调试该参数对结果的影响。 | |
| 48 | +| 批样本数量 | 过大过小,容易降低有效容量 | 大部分情况下,选择适合自身硬件容量的批样本数量,并不会对模型容限造成。 | 在一些特殊的目标函数的设计中,如何选择样本是很可能影响到模型的有效容限的,例如度量学习(metric learning)中的N-pair loss。这类损失因为需要样本的多样性,可能会依赖于批样本数量。 | |
| 49 | +| 丢弃法 | 比率降低会提升模型的容量 | 较少的丢弃参数意味着模型参数量的提升,参数间适应性提升,模型容量提升,但不一定能提升模型有效容限 | | |
| 50 | +| 权重衰减系数 | 调至最优,提升有效容量 | 权重衰减可以有效的起到限制参数变化的幅度,起到一定的正则作用 | | |
| 51 | +| 优化器动量 | 调至最优,可能提升有效容量 | 动量参数通常用来加快训练,同时更容易跳出极值点,避免陷入局部最优解。 | | |
| 52 | +| 模型深度 | 同条件下,深度增加,模型容量提升 | 同条件,下增加深度意味着模型具有更多的参数,更强的拟合能力。 | 同条件下,深度越深意味着参数越多,需要的时间和硬件资源也越高。 | |
| 53 | +| 卷积核尺寸 | 尺寸增加,模型容量提升 | 增加卷积核尺寸意味着参数量的增加,同条件下,模型参数也相应的增加。 | | |
41 | 54 |
|
42 | 55 | ## 14.6 为超参数选择合适的范围
|
43 | 56 |
|
44 |
| -## 14.7 为什么卷积核尺寸都是奇数 |
| 57 | +| 超参数 | 建议范围 | 注意事项 | |
| 58 | +| :----------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | |
| 59 | +| 初始学习率 | SGD: [1e-2, 1e-1]<br />momentum: [1e-3, 1e-2]<br />Adagrad: [1e-3, 1e-2]<br />Adadelta: [1e-2, 1e-1]<br />RMSprop: [1e-3, 1e-2]<br />Adam: [1e-3, 1e-2]<br />Adamax: [1e-3, 1e-2]<br />Nadam: [1e-3, 1e-2] | 这些范围通常是指从头开始训练的情况。<br />若是微调,初始学习率可在降低一到两个数量级。 | |
| 60 | +| 损失函数部分超参数 | 多个损失函数之间,损失值之间尽量相近,不建议超过或者低于两个数量级 | 这是指多个损失组合的情况,不一定完全正确。单个损失超参数需结合实际情况。 | |
| 61 | +| 批样本数量 | [1:1024] | | |
| 62 | +| 丢弃法比率 | [0, 0.5] | | |
| 63 | +| 权重衰减系数 | [0, 1e-4] | | |
| 64 | +| 卷积核尺寸 | [7x7],[5x5],[3x3],[1x1], [7x1,1x7] | | |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | +## 14.7 为什么卷积核设计尺寸都是奇数 |
| 69 | + |
| 70 | +主要原因有两点: |
| 71 | + |
| 72 | +- 保证像素点中心位置,避免位置信息偏移 |
| 73 | +- 填充边缘时能保证两边都能填充,原矩阵依然对称 |
| 74 | + |
| 75 | +## 14.8 权重共享的形式有哪些,为什么要权重共享 |
| 76 | + |
| 77 | +权重共享的形式: |
| 78 | + |
| 79 | +- 深度学习中,权重共享最具代表性的就是卷积网络的卷积操作。卷积相比于全连接神经网络参数大大减少; |
| 80 | + |
| 81 | +- 多任务网络中,通常为了降低每个任务的计算量,会共享一个骨干网络。 |
| 82 | +- 一些相同尺度下的结构化递归网络 |
| 83 | + |
| 84 | +权重共享的好处: |
45 | 85 |
|
46 |
| -## 14.8 为什么要做权重共享 |
| 86 | +权重共享一定程度上能增强参数之间的联系,获得更好的共性特征。同时很大程度上降低了网络的参数,节省计算量和计算所需内存(当然,结构化递归并不节省计算量)。此外权重共享能起到很好正则的作用。正则化的目的是为了降低模型复杂度,防止过拟合,而权重共享则正好降低了模型的参数和复杂度。因此一个设计优秀的权重共享方式,在降低计算量的同时,通常会较独享网络有更好的效果。 |
47 | 87 |
|
48 | 88 | ## 14.9 如何选取卷积核
|
49 | 89 |
|
|
0 commit comments