tf.contrib.opt.DecoupledWeightDecayExtension
Этот класс позволяет расширять оптимизаторы с развязанным разложением по весу.
tf.contrib.opt.DecoupledWeightDecayExtension(
weight_decay, **kwargs
)
Он реализует развязанное разложение по весу, описанное Loshchilov & Hutter (https://arxiv.org/pdf/1711.05101.pdf), в котором разложение по весу развязано от шагов оптимизации по отношению к функции потерь. Для вариантов SGD это упрощает поиск гиперпараметров, поскольку развязывает настройки разложения по весу и скорости обучения. Для алгоритмов адаптивного градиента он регуляризует переменные с большими градиентами сильнее, чем L2-регуляризация, что, как показано в вышеупомянутой статье, приводит к лучшим потерям обучения и обобщающей ошибке.
Этот класс сам по себе не является оптимизатором, а скорее расширяет существующие оптимизаторы с развязанным разложением по весу. Мы явно определяем два примера, использованные в вышеупомянутой статье (SGDW и AdamW), но в общем случае это может расширить любой OptimizerX, используя extend_with_weight_decay(OptimizerX, weight_decay=weight_decay). Для его работы он должен быть первым классом, от которого унаследован Optimizer с разложением по весу, например:
class AdamWOptimizer(DecoupledWeightDecayExtension, adam.AdamOptimizer):
def __init__(self, weight_decay, *args, **kwargs):
super(AdamWOptimizer, self).__init__(weight_decay, *args, **kwargs).
Обратите внимание, что это расширение разлагает веса ДО применения обновления на основе градиента, т.е. это расширение имеет желаемое поведение только для оптимизаторов, которые не зависят от значения «var» в шаге обновления!
Примечание: при применении разложения к скорости обучения, убедитесь, что вы также вручную применили разложение к weight_decay. Например:
schedule =
tf.compat.v1.train.piecewise_constant(tf.compat.v1.train.get_global_step(),
[10000, 15000], [1e-0, 1e-1, 1e-2])
lr = 1e-1 * schedule()
wd = lambda: 1e-4 * schedule()
# ...
optimizer = tf.contrib.opt.MomentumWOptimizer(learning_rate=lr,
weight_decay=wd,
momentum=0.9,
use_nesterov=True)
| Аргументы | |
|---|---|
weight_decay | Значение типа Tensor или число с плавающей точкой, коэффициент, на который переменная разлагается на шаге обновления. |
**kwargs | Необязательный список или кортеж или множество объектов Variable для разложения. |
Методы
apply_gradients
apply_gradients(
grads_and_vars, global_step=None, name=None, decay_var_list=None
)
Применяет градиенты к переменным и разлагает переменные.
Эта функция аналогична Optimizer.apply_gradients, за исключением того, что она позволяет указать переменные, которые должны быть разложены с помощью decay_var_list. Если decay_var_list равно None, все переменные в var_list разлагаются.
Для получения дополнительной информации см. документацию к Optimizer.apply_gradients.
| Аргументы | |
|---|---|
grads_and_vars | Список пар (градиент, переменная), возвращаемых compute_gradients(). |
global_step | Необязательный Variable для увеличения на единицу после обновления переменных. |
name | Необязательное имя возвращаемой операции. По умолчанию совпадает с именем, переданным конструктору Optimizer. |
decay_var_list | Необязательный список переменных разложения. |
| Возвращаемое значение | |
|---|---|
Операция, применяющая указанные градиенты. Если global_step не равно None, эта операция также увеличивает global_step. |
minimize
minimize(
loss, global_step=None, var_list=None,
gate_gradients=optimizer.Optimizer.GATE_OP, aggregation_method=None,
colocate_gradients_with_ops=False, name=None, grad_loss=None,
decay_var_list=None
)
Добавляет операции для минимизации loss путем обновления var_list с разложением.
Эта функция аналогична Optimizer.minimize, за исключением того, что она позволяет указать переменные, которые должны быть разложены с помощью decay_var_list. Если decay_var_list равно None, все переменные в var_list разлагаются.
Для получения дополнительной информации см. документацию к Optimizer.minimize.
| Аргументы | |
|---|---|
loss | A Tensor содержащий значение для минимизации. |
global_step | Необязательный Variable для увеличения на единицу после обновления переменных. |
var_list | Необязательный список или кортеж объектов Variable для обновления с целью минимизации loss. По умолчанию это список переменных, собранных в графе под ключом GraphKeys.TRAINABLE_VARIABLES. |
gate_gradients | Как управлять вычислением градиентов. Может быть GATE_NONE, GATE_OP, или GATE_GRAPH. |
aggregation_method | Указывает метод объединения градиентных слагаемых. Допустимые значения определены в классе AggregationMethod. |
colocate_gradients_with_ops | Если True, попытаться расположить градиенты вместе с соответствующей операцией. |
name | Необязательное имя возвращаемой операции. |
grad_loss | Необязательно. A Tensor содержащий градиент, вычисленный для loss. |
decay_var_list | Необязательный список переменных разложения. |
| Возвращаемое значение | |
|---|---|
Операция, обновляющая переменные в var_list. Если global_step не было None, эта операция также увеличивает global_step. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/opt/DecoupledWeightDecayExtension