От анимации к интуиции

Визуализация траектории оптимизации нейронных сетей

Обновление: я перенес код в пакет Python здесь. Не стесняйтесь экспериментировать и создавать графики, похожие на те, что показаны в этой публикации!

В предыдущем посте я показал несколько анимированных графиков процесса обучения линейной регрессии и логистической регрессии. Хорошее чувство того, как они учатся, полезно, потому что их можно использовать в качестве основы перед применением более сложных моделей. Хотя большинство глубоких нейронных сетей также используют обучение на основе градиента, подобную интуицию получить гораздо сложнее. Одна из причин заключается в том, что параметры очень многомерны и связаны с множеством нелинейностей, поэтому нам очень трудно представить себе, что происходит во время оптимизации. В отличие от компьютеров, мы запрограммированы только на восприятие пространства, меньшего или равного 3D.

В этом посте я покажу намного больше анимированных сюжетов, чтобы заглянуть в эти многомерные пространства. Модели, которые я использую, представляют собой полностью связанные многослойные персептроны с активациями ReLU. Затем мы можем визуально увидеть, как ширина и глубина могут повлиять на ландшафт потерь и траекторию оптимизации.

Давайте рассмотрим этот двухмерный набор данных из 3 классов. Мы, люди, можем легко увидеть закономерность с первого взгляда, поскольку она порождена некой спиральной функцией. Нам требуется меньше секунды, чтобы распознать это, и в то же время мы автоматически создаем способ экстраполяции невидимых данных. Это потому, что мы с рождения обучены этому виду визуальных задач (также не забывайте, что мы можем делать это только в очень низкоразмерном пространстве). Здесь я обучу несколько искусственных нейронных сетей, чтобы классифицировать эту форму и изучать процесс обучения в пространстве параметров.

Прежде чем мы продолжим, я хотел бы поднять важный вопрос: как визуализировать траекторию оптимизации в многомерном пространстве параметров?

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

  1. Два случайных вектора в многомерном пространстве имеют высокую вероятность быть ортогональными, и они вряд ли могут уловить какие-либо изменения для пути оптимизации. Проекция пути на плоскость, охватываемую двумя векторами, будет выглядеть как случайное блуждание.
  2. Если мы выберем одно направление в качестве вектора, указывающего от начальных параметров к конечным параметрам обучения, а другое направление - случайным образом, визуализация будет выглядеть как прямая линия, потому что второе направление не улавливает большой разброс по сравнению с первым.
  3. Если мы используем анализ главных компонентов (PCA) на пути оптимизации и получим 2 верхних компонента, мы сможем визуализировать потери по 2 ортогональным направлениям с наибольшим разбросом.

Поэтому я использую подход PCA для получения более привлекательных путей оптимизации. Имейте в виду, что это не лучший подход для визуализации пути, потому что он может не работать для других целей. Например, если вы хотите сравнить пути, выбранные разными оптимизаторами, например SGD против Адама, этот подход PCA не будет работать, поскольку главные компоненты берутся из самих путей. Тот факт, что разные оптимизаторы имеют разные пути и разные направления на ПК, то есть разные участки ландшафта потерь, делает сравнение невозможным. Для этого мы должны использовать два фиксированных направления.

Архитектуры здесь создаются путем изменения и комбинирования двух свойств, указанных ниже.

  • Количество скрытых слоев: 1, 5, 10
  • Количество нейронов в каждом скрытом слое: 5, 20, 100

Всего 9 конфигураций.

Давайте посмотрим на пути оптимизации вместе с областями принятия решений / границами, созданными различными моделями. Показывая области принятия решений вместо точности проверки / тестирования, которые основаны на разделении сгенерированного набора данных, мы можем лучше понять плохие совпадения, поскольку у нас уже есть наше предварительное - ожидание «спирали» .

Во-первых, позвольте мне показать вам, что в этом случае делает логистическая регрессия.

Очевидно, он не очень хорошо справляется со своими 3 прямыми линиями, но его картина потерь идеально выпуклая.

Начиная с первой конфигурации: 1 скрытый слой и 5 нейронов. Каждый нейрон с ReLU представляет собой прямую линию с одной активированной стороной.

Определенный шаг вперед по сравнению с логистической регрессией, но 5 нейронов не могут уловить извилистую форму спиралей и изо всех сил пытаются достичь высокой точности и низких значений потерь. Картина потерь кажется в основном выпуклой.

Добавляя больше нейронов, мы видим

Обратите внимание, что дисперсия, зафиксированная каждым главным компонентом, отмечена на осях. Верхний компонент почти всегда получает 95% +. Это частично определяется характером этих данных и архитектурой сети. В статье авторы также наблюдали подобное поведение, то есть путь оптимизации лежит в очень низкоразмерном пространстве для набора данных CIFAR-10 и различных архитектур.

Далее 5 скрытых слоев,

С 5 скрытыми слоями ландшафты потерь в подпространстве PC-2 становятся значительно менее выпуклыми. С узкой настройкой 5 скрытых слоев на 5 нейронов, мы можем предположить, что ландшафт большой размерности сильно невыпуклый, и оптимизатор быстро попадает в локальную долину и не подходит.

С 20-100 нейронами и 5 слоями оптимизатор очень быстро достигает почти нулевых потерь. Дальнейшее обучение только заставляет его колебаться и иметь неожиданные «сбои». Происходит то, что нейронные сети пытаются подогнать эти данные со странными многомерными формами за пределами этого двухмерного пространства, в котором находятся данные. Это происходит быстро, но на самом деле не захватывает базовый механизм генерации данных, как мы интуитивно это делали.

С 10 скрытыми слоями все становится немного сумасшедшим.

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

Взгляните на эту тонкую и глубокую 20-слойную сеть с 5 нейронами в каждом скрытом слое, ландшафт потерь настолько невыпуклый, что просто застревает и становится необучаемым.

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

Картинка лучше тысячи слов. Здесь каждый анимированный сюжет состоит из 50 картинок, и в этой статье 21 из них. Сравнивая количество эпох, значения потерь и точность между различными конфигурациями, вы можете «почувствовать» процесс обучения базовых нейронных сетей. Тот же метод можно использовать для визуализации более крупных и сложных архитектур.

Несмотря на ажиотаж вокруг глубокого обучения сегодня, искусственные нейронные сети еще только зарождаются. Многие методы являются эмпирическими и еще не подтверждены теорией. Лучший способ набраться опыта - это метод проб и ошибок. Как только студент, изучающий глубокое обучение, разовьет некоторую интуицию в основах, я рекомендую подход к обучению сверху вниз, пропагандируемый fast.ai. Многие прорывы в науке и технике произошли случайно во время экспериментов, а не как естественный результат хороших теоретических выводов. Люди обычно понимают, почему что-то работает после того, как применяют это в течение многих лет. Так что не бойтесь неизвестного, просто пачкайте руки и тренируйте больше моделей!

Смотрите другие мои сообщения на Medium или подписывайтесь на меня в Twitter.

использованная литература