Gradient-based Hyperparameter Optimization through Reversible Learning
@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
如何优化网络结构, 因为网络结构是一种离散化的超参数, 所以...
Gradient-based Hyperparameter Optimization through Reversible Learning的更多相关文章
- [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization
课程主页:http://cs231n.stanford.edu/ Introduction to neural networks -Training Neural Network ________ ...
- DAGs with NO TEARS: Continuous Optimization for Structure Learning
DAGs with NO TEARS: Continuous Optimization for Structure Learning 目录 DAGs with NO TEARS: Continuous ...
- 论文笔记系列-Speeding Up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves
I. 背景介绍 1. 学习曲线(Learning Curve) 我们都知道在手工调试模型的参数的时候,我们并不会每次都等到模型迭代完后再修改超参数,而是待模型训练了一定的epoch次数后,通过观察学习 ...
- Federated Optimization: Distributed Machine Learning for On-Device Intelligence
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1610.02527v1 [cs.LG] 8 Oct 2016 坐标下降法:https://blog.csdn.net/qq_ ...
- 斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)
本章节主要讲怎么确定梯度下降的工作是正确的,第二是怎么选择学习率α,如下图所示: 上图显示的是梯度下降算法迭代过程中的代价函数j(θ)的值,横轴是迭代步数,纵轴是j(θ)的值 如果梯度算法正常工作,那 ...
- A novel multi-swarm particle swarm optimization with dynamic learning strategy(一种新颖的具有动态学习策略的多种群粒子群优化算法)
1.核心 在每个子种群的粒子被划分为普通粒子(ordinary particles)和交流粒子(communication particles),在每次迭代过程中,不同的粒子执行不同的进化操作.普通粒 ...
- How to Evaluate Machine Learning Models, Part 4: Hyperparameter Tuning
How to Evaluate Machine Learning Models, Part 4: Hyperparameter Tuning In the realm of machine learn ...
- arXiv 2015深度学习年度十大论文
由康奈尔大学运营维护着的arXiv网站,是一个在学术论文还未被出版时就将之向所有人开放的地方.这里汇聚了无数科学领域中最前沿的研究,机器学习也包括在内.它反映了学术界当前的整体趋势,我们看到,近来发布 ...
- 机器学习超参数优化算法-Hyperband
参考文献:Hyperband: Bandit-Based Configuration Evaluation for Hyperparameter Optimization I. 传统优化算法 机器学习 ...
随机推荐
- A Child's History of England.20
CHAPTER 7 ENGLAND UNDER HAROLD THE SECOND, AND CONQUERED BY THE NORMANS Harold was crowned King of E ...
- flink---实时项目--day01--1. openrestry的安装 2. 使用nginx+lua将日志数据写入指定文件中 3. 使用flume将本地磁盘中的日志数据采集到的kafka中去
1. openrestry的安装 OpenResty = Nginx + Lua,是⼀一个增强的Nginx,可以编写lua脚本实现⾮非常灵活的逻辑 (1)安装开发库依赖 yum install -y ...
- android studio 使用 aidl(一)基础用法
最近公司需要开发一个项目用的到aidl,之前研究过eclipse版本的,但是好久了一直没用,现在需要捡起来,但是现在都用android studio了,所以查了下资料 都不是很全,我在这里总结一下,方 ...
- 事务(@Transactional注解)的用法和实例
参数 @Transactional可以配制那些参数及以其所代表的意义: 参数 意义 isolation 事务隔离级别 propagation 事务传播机制 readOnly 事务读写性 noRollb ...
- Docker 生产环境之配置容器 - 自动启动容器
原文地址 Docker 提供了重启策略,以控制容器在退出时是否自动启动,或在 Docker 重新启动时自动启动.重启策略可确保链接的容器以正确的顺序启动.Docker 建议使用重启策略,并避免使用流程 ...
- zabbix之模板制作(memcache redis)
#:找一台主机安装redis和memcached(记得安装zabbix-agent) root@ubuntu:~# apt install redis root@ubuntu:~# apt insta ...
- CentOS6设置Django开发环境
今天在我的Centos6.5机器上安装 Django 开发环境,在安装完使用 "django-admin.py startproject myapp" 创建应用的时候报了下面的错误 ...
- Why is the size of an empty class not zero in C++?
Predict the output of the following program? 1 #include<iostream> 2 using namespace std; 3 4 c ...
- Spring是如何保证同一事务获取同一个Connection的?使用Spring的事务同步机制解决:数据库刚插入的记录却查询不到的问题(转)
前言 关于Spring的事务,它是Spring Framework中极其重要的一块.前面用了大量的篇幅从应用层面.原理层面进行了比较全方位的一个讲解.但是因为它过于重要,所以本文继续做补充内容:Spr ...
- java通过JDBC访问数据库(最基本的查询)
一.步骤介绍 1.通过Class.forName()加载驱动: 2.通过DriverManager.getConnection()获取Conncetion连接对象: 3.创建Statement对象传递 ...