Spec-Zone.ru › TensorFlow 1.15

tf.contrib.opt.ShampooOptimizer

Оптимизатор Shampoo

Наследуется от: Optimizer

tf.contrib.opt.ShampooOptimizer(
    global_step=0, max_matrix_size=768, gbar_decay=0.0, gbar_weight=1.0,
    mat_gbar_decay=1.0, mat_gbar_weight=1.0, learning_rate=1.0, svd_interval=1,
    precond_update_interval=1, epsilon=0.0001, alpha=0.5, use_iterative_root=False,
    use_locking=False, name='Shampoo'
)

Вариант Adagrad, использующий одну матрицу предварительного кондиционирования для каждого измерения переменной. Подробнее см. https://arxiv.org/abs/1802.09568

gbar — это взвешенная по времени накопленная градиент: gbar[t] = gbar_decay[t] * gbar[t-1] + gbar_weight[t] * g[t]

mat_gbar — это взвешенная по времени накопленная квадрат градиента: mat_gbar_j[t] = mat_gbar_decay[t] * mat_gbar_j[t-1]

+ mat_gbar_weight[t] * gg_j[t]

где если g[t] = g_abcd, то gg_a[t] = g_abcd g_a'bcd (нотация Эйнштейна)

Правило обновления:

w[t+1] = w[t] - learning_rate[t] * Prod_j mat_gbar_j[t]^(-alpha/n) gbar[t] Опять же, mat_gbar_j[t]^(-alpha) gbar[t] — это тензорное сокращение по j-му измерению gbar[t] с первым измерением mat_gbar_j[t]^(-alpha/n), где alpha — гиперпараметр, а n — ранг переменной. Prod_j представляет собой выполнение этого сокращения для всех j от 0 до n-1.

Как правило, learning_rate является константой, но может зависеть от времени, передавая лямбда-функцию, зависящую от шага.

Аргументы
global_step Переменная TensorFlow, указывающая шаг.
max_matrix_size Мы не выполняем SVD для матриц, размер которых превышает это значение.
gbar_decay
gbar_weight Используется для обновления gbar: gbar[t] = gbar_decay[t] * gbar[t-1] + gbar_weight[t] * g[t]
mat_gbar_decay
mat_gbar_weight Используется для обновления mat_gbar: mat_gbar_j[t] = mat_gbar_decay[t] * mat_gbar_j[t-1]
  • mat_gbar_weight[t] * gg_j[t]
learning_rate Аналогично SGD
svd_interval Мы должны выполнить SVD после этого количества шагов. По умолчанию = 1, т.е. на каждом шаге. Обычно 20 приводит к отсутствию потери точности, а 50 или 100 тоже нормально. Возможно, захотите чаще в начале и реже в конце — задайте в вызывающей функции, например: "svd_interval = lambda(T): tf.cond( T < 2000, lambda: 20.0, lambda: 1000.0)"
precond_update_interval Мы должны обновить предварительные кондиционеры после этого количества шагов. По умолчанию = 1. Обычно меньше, чем svd_interval.
epsilon epsilon * I_n добавляется к каждой mat_gbar_j для обеспечения устойчивости для недиагональной версии shampoo.
alpha общая степень предварительных кондиционеров.
use_iterative_root должен ли оптимизатор использовать SVD (быстрее) или итеративный метод корней (для TPU) для поиска корней PSD-матриц.
use_locking
name имя оптимизатора.

Методы

apply_gradients

Посмотреть исходный код

apply_gradients(
    grads_and_vars, global_step=None, name=None
)

Применить градиенты к переменным.

Это вторая часть minimize(). Она возвращает Operation, который применяет градиенты.

Аргументы
grads_and_vars Список пар (градиент, переменная), возвращаемых compute_gradients().
global_step Необязательный Variable для увеличения на единицу после обновления переменных.
name Необязательное имя возвращаемой операции. По умолчанию — имя, переданное конструктору Optimizer.
Возвращаемое значение
Operation для применения заданных градиентов. Если global_step не равно None, эта операция также увеличивает global_step.
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если у ни одной из переменных нет градиента.
RuntimeError Если следует использовать _distributed_apply() вместо этого.

compute_gradients

Посмотреть исходный код

compute_gradients(
    loss, var_list=None, gate_gradients=GATE_OP, aggregation_method=None,
    colocate_gradients_with_ops=False, grad_loss=None
)

Вычислить градиенты loss для переменных в var_list.

Это первая часть minimize(). Она возвращает список пар (градиент, переменная), где «градиент» — градиент для «переменной». Обратите внимание, что «градиент» может быть Tensor, IndexedSlices, или None если для данной переменной нет градиента.

Аргументы
loss Тензор, содержащий значение для минимизации, или вызываемая функция без аргументов, возвращающая значение для минимизации. При включённом режиме выполнения eager он должен быть вызываемой функцией.
var_list Необязательный список или кортеж tf.Variable для обновления для минимизации loss. По умолчанию — список переменных, собранных в графе под ключом GraphKeys.TRAINABLE_VARIABLES.
gate_gradients Как управлять вычислением градиентов. Может быть GATE_NONE, GATE_OP, или GATE_GRAPH.
aggregation_method Указывает метод комбинирования градиентных терминов. Допустимые значения определены в классе AggregationMethod.
colocate_gradients_with_ops Если True, попытаться разместить градиенты вместе с соответствующей операцией.
grad_loss Необязательно. Tensor, содержащий градиент, вычисленный для loss.
Возвращаемое значение
Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть None.
Исключения
TypeError Если var_list содержит что-либо кроме объектов Variable.
ValueError Если некоторые аргументы недопустимы.
RuntimeError Если вызвана при включённом eager-режиме и loss не является вызываемой функцией.

Совместимость с eager-режимом

Когда eager-режим включён, gate_gradients, aggregation_method, и colocate_gradients_with_ops игнорируются.

get_name

Посмотреть исходный код

get_name()

get_slot

Посмотреть исходный код

get_slot(
    var, name
)

Возвращает слот с именем name, созданный для var оптимизатором.

Некоторые подклассы Optimizer используют дополнительные переменные. Например, Momentum и Adagrad используют переменные для накопления обновлений. Этот метод предоставляет доступ к этим объектам Variable в случае необходимости.

Используйте get_slot_names() для получения списка имён слотов, созданных оптимизатором Optimizer.

Аргументы
var Переменная, переданная в minimize() или apply_gradients().
name Строка.
Возвращаемое значение
Variable для слота, если он был создан, None в противном случае.

get_slot_names

Посмотреть исходный код

get_slot_names()

Возвращает список имён слотов, созданных оптимизатором Optimizer.

См. get_slot().

Возвращаемое значение
Список строк.

minimize

Посмотреть исходный код

minimize(
    loss, global_step=None, var_list=None, gate_gradients=GATE_OP,
    aggregation_method=None, colocate_gradients_with_ops=False, name=None,
    grad_loss=None
)

Добавить операции для минимизации loss путём обновления var_list.

Этот метод просто комбинирует вызовы compute_gradients() и apply_gradients(). Если необходимо обработать градиент перед применением, вызовите compute_gradients() и apply_gradients() явно вместо использования этой функции.

END_OF_DOCUMENT_MARKER
Аргументы
loss Значение, которое требуется минимизировать.
global_step Необязательный параметр, увеличивающий значение на единицу после обновления переменных.
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 Необязательно. Объект Tensor, содержащий градиент, вычисленный для loss.
Возвращаемое значение
Оператор, который обновляет переменные в var_list. Если global_step не был None, этот оператор также увеличивает значение global_step.
Исключения
ValueError Если некоторые переменные не являются объектами Variable.

Совместимость с Eager

При включенном eager выполнении loss должен быть Python-функцией без аргументов, вычисляющей значение для минимизации. Минимизация (и вычисление градиента) выполняется относительно элементов var_list, если оно не None, иначе относительно любых обучаемых переменных, созданных во время выполнения функции loss. gate_gradients, aggregation_method, colocate_gradients_with_ops и grad_loss игнорируются при включенном eager выполнении.

variables

Посмотреть исходный код

variables()

Список переменных, которые кодируют текущее состояние Optimizer.

Включает переменные слотов и дополнительные глобальные переменные, созданные оптимизатором в текущей стандартной графе.

Возвращаемое значение
Список переменных.

Переменные класса

  • GATE_GRAPH = 2
  • GATE_NONE = 0
  • GATE_OP = 1

© 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/ShampooOptimizer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API