沐鸣注册
常见的超参数有:
- 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型。
- 优化参数,包括优化方法、学习率、小批量的样本数量。
- 正则化系数
超参数优化(Hyperparameter Optimization)主要存在两方面的困难。
- 超参数优化是一个组合优化问题,无法像一般参数那样通过梯度下降法来优化。
- 评估一组超参数配置的时间代价非常高,从而导致一些优化方法(如演化算法等)在超参数优化中难以应用。(每调整一次超参数必须重新训练才能评估效果,这在模型很大的时候效率会非常低。)
对于超参数设置,比较简单的方法有人工搜索、网格搜索和随机搜索。
网格搜索(grid search)是一种通过尝试所有超参数的组合来寻址合适一组超参数配置的方法。假设总共有 个超参数,第 个超参数可以取 个值。那总共配置组合为 ,如果超参数是连续的,可以将超参数离散化,选择几个“经验值”,比如学习率 可设置 ,对于连续的超参数,我们不能按等间隔的方式进行离散化,需要根据超参数自身的特点进行离散化。
网格搜索根据这些超参数的不同组合方式分别训练一个模型,然后测试这些模型在开发集上的性能,选取一组性能最好的配置。
如果不同超参数对模型性能的影响有很大差异。有些超参数(比如正则化系数)对模型性能的影响有限,而有些超参数(比如学习率)对模型性能影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。那么就更适合另一种搜索方式:随机搜索,对超参数进行随机组合,然后选择一个性能最好的配置。
网格搜索和随机搜索都没用利用不同超参数组合之间的相关性。
贝叶斯优化(Bayesian optimization)是一种自适应的超参数搜索方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。假设超参数优化的函数 服从高斯过程,则 为一个正态分布。贝叶斯优化过程是根据已有的 组实验结果 ( 为 的观测值)来建模高斯过程,并计算 的后验分布 。
为了使得 接近其真实分布,就需要对样本空间进行足够多的采样。但是超参数优化中每一个样本的生成成本很高,需要用尽可能少的样本使得 接近于真实分布。因此需要定义一个收益函数(acquisition function) 来判断一个样本是否能够给建模 来提供更多的收益。收益越大,其修正的高斯过程越接近目标函数的真实分布。
期望改善(Expected Inprovement,EI),假设 是当前已有样本中的最优值,期望改善函数为:
期望改善是定义一个样本x在当前模型 下, 超过最好结果 的期望。除了期望改善函数以外,还有改善概率(Probability of Improvement)、高斯过程置信上界(GP Upper Confidence Bound,GP-UCB)等。
贝叶斯优化的一个缺点是高斯过程建模需要计算协方差矩阵的逆,时间复杂度是 ,因此不能很好地处理高维情况。深层神经网络的超参数一般比较多,为了使用贝叶斯优化来搜索神经网络的超参数,需要一些更高效的高斯过程建模。
一种更加通俗的解释[1]:
首先,我们需要随机初始化高斯过程(没有样本),得到高斯曲线。我们一般要选取均值大和方差也大的点,因为均值代表着期望的最终结果,当然是越大越好,但是不能总是选择均值大的点,有的时候也得考虑方差大的点,因为方差大的点也有可能存在全局最优解。选择均值大的点称为开发(exploritation),选择方差大的点称为探索(exploration)。贝叶斯优化就是要在开发和探索中权衡。
一般情况下,假如模型训练非常慢,只能跑很少次数,那么应该选择均值较大的比较有把握,如果我们计算能力很强,可以跑上百甚至上千次,那就不能放弃探索的机会应该选择方差大的比较有把握。
acquisition function:收益函数,用来权衡开发和探索,每次选择使得函数的最大值所对应的参数值作为贝叶斯优化推荐的超参数值并进行模型的训练。得到了新的样本点之后,将新样本点加入样本集并重新绘制高斯过程(样本数越多,高斯过程越逼近真实分布),然后继续通过收益函数进行判别,得到下一组最优解,以此类推。。。
由于目前神经网络的优化方法一般都采取随机梯度下降,因此我们可以通过一组超参数的学习曲线来预估这组超参数配置是否有希望得到比较好的结果。如果一组超参数配置的学习曲线不收敛或者收敛比较差,可以应用早期停止(early-stopping)策略终止当前训练。
动态资源分配的一种有效方法是逐次减半(successive halving),将超参数优化看作是一种非随机的最优臂问题,假设要尝试N组超参数配置,总共可利用的资源预算为B,我们可以通过 轮逐次减半的方法来选取最优的配置:
在逐次减半方法中,尝试的超参数配置数量N 十分关键。如果N 越大,得到最佳配置的机会也越大,但每组配置分到的资源就越少,这样早期的评估结果可能不准确。反之如果N 越小,每组超参数配置的评估会越准确,但有可能无法得到最优的配置。
上面介绍的超参数优化方法都是在固定(或变化比较小)的超参数空间 中进行最优配置搜索,而最重要的神经网络架构一般还是需要由有经验的专家来进行设计。神经架构搜索(neural architecture search,NAS)是一个新的比较有前景的研究方向通过神经网络来自动实现网络架构的设计。一个神经网络的架构可以用一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。控制器可以由一个循环神经网络来实现。控制器的训练可以通过强化学习来完成,其奖励信号为生成的子网络在开发集上的准确率。
参考书籍:《神经网络与深度学习》—邱锡鹏