Gradient-based Hyperparameter Op

2020-04-08  本文已影响0人  馒头and花卷

Maclaurin D, Duvenaud D, Adams R P, et al. Gradient-based Hyperparameter Optimization through Reversible Learning[J]. arXiv: Machine Learning, 2015.

@article{maclaurin2015gradient-based,
title={Gradient-based Hyperparameter Optimization through Reversible Learning},
author={Maclaurin, Dougal and Duvenaud, David and Adams, Ryan P},
journal={arXiv: Machine Learning},
year={2015}}

本文给出了利用梯度更新超参数的方法(低memory消耗).

主要内容

假设第t=1,\ldots, T次训练的损失函数为L(\mathbf{w}, \mathbf{\theta}, t), 其中\mathbf{w}是网络的权重, \mathbf{\theta}是指超参数.

进行一次meta-iteration(即T次训练之后), 我们利用验证集对其验证, 设其损失为f(\mathbf{w}), 我们知道, 因为\mathbf{w}实际上是\mathbf{\theta}的函数, 我们求f(\mathbf{w})关于\mathbf{\theta}的梯度, 并更新\mathbf{\theta}.

但是如果只是单纯地反向转递梯度,我们需要构建一个包含t=1,\ldots,T的图, 这是十分消耗memory的. 本文的贡献便是提出一种算法来解决此问题.

下图为利用SGD(带momentum)训练权重\mathbf{w}的过程:

在这里插入图片描述

算法

假设meta-iteration后的权重为\mathbf{w}_T, 我们利用此来一步一步地恢复前面的信息, 并且逐步计算有关超参数的导数.

在这里插入图片描述

算法中, 6, 7, 8实际上是SGD的一个逆行, 用以恢复\mathbf{w}_{t-1}, \mathbf{g}_t,\mathbf{v}_{t-1}, 注意到, 9, 10计算了俩次d\mathbf{v}, 实际上第一次作为中间变量以计算超参数的导数, 后一次是为下一次进行准备(算法中的公式都是容易推出的).

需要注意的是, 我们在恢复的过程中用到了\nabla甚至\nabla \nabla, 个人认为这些是在SGD训练的时候保存下来的.

finite precision arithmic

实验

3.1

Meta-optimization strategies: 将学习率作为超参数;
How smooth are hypergradients?: 探究损失关于超参数是否光滑(即导数是否连续).
Optimizing weight initialization scales: 将初始化超参数的scale作为超参数.

3.2

将正则化参数作为超参数.

3.3
将训练样本作为超参数.

3.4
...

3.5

如何优化网络结构, 因为网络结构是一种离散化的超参数, 所以...

上一篇下一篇

猜你喜欢

热点阅读