Optimizadores en Tensorflow

Los optimizadores son técnicas o algoritmos que se utilizan para disminuir la pérdida (un error) ajustando varios parámetros y pesos, minimizando así la función de pérdida, proporcionando una mejor precisión del modelo más rápido. 

Optimizadores en Tensorflow

Optimizer es la clase extendida en Tensorflow, que se inicializa con los parámetros del modelo pero no se le asigna ningún tensor. El optimizador básico proporcionado por Tensorflow es: 

tf.train.Optimizer - Tensorflow version 1.x
tf.compat.v1.train.Optimizer - Tensorflow version 2.x

Esta clase nunca se usa directamente, pero se instancian sus subclases.

Algoritmo de descenso de gradiente

Antes de explicar, primero aprendamos sobre el algoritmo sobre el cual se hacen otros, es decir, el descenso de gradiente. El descenso de gradiente vincula los pesos y las funciones de pérdida, ya que el gradiente significa una medida de cambio, el algoritmo de descenso de gradiente determina qué se debe hacer para minimizar las funciones de pérdida utilizando derivadas parciales, como sumar 0,7, restar 0,27, etc. Pero el obstáculo surge cuando se atasca en los mínimos locales en lugar de mínimos globales en el caso de grandes conjuntos de datos multidimensionales. 

