Для обучения нейронной сети необходимо указать начальное значение весов. Правильный метод инициализации улучшает обучение и точность.

Улучшение глубоких нейронных сетей — инициализация:

Для обучения нейронной сети необходимо указать начальное значение весов. Правильно выбранный метод инициализации улучшит обучение и точность.

Если вы читали мои предыдущие уроки, вы, вероятно, следовали моим инструкциям по инициализации веса, и до сих пор это срабатывало. Но как выбрать инициализацию для другой нейронной сети? В этой части я покажу вам, что разные методы инициализации могут привести к разным результатам.

Хорошо подобранная инициализация может ускорить сходимость градиентного спуска и увеличить вероятность сходимости градиентного спуска к меньшей ошибке обучения.

Я буду использовать код из моего последнего урока, где мы использовали классификацию кругов. Прежде чем мы использовали инициализацию со случайными весами, теперь мы попробуем «He Initialization», она названа в честь первого автора He et al., 2015. (Если вы слышали об «инициализации Xavier», это похоже, за исключением инициализации Xavier. использует коэффициент масштабирования для весов W[l]:

Ранее мы использовали следующий код:

Единственное отличие состоит в том, что вместо умножения np.random.randn(..,..) на 0,01 мы умножим его на sqrt(2/dimensions of the previous layer), что рекомендует инициализация He для слоев с активацией ReLU:

Сначала давайте проверим наши результаты со случайной инициализацией, чтобы мы могли сравнить разницу:

Из приведенного выше графика видно, что стоимость падает только после 8000 шагов обучения.

Результаты классификации нас вполне устраивают.

Из приведенного выше графика видно, что стоимость падает почти мгновенно; нам не нужно ждать 8000 шагов, чтобы увидеть улучшение.

Результаты классификации на 1% лучше, чем при использовании случайной инициализации.

Вывод:

Следует помнить, что разные способы инициализации параметров приводят к разным результатам. Случайная инициализация используется, чтобы нарушить симметрию и убедиться, что разные скрытые юниты могут изучать разные вещи.

Не инициализируйте слишком большими значениями, но инициализация со слишком большими случайными числами замедлит оптимизацию. Как видите, инициализация «He» хорошо работает для сетей с активациями ReLU.

Это последний учебник по глубокому обучению. Чтобы получить лучшие результаты, вы можете оптимизировать эту глубокую нейронную сеть, внедрив регуляризацию L2, отсев и проверку градиента. Вы можете попробовать оптимизировать с помощью импульса, оптимизатора adam или реализовать обучение с помощью мини-пакетов.

Полный код руководства и набор данных изображений кошек и собак можно найти на моей странице GitHub.

Первоначально опубликовано на https://pylessons.com/Deep-neural-networks-part6

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку здесь.