神经网络优化篇:详解超参数调试的实践:Pandas VS Caviar(Hyperparameters tuning in practice: Pandas vs. Caviar)

超参数调试的实践

如今的深度学习已经应用到许多不同的领域,某个应用领域的超参数设定,有可能通用于另一领域,不同的应用领域出现相互交融。比如,曾经看到过计算机视觉领域中涌现的巧妙方法,比如说ConfonetsResNets 。它还成功应用于语音识别,还看到过最初起源于语音识别的想法成功应用于NLP等等。

深度学习领域中,发展很好的一点是,不同应用领域的人们会阅读越来越多其它研究领域的文章,跨领域去寻找灵感。

就超参数的设定而言,见到过有些直觉想法变得很缺乏新意,所以,即使只研究一个问题,比如说逻辑学,也许已经找到一组很好的参数设置,并继续发展算法,或许在几个月的过程中,观察到的数据会逐渐改变,或也许只是在的数据中心更新了服务器,正因为有了这些变化,原来的超参数的设定不再好用,所以建议,或许只是重新测试或评估的超参数,至少每隔几个月一次,以确保对数值依然很满意。

最后,关于如何搜索超参数的问题,见过大概两种重要的思想流派或人们通常采用的两种重要但不同的方式。

一种是照看一个模型,通常是有庞大的数据组,但没有许多计算资源或足够的CPUGPU 的前提下,基本而言,只可以一次负担起试验一个模型或一小批模型,在这种情况下,即使当它在试验时,也可以逐渐改良。比如,第0天,将随机参数初始化,然后开始试验,然后逐渐观察自己的学习曲线,也许是损失函数J,或者数据设置误差或其它的东西,在第1天内逐渐减少,那这一天末的时候,可能会说,看,它学习得真不错。试着增加一点学习速率,看看它会怎样,也许结果证明它做得更好,那是第二天的表现。两天后,会说,它依旧做得不错,也许现在可以填充下Momentum或减少变量。然后进入第三天,每天,都会观察它,不断调整的参数。也许有一天,会发现的学习率太大了,所以可能又回归之前的模型,像这样,但可以说是在每天花时间照看此模型,即使是它在许多天或许多星期的试验过程中。所以这是一个人们照料一个模型的方法,观察它的表现,耐心地调试学习率,但那通常是因为没有足够的计算能力,不能在同一时间试验大量模型时才采取的办法。

另一种方法则是同时试验多种模型,设置了一些超参数,尽管让它自己运行,或者是一天甚至多天,然后会获得像这样的学习曲线,这可以是损失函数J或实验误差或损失或数据误差的损失,但都是曲线轨迹的度量。同时可以开始一个有着不同超参数设定的不同模型,所以,的第二个模型会生成一个不同的学习曲线,也许是像这样的一条(紫色曲线),会说这条看起来更好些。与此同时,可以试验第三种模型,其可能产生一条像这样的学习曲线(红色曲线),还有另一条(绿色曲线),也许这条有所偏离,像这样,等等。或者可以同时平行试验许多不同的模型,橙色的线就是不同的模型。用这种方式可以试验许多不同的参数设定,然后只是最后快速选择工作效果最好的那个。在这个例子中,也许这条看起来是最好的(下方绿色曲线)。

打个比方,把左边的方法称为熊猫方式。当熊猫有了孩子,他们的孩子非常少,一次通常只有一个,然后他们花费很多精力抚养熊猫宝宝以确保其能成活,所以,这的确是一种照料,一种模型类似于一只熊猫宝宝。对比而言,右边的方式更像鱼类的行为,称之为鱼子酱方式。在交配季节,有些鱼类会产下一亿颗卵,但鱼类繁殖的方式是,它们会产生很多卵,但不对其中任何一个多加照料,只是希望其中一个,或其中一群,能够表现出色。这就是哺乳动物繁衍和鱼类,很多爬虫类动物繁衍的区别。将称之为熊猫方式与鱼子酱方式,因为这很有趣,更容易记住。

所以这两种方式的选择,是由拥有的计算资源决定的,如果拥有足够的计算机去平行试验许多模型,那绝对采用鱼子酱方式,尝试许多不同的超参数,看效果怎么样。但在一些应用领域,比如在线广告设置和计算机视觉应用领域,那里的数据太多了,需要试验大量的模型,所以同时试验大量的模型是很困难的,它的确是依赖于应用的过程。但看到那些应用熊猫方式多一些的组织,那里,会像对婴儿一样照看一个模型,调试参数,试着让它工作运转。尽管,当然,甚至是在熊猫方式中,试验一个模型,观察它工作与否,也许第二或第三个星期后,也许应该建立一个不同的模型(绿色曲线),像熊猫那样照料它,猜,这样一生中可以培育几个孩子,即使它们一次只有一个孩子或孩子的数量很少。

所以希望能学会如何进行超参数的搜索过程,现在,还有另一种技巧,能使的神经网络变得更加坚实,它并不是对所有的神经网络都适用,但当适用时,它可以使超参数搜索变得容易许多并加速试验过程,下篇介绍。