在神经网络中,除了可学习的参数之外,还存在很多超参数。这些超参数对网络性能的影响也很大,不同的机器学习任务往往需要不同的超参数。常见的超参数有以下三类:
超参数优化主要存在两方面的困难
对于超参数的配置,比较简单的方法有网格搜索、随机搜索、贝叶斯优化、动态资源分配和神经架构搜索。
网格搜索是一种通过尝试所有超参数的组合来寻址合适一组超参数配置的方法。假设总共有 K K K 个超参数,第 n n n 个超参数的可以取 m n m_n mn 个值.那么总共的配置组合数量为 m 1 × m 2 × ⋯ × m K m_1 × m_2 × ⋯ × m_K m1×m2×⋯×mK。如果超参数是连续的,可以将超参数离散化,选择几个“经验”值。比如学习率 α \alpha α,我们可以设置
α ∈ { 0.01 , 0.1 , 0.5 , 1.0 } \alpha \in \{0.01, 0.1,0.5,1.0 \} α∈{0.01,0.1,0.5,1.0}一般而言,对于连续的超参数,我们不能按等间隔的方式进行离散化,需要根据超参数自身的特点进行离散化。
网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试这些模型在开发集上的性能,选取一组性能最好的配置。
不同超参数对模型性能的影响有很大差异。有些超参数(比如正则化系数)对模型性能的影响有限,而另一些超参数(比如学习率)对模型性能影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。一种在实践中比较有效的改进方法是对超参数进行随机组合,然后选取一个性能最好的配置,这就是随机搜索。随机搜索在实践中更容易实现,一般会比网格搜索更加有效。
网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。因此这两种搜索方式一般都比较低效。
贝叶斯优化是一种自适应的超参数优化方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。
一种比较常用的贝叶斯优化方法为时序模型优化。假设超参数优化的函数 f ( x ) f(x) f(x) 服从高
斯过程,则 p ( f ( x ) ∣ x ) p(f(x)|x) p(f(x)∣x) 为一个正态分布。贝叶斯优化过程是根据已有的 N N N 组试验结果 H = { x n , y n } n = 1 N H=\{ x_n,y_n \}_{n=1}^N H={xn,yn}n=1N(其中 y n y_n yn 是 f ( x n ) f(x_n) f(xn) 的观测值)来建模高斯过程,并计算 f ( x ) f(x) f(x) 的后验分布 p g p ( f ( x ) ∣ x , H ) p_{gp}{(f(x)|x,H)} pgp(f(x)∣x,H)。
为了使得 p g p ( f ( x ) ∣ x , H ) p_{gp}{(f(x)|x,H)} pgp(f(x)∣x,H) 更加接近其真实分布,就需要对样本空间进行足够多的采样。但是超参数优化中每一个样本的生成成本很高,需要用尽可能少的样本来使得 p θ ( f ( x ) ∣ x , H ) p_{\theta}(f(x)|x,H) pθ(f(x)∣x,H) 接近于真实分布.因此,需要通过定义一个收益函数 α ( x , H ) \alpha(x,H) α(x,H) 来判断一个样本是否能够给建模 p θ ( f ( x ) ∣ x , H ) p_{\theta}(f(x)|x,H) pθ(f(x)∣x,H) 提供更多的收益。收益越大,其修正的高斯过程会越接近目标函数的真实分布。
收益函数的定义有很多种方式。一个常用的是期望改善(EI) 函数。假设 y ∗ = min { y n , 1 ≤ n ≤ N } y^*=\min \{y_n,1 \le n \le N\} y∗=min{yn,1≤n≤N} 是当前已有样本中的最优值,期望改善函数为
E I ( x , H ) = ∫ − ∞ + ∞ max ( y ∗ − y , 0 ) p g p y ∣ x , H ) d y EI(x,H)=\int_{-\infty}^{+\infty} \max (y^*-y,0)p_{gp}{y|x,H)} dy EI(x,H)=∫−∞+∞max(y∗−y,0)pgpy∣x,H)dy期望改善是定义一个样本 x x x 在当前模型 p g p ( f ( x ) ∣ x , H ) p_{gp}{(f(x)|x,H)} pgp(f(x)∣x,H)下, f ( x ) f(x) f(x) 超过最好结果 y ∗ y^* y∗ 的期望。除了期望改善函数之外,收益函数还有其他定义形式,比如改善概率,高斯过程置信上界等。
在超参数优化中,每组超参数配置的评估代价比较高。如果我们可以在较早的阶段就估计出一组配置的效果会比较差,那么我们就可以中止这组配置的评估,将更多的资源留给其他配置。
这个问题可以归结为多臂赌博机问题的一个泛化问题:最优臂问题,即在给定有限的机会次数下,如何玩这些赌博机并找到收益最大的臂。和多臂赌博机问题类似,最优臂问题也是在利用和探索之间找到最佳的平衡。由于目前神经网络的优化方法一般都采取随机梯度下降,因此我们可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。如果一组超参数配置的学习曲线不收敛或者收敛比较差,我们可以应用早期停止策略来中止当前的训练。
动态资源分配的关键是将有限的资源分配给更有可能带来收益的超参数组合。一种有效方法是逐次减半方法,将超参数优化看作一种非随机的最优臂问题。假设要尝试 组超参数配置,总共可利用的资源预算(摇臂的次数)为 B B B,我们可以通过 = ⌈ log 2 ( ) ⌉ − 1 = ⌈\log_2()⌉ − 1 T=⌈log2(N)⌉−1 轮逐次减半的方法来选取最优的配置。
神经架构搜索是一 问题。个新的比较有前景的研究方向,通过神经网络来自动实现网络架构的设计。一个神经网络的架构可以用一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。控制器可以由一个循环神经网络来实现。控制器的训练可以通过强化学习来完成,其奖励信号为生成的子网络在开发集上的准确率。
在机器学习建模时,除了准备数据,最耗时耗力的就是尝试各种超参组合,找到模型最佳效果的过程了。即使是对于有经验的算法工程师和数据科学家,有时候也很难把握其中的规律,只能多次尝试,找到较好的超参组合。而对于初学者来说,要花更多的时间和精力。
机器学习的应用需要大量的人工干预,这些人工干预表现在:特征提取、模型选择、参数调节等机器学习的各个方面。AutoML视图将这些与特征、模型、优化、评价有关的重要步骤进行自动化地学习,使得机器学习模型无需人工干预即可被应用。
自动机器学习(AutoML) 这两年成为了热门领域,着力解决超参调试过程的挑战,通过超参选择算法和强大的算力来加速超参搜索的过程。
自动机器学习有很多,比如NNI、Ray.tune等,在使用后,我还是比较推荐NNI一些,在下面我将会对此框架进行一些讲解。