10 famous Machine Learning Optimizers
Tags: machinelearning, deeplearning, ai
Published: 2023-03-01 18:52:27

Machine learning (ML) and deep learning are both forms of artificial intelligence (AI) that involve training a model on a dataset to make predictions or decisions. Optimization is an important component of the training process, as it involves finding the optimal set of parameters for the model that can minimize the loss or error on the training data.

Optimizers are algorithms used to find the optimal set of parameters for a model during the training process. These algorithms adjust the weights and biases in the model iteratively until they converge on a minimum loss value.

Some of the famous ML optimizers are listed below -

## 1 - Stochastic Gradient descent

Stochastic Gradient Descent (SGD) is an iterative optimization algorithm commonly used in machine learning and deep learning. It is a variant of gradient descent that performs updates to the model parameters (weights) based on the gradient of the loss function computed on a randomly selected subset of the training data, rather than on the full dataset.

The basic idea of SGD is to sample a small random subset of the training data, called a mini-batch, and compute the gradient of the loss function with respect to the model parameters using only that subset. This gradient is then used to update the parameters. The process is repeated with a new random mini-batch until the algorithm converges or reaches a predefined stopping criterion.

SGD has several advantages over standard gradient descent, such as faster convergence and lower memory requirements, especially for large datasets. It is also more robust to noisy and non-stationary data, and can escape from local minima. However, it may require more iterations to converge than gradient descent, and the learning rate needs to be carefully tuned to ensure convergence.

## 2 - Stochastic Gradient descent with gradient clipping

Stochastic Gradient Descent with gradient clipping (SGD with GC) is a variant of the standard SGD algorithm that includes an additional step to prevent the gradients from becoming too large during training, which can cause instability and slow convergence.

Gradient clipping involves scaling down the gradients if their norm exceeds a predefined threshold. This helps to prevent the "exploding gradient" problem, which can occur when the gradients become too large and cause the weights to update too much in a single step.

In SGD with GC, the algorithm computes the gradients on a randomly selected mini-batch of training examples, as in standard SGD. However, before applying the gradients to update the model parameters, the gradients are clipped if their norm exceeds a specified threshold. This threshold is typically set to a small value, such as 1.0 or 5.0.

The gradient clipping step can be applied either before or after any regularization techniques, such as L2 regularization. It is also common to use adaptive learning rate algorithms, such as Adam, in conjunction with SGD with GC to further improve convergence.

SGD with GC is particularly useful when training deep neural networks, where the gradients can easily become unstable and cause convergence problems. By limiting the size of the gradients, the algorithm can converge faster and with greater stability, leading to improved performance on the test set.

## 3 - Momentum

Momentum is an optimization technique used in machine learning and deep learning to accelerate the training of neural networks. It is based on the idea of adding a fraction of the previous update to the current update of the weights during the optimization process.

In momentum optimization, the gradient of the cost function is computed with respect to each weight in the neural network. Instead of updating the weights directly based on the gradient, momentum optimization introduces a new variable, called the momentum term, which is used to update the weights. The momentum term is a moving average of the gradients, and it accumulates the past gradients to help guide the search direction.

The momentum term can be interpreted as the velocity of the optimizer. The optimizer accumulates momentum as it moves downhill and helps to dampen oscillations in the optimization process. This can help the optimizer to converge faster and to reach a better local minimum.

Momentum optimization is particularly useful in situations where the optimization landscape is noisy or where the gradients change rapidly. It can also help to smooth out the optimization process and prevent the optimizer from getting stuck in local minima.

Overall, momentum is a powerful optimization technique that can help accelerate the training of deep neural networks and improve their performance.


## 4 - Nesterov momentum

Nesterov momentum is a variant of the momentum optimization technique used in machine learning and deep learning to accelerate the training of neural networks. It is named after the mathematician Yurii Nesterov, who first proposed the idea.

In standard momentum optimization, the gradient of the cost function is computed with respect to each weight in the neural network, and the weights are updated based on the gradient and the momentum term. Nesterov momentum optimization modifies this by first updating the weights with a fraction of the previous momentum term and then computing the gradient of the cost function at the new location.

The idea behind Nesterov momentum is that the momentum term can help to predict the next location of the weights, which can then be used to compute a more accurate gradient. This can help the optimizer to take larger steps in the right direction and converge faster than standard momentum optimization.

Nesterov momentum is particularly useful in situations where the optimization landscape is very rugged or where the gradients change rapidly. It can also help to prevent the optimizer from overshooting the optimal solution and can lead to better convergence.

