Шрифт:
Интервал:
Закладка:
Важной особенностью алгоритмов оптимизации является выбор множества прецедентов, используемых для расчёта ошибки. Ошибка может быть рассчитана на всём множестве прецедентов обучающей выборки. Но в этом случае количество прецедентов очень велико и вычислительный граф, используемый для представления получившейся в итоге циклопической функции ошибки, оказывается слишком большим. В результате он может просто не вместиться в оперативную память машины, что приведёт к фатальному замедлению процесса обучения.
Другой крайностью может быть использование для расчёта ошибки случайно выбранного единичного прецедента из обучающей выборки. Но в этом случае полученное значение ошибки может слабо коррелировать с величиной ошибки на всей выборке в целом — обобщения, основанные лишь на одном примере, чаще всего являются некорректными. Кроме того, современные вычислительные машины устроены таким образом, что многие вычисления они более эффективно производят «оптом». Как и в промышленном производстве, эти современные вычислительные фабрики обеспечивают более низкую себестоимость единицы продукции тогда, когда их производственные мощности загружены на 100%. Поэтому на деле данные обучающей выборки обычно «скармливаются» нейронной сети в виде пакетов, содержащих в себе случайные подмножества прецедентов. Такие пакеты называют «мини-батчами» [mini batch] или просто «батчами». Случайное разбиение обучающей выборки на батчи, а также случайный порядок обработки батчей позволяют алгоритмам оптимизации более эффективно справляться с проблемой локальных минимумов, чем в случае с расчётом градиента на базе всей обучающей выборки. Даже если в ходе оптимизации мы оказались в таком минимуме, всегда есть шанс, что текущая точка уже не будет таким локальным минимумом для другого батча. Оптимальный размер батча зависит от конкретной задачи оптимизации, в частности от степени однородности данных в обучающей выборке (чем однороднее данные, тем величина ошибки для случайно отобранного батча будет более точным приближением для величины ошибки на всей обучающей выборке). Некоторые современные алгоритмы оптимизации могут использовать при обучении переменный размер батча, в ряде случаев это позволяет улучшить сходимость. Поскольку батч, используемый на очередном шаге оптимизации, выбирается случайным образом[1415], то алгоритмы, использующие данный подход, относятся к числу методов «стохастического градиентного спуска» (Stochastic Gradient Descent, SGD). Наиболее ранними алгоритмами данного семейства стали алгоритмы Роббинса — Монро (Robbins—Monro)[1416] и Кифера — Вольфовитца (Kiefer—Wolfowitz)[1417], созданные соответственно в 1951 и 1952 гг., разумеется, безо всякой связи с нейронными сетями. С 1960-х гг. различные варианты SGD использовались для обучения линейных регрессионных моделей, а с 1980-х — для обучения искусственных нейронных сетей. В уже упомянутой нами статье Румельхарта, Хинтона и Уильямса 1986 г.[1418] содержатся предложения об усовершенствовании стохастического градиентного спуска путём добавления так называемого момента, или, как правильнее было бы сказать по-русски, импульса (от англ. momentum — импульс). Это дополнение часто называют также методом тяжёлого шара, что отсылает нас к интуитивно понятному примеру из физического мира. Представим себе процесс оптимизации как качение массивного шара по поверхности целевой функции. Скатываясь вниз в направлении уклона, наш шар будет по инерции проскакивать локальные минимумы, поскольку обладает некоторым импульсом. Эту идею классики машинного обучения позаимствовали из написанной в 1964 г. статьи[1419], [1420] советского математика Бориса Поляка, посвящённой решению функциональных уравнений. Данный подход был позже доработан советским и бельгийским математиком Юрием Нестеровым и сегодня является частью многих современных вариантов SGD.
В наши дни для обучения нейронных сетей применяется множество различных алгоритмов стохастического градиентного спуска: AdaGrad[1421], ADADELTA[1422], RMSProp[1423], Adam[1424], Nadam[1425], AdamW[1426], Adan[1427], Neograd[1428], NovoGrad[1429], Adai[1430], Shampoo[1431], Distributed Shampoo[1432], Sophia[1433], Lion[1434] и так далее. Их количество сегодня уже перевалило за сотню[1435].
Выбор наилучшего оптимизатора сильно зависит от особенностей конкретной задачи, и, к сожалению, не существует универсального рецепта на все случаи жизни. Кроме того, успех оптимизации может сильно зависеть от выбора начальной точки (или множества начальных точек), поэтому отдельным важным вопросом является вопрос об инициализации весов нейронной сети. В начале процесса обучения сети её веса обычно инициализируют псевдослучайными значениями, но какими должны быть параметры распределения этих значений? Должны ли они быть одинаковыми во всех слоях или же должны каким-то образом зависеть от глубины слоя? Как это ни странно, от ответа на этот, казалось бы, второстепенный вопрос в действительности зависит многое.
5.2.4 Глубокое обучение: многослойные нейронные сети с регулярной структурой
Генетический код не определяет и не может определять природу и положение каждого капилляра в организме или каждого нейрона в мозге. Что он может сделать, так это описать базовый фрактальный паттерн, который их создаёт.
Академик Прохор Захаров. Нелинейная генетика
Трудно в наши дни найти человека, который хотя бы раз не слышал термин «глубокое обучение». Популярность этого понятия так велика, что оно, казалось бы, не требует определения, все и так знают, что глубокое обучение — это область машинного обучения, основанная на применении глубоких нейронных сетей. Но что такое «глубокая нейронная сеть»? На каком количестве слоёв заканчиваются неглубокие и начинаются глубокие сети? Вопрос этот не менее сложен, чем вопрос, с какого количества зёрен начинается куча.
Дальше — больше. Считаем ли мы слоями именно слои нейронов или же слои синаптических связей, содержащих параметры модели? И если второе, то должны ли эти слои всенепременно содержать обучаемые параметры? Вспомним перцептрон Mark I Фрэнка Розенблатта, в котором было три слоя нейронов (S, A, R) и два слоя синаптических связей: S—A и A—R, из которых связи A—R были обучаемыми, а связи S—A настраивались вручную. И наконец, можно ли считать нейронными сетями модели, в основе которых лежат не «классические» нейроны со взвешенным суммированием входов и последующей подстановкой суммы в функцию активации, а какие-нибудь «неклассические» элементы, например элементы, основанные на полиномах Колмогорова — Габора, как в методе учёта групповых аргументов Ивахненко? В зависимости от ответов на эти вопросы родоначальниками глубокого обучения можно считать и Мак-Каллока с Питтсом, и Эшби, и Розенблатта, и Уидроу, и даже Хинтона с Румельхартом. Как часто бывает, в некоторой «пограничной» зоне даже общепринятые термины порой становятся ненадёжными из-за некоторой размытости их границ. Конечно, сеть с двумя слоями нейронов (S и R) и одним слоем