Охота на электроовец. Большая книга искусственного интеллекта
Шрифт:
Несколько слов о самой сети AlexNet. Сеть состоит из пяти двумерных (на самом деле сами тензоры при этом трёхмерные, поскольку к двум пространственным измерениям добавляется ещё наличие трёх цветовых каналов, однако число каналов в изображении равно числу каналов в ядрах свёртки, поэтому сама свёртка является двумерной) свёрточных и трёх полносвязных слоёв. Причём на выходах из первого, второго и пятого слоёв в целях сокращения размерности применяется максимизирующий пулинг [1847] .
1847
Krizhevsky A., Sutskever I., Hinton G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks / Advances in Neural Information Processing Systems 25 (NIPS 2012) // https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
Первая особенность AlexNet, отличающая её от разных версий LeNet, применявшихся на MNIST, заключается в том, что, поскольку сеть должна работать с цветными изображениями, все её свёрточные ядра не двумерные, а трёхмерные. Третьим измерением становится число цветовых каналов, в данном случае три — красный, зелёный и синий [1848] .
1848
Bai K. (2019). A Comprehensive Introduction to Different Types of Convolutions in Deep Learning: Towards intuitive understanding of convolutions through visualizations / Towards Data Science, Feb 12, 2019 // https://towardsdatascience.com/a-comprehensive-introduction-to-different-types-of-convolutions-in-deep-learning-669281e58215
В наши дни для обозначения элемента нейронной сети, выполняющего подобное преобразование, обычно используют аббревиатуру ReLU (rectified linear unit, выпрямляющий линейный блок). Эта функция активации для нейронных сетей была впервые предложена [1849] швейцарским исследователем Рихардом Ханлозером и его коллегами в статье, опубликованной в Nature в 2000 г. В 2011 г. Ксавье Глоро, Антуан Борд и Йошуа Бенджио продемонстрировали [1850] , что использование этой функции активации позволяет более эффективно обучать глубокие нейронные сети по сравнению с более популярными ранее логистической функцией и гиперболическим тангенсом. И в наши дни ReLU остаётся самой популярной функцией активации в глубоких нейронных сетях, хотя с тех пор было изобретено немало [1851] интересных альтернатив, таких, например, как LReLU, CReLU, PReLU, SELU и даже ReLU-6.
1849
Hahnloser R. H. R., Sarpeshkar R., Mahowald M. A., Douglas R. J., Seung S. (2000). Digital selection and analogue amplification coexist in a cortex-inspired silicon circuit / Nature, Vol. 405, pp. 947—951 // https://doi.org/10.1038/35016072
1850
Glorot X., Bordes A., Bengio Y. (2011). Deep Sparse Rectifier Neural Networks. / Journal of Machine Learning Research 15 (2011), pp. 315-323 // https://proceedings.mlr.press/v15/glorot11a/glorot11a.pdf
1851
Liu D. (2017). A Practical Guide to ReLU: Start using and understanding ReLU without BS or fancy equations // https://medium.com/@danqing/a-practical-guide-to-relu-b83ca804f1f7
Мне кажется, что замена логистической функции на ReLU концептуально более всего похожа на выпуск Илоном Маском автомобиля Tesla Cybertruck.
Среди радикальных преимуществ ReLU — вычислительная «дешевизна» этой активационной функции «в стиле панк». Бонусом к ней идёт простота имплементации этой операции на GPU.
Веса AlexNet были инициализированы белым гауссовским шумом, после чего сеть обучалась при помощи стохастического градиентного спуска на двух GPU Nvidia GTX 580 в течение примерно недели [1852] .
1852
Krizhevsky A., Sutskever I., Hinton G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks (Slides) // http://image-net.org/challenges/LSVRC/2012/supervision.pdf
На самом деле, очень многое зависит от того, как именно инициализируются значения синаптических весов.
Казалось бы, почему просто не присваивать весам на старте нулевые значения? Ну или заполнять их случайным образом, не заботясь о параметрах распределения? Оказывается, соотношения значений весов в различных слоях существенно влияют на поведение градиентов при использовании метода обратного распространения ошибки, на их тенденцию исчезать или, напротив, «взрываться». Для того чтобы добиться наиболее благоприятной для последующего обучения ситуации с градиентами, было придумано несколько различных схем инициализации синаптических весов [1853] . Например, инициализация Ксавье [Xavier] (она же инициализация Глоро [Glorot], поскольку названа в честь Ксавье Глоро) [1854] , инициализация Хе [1855] (в честь Каймина Хе), а также инициализация Каймина [Kaiming] (как несложно догадаться, также в честь Каймина Хе, но, в отличие от Глоро, Хе удалось изобрести два разных способа инициализации, поэтому инициализация Хе — это не то же самое, что инициализация Каймина!) [1856] . Разные способы инициализации являются оптимальными в зависимости от различных функций активации, применяемых в слоях нейронной сети [1857] . В наши дни для инициализации синаптических весов искусственных нейронных сетей нередко используют и более «интеллектуальные» алгоритмы, такие, например, как предложенный в 2021 г. GradInit [1858] , который пересчитывает параметры распределения случайных значений в каждом из слоёв сети таким образом, чтобы первый шаг оптимизации привёл к максимальному улучшению значения целевой функции.
1853
Godoy D. (2018). Hyper-parameters in Action! Part II — Weight Initializers / Towards Data Science, Jun 18, 2018 // https://towardsdatascience.com/hyper-parameters-in-action-part-ii-weight-initializers-35aee1a28404
1854
Glorot X., Bengio Y. (2010). Understanding the difficulty of training deep feedforward neural networks / Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, Journal of Machine Learning Research, Vol. 9, pp. 249—256 // http://www.jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
1855
He K., Zhang X., Ren S., Sun J. (2015). Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification / Proceedings of the 2015 IEEE International Conference on Computer Vision (ICCV), pp. 1026—1034 // https://doi.org/10.1109/ICCV.2015.123
1856
Liang X. (2019). Understand Kaiming Initialization and Implementation Detail in PyTorch: Initialization Matters! Know how to set the fan_in and fan_out mode with kaiming_uniform_ function / Towards Data Science, Aug 7, 2019 // https://towardsdatascience.com/understand-kaiming-initialization-and-implementation-detail-in-pytorch-f7aa967e9138
1857
Godoy D. (2018). Hyper-parameters in Action! Part II — Weight Initializers / Towards Data Science, Jun 18, 2018 // https://towardsdatascience.com/hyper-parameters-in-action-part-ii-weight-initializers-35aee1a28404
1858
Zhu C., Ni R., Xu Z., Kong K., Huang W. R., Goldstein T. (2021). GradInit: Learning to Initialize Neural Networks for Stable and Efficient Training // https://arxiv.org/abs/2102.08098
AlexNet
1859
Krizhevsky A., Sutskever I., Hinton G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks / Advances in Neural Information Processing Systems 25 (NIPS 2012) // https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
1860
Krizhevsky A., Sutskever I., Hinton G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks (Slides) // http://image-net.org/challenges/LSVRC/2012/supervision.pdf
1861
Karpathy A. CS231n Convolutional Neural Networks for Visual Recognition (Stanford CS class) // http://cs231n.github.io/convolutional-networks/
1862
Girard R. (2015). How does Krizhevsky's '12 CNN get 253,440 neurons in the first layer? / StackExchange // https://stats.stackexchange.com/questions/132897/how-does-krizhevskys-12-cnn-get-253-440-neurons-in-the-first-layer
Если когда-нибудь столкнётесь с чем-нибудь подобным, ни в коем случае не падайте духом!
Все изображения были также подвергнуты нормализации, для чего из каждой цветовой компоненты каждого пикселя картинки вычиталось среднее значение этой компоненты для всего датасета. Грубо говоря, авторы вычли из каждой конкретной картинки усреднённую картинку.
Для полносвязных слоёв сети при обучении применялась техника так называемого прореживания [dropout]. Суть этого метода заключается в том, что каждый из нейронов с некоторой вероятностью (в данном случае — 50%) отключается, то есть передаёт на выход нулевое значение. Эта методика позволяет обычно получать более устойчивые модели, а также избегать переобучения.
Переобучение [overfitting] — одна из типичных проблем, встречающихся при решении задач машинного обучения. Внешне ситуация выглядит следующим образом. По мере обучения вашей модели величина ошибки на обучающей выборке продолжает падать, однако на тестовой выборке начинает расти. Иногда говорят, что модель заучивает конкретные примеры из обучающей выборки вместо того, чтобы находить признаки, необходимые для успешной классификации. Причина переобучения обычно кроется в чрезмерном количестве параметров модели относительно имеющегося размера обучающей выборки. Исследованию проблемы переобучения посвящено множество работ, а для борьбы с ним, помимо прореживания, разработано множество методик, таких как, например, регуляризация (добавление к целевой функции некоторого штрафа за определённые свойства параметров модели: например, если за каждый ненулевой параметр модели начислять штраф, прямо пропорциональный абсолютному значению этого параметра, то такой метод называется «регуляризация L1», а если штраф пропорционален квадрату параметра, то это уже «регуляризация L2»); ранняя остановка (просто прекращаем обучение модели, если величина ошибки на тестовой выборке начала расти); аугментация (augmentation — увеличение, приумножение) обучающей выборки (дополняем обучающую выборку изображениями, повёрнутыми на некоторые случайные углы, дополненные некоторым шумом или изуродованные ещё каким-либо оригинальным образом, при условии что внесённые искажения не изменят метку класса) и так далее. Переобучению также посвящено множество мемов, популярных в сообществе специалистов по машинному обучению.
6.2.1.3 Предшественники AlexNet
Надо заметить, что AlexNet не была первой свёрточной сетью, для ускорения обучения которой использовались GPU. Более того, победа AlexNet на ILSVRC-2012 не была первой победой такой сети на соревнованиях по распознаванию изображений.
Немного расскажем о предшественниках сети AlexNet и их результатах.
Ещё в 2006 г. Кумар Челлапилла, Сидд Пьюри и Патрис Симар добились примерно четырёхкратного ускорения обучения сети по сравнению с CPU при помощи видеокарты Nvidia GeForce 7800 Ultra. Правда, применение для CPU библиотеки BLAS (basic linear algebra subroutines, базовые подпрограммы линейной алгебры), содержащей оптимизированные на низком уровне процедуры для выполнения операций линейной алгебры, позволяло достичь примерно троекратного прироста скорости и на CPU.
Эксперименты производились на датасетах MNIST и Latin. Последний содержал изображения 94 символов (заглавные и строчные буквы латинского алфавита, цифры, скобки, знаки препинания и арифметических операций, а также некоторые используемые в англоязычных текстах символы). В ходе экспериментов использовались различные размеры изображений, подаваемых на вход сети: 29 x 29, 37 x 37, 61 x 61 [1863] .
В 2009 г. свет увидела работа немецких учёных Фабиана Нассе, Гернота Финка (оба из Технического университета Дортмунда) и Кристиана Турау (из Фраунгоферовского института интеллектуального анализа и информационных систем, Fraunhofer-Institut fur Intelligente Analyse- und Informationssysteme, Fraunhofer IAIS) под названием «Определение лиц при помощи свёрточных нейронных сетей на базе GPU» (Face Detection Using GPU-Based Convolutional Neural Networks). В этой работе авторы использовали приближение гиперболического тангенса при помощи рядов Тейлора и в итоге, применив видеокарту Nvidia GeForce 8800 GT, смогли достичь ускорения обучения по сравнению с CPU в 11–13 раз. Эксперименты были поставлены на собственном датасете, содержавшем 12 000 изображений (на половине из них присутствовали лица). На вход сети подавались изображения размером 32 x 32 пикселя [1864] .
1863
Chellapilla K., Puri S., Simard P. (2006). High performance convolutional neural networks for document processing / International Workshop on Frontiers in Handwriting Recognition, 2006 // https://hal.inria.fr/inria-00112631
1864
Nasse F., Thurau C., Fink G. A. (2009). Face Detection Using GPU-Based Convolutional Neural Networks / International Conference on Computer Analysis of Images and Patterns, CAIP 2009 // https://doi.org/10.1007/978-3-642-03767-2_10