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

Перво-наперво:

  • Подготовьте данные поезда, тестирования и проверки.
  • Выполните EDA для данных и решите такие проблемы с данными, как дисбаланс данных и значения Nan.
  • Разделите данные на поезд (80%)/проверку(10%)/тест (10%)
  • Всегда нормализуйте данные перед передачей в сеть.

Гиперпараметры:

Размер партии:

Сколько точек данных должно быть в каждом пакете. В основном 32, мы можем экспериментировать с числами больше 32, скажем, кратными 2 максимум 512. Но лучше оставить 32, чтобы разумно использовать системный ресурс.

Количество слоев и нейронов:

  • Входные слои — зависит от количества объектов.
  • Скрытый слой — простая задача 2/3 слоя, сложная 5 слоев и более.
  • Выходной слой — на основе постановки задачи

Чем больше у вас скрытых слоев, тем более сложные шаблоны он изучает.

Для количества нейронов в скрытых слоях на 1 слой больше нейронов, в оставшемся слое может быть такое же количество нейронов.

Примечание. Более глубокая сеть лучше, чем более широкая

Техника инициализации веса:

Почему нам нужно инициализировать сеть с разными весами?

Потому что, если все инициализированы с одинаковым весом (скажем, 0), то вся сеть будет вести себя только как один нейрон. Кроме того, они не обязательно должны быть одинаковыми и распределяться с приличной дисперсией, чтобы это помогло решить проблему нестабильного градиента.

№оф. Эпохи:

Общее количество итераций (прямое и обратное распространение) данных. Начнем с 10, может быть, с 30.

Сколько эпох мне следует обучать мою модель?

  • Правильное количество эпох зависит от сложности данных.
  • Хорошее практическое правило — начинать со значения, которое в 3 раза превышает количество столбцов в ваших данных.
  • Если вы обнаружите, что модель все еще улучшается после завершения всех эпох, попробуйте еще раз, указав более высокое значение.
  • Если вы обнаружите, что модель перестала улучшаться задолго до последней эпохи, попробуйте еще раз с меньшим значением, поскольку вы, возможно, перетренировались.
  • Если в вашем наборе данных имеется лишь небольшое количество записей или большое количество записей не проходит проверку, вам может потребоваться значительно увеличить количество эпох, чтобы помочь нейронной сети изучить структуру данных.

Функция потери:

Зависит от проблемы, которую мы решаем (классификация, регрессия и т. д.).

Подробнее о функциях потерь регрессии читайте здесь: https://content-by-keerthi.medium.com/loss-functions-930b562c3cbe

Функция активации:

Подробнее о различных функциях активации читайте здесь: https://medium.com/@content-by-keerthi/activation-functions-7541e6668750

Начните с SELU — на основе последних дней, поскольку он способен автоматически нормализовать сети без добавления промежуточных слоев пакетной нормализации.

Предварительные условия для SELU: ввод должен быть нормализован, сеть должна быть полностью подключена и «вычислить» инициализатор веса.

Алгоритм оптимизации:

Основной из них — градиентный спуск. У нас есть расширенные версии, которые помогают модели быстрее сходиться.

Адам используется чаще всего. Большинство параметров не требуют настройки (включая скорость обучения). Существует также продвинутая версия Адама под названием трюк Надам = Адам + Нестеров.

Скорость обучения:

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

Как оценить модель после обучения?

Нарисуйте графики потерь и точности как для обучающего, так и для проверочного набора.

Золотое правило: потери должны уменьшаться, а точность должна увеличиваться в наборе проверки.

Если это не так, потери и точность обучения продолжают увеличиваться по сравнению с потерями при проверке, то модель переобучается (модель слишком хорошо изучает данные обучения и ее трудно обобщать).

СМЕЩЕНИЕ И ДИСПЛЕСАЦИЯ (Почему нас это вообще волнует?)

Смещение — разница между средним значением прогнозов и фактическим значением.

Дисперсия-разброс прогнозов.

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

Регуляризация:

Регуляризация в помощь. Тем самым мы ограничиваем модель, чтобы упростить ее. Различные типы регуляризации:

  • Регуляризация L1/L2
  • Выбывать
  • Ранняя остановка
  • Получение дополнительных данных обучения (дополнение данных)

Регуляризация L1/L2:

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

Что делают L1 и L2, так это добавляют к функции потерь, тем самым эффективно наказывая модель за большие веса.

L1 норма/Лассо:

  • Делает сеть разреженной.
  • Добавляет к потере сумму абсолютных значений весов(все будут положительными).
  • Поощряет веса быть равными 0 (неактивный нейрон — разреженная сеть).

L2 норма/ Хребет/ Снижение веса:

  • Добавляет сумму квадратов значений весов к потере.
  • Более высокие веса более штрафуются (из-за квадрата)
  • Веса никогда не будут равны 0. Вместо этого они будут меньше или больше в зависимости от значений.

Примечание. И L1, и L2 имеют альфа-параметр, который мы можем выбрать, чтобы контролировать размер штрафа. Более строгое наказание приводит к недостаточному оснащению, а плохое штрафование приводит к переоснащению. Используйте L1+L2 вместе для достижения лучших результатов.

Выпадение регуляризации:

Сделайте некоторые нейроны неактивными. Это чем-то похоже на L1, но здесь мы идем прямо, говоря, что на каждом этапе обучения нейрон имеет вероятность p (коэффициент выпадения) быть неактивным.

Итак, на этапе тестирования нам нужны все нейроны, поэтому мы умножаем все входные данные на значение вероятности сохранения (1-p).

Примечание. В keras мы делим входные данные с вероятностью сохранения во время обучения.

Ранняя остановка:

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

Примечание. Преждевременная остановка прерывает обучение, поэтому это не всегда рекомендуется.

Увеличение данных:

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

Пример обучения нейронной сети:

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

Сравнение моделей:

Итак, мы получаем n-разных моделей при точной настройке гиперпараметров. Как нам выбрать лучший?

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

Примечание: Байесовская оптимальная ошибка — максимально возможная ошибка, которая принимается в модели

Настройка гиперпараметра:

  1. Поиск по сетке. пробуется каждый вариант. Поскольку в сети не существует комбинаций, у нас есть еще большее количество вариантов, которые можно попробовать.
  2. Случайный поиск. Выбирайте случайные варианты из общего числа комбинаций. Обязательно выберите правильный масштаб для гиперпараметров.
  3. Увеличение. Изучите перспективные области вручную, используя в качестве помощника случайный поиск.
  4. Байесовский поиск: строит вероятностную модель на основе гиперпараметров и функции стоимости. Использует информацию из предыдущих маршрутов. (например) Spearmint, оптимизация для Scikit
  5. Эволюционные вычисления: использует рандомизацию, естественный отбор и мутацию и использует их неоднократно. (например) Sklearn-deap

6. Поиск на основе градиента. Подходит к настройке гиперпараметра как к задаче обучения. Не часто используется. (например) Адатун

7. Поиск на основе ранней остановки. Останавливает выполнение бесперспективных прогонов и уделяет больше внимания перспективным. (например) Гиперполоса

Другие полезные библиотеки: Hyperopt, Kopt, Talos, Hyperas, Keras Tuner, SHERPA

Ссылка:



Дайте мне знать о любых предложениях или разъяснениях в комментариях!

Сообщение от AI Mind

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