На сегодняшний день для обучения нейронных сетей нет ничего лучше алгоритма обратного распространения ошибки, использующего градиентный спуск для уменьшения целевой функции. В его обычном варианте он сходится довольно долго, из-за чего приходится тратить много времени для достижения наилучшей точности обучения, а самое главное, обычный градиентный спуск очень любит застревать в локальных минимумах, так и не найдя оптимального положения.
Побороть эту проблему помогают различные методы оптимизации градиентного спуска, которых в 2019 году насчитывается около десяти. Некоторые из них используют момент импульса для выхода из локальных минимумов, некоторые делают упор на адаптивную скорость обучения, а некоторые комбинируют всё и сразу. Решить, какой именно алгоритм подойдёт для конкретной задачи довольно проблематично, поэтому приходится экспериментировать и пробовать один за другим.
Если вам интересно посмотреть, как работают эти алгоритмы, то воспользуйтесь простым визуализатором градиентного спуска на этой странице. Он позволяет выбрать один из десяти алгоритмов оптимизации и найти экстремум одной из четырёх функций двух переменных: