什么是超参数?
比如算法中的 learning rate 𝑎(学习率)、iterations(梯度下降法循环的数量)、𝐿(隐藏 层数目)、𝑛 [𝑙](隐藏层单元数目)、choice of activation function(激活函数的选择)都需要自己来设置,这些数字实际上控制了最后的参数𝑊和𝑏的值,所以它们被称作超参数。 实际上深度学习有很多不同的超参数,如 momentum、mini batch size、regularization parameters 等等。
如何寻找超参数的最优值?
走 Idea—Code—Experiment—Idea 这个循环,尝试各种不同的参数,实现模型并观察是 否成功,然后再迭代。
今天的深度学习应用领域,还是很经验性的过程,假如有个想法,比如可能大致知 道一个最好的学习率值,可能说𝑎 = 0.01最好,会想先试试看,然后可以实际试一下, 训练一下看看效果如何。然后基于尝试的结果你会发现,觉得学习率设定再提高到 0.05 会 比较好。如果不确定什么值是最好的,可以先试试一个学习率𝑎,再看看损失函数 J 的值有没有下降。然后可以试一试大一些的值,然后发现损失函数的值增加并发散了。然 后可能试试其他数,看结果是否下降的很快或者收敛到在更高的位置。可能尝试不同的𝑎 并观察损失函数𝐽这么变了,试试一组值,然后可能损失函数变成这样,这个𝑎值会加快学习 过程,并且收敛在更低的损失函数值上(箭头标识),就用这个𝑎值了。
然而,当开始开发新应用时,预先很难确切 知道,究竟超参数的最优值应该是什么。所以通常,必须尝试很多不同的值,并走这个循 环,试试各种参数。试试看 5 个隐藏层,这个数目的隐藏单元,实现模型并观察是否成功, 然后再迭代。这页的标题是,应用深度学习领域,一个很大程度基于经验的过程,凭经验的 过程通俗来说,就是试直到找到合适的数值。 另一个深度学习的影响是它用于解决很多问题,从计算机视觉到语音识别,到自然 语言处理,到很多结构化的数据应用,比如网络广告或是网页搜索或产品推荐等等。
用更系统的方法, 用系统性的尝试各种超参数取值。然后其次,甚至是已经用了很久的模型,可能在做网 络广告应用,在开发途中,很有可能学习率的最优数值或是其他超参数的最优值是会变的, 所以即使每天都在用当前最优的参数调试的系统,还是会发现,最优值过一年就会变 化,因为电脑的基础设施,CPU 或是 GPU 可能会变化很大。所以有一条经验规律可能每几 个月就会变。
如果所解决的问题需要很多年时间,只要经常试试不同的超参数,勤于检验 结果,看看有没有更好的超参数数值,相信慢慢会得到设定超参数的直觉,知道问题 最好用什么数值。 这可能的确是深度学习比较让人不满的一部分,也就是必须尝试很多次不同可能性。 但参数设定这个领域,深度学习研究还在进步中,所以可能过段时间就会有更好的方法决定 超参数的值,也很有可能由于 CPU、GPU、网络和数据都在变化,这样的指南可能只会在一 段时间内起作用,只要不断尝试,并且尝试保留交叉检验或类似的检验方法,然后挑一个 对问题效果比较好的数值。