原文: Hype: Compositional Machine Learning and Hyperparameter Optimization
译者:刘翔宇 审校:赵屹华、刘帝伟
责编:周建丁(zhoujd@csdn.net)
Hype是一个概念验证的深度学习库,你可以使用它对拥有许多模块的组合机器学习系统进行优化,即使这些模块本身就能进行优化。
这通过嵌套自动微分(AD)实现,它可以让你得到代码中任一浮点值的自动精确导数。底层的计算由BLAS/LAPACK实现(默认OpenBLAS)。
自动求导你不必费心在模型中计算梯度(或Hessians矩阵),这些都会被AD准确、有效地计算出来。AD底层的功能由DiffSharp提供。
“反向模式”(Reverse mode)AD是“反向传播”的一般形式,与数字或符号微分不同。
除了反向AD之外,Hype使用了前馈AD,并嵌套组合前馈和反向AD。核心微分API提供了梯度函数、Hessians矩阵、Jacobian矩阵、方向导数及Hessian与Jacobian向量的乘积。
超梯度你可以通过超参数得到训练和验证损失的梯度。这些超参数可以让你对基于梯度的优化进行梯度优化,这意味着你可以优化学习率,动量调度,权重初始化参数,步长以及哈密顿蒙特卡罗模型( Hamiltonian Monte Carlo models)中的质量矩阵。(最近有一篇文章使用了Python来实现:Maclaurin, Dougal, David Duvenaud, and Ryan P. Adams. “Gradient-based Hyperparameter Optimization through Reversible Learning.” arXiv preprint arXiv:1502.03492 (2015).)
open Hype open Hype.Neural // Train a network with stochastic gradient descent and a learning rate schedule let train (x:DV) = let n = FeedForward() n.Add(Linear(784, 300)) n.Add(tanh) n.Add(Linear(300, 10)) let loss, _ = Layer.Train(n, data, {Params.Default with LearningRate = Schedule x Momentum = Momentum.DefaultNesterov Batch = Minibatch 100 Loss = CrossEntropyOnLinear}) loss // Return the loss at the end of training // Train the training, i.e., optimize the learning schedule vector by using its hypergradient let hypertrain = Optimize.Minimize(train, DV.create 200 (D 1.f), {Params.Default with Epochs = 50})
你同样可以使用导数来训练数据,分析训练的敏感性。
组合性嵌套AD可以处理任何高阶导数,包括下面这种复杂的导数:
min(x↦f(x)+min(y↦g(x,y)))
其中min函数使用了基于梯度的优化。(注意,内部函数对外部函数参数进行了引用。)这可以让你创建复杂的系统,许多成分可以进行内部优化。
比如,你可以优化多玩家游戏的规则,玩家们使用一个简单的对手模型来优化自己的策略,具体来说就是通过观察对手的行为进行优化。
你也可以对使用了微分达到特定目标而不是优化的程序进行优化,比如自适应控制或仿真。
复杂目标函数你可以在目标函数的定义中使用导数进行模型训练。例如,你的目标函数考虑了输入敏感因素,对训练模型来说,在一系列输入转换之后那都是不变的。
路线图
目前版本:
将来的特性:
Hype由爱尔兰国立梅努斯大学哈密顿研究所大脑与计算机实验室的 Atılım Güneş Baydin 和 Barak A. Pearlmutter 开发。Hype在MIT许可下发布。