Интуитивно понятное и простое руководство по трем наиболее популярным методам инициализации веса поможет вам выбрать правильный для вашего проекта.
Введение
Инициализация веса — это параметр проектирования модели, неправильный выбор которого может замедлить или затормозить сходимость. Вы можете думать об этом как о отправной точке ландшафта функции потерь.
Интуитивное предположение было бы для начала 0, но оно также приводит к 0 градиентам, следовательно, никакого обучения.
Другой вариант — случайная выборка точек из распределения. В этом блоге мы будем придерживаться распределения Гаусса, которое имеет два параметра: среднее значение и дисперсию. Эти значения определяют распространение распределения.
Все дело в дисперсии
Допустим, у нас есть простой персептрон, куда мы передаем входные данные x.
Наша дисперсия для каждого веса также суммируется, а значит, она растет с каждым слоем. Этот суммарный результат имеет гораздо более широкий разброс значений.
Давайте проверим это на концептуальной 10-слойной нейронной сети. В реальной жизни обучение такой модели требует времени и вычислительной мощности. Мы можем просто предположить, что мы выполняем умножение десяти матриц через десятислойную «сеть» и измеряем среднее значение и дисперсию между слоями.
Как видите, дисперсия стремительно растет уже во втором слое. Построение остальных значений сделало бы график нечитаемым.
Суть в том, что огромные значения нежелательны в сети. Они делают модель медленнее и могут вызвать проблему взрывающегося градиента. Таким образом, мы хотим сохранить одинаковое распределение во всех слоях.
ЛеКун Инициализация
Это была первая попытка сохранить одинаковую дисперсию во всей сети. Сейчас это метод по умолчанию, используемый в PyTorch. Мы просто уменьшаем инициализацию в соответствии с количеством входных данных, поступающих на слой.
Производительность нашей сети:
Как видите, мы сохраняем довольно схожие распределения по всей модели, но мы упускаем здесь один важный фактор.
Как функция активации и обратное распространение влияют на дисперсию?
Инициализация Ксавьера
В статье Ксавьера 2010 года обсуждается влияние функции активации и обратного распространения на дисперсию по всей сети. Они выяснили, что дисперсия после Tanh уменьшается, а градиенты исчезают при обратном распространении.
Чтобы бороться с этим, они ввели новый метод инициализации, созданный для функции активации с симметричной точкой в 0, как Tanh. А также нормализована дисперсия градиентов обратного распространения.
Если вы хотите более подробно изучить статистику и то, как она появилась, я рекомендую эту запись в блоге.
Производительность нашей сети:
Итак, сеть сохраняет одинаковое распределение только тогда, когда количество входов и выходов равно.
Объяснение — это сеть, использованная в статье Ксавьера. Их упреждающая модель имеет 1000 скрытых единиц в каждом слое. Таким образом, достигнутые ими результаты выглядят красиво и гладко.
А как насчет ReLU?
Поскольку ReLU — несимметричная функция, она плохо работает с инициализацией Xavier.
Таким образом, после AlexNet (2012) большинство моделей выполняли инициализацию веса с 0 средним значением и 0,01 стандартным отклонением. Недостатки начали возникать с более глубокими моделями, которые более склонны к исчезновению/взрыву градиента. Прекрасным примером является модель VGG19, в которой должны были использоваться веса из предварительно обученной 11-слойной неглубокой сети.
Инициализация
В статье 2015 года Каймар проанализировал влияние функции ReLU на выходную дисперсию и предложил новую инициализацию.
Производительность нашей сети:
Так как Deep Learning начал углубляться с 30 и более слоями. Я также расширил нашу модель до 50 слоев и протестировал ее.
Как видите, инициализация He сохраняет относительно одинаковые среднее значение и дисперсию для всех слоев. Среднее значение явно смещено из-за несимметричного свойства ReLU.
Инициализация использовалась для обучения ResNetsвглубоком остаточном обучении для статьи по распознаванию изображений.
Обсуждение и выводы
С 2015 года, когда была выпущена пакетная нормализация, значение инициализации веса уменьшилось. Пакетная нормализация уменьшает количество активаций в каждом слое, что ускоряет вычисления и уменьшает проблему взрывных градиентов. Таким образом, некоторые проблемы, решаемые тщательной инициализацией, были решены.
Тем не менее Ян и Шенхольц [2] показали, что ни Ксавьер, ни Хе не имеют оптимальной дисперсии для ResNet и что инициализация должна зависеть от глубины. Это доказывает, что инициализация веса все еще является активной областью исследований.
Цель этого блога состояла в том, чтобы представить различные методы инициализации и предоставить больше информации о том, как работают нейронные сети. Надеюсь, мое объяснение и визуализация помогут вам понять это и вдохновят вас на дальнейшее изучение этой темы.
Проверьте мой профиль Medium и Github, если вы хотите увидеть другие мои проекты.
Справочник
[1] Понимание сложности обучения нейронных сетей с глубокой прямой связью
[2] Остаточные сети среднего поля: на грани хаоса