【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization

2023.01.14
调参侠初成长记

训练数据监视

一、数据预处理

将数据零均值化

二、选取网络结构

选取适合的网络结构,进行forward pass,将正则项设为0,如果是常用的损失函数比如softmax classifier,那么初始的损失应该为 − l o g ( 1 C ) -log(\frac{1}{C}) log(C1)
然后假如正则项,此时损失应该增大,因为正则化就是惩罚数据模型复杂度。

三、训练

  • 从很小的训练集开始

因为训练集很小,所以损失和精度都应该在一个非常完美的范围内。

  • 开始真正的训练

加上一个很小的正则项,然后开始找到最适合的learning rates(最重要的超参数)
当lr很小时,损失几乎不变,但是精度可能会有一个突升比如从0.01突变到0.2。
当lr很大时,损失值可能为NaN,因为学习率太大了。
正常情况下,我们需要的lr范围在 [ 1 e − 3 , 1 e − 5 ] [1e-3,1e-5] [1e3,1e5]

超参数优化

交叉验证策略

  • 使用几个epoch去得到粗略的结果

可以知道哪些超参数是好的,哪些不好,就可以发现一个参数的区间。

  • 在该区间进行精确查找

【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization_第1张图片

观察验证准确度,看看哪些值具有比较好的结果,这些值就构成了我们要细化的区间。

通常用对数来优化会更好,lr = 10**uniform(-3,-5)就是随机生成[ 1 0 − 3 , 1 0 − 5 ] 10^{-3},10^{-5}] 103,105]的数。前期学习率需要设置的很大,后期学习率需要在很小范围进行微调。对数空间下有乘法和除法效应,而在线性空间下进行学习率的调整就需要用加减法,增大了尝试的成本。例如,加减法需要确定增加或减小的幅度,不能过大也不能过小;而乘除法就可以乘以1.05这样的值来确定一个比例就可以进行调整。
比如,初始学习率 l r = 1 0 − 3 lr=10^{-3} lr=103,转换为对数 l o g ( 1 0 − 3 ) log(10^{-3}) log(103),乘除一个比例进行优化。如果不转换为对数,乘除一个比例变化幅度非常小。

一旦有了一个区间,我们就开始调整我们的区间,再精细查找我们想要的学习率。且最好保证我们想要的学习率在我们设定查找的区间的内部,而不是区间边缘,这样能确保我们确定的学习率确实是一个不错的值。
【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization_第2张图片

在一个区间内对超参数进行随机查找,要比网格查找(比如相同步数在一个区间内试值)摇号,这更能体现真实情况。

实际上,会对一大堆超参数进行优化,进行交叉验证。
下图是一个学习率和损失值的直观可视化。
【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization_第3张图片

当看到下图这种情况,损失函数在一定时间内很平滑,突然开始训练,这种情况是初始值没有设置好
【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization_第4张图片
当看到下图这种情况,在训练集和验证集精度上有很大的gap,可能过拟合,需要增大正则化
【cs231n Lesson6】 Babysitting the learning process, Hyperparameter Optimization_第5张图片

你可能感兴趣的:(cs231n,人工智能,深度学习)