def gradient_descent(grads, var_list, lr):
    """Gradient descent update.

    Args:
        grads: List of gradients of the trainable variables.
        var_list: List of variables to be optimized.
        lr: Learning rate.

    Returns:
        var_list_new: List of new variables to be assigned.
    """
    return [var - lr * grad for grad, var in list(zip(grads, var_list))]