是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法。
为了使用,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。
为了构建一个,你需要给它一个包含了需要优化的参数(必须都是对象)的iterable。然后,你可以设置optimizer的参
数选项,比如学习率,权重衰减,等等。
例子:
也支持为每个参数单独设置选项。若想这么做,不要直接传入的iterable,而是传入的iterable。每一个dict都分别定
义了一组参数,并且包含一个键,这个键对应参数的列表。其他的键应该optimizer所接受的其他参数的关键字相匹配,并且会被用于对这组参数的
优化。
你仍然能够传递选项作为关键字参数。在未重写这些选项的组中,它们会被用作默认值。当你只想改动一个参数组的选项,但其他参数组的选项不变时,这是
非常有用的。
例如,当我们想指定每一层的学习率时,这是非常有用的:
这意味着的参数将会使用的学习率,的参数将会使用的学习率,并且的momentum将会被用于所
有的参数。
所有的optimizer都实现了方法,这个方法会更新所有的参数。它能按两种方式来使用:
这是大多数optimizer所支持的简化版本。一旦梯度被如之类的函数计算好后,我们就可以调用这个函数。
例子
一些优化算法例如Conjugate Gradient和LBFGS需要重复多次计算函数,因此你需要传入一个闭包去允许它们重新计算你的模型。这个闭包应当清空梯度,
计算损失,然后返回。
例子:
Base class for all optimizers.
参数:
加载optimizer状态
参数:
state_dict () —— optimizer的状态。应当是一个调用所返回的对象。
以返回optimizer的状态。
它包含两项。
进行单次优化 (参数更新).
参数:
清空所有被优化过的Variable的梯度.
实现Adadelta算法。
它在ADADELTA: An Adaptive Learning Rate Method.中被提出。
参数:
进行单次优化 (参数更新).
参数:
实现Adagrad算法。
它在 Adaptive Subgradient Methods for Online Learning and Stochastic Optimization中被提出。
参数:
进行单次优化 (参数更新).
参数:
实现Adam算法。
它在Adam: A Method for Stochastic Optimization中被提出。
参数:
进行单次优化 (参数更新).
参数:
实现Adamax算法(Adam的一种基于无穷范数的变种)。
它在Adam: A Method for Stochastic Optimization中被提出。
参数:
进行单次优化 (参数更新).
参数:
实现平均随机梯度下降算法。
它在Acceleration of stochastic approximation by averaging中被提出。
参数:
进行单次优化 (参数更新).
参数:
实现L-BFGS算法。
这个optimizer不支持为每个参数单独设置选项以及不支持参数组(只能有一个)
目前所有的参数不得不都在同一设备上。在将来这会得到改进。
这是一个内存高度密集的optimizer(它要求额外的 个字节)。如果它不适应内存,尝试减小history size,或者使用不同的算法。
参数:
进行单次优化 (参数更新).
参数:
实现RMSprop算法。
由G. Hon在他的课程中提出.
中心版本首次出现在Generating Sequences With Recurrent Neural Networks.
参数:
进行单次优化 (参数更新).
参数:
实现弹性反向传播算法。
参数:
进行单次优化 (参数更新).
参数:
实现随机梯度下降算法(momentum可选)。
Nesterov动量基于On the importance of initialization and momentum in deep learning中的公式.
参数:
例子:
带有动量/Nesterov的SGD的实现稍微不同于Sutskever等人以及其他框架中的实现。
考虑动量的具体情况,更新可以写成
v=ρ?v+g
p=p?lr?v
其中,p、g、v和ρ分别是参数、梯度、速度和动量。
这跟Sutskever等人以及其他框架的实现是相反的,它们采用这样的更新
v=ρ?v+lr?g
p=p?v
Nesterov的版本也类似地被修改了。
进行单次优化 (参数更新).
参数:
艾伯特(http://www.aibbt.com/)国内第一家人工智能门户