Охота на электроовец. Большая книга искусственного интеллекта
Шрифт:
Важной особенностью алгоритмов оптимизации является выбор множества прецедентов, используемых для расчёта ошибки. Ошибка может быть рассчитана на всём множестве прецедентов обучающей выборки. Но в этом случае количество прецедентов очень велико и вычислительный граф, используемый для представления получившейся в итоге циклопической функции ошибки, оказывается слишком большим. В результате он может просто не вместиться в оперативную память машины, что приведёт к фатальному замедлению процесса обучения.
Другой крайностью может быть использование для расчёта ошибки случайно выбранного единичного прецедента из обучающей выборки. Но в этом случае полученное значение ошибки может слабо коррелировать с величиной ошибки на всей выборке в целом — обобщения, основанные лишь на одном примере, чаще всего являются некорректными. Кроме того, современные вычислительные машины устроены таким образом, что многие вычисления они более эффективно производят «оптом». Как и в промышленном производстве, эти современные вычислительные фабрики обеспечивают более низкую себестоимость единицы продукции тогда, когда их производственные мощности загружены на 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.
1415
* На деле, конечно, псевдослучайным, поскольку источниками «случайности» чаще всего являются генераторы псевдослучайных чисел.
1416
Robbins H., Monro S. (1951). A Stochastic Approximation Method. / Annals of Mathematical Statistics, Vol. 22, Iss. 3, pp. 400—407, September, 1951 // https://doi.org/10.1214/aoms/1177729586
1417
Kiefer J., Wolfowitz J. (1952). Stochastic Estimation of the Maximum of a Regression Function. / Annals of Mathematical Statistics, Vol. 23, Iss. 3, September, 1952, pp. 462—466 // https://doi.org/10.1214/aoms/1177729392
1418
Rumelhart D. E., Hinton G. E., Williams R. J. (1986). Learning representations by back-propagating errors / Nature, 323(6088), pp. 533–536 // https://doi.org/10.1038/323533a0
1419
Поляк Б. Т. (1964). О некоторых способах ускорения сходимости итерационных методов. / Журнал вычислительной математики и математической физики, том 4, номер 5, 1964, с. 791—803 // https://www.mathnet.ru/rus/zvmmf7713
1420
Polyak B. T. (1964). Some methods of speeding up the convergence of iteration methods. / USSR Computational Mathematics and Mathematical Physics, Vol. 4, Iss. 5, 1964, pp. 1—17 //90137-5
В наши дни для обучения нейронных сетей применяется множество различных алгоритмов стохастического градиентного спуска: 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] .
1421
Duchi J., Hazan E., Singer Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. / Journal of Machine Learning Research 12 (2011) 2121-2159 // https://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf
1422
Zeiler M. D. (2012). ADADELTA: An Adaptive Learning Rate Method // https://arxiv.org/abs/1212.5701
1423
Tieleman T., Hinton G. (2012). Lecture 6.5 - rmsprop: Divide the gradient by a running average of its recent magnitude // https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf
1424
Kingma D. P., Ba J. (2014). Adam: A Method for Stochastic Optimization // https://arxiv.org/abs/1412.6980
1425
Dozat T. (2016). Incorporating nesterov momentum into Adam. / In International Conference on Learning Representations Workshops, 2016 // https://cs229.stanford.edu/proj2015/054_report.pdf
1426
Loshchilov I., Hutter F. (2017). Decoupled Weight Decay Regularization // https://arxiv.org/abs/1711.05101
1427
Xie X., Zhou P., Li H., Lin Z., Yan S. (2022). Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models // https://arxiv.org/abs/2208.06677
1428
Zimmer M. F. (2020). Neograd: Near-Ideal Gradient Descent // https://arxiv.org/abs/2010.07873
1429
Ginsburg B., Castonguay P., Hrinchuk O., Kuchaiev O., Lavrukhin V., Leary R., Li J., Nguyen H., Zhang Y., Cohen J. M. (2019). Stochastic Gradient Methods with Layer-wise Adaptive Moments for Training of Deep Networks // https://arxiv.org/abs/1905.11286
1430
Xie Z., Wang X., Zhang H., Sato I., Sugiyama M. (2020). Adai: Separating the Effects of Adaptive Learning Rate and Momentum Inertia // https://arxiv.org/abs/2006.15815
1431
Gupta V., Koren T., Singer Y. (2018). Shampoo: Preconditioned Stochastic Tensor Optimization // https://arxiv.org/abs/1802.09568
1432
Anil R., Gupta V., Koren T., Regan K., Singer Y. (2021). Scalable Second Order Optimization for Deep Learning // https://arxiv.org/abs/2002.09018
1433
Liu H., Li Z., Hall D., Liang P., Ma T. (2023). Sophia: A Scalable Stochastic Second-order Optimizer for Language Model Pre-training // https://arxiv.org/abs/2305.14342
1434
Chen X., Liang C., Huang D., Real E., Wang K., Liu Y., Pham H., Dong X., Luong T., Hsieh C.-J., Lu Y., Le Q. V. (2023). Symbolic Discovery of Optimization Algorithms // https://arxiv.org/abs/2302.06675
1435
Schmidt R. M., Schneider F., Hennig P. (2020). Descending through a Crowded Valley - Benchmarking Deep Learning Optimizers // https://arxiv.org/abs/2007.01547
Выбор наилучшего оптимизатора сильно зависит от особенностей конкретной задачи, и, к сожалению, не существует универсального рецепта на все случаи жизни. Кроме того, успех оптимизации может сильно зависеть от выбора начальной точки (или множества начальных точек), поэтому отдельным важным вопросом является вопрос об инициализации весов нейронной сети. В начале процесса обучения сети её веса обычно инициализируют псевдослучайными значениями, но какими должны быть параметры распределения этих значений? Должны ли они быть одинаковыми во всех слоях или же должны каким-то образом зависеть от глубины слоя? Как это ни странно, от ответа на этот, казалось бы, второстепенный вопрос в действительности зависит многое.
5.2.4 Глубокое обучение: многослойные нейронные сети с регулярной структурой
Генетический код не определяет и не может определять природу и положение каждого капилляра в организме или каждого нейрона в мозге. Что он может сделать, так это описать базовый фрактальный паттерн, который их создаёт.
Трудно в наши дни найти человека, который хотя бы раз не слышал термин «глубокое обучение». Популярность этого понятия так велика, что оно, казалось бы, не требует определения, все и так знают, что глубокое обучение — это область машинного обучения, основанная на применении глубоких нейронных сетей. Но что такое «глубокая нейронная сеть»? На каком количестве слоёв заканчиваются неглубокие и начинаются глубокие сети? Вопрос этот не менее сложен, чем вопрос, с какого количества зёрен начинается куча.
Дальше — больше. Считаем ли мы слоями именно слои нейронов или же слои синаптических связей, содержащих параметры модели? И если второе, то должны ли эти слои всенепременно содержать обучаемые параметры? Вспомним перцептрон Mark I Фрэнка Розенблатта, в котором было три слоя нейронов (S, A, R) и два слоя синаптических связей: S—A и A—R, из которых связи A—R были обучаемыми, а связи S—A настраивались вручную. И наконец, можно ли считать нейронными сетями модели, в основе которых лежат не «классические» нейроны со взвешенным суммированием входов и последующей подстановкой суммы в функцию активации, а какие-нибудь «неклассические» элементы, например элементы, основанные на полиномах Колмогорова — Габора, как в методе учёта групповых аргументов Ивахненко? В зависимости от ответов на эти вопросы родоначальниками глубокого обучения можно считать и Мак-Каллока с Питтсом, и Эшби, и Розенблатта, и Уидроу, и даже Хинтона с Румельхартом. Как часто бывает, в некоторой «пограничной» зоне даже общепринятые термины порой становятся ненадёжными из-за некоторой размытости их границ. Конечно, сеть с двумя слоями нейронов (S и R) и одним слоем синаптических связей никто не назовёт глубокой, и, конечно же, современная нейросетевая архитектура с десятками или даже сотнями слоёв, безусловно, является глубокой, но весьма сложно провести чёткую формальную границу, отделяющую глубокие сети от неглубоких.
Не добавляет ясности и история происхождения самого термина. Впервые он появился в работе [1436] израильской исследовательницы Рины Дехтер в 1986 г. Проблема, правда, заключается в том, что использован он был хотя и в контексте машинного обучения, но не по отношению к нейросетевым моделям. В работе Дехтер рассматриваются задачи поиска решения, удовлетворяющего некоторым ограничениям (constraint-satisfaction-problems, CSP), при этом способом решения является перебор вариантов. Deep learning — название, которое автор работы дала одной из разновидностей этого перебора. В 1980-е и 1990-е гг. слово deep в мире ИИ принадлежало скорее к области переборных алгоритмов — появившись в названии Deep Thought (затем Deep Blue), оно быстро утвердилось как приставка в названии шахматных программ, использовавших параллельные вычисления (Deep Fritz, Deep Shredder, Deep Junior и т. д.).
1436
Dechter R. (1986). Learning While Searching in Constraint-Satisfaction-Problems / Proceedings of the 5th National Conference on Artificial Intelligence. Philadelphia, PA, August 11—15, 1986, Vol. 1: Science // https://www.researchgate.net/publication/221605378_Learning_While_Searching_in_Constraint-Satisfaction-Problems
Широко распространено мнение [1437] , [1438] , [1439] , что первое применение определения «глубокий» в отношении искусственных нейронных сетей (и/или их обучения) относится к 2000 г., когда свет увидела книга «Многоуровневые и универсальные бинарные нейроны» (Multi-Valued and Universal Binary Neurons. Theory, Learning and Applications) [1440] , написанная Игорем Айзенбергом, Наумом Айзенбергом и Йосом Вандевалле. Однако, по моему мнению, в данном случае речь вовсе не идёт о глубоких нейросетевых моделях. Судите сами, вот как выглядит фрагмент, в котором современные историки нейронных сетей видят первое упоминание глубокого обучения: «1960-е — интенсивное развитие пороговой логики, начало которому было положено предшествующими результатами в теории перцептронов. Глубокое изучение свойств пороговых булевских функций, как одних из наиболее важных объектов, рассматриваемых теорией перцептронов и нейронных сетей» [1960-s — intensive development of the threshold logic, initiated by previous results in perceptron theory. A deep learning of the features of threshold Boolean functions, as one of the most important objects considered in the theory of perceptrons and neural networks]. Далее в качестве примеров этого «глубокого изучения» идут ссылки на монографии Дертоузоса [1441] и Муроги [1442] , в которых действительно исследуются вопросы синтеза схем, построенных из пороговых элементов (аналогичных нейронам перцептрона Розенблатта). В этих забытых образчиках исследований времён первой коннекционистской весны действительно можно найти некоторые архитектуры, которые можно было бы отнести к глубоким нейронным сетям. Например, на рисунке ниже показана любопытная архитектура, рассматриваемая в монографии Дертоузоса, — так называемая порогово-каскадная сеть (Threshold-Cascade Network).
1437
Kelleher J. D. (2019). Deep Learning. MIT Press // https://books.google.ru/books?id=ZU6qDwAAQBAJ
1438
Kharlamov A., Pilgun M. (2020). Neuroinformatics and Semantic Representations: Theory and Applications. Cambridge Scholars Publishing // https://books.google.ru/books?id=jEfhDwAAQBAJ
1439
Jain V. K. (2019). Machine Learning. Khanna Publishing House // https://books.google.ru/books?id=c6YEEAAAQBAJ
1440
Aizenberg I. N., Aizenberg N. N., Vandewalle J. (2000). Multi-Valued and Universal Binary Neurons: Theory, Learning and Applications. Springer Science & Business Media // https://books.google.ru/books?id=g9LlraAp2-8C
1441
Dertouzos M. L. (1965). Threshold Logic: A Synthesis Approach. M.I.T. Press // https://books.google.ru/books?id=u2ZqQgAACAAJ
1442
Muroga S. (1971). Threshold Logic and Its Applications. John Wiley & Sons, New York // https://books.google.ru/books?id=wvtQAAAAMAAJ
Сигналы входов этой сети транслируются сразу во все её слои. Эти «перепрыгивающие» соединения роднят порогово-каскадную сеть с некоторыми современными нейросетевыми архитектурами, однако в каждом слое порогово-каскадной сети есть всего один нейрон. В целом работы Дертоузоса и Муроги посвящены детальному анализу свойств сетей (при помощи весьма оригинальных математических методов, таких, например, как спектральный анализ), состоящих из одного или крайне небольшого числа элементов. Хотя некоторые из изученных в вышеозначенных работах архитектур можно отнести к многослойным нейронным сетям, внимательное чтение «Многоуровневых и универсальных бинарных нейронов» позволяет понять, что авторы этой книги не пытались ни ввести новое понятие, ни сказать, что работы Дертоузоса и Муроги стали началом нового направления. Напротив, авторы повторяют широко распространённое заблуждение о том, что Минский и Пейперт в «Перцептронах» указали на наличие ограничений у «однослойных» перцептронов и что в результате одним из направлений дальнейшего развития искусственных нейронных сетей стало создание многослойных перцептронов. Это выглядит вдвойне странно, если учесть, что монография Дертоузоса была написана за четыре года до книги Минского и Пейперта. Словом, ни «Многоуровневые и универсальные бинарные нейроны», ни тем более работа Дины Рехтер не имеют отношения к появлению термина «глубокое обучение» в его современном значении. Но тогда возникает вопрос: кто и когда на самом деле ввёл в оборот это понятие?
По всей видимости, первенство здесь принадлежит Джеффри Хинтону и его коллегам. В 2006 г. в своих работах [1443] , [1444] они используют термины «глубокий автокодировщик» [deep autoencoder], «глубокая сеть» [deep network], а также вводят в оборот новую модель — «глубокие сети доверия» (Deep Belief Networks, DBN). Интересно, что в том же году авторы статьи «Цифровая многослойная нейронная сеть, устойчивая к сбоям множества весов и нейронов» (A Multiple-Weight-and-Neuron-Fault Tolerant Digital Multilayer Neural Network) [1445] Тадаёси Хорита, Такуроу Мурата и Ицуо Таканами используют в ней термин «метод глубокого обучения» [deep learning method] в качестве названия для созданного ими алгоритма обучения многослойных нейронных сетей. Термин «глубокое обучение» окончательно утвердился в среде специалистов по нейронным сетям только с выходом в 2016 г. одноимённой статьи [1446] в журнале Nature. Словом, несмотря на то что сами многослойные искусственные нейронные сети были известны уже давно, понятие «глубокое обучение» является довольно молодым. Вообще, идея, что для решения сложных задач ИИ, по всей видимости, нужно стремиться к созданию больших многослойных сетей, была очевидна ещё на заре коннекционизма — решение подсказывала сама природа. Однако проблема заключалась в том, чтобы научиться эффективно обучать такие сети. В первую очередь стоял вопрос о том, как нужно изменить сами многослойные сети, чтобы сделать их обучаемыми.
1443
Hinton G. E., Salakhutdinov R. R. (2006). Reducing the Dimensionality of Data with Neural Networks / Science. — 2006-07-28. — Vol. 313, iss. 5786, pp. 504–507 // https://dx.doi.org/10.1126%2Fscience.1127647
1444
Hinton G. E., Osindero S. (2006). A fast learning algorithm for deep belief nets // http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf
1445
Horita T., Murata T., Takanami I. (2006). A Multiple-Weight-and-Neuron-Fault Tolerant Digital Multilayer Neural Network / 2006 21st IEEE International Symposium on Defect and Fault Tolerance in VLSI Systems // https://doi.org/10.1109/DFT.2006.8
1446
LeCun Y., Bengio Y., Hinton G. (2015). Deep learning / Nature, Vol. 521, pp. 436—444 // https://doi.org/10.1038/nature14539
Среди шутливых хакерских коанов есть один, в котором упоминаются одновременно Марвин Минский и нейронные сети:
Однажды, когда Сассман, будучи ещё простым послушником, сидел за терминалом PDP-6, к нему подошёл Минский.
— Что ты делаешь? — спросил Минский.
— Я обучаю случайно соединённую нейронную сеть играть в крестики-нолики, — ответил Сассман.
— А почему твоя сеть соединена случайным образом? — поинтересовался Минский.