Шрифт:
Интервал:
Закладка:
В ответ создатели Tiny Images попросили других исследователей не использовать этот датасет для дальнейших исследований и удалить свои копии набора данных[1843], [1844], [1845], [1846]. К счастью, датасеты CIFAR при создании подвергались дополнительной фильтрации, поэтому изъятие Tiny Images из оборота на них не повлияло.
Несколько слов о самой сети AlexNet. Сеть состоит из пяти двумерных (на самом деле сами тензоры при этом трёхмерные, поскольку к двум пространственным измерениям добавляется ещё наличие трёх цветовых каналов, однако число каналов в изображении равно числу каналов в ядрах свёртки, поэтому сама свёртка является двумерной) свёрточных и трёх полносвязных слоёв. Причём на выходах из первого, второго и пятого слоёв в целях сокращения размерности применяется максимизирующий пулинг[1847].
Рис. 118. Схема сети AlexNet
Первая особенность AlexNet, отличающая её от разных версий LeNet, применявшихся на MNIST, заключается в том, что, поскольку сеть должна работать с цветными изображениями, все её свёрточные ядра не двумерные, а трёхмерные. Третьим измерением становится число цветовых каналов, в данном случае три — красный, зелёный и синий[1848]. Вторая интересная особенность AlexNet — использование в качестве функции активации: f(x) = max(0,x). По-английски такая функция называется rectifier — выпрямитель.
В наши дни для обозначения элемента нейронной сети, выполняющего подобное преобразование, обычно используют аббревиатуру ReLU (rectified linear unit, выпрямляющий линейный блок). Эта функция активации для нейронных сетей была впервые предложена[1849] швейцарским исследователем Рихардом Ханлозером и его коллегами в статье, опубликованной в Nature в 2000 г. В 2011 г. Ксавье Глоро, Антуан Борд и Йошуа Бенджио продемонстрировали[1850], что использование этой функции активации позволяет более эффективно обучать глубокие нейронные сети по сравнению с более популярными ранее логистической функцией и гиперболическим тангенсом. И в наши дни ReLU остаётся самой популярной функцией активации в глубоких нейронных сетях, хотя с тех пор было изобретено немало[1851] интересных альтернатив, таких, например, как LReLU, CReLU, PReLU, SELU и даже ReLU-6.
Мне кажется, что замена логистической функции на ReLU концептуально более всего похожа на выпуск Илоном Маском автомобиля Tesla Cybertruck.
Среди радикальных преимуществ ReLU — вычислительная «дешевизна» этой активационной функции «в стиле панк». Бонусом к ней идёт простота имплементации этой операции на GPU.
Рис. 119. Различные функции активации
Веса AlexNet были инициализированы белым гауссовским шумом, после чего сеть обучалась при помощи стохастического градиентного спуска на двух GPU Nvidia GTX 580 в течение примерно недели[1852].
На самом деле, очень многое зависит от того, как именно инициализируются значения синаптических весов.
Казалось бы, почему просто не присваивать весам на старте нулевые значения? Ну или заполнять их случайным образом, не заботясь о параметрах распределения? Оказывается, соотношения значений весов в различных слоях существенно влияют на поведение градиентов при использовании метода обратного распространения ошибки, на их тенденцию исчезать или, напротив, «взрываться». Для того чтобы добиться наиболее благоприятной для последующего обучения ситуации с градиентами, было придумано несколько различных схем инициализации синаптических весов[1853]. Например, инициализация Ксавье [Xavier] (она же инициализация Глоро [Glorot], поскольку названа в честь Ксавье Глоро)[1854], инициализация Хе[1855] (в честь Каймина Хе), а также инициализация Каймина [Kaiming] (как несложно догадаться, также в честь Каймина Хе, но, в отличие от Глоро, Хе удалось изобрести два разных способа инициализации, поэтому инициализация Хе — это не то же самое, что инициализация Каймина!)[1856]. Разные способы инициализации являются оптимальными в зависимости от различных функций активации, применяемых в слоях нейронной сети[1857]. В наши дни для инициализации синаптических весов искусственных нейронных сетей нередко используют и более «интеллектуальные» алгоритмы, такие, например, как предложенный в 2021 г. GradInit[1858], который пересчитывает параметры распределения случайных значений в каждом из слоёв сети таким образом, чтобы первый шаг оптимизации привёл к максимальному улучшению значения целевой функции.
AlexNet содержит порядка 650 000 искусственных нейронов, примерно 630 млн соединений между ними и около 60 млн параметров[1859], [1860]. Рецептивный слой сети содержит 227 × 227 × 3 нейронов. Для обучения сети каждое изображение из базы ImageNet сначала было уменьшено таким образом, чтобы его меньшее измерение стало равно 256 пикселям, а затем из центра получившейся картинки вырезался фрагмент размером 256 × 256. Из полученного набора квадратных картинок при обучении сети на её вход передавался случайно выбранный фрагмент изображения размером 227 × 227 пикселей. Также для увеличения количества прецедентов применялось горизонтальное отражение изображений. В оригинальных слайдах Крижевского к его докладу, сделанному по результатам ILSVRC-2012, размер окна указан равным 224 × 224 пикселей, а также указано неправильное количество нейронов в первом свёрточном слое (253 440 вместо 290 400). По всей видимости, это стало следствием банальных опечаток, но в итоге в будущем внесло смятение в молодые умы начинающих специалистов в области глубокого обучения[1861], [1862].
Если когда-нибудь столкнётесь с чем-нибудь подобным, ни в коем случае не падайте духом!
Все изображения были также подвергнуты нормализации, для чего из каждой цветовой компоненты каждого пикселя картинки вычиталось среднее значение этой компоненты для всего датасета. Грубо говоря, авторы вычли из каждой конкретной картинки усреднённую картинку.
Для полносвязных слоёв сети при обучении применялась техника так называемого прореживания [dropout]. Суть этого метода заключается в том, что каждый из нейронов с некоторой вероятностью (в данном случае — 50%) отключается, то есть передаёт на выход нулевое значение. Эта методика позволяет обычно получать более устойчивые модели, а также избегать переобучения.
Переобучение [overfitting] — одна из типичных проблем, встречающихся при решении задач машинного обучения. Внешне ситуация выглядит следующим образом. По мере обучения вашей модели величина ошибки на обучающей выборке продолжает падать, однако на тестовой выборке начинает расти. Иногда говорят, что модель заучивает конкретные примеры из обучающей выборки вместо того, чтобы находить признаки, необходимые для успешной классификации. Причина переобучения обычно кроется в чрезмерном количестве параметров модели относительно имеющегося размера обучающей выборки. Исследованию проблемы переобучения посвящено множество работ, а для борьбы с ним, помимо прореживания, разработано множество методик, таких как, например, регуляризация