Syntax: tf.compat.v1.train.GradientDescentOptimizer(learning_rate, 
                                                    use_locking,
                                                    name = 'GradientDescent)
Parameters: 
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value. 
use_locking: Use locks for update operations if True
name: Optional name for the operation

Clases de optimizadores de Keras de Tensorflow

Tensorflow admite predominantemente 9 clases de optimizador, incluida su clase base (Optimizer).

  • Descenso de gradiente
  • USD
  • adagrad
  • RMSprop
  • Adadelta
  • Adán
  • adamax
  • nadam
  • FTRL

Optimizador SGD (descenso de gradiente estocástico)

El método de optimización de descenso de gradiente estocástico (SGD) ejecuta una actualización de parámetros para cada ejemplo de entrenamiento. En el caso de grandes conjuntos de datos, SGD realiza cálculos redundantes que dan como resultado actualizaciones frecuentes que tienen una gran variación, lo que hace que la función objetivo varíe mucho.  

Syntax: tf.kears.optimizers.SGD(learning_rate = 0.01,
                                momentum=0.0, 
                                nesterov=False, 
                                name='SGD', 
                                **kwargs)
Parameters: 
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.01
momentum: accelerates gradient descent in appropriate
          direction. Float type of value. Default value is 0.0
nesterov: Whether or not to apply Nesterov Momentum.
          Boolean type of value. Default value is False.
name: Optional name for the operation
**kwargs: Keyworded variable length argument length.

ventajas: 

  1. Requiere menos memoria.
  2. Alteración frecuente de los parámetros del modelo.
  3. Si se usa Momentum, entonces ayuda a reducir el ruido.

Desventajas: 

  1. Alta varianza
  2. Costoso computacionalmente

Optimizador de AdaGrad

AdaGrad significa Algoritmo de Gradiente Adaptativo . El optimizador de AdaGrad modifica la tasa de aprendizaje particularmente con características individuales, es decir, algunos pesos en el conjunto de datos pueden tener tasas de aprendizaje separadas que otras. 

Syntax: tf.keras.optimizers.Adagrad(learning_rate=0.001,
                                     initial_accumulator_value=0.1,
                                     epsilon=1e-07,
                                     name="Adagrad",
                                     **kwargs)
Parameters: 
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
initial_accumulator_value: Starting value for the per parameter 
                           momentum. Floating point type of value.
                           Must be non-negative.Default value is 0.1
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07.
name: Optional name for the operation
**kwargs: Keyworded variable length argument length

ventajas:

  1. Más adecuado para conjunto de datos dispersos
  2. Actualizaciones de la tasa de aprendizaje con iteraciones

Desventajas:

  1. La tasa de aprendizaje se vuelve pequeña con un aumento en la profundidad de la red neuronal
  2. Puede resultar en un problema de neuronas muertas

Optimizador RMSprop

RMSprop significa propagación cuadrática media. El optimizador RMSprop no permite que los gradientes se acumulen para generar impulso, sino que solo acumula gradientes en una ventana fija en particular. Se puede considerar como una versión actualizada de AdaGrad con pocas mejoras. RMSprop utiliza un impulso simple en lugar del impulso de Nesterov.

Syntax: tf.keras.optimizers.RMSprop(learning_rate=0.001, 
                                    rho=0.9, 
                                    momentum=0.0, 
                                    epsilon=1e-07, 
                                    centered=False,
                                    name='RMSprop', 
                                    **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
rho: Discounting factor for gradients. Default value is 0.9
momentum: accelerates rmsprop in appropriate direction. 
          Float type of value. Default value is 0.0
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07
centered: By this gradients are normalised by the variance of 
          gradient. Boolean type of value. Setting value to True may
          help with training model however it is computationally 
          more expensive. Default value if False.
name: Optional name for the operation
**kwargs: Keyworded variable length argument length.

ventajas:

  1. La tasa de aprendizaje se ajusta automáticamente.
  2. La tasa de aprendizaje discreta para cada parámetro

Desventaja: aprendizaje lento

Optimizador Adadelta

El optimizador Adaptive Delta (Adadelta) es una extensión de AdaGrad (similar al optimizador RMSprop), sin embargo, Adadelta descartó el uso de la tasa de aprendizaje reemplazándolo con una media móvil exponencial de delta al cuadrado (diferencia entre pesos actuales y actualizados). También trata de eliminar el problema de la tasa de aprendizaje en descomposición.

Syntax: tf.keras.optimizers.Adadelta(learning_rate=0.001, 
                                     rho=0.95, 
                                     epsilon=1e-07, 
                                     name='Adadelta',
                                     **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
rho: Decay rate. Tensor or Floating point type of value.
     Default value is 0.95
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07
name: Optional name for the operation
**kwargs: Keyworded variable length argument length

Ventaja: No es necesario establecer la tasa de aprendizaje predeterminada.

Desventaja: Computacionalmente caro

Adam optimizador

La estimación adaptativa del momento (Adam) es una de las técnicas de optimización más utilizadas en la actualidad. En este método, se calcula la tasa de aprendizaje adaptativo para cada parámetro. Este método combina las ventajas tanto de RMSprop como del impulso, es decir, almacena el promedio decreciente de los gradientes anteriores y los gradientes previamente cuadráticos. 

Syntax: tf.keras.optimizers.Adam(leaarning_rate=0.001, 
                                 beta_1=0.9, 
                                 beta_2=0.999, 
                                 epsilon=1e-07, 
                                 amsgrad=False,
                                 name='Adam', 
                                 **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
beta_1: Exponential decay rate for 1st moment. Constant Float 
        tensor or float type of value. Default value is 0.9
beta_2: Exponential decay rate for 2nd moment. Constant Float 
        tensor or float type of value. Default value is 0.999
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07
amsgrad: Whether to use AMSGrad variant or not. 
         Default value is False.
name: Optional name for the operation
**kwargs: Keyworded variable length argument length

ventajas:

  1. Fácil implementación
  2. Requiere menos memoria
  3. Computacionalmente eficiente

Desventajas:

  1. Puede tener problemas de pérdida de peso
  2. A veces puede no converger a una solución óptima

Optimizador de AdaMax

AdaMax es una alteración del optimizador de Adam. Se basa en la aproximación adaptativa de momentos de bajo orden (basada en la norma infinita). A veces, en el caso de las incorporaciones, AdaMax se considera mejor que Adam. 

Syntax: tf.keras.optimizers.Adamax(learning_rate=0.001, 
                                   beta_1=0.9, 
                                   beta_2=0.999, 
                                   epsilon=1e-07,
                                   name='Adamax', 
                                   **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
beta_1: Exponential decay rate for 1st moment. Constant Float 
        tensor or float type of value. Default value is 0.9
beta_2: Exponential decay rate for weighted infinity norm. 
        Constant Float tensor or float type of value. 
        Default value is 0.999
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07
name: Optional name for the operation
**kwargs: Keyworded variable length argument length

ventajas: 

  1. El orden infinito hace que el algoritmo sea estable.
  2. Requiere menos ajuste en hiperparámetros

Desventaja: problema de generalización

Optimizador NAdam

NAdam es una forma abreviada de Nesterov y Adam Optimizer. NAdam utiliza el impulso de Nesterov para actualizar el gradiente que el impulso de vainilla utilizado por Adam. 

Syntax: tf.keras.optimizers.Nadam(learning_rate=0.001, 
                                  beta_1=0.9, 
                                  beta_2=0.999, 
                                  epsilon=1e-07,
                                  name='Nadam', 
                                  **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
beta_1: Exponential decay rate for 1st moment. Constant Float 
        tensor or float type of value. Default value is 0.9
beta_2: Exponential decay rate for weighted infinity norm. 
        Constant Float tensor or float type of value. 
        Default value is 0.999
epsilon: Small value used to sustain numerical stability. 
         Floating point type of value. Default value is 1e-07
name: Optional name for the operation
**kwargs: Keyworded variable length argument length

ventajas: 

  1. Da mejores resultados para gradientes con alta curvatura o gradientes ruidosos.
  2. Aprende más rápido

Desventaja: A veces puede no converger a una solución óptima 

Optimizador FTRL

Follow The Regularized Leader (FTRL) es un algoritmo de optimización más adecuado para modelos poco profundos que tienen espacios de características escasos y grandes. Esta versión es compatible tanto con la regularización L2 de tipo contracción (suma de la función de penalización y pérdida L2) como con la regularización L2 en línea.  

Syntax: tf.keras.optimizers.Ftrl(learning_rate=0.001, 
                                 learning_rate_power=-0.5, 
                                 initial_accumulator_value=0.1,
                                 l1_regularization_strength=0.0, 
                                 l2_regularization_strength=0.0,
                                 name='Ftrl', 
                          l2_shrinkage_regularization_strength=0.0, 
                                 beta=0.0,
                                 **kwargs)
Parameters:
learning_rate: rate at which algorithm updates the parameter. 
               Tensor or float type of value.Default value is 0.001
learning_rate_power: Controls the drop in learning rate during 
                     training. Float type of value. Should be less
                     than or equal to 0. Default value is -0.5.
initial_accumulator_value: Initial value for accumulator. Value
                           should be greater than or equal to zero.
                           Default value is 0.1.
l1_regularization_strength:Stabilization penalty.
                           Only positive values or 0 is allowed.
                           Float type of value.Default value is 0.0 
l2_regularization_strength: Stabiliztion Penalty.
                            Only positive values or 0 is allowed.
                               Float type of value.Default value is 0.0
name: Optional name for the operation
l2_shrinkage_regularization_strength: Magnitude Penalty.
                           Only positive values or 0 is allowed.
                           Float type of value.Default value is 0.0 
beta: Default float value is 0.0
**kwargs: Keyworded variable length argument length

Ventaja: puede minimizar mejor la función de pérdida.

Desventajas:

  1. No se puede lograr una estabilidad adecuada si el rango del regularizador es insuficiente.
  2. Si el rango del regularizador es enorme, entonces está lejos de ser la decisión óptima.

Publicación traducida automáticamente

Artículo escrito por vibhutijain99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *