tf.contrib.constrained_optimization.MultiplicativeSwapRegretOptimizer

Class MultiplicativeSwapRegretOptimizer

This ConstrainedOptimizer uses the given tf.train.Optimizers to jointly
minimize over the model parameters, and maximize over constraint/objective
weight matrix (the analogue of Lagrange multipliers), with the latter
maximization using multiplicative updates and an algorithm that minimizes swap
regret.

The formulation used by this optimizer can be found in Definition 2, and is
discussed in Section 4. It is most similar to Algorithm 2 in Section 4, with
the difference being that it uses tf.train.Optimizers, instead of SGD, for
the "inner" updates.

__init__

Args:

optimizer: tf.train.Optimizer, used to optimize the objective and
proxy_constraints portion of ConstrainedMinimizationProblem. If
constraint_optimizer is not provided, this will also be used to optimize
the Lagrange multiplier analogues.

constraint_optimizer: optional tf.train.Optimizer, used to optimize the
Lagrange multiplier analogues.

minimum_multiplier_radius: float, each element of the matrix will be lower
bounded by minimum_multiplier_radius divided by one plus the number of
constraints.

initial_multiplier_radius: float, the initial value of each element of the
matrix associated with a constraint (i.e. excluding those elements
associated with the objective) will be initial_multiplier_radius
divided by one plus the number of constraints. Defaults to the value of
minimum_multiplier_radius.

This method combines the functionality of minimize_unconstrained and
minimize_constrained. If global_step < unconstrained_steps, it will
perform an unconstrained update, and if global_step >= unconstrained_steps,
it will perform a constrained update.

The reason for this functionality is that it may be best to initialize the
constrained optimizer with an approximate optimum of the unconstrained
problem.

Args:

minimization_problem: ConstrainedMinimizationProblem, the problem to
optimize.

unconstrained_steps: int, number of steps for which we should perform
unconstrained updates, before transitioning to constrained updates.