我们平时一直都在说“调参、调参”,但实际上,不是调“参数”,而是调“超参数”
1.参数(Parameter)
参数是我们训练神经网络 最终要学习的目标,最基本的就是神经网络的权重 W和bias b,我们训练的目的,就是要找到一套好的模型参数,用于预测未知的结果。这些参数我们是不用调的,是模型来训练的过程中自动更新生成的。
2.超参数(HyperParameter)
超参数是我们控制我们模型结构、功能、效率等的 调节旋钮
learning rate
epochs(迭代次数,也可称为 num of iterations)
num of hidden layers(隐层数目)
num of hidden layer units(隐层的单元数/神经元数)
activation function(激活函数)
batch-size(用mini-batch SGD的时候每个批量的大小)
optimizer(选择什么优化器,如SGD、RMSProp、Adam)
用诸如RMSProp、Adam优化器的时候涉及到的β1,β2等等
3.选择“(超)参数组合”
网格法会浪费我们大量的时间和资源
随机取样,理想状态下,任何两点都不同行不同列
![](https://img.haomeiwen.com/i14351358/bcb7ec1c19a83f7d.png)
具体方法为:
1)在大范围内随机取样
2)在效果较好的几个点的附近,再划分较小区域,在其中再进行随机取样
3)重复上述过程
可以保证没有浪费的试验,同时可以迅速锁定最优区域,更快地找到最佳的超参数组合。
4. 合适的尺度(scale)来选择超参数
均匀采样不可行
实际上,learning rate基本不会取大于0.1的值,因为太大了,梯度下降根本没法有效进行),因为像这种超参数,我们在调节的时候,更关注的不是实际的数值,而是变化的程度
我们做实验就可以发现,0.001到0.1这个范围内,learning rate极为敏感,也许一个小小的改变就可以让我们的梯度下降cost曲线大有不同,但是从0.1到1,cost曲线也许基本没有变化。
在对数尺度上随机取样
![](https://img.haomeiwen.com/i14351358/4e1f83082cd7f0b4.png)
通常,像learning rate这种连续性的超参数,都会在某一端特别敏感,learning rate本身在 靠近0的区间会非常敏感,因此我们一般在靠近0的区间会多采样。
类似的,动量法梯度下降中(SGD with Momentum)有一个重要的超参数 β,β越大,动量越大,因此 β在靠近1的时候非常敏感,因此一般取值在0.9~0.999.
5.训练模型的两种方式
熊猫法:
当我们训练一个很大的模型,但是计算资源又没有那么多的时候,我们会很珍惜我们的训练机会,通常会像照顾一个熊猫一样去照顾我们的模型的训练过程。
具体来说,我们先初始化一组超参数,然后每训练一段时间,比如一天,就赶紧去看看进展如何,是否按照我们预想的方向发展,然后做一定的微调,接着训练,保持观察;如果发现偏离了方向,赶紧对超参数进行调整。就这样,一天天地照看,直到最后达到我们的训练目标。
![](https://img.haomeiwen.com/i14351358/da2131fca3096cf3.png)
鱼子酱法:
如果我们的计算资源足够丰富,可以同时训练多个模型,那么我们就可以用鱼子酱法:
![](https://img.haomeiwen.com/i14351358/cc526e8a48e09928.png)
我们直接丢一堆超参数组合的模型去训练,然后不管了,最后看看谁的效果最好就选择谁。
对于这两种方式怎么选择,当然是看具体的情况了,一般情况话,训练一个大模型的时候,我们没有那么壕,所以小心翼翼地去像照顾熊猫一样去调节我们的模型可能更常见一些。
网友评论