Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Эти заметки отражают лишь небольшую часть истории развития сверточных нейронных сетей, и каждый из этих моментов играл важную роль в улучшении производительности и эффективности нейронных сетей в области компьютерного зрения.
Ключевые элементы:
Convolution Layer (сверточный слой) - наложение фильтров (ядер) на разные кусочки изображения (окна). На выходе получается карта активаций, которая говорит о том насколько фильтр оказался похож на кусочек изображения к которому был приложен. Находится скалярным произведением.
Pooling (слой подвыборки) объединяет информацию из соседних нейронов. MaxPool - выбор максимального значения окна, AvgPool - вычисление среднего из окна. Обычно применяется после сверточного слоя.
Activation function (функция активации) привносит нелинейность в нейронную сеть. Известные функции: Sigmoid, Tanh, ReLU, ELU и другие. Применяется поэлементно.
Flatten преобразует многомерный массив в вектор построчно.
Fully Connected Layer (полносвязный слой) - самый обычный нейронный слой: на вход подаются все значения из предыдущего слоя и скалярно перемножаются на веса.
SoftMax преобразует вектор чисел в вектор вероятностей. В выходном векторе сумма всех элементов равна 1.
Архитектуры:
LeNet
AlexNet
VGG - Visual Geometry Group
GoogLeNet
ResNet
1. LeNet (1998)
Архитектура LeNet была предложена Яном Лекуном для решения задачи распознавания рукописных цифр от 0 до 9 из датасета MNIST. Датасет состоит из 60k обучающих и 1k тестовых примеров размером 28 × 28 (одноканальные).
LeNet пропускает изображения через два набора свёрток, затем распрямляет вектор, и применяет полносвязные слои. На выходе получается вектор из 10 цифр - вероятностей классов. В качестве функции активации используется сигмоида или гиперболический тангенс, но в современных реализациях предпочтение отдаётся ReLU и его вариациям.
Архитектура LeNet имела огромное значение для развития области компьютерного зрения и глубокого обучения, показав, что сверточные нейронные сети могут эффективно применяться для задач распознавания изображений.
2. AlexNet (2012)
Задача MNIST - несколько игрушечная. Современные нейронные сети соревнуются в решении ImageNet 1000: задачи о разбиении 15 миллионов изображений на тысячу классов (автомобили, породы собак, какие-то канцелярские принадлежности и т.д.). Причем, хороших изображений (которые действительно относятся к этой тысяче классов) около 1.5 миллиона. Первая нейронная сеть, которая научилась решать эту задачу - AlexNet.
На вход принимается трехканальные изображение размером 224 × 224. AlexNet содержит восемь слоев: первые пять - сверточные (за некоторыми из них следуют MaxPooling слои), а последние три - полносвязные.
Из "трюков": MaxPooling используется после каскада сверток (нескольких сверток подряд), а проблему затухающего градиента решается с помощью функции активации ReLU.
3. VGG - Visual Geometry Group (2014)
Большое количество функций активаций все равно приведет к затуханию градиента. При этом, VGG, в своем финальном варианте содержит аж 19 слоев и показало хорошие результаты благодаря своему особому способу обучения:
Сначала обучаются лишь 11 слоёв (8 сверток и 3 полносвязных слоя).
Затем, к сети добавляются еще два сверточных слоя на глубоких слоях (после первой и второй свертки). В результате, добавленные слои дообучаются чуть быстрее, чем если бы сразу делалась такая сеть.
После, добавляются ещё три слоя (свертки 1 × 1 после 6, 8 и 10 слоев) и дообучается сеть. Так она адаптируется под дополнительные элементы.
Затем выбрасываются свёртки 1 × 1 и добавляются на их место свёртки размером 3 × 3, и дообучаются.
После, добавляются еще три свёрточных слоя после 7, 10 и 13 слоев и дообучаются.
Построенный таким образом процесс обучения приводит к достаточно сложной, но хорошо обученной нейронной сети, в которой и первые слои и последние слои обучены достаточно хорошо.
VGG - достаточно мощная сеть с большим количеством параметров. Она может использоваться в качестве backbone для более сложных архитектур.
Backbone значит что можно убрать последние полносвязные слои из VGG, «заморозив» все предыдущие сверточные (не обучать, оставить параметры как есть), добавить свои новые сверточные и полносвязные слои и обучить новую сеть под свою задачу.
4. GoogLeNet
Более сложная архитектура, решившая задачу ImageNet 1000 с использованием трюка под названием Inception Block: одновременное применение нескольких разных сверток или pooling-ов, с последующей поканальной конкатенацией результатов (выходные изображения должны быть одинакового размера).
BottleNeck (бутылочное горлышко) - свертки 1 × 1 для уменьшения или увеличения количества каналов.
GoogLeNet - огромная сеть с 22 слоями, состоящая преимущественно из inception блоков.
Проблему затухающего градиента они решили с помощью вспомогательных функций потерь. Идя такая: если при обратном распространении ошибки на слой приходит маленький градиент, то основная функция потерь заменяется на вспомогательную и вглубь начинает распространяться новый градиент, достаточно большой. Такие вспомогательные функции можно было поставить в каждом Inception блоке, но в GoogLeNet их всего две.
5. ResNet, Residual neural network (Microsoft, 2015)
Свое название архитектура получила благодаря трюку под названием Residual Block. Основная идея в том что входные данные передаются через блоки (слои) без изменений и соединяются с выходным данным блока. Таким образом была решена проблема затухания градиента при обучении очень глубоких нейронных сетей.
Сеть ResNet состоит из Residual Block-ов следующих друг за другом. При этом, вариантов ResNet несколько: ResNet18 (состоящий из 18 слоев), ResNet32 и даже ResNet1024.
Так же, в ResNet отсутствуют полносвязные слои. Вместо этого, с помощью AvgPooling, тензор масштабируется до размера полносвязного слоя. После пропускается через один полносвязный слой (чтобы на выходе был вектор 1 × 1000) и применятся SoftMax. За счет этого ResNet неважно, сколько пикселей во входном изображении, но, желательно, чтобы размер был кратен 32, т.к. в сети происходит 5 раз уменьшение изображения в 2 раза.
ResNet довольно часто используется как backbone. Например, она используется при прогнозировании последствий извержения вулканов на Камчатке.