Overall, Nesterov momentum is a powerful optimization technique that can help accelerate the training of deep neural networks and improve their performance, particularly in challenging optimization landscapes.

## 5 - Adagrad

Adagrad (Adaptive Gradient) is an optimization algorithm used in machine learning and deep learning to optimize the training of neural networks.

The Adagrad algorithm adjusts the learning rate of each parameter of the neural network adaptively during the training process. Specifically, it scales the learning rate of each parameter based on the historical gradients computed for that parameter. In other words, parameters that have large gradients are given a smaller learning rate, while those with small gradients are given a larger learning rate. This helps prevent the learning rate from decreasing too quickly for frequently occurring parameters and allows for faster convergence of the training process.

The Adagrad algorithm is particularly useful for dealing with sparse data, where some of the input features have low frequency or are missing. In these cases, Adagrad is able to adaptively adjust the learning rate of each parameter, which allows for better handling of the sparse data.

Overall, Adagrad is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance.

## 6 - Adadelta

Adadelta is an optimization algorithm used in machine learning and deep learning to optimize the training of neural networks. It is a variant of the Adagrad algorithm and addresses some of its limitations.

The Adadelta algorithm adapts the learning rate of each parameter in a similar way to Adagrad, but instead of storing all the past gradients, it only stores a moving average of the squared gradients. This helps to reduce the memory requirements of the algorithm.

Additionally, Adadelta uses a technique called "delta updates" to adjust the learning rate. Instead of using a fixed learning rate, Adadelta uses the ratio of the root mean squared (RMS) of the past gradients and the RMS of the past updates to scale the learning rate. This helps to further prevent the learning rate from decreasing too quickly for frequently occurring parameters.

Like Adagrad, Adadelta is particularly useful for dealing with sparse data, but it may also perform better in situations where Adagrad may converge too quickly.

Overall, Adadelta is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance, while addressing some of the limitations of Adagrad.

## 7 - RMSProp

RMSProp (Root Mean Square Propagation) is an optimization algorithm used in machine learning and deep learning to optimize the training of neural networks.

Like Adagrad and Adadelta, RMSProp adapts the learning rate of each parameter during the training process. However, instead of accumulating all the past gradients like Adagrad, RMSProp computes a moving average of the squared gradients. This allows the algorithm to adjust the learning rate more smoothly, and it prevents the learning rate from decreasing too quickly.

The RMSProp algorithm also uses a decay factor to control the influence of past gradients on the learning rate. This decay factor allows the algorithm to give more weight to recent gradients and less weight to older gradients.

One of the main advantages of RMSProp over Adagrad is that it can handle non-stationary objectives, where the underlying function that the neural network is trying to approximate changes over time. In these cases, Adagrad may converge too quickly, but RMSProp can adapt the learning rate to the changing objective function.

Overall, RMSProp is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance, particularly in situations where the objective function is non-stationary.

## 8 - Adam

Adam (Adaptive Moment Estimation) is an optimization algorithm used in machine learning and deep learning to optimize the training of neural networks.

Adam combines the concepts of both momentum and RMSProp. It maintains a moving average of the gradient's first and second moments, which are the mean and variance of the gradients, respectively. The moving average of the first moment, which is similar to the momentum term in other optimization algorithms, helps the optimizer to continue moving in the same direction even when the gradients become smaller. The moving average of the second moment, which is similar to the RMSProp term, helps the optimizer to scale the learning rate for each parameter based on the variance of the gradients.

Adam also includes a bias correction step to adjust the moving averages since they are biased towards zero at the beginning of the optimization process. This helps to improve the optimization algorithm's performance in the early stages of training.

Adam is a popular optimization algorithm due to its ability to converge quickly and handle noisy or sparse gradients. Additionally, it does not require manual tuning of hyperparameters like the learning rate decay or momentum coefficient, making it easier to use than other optimization algorithms.

Overall, Adam is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance.


## 9 - Adamax

Adamax is a variant of the Adam optimization algorithm used in machine learning and deep learning to optimize the training of neural networks.

Like Adam, Adamax also maintains a moving average of the gradient's first and second moments. However, instead of using the second moment of the gradients as in Adam, Adamax uses the L-infinity norm of the gradients. This is useful in situations where the gradients are very sparse or have a very high variance.

The use of the L-infinity norm in Adamax makes it more stable than Adam when dealing with sparse gradients. Additionally, the absence of the second moment term allows for faster convergence and less memory requirements.

Overall, Adamax is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance, particularly in situations where the gradients are sparse or have a high variance.

## 10 - SMORMS3

SMORMS3 (Squared Mean Over Root Mean Squared Cubed) is an optimization algorithm used in machine learning and deep learning to optimize the training of neural networks. It is a variant of the RMSProp algorithm and was introduced in 2017 by Daniel Fortunato, et al.

SMORMS3 modifies the way the moving average of the squared gradients is calculated in RMSProp. Instead of taking the simple average of the squared gradients, SMORMS3 takes the cube root of the moving average of the cube of the squared gradients. This modification helps to normalize the scale of the moving average, which can prevent the learning rate from decreasing too quickly.

Like RMSProp, SMORMS3 also includes a damping factor that prevents the learning rate from becoming too large. The damping factor is calculated based on the moving average of the squared gradients and ensures that the learning rate is proportional to the inverse square root of the variance of the gradients.

SMORMS3 is particularly useful in situations where the gradients have a high variance, such as in deep neural networks with many layers. It can also help to prevent the learning rate from becoming too small and slowing down the optimization process.

Overall, SMORMS3 is a powerful optimization algorithm that can help accelerate the training of deep neural networks and improve their performance, particularly in situations where the gradients have a high variance.
<hr>


## Pros and Cons of Optimizers

| **Optimizer**                                      | **Pros**                                                                                                                                         | **Cons**                                                                                                                                  |
|----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| Stochastic Gradient Descent (SGD)                  | - Simple to implement and computationally efficient. <br>- Effective for large datasets with high dimensional feature space.                   | - SGD can get stuck in local minima.  <br>- High sensitivity to initial learning rate.                                                   |
| Stochastic Gradient Descent with Gradient Clipping | - Reduces the likelihood of exploding gradients. <br>- Improves training stability.                                                             | - Clipping can mask other problems such as bad initialization or bad learning rates.                                                      |
| Momentum                                           | - Reduces oscillations in the training process. <br>- Faster convergence for ill-conditioned problems.                                           | - Increases the complexity of the algorithm.                                                                                              |
| Nesterov Momentum                                  | - Converges faster than classical momentum. <br>- Can reduce overshooting.                                                                       | - More expensive than classical momentum.                                                                                                 |
| Adagrad                                            | - Adaptive learning rate per parameter. <br>- Effective for sparse data.                                                                         | - Accumulation of squared gradients in the denominator can cause learning rates to shrink too quickly. <br>- Can stop learning too early. |
| Adadelta                                           | - Can adapt learning rates even more dynamically than Adagrad. <br>- No learning rate hyperparameter.                                            | - The learning rate adaptation can be too aggressive, which leads to slow convergence.                                                    |
| RMSProp                                            | - Adaptive learning rate per parameter that limits the accumulation of gradients. <br>- Effective for non-stationary objectives.                 | - Can have a slow convergence rate in some situations.                                                                                    |
| Adam                                               | - Efficient and straightforward to implement. <br>- Applicable to large datasets and high-dimensional models. <br>- Good generalization ability. | - Requires careful tuning of hyperparameters.                                                                                             |
| Adamax                                             |- More robust to high-dimensional spaces. <br>- Performs well in the presence of noisy gradients.                                                  | - Computationally expensive.                                                                                                              |
| SMORMS3                                            | - Good performance on large datasets with high-dimensional spaces. <br>- Stable performance in the presence of noisy gradients.                  | - Computationally expensive.                                                                                                              |


<hr>

In TensorFlow, optimizers are used in conjunction with a CNN model to train the model on a dataset. Here's a sample code snippet that demonstrates how to define and use an optimizer in a TensorFlow CNN model:


```
import tensorflow as tf

# Define a simple CNN model
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D((2, 2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Define the optimizer
optimizer = tf.keras.optimizers.Adam()

# Compile the model with the optimizer and loss function
model.compile(optimizer=optimizer,
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train the model on the dataset
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
```


In this example, we define a simple CNN model with a convolutional layer, a pooling layer, a flatten layer, and a dense layer. We then define the optimizer as Adam and compile the model with the optimizer and the loss function. Finally, we train the model on a dataset of images and labels for 10 epochs. During training, the optimizer adjusts the weights and biases of the model to minimize the loss function and improve the accuracy of the predictions on the validation data.

Keras provides a wide range of optimizers for training neural network models. Here's a list of some of the most commonly used optimizers in Keras:

1. SGD (Stochastic Gradient Descent)
2. RMSprop (Root Mean Square Propagation)
3. Adagrad (Adaptive Gradient Algorithm)
4. Adadelta (Adaptive Delta)
5. Adam (Adaptive Moment Estimation)
6. Adamax (Adaptive Moment Estimation with Infinity Norm)
7. Nadam (Nesterov Adaptive Moment Estimation)