что такое гиперпараметры нейронной сети

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

Содержание

Гиперпараметр [ править ]

Гиперпараметр (англ. hyperparameter) — параметр, который не настраивается во время обучения модели. Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.

Для подбора гиперпараметров необходимо разделить датасет на три части:

Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.

Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.

Поиск по сетке [ править ]

Общая информация [ править ]

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

Поиск по сетке в Sklearn: использование [ править ]

Пример использования GridSearch из библиотеки scikit-learn:

Поиск по сетке в Sklearn: важные атрибуты [ править ]

Реализация поиска по сетке в библиотеках [ править ]

Случайный поиск по сетке [ править ]

Основная информация [ править ]

Случайный поиск по сетке (англ. Random Grid Search) вместо полного перебора работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска.

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

Реализация случайного поиска по сетке [ править ]

Последовательная оптимизация по модели [ править ]

Основная информация [ править ]

Последовательная оптимизация по модели (англ. Sequential Model-Based Optimization, SMBO) используются когда оптимизация целевой функции будет стоить очень «дорого». Главная идея SMBO — замена целевой функции «суррогатной» функцией.

На каждом шаге работы SMBO:

Существует четыре ключевые аспекта SMBO:

Методы SMBO отличаются между собой вероятностными моделями и функциями выбора:
Популярные вероятностные модели (суррогатные функции):

Древовидный парзеновский оценщик [ править ]

Основная информация [ править ]

[math][/math] — распределение гиперпараметров, [math] y [/math] — значение целевой функции, [math] y* [/math] — пороговое начение

[math] p(x|y) = \begin l(x), & \mbox y \lt y* \\ g(x), & \mbox y \ge y* \end [/math]

Алгоритм [ править ]

Последовательная конфигурация алгоритма на основе модели [ править ]

Основная информация [ править ]

Последовательная конфигурация алгоритма на основе модели (англ. Sequential Model-based Algorithm Configuration, SMAC) расширяет подходы SMBO:

Источник

Руководство по выбору гиперпараметров для ваших нейронных сетей

Дата публикации Feb 18, 2019

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

В последнее время глубокое обучение оказало значительное влияние в области компьютерного зрения, обработки естественного языка и распознавания речи. Из-за большого количества данных, генерируемых день за днем, они могут использоваться для обучения Deep Neural Networks и предпочтительнее традиционных алгоритмов машинного обучения для более высокой производительности и точности, что привело к различным успешным коммерческим продуктам.

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

В этом руководстве я опишу мощные и эффективные способы выбора оптимальных гиперпараметров для вашей модели. Гиперпараметры

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

инерция

Снижение веса

Я собираюсь разделить это руководство на две части. В этой части я расскажу о скорости обучения и размере партии.

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

Обобщение

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

Но когда мы пробуем ту же модель на новом невидимом наборе данных, мы получим точность только в 50% и не сможем работать хорошо.

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

Наша цель при обучении сети состоит в том, чтобы она хорошо обобщала обучающие данные, что означает захват истинного сигнала данных, а не запоминание шума в данных. В статистике это называется «добротность соответствия», которая относится к тому, насколько хорошо наши прогнозируемые значения соответствуют истинным (наземным) значениям.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Bias-Variance Tradeoff

Bias-Variance Tradeoffявляется одним из важных аспектов прикладного машинного обучения. Это имеет простые и мощные последствия для сложности модели и ее производительности.

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

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

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

Но в этом посте я буду говорить только о поиске баланса для нейронных сетей.

Переоснащение против переоснащения

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

Это одна из самых сложных проблем прикладного машинного обучения.

Это переоснащение. Потому что, когда ваша модель машинного обучения тестируется на невидимых данных в «реальном» мире, она встретит данные, которых не будет в данных обучения. Следовательно, для модели необходимо хорошо обобщать данные.

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

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

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

Алгоритмы градиентного спуска

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

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

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

Расписание обучения

Расписание скорости обучения помогает регулировать скорость обучения в процессе обучения, изменяя скорость обучения по заранее заданному расписанию. Существует три варианта графиков скорости обучения, такие как затухание по времени, экспоненциальное затухание и ступенчатое затухание.

Постоянная скорость обучения

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

Метод адаптивной скорости обучения

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

Существуют варианты алгоритмов градиентного спуска, которые являются адаптивными по своей природе, такие какAdagrad,Adadelta,RMSprop,Адамв котором скорость обучения адаптируется к типу данных, с которыми он имеет дело (разреженные, менее разреженные и т. д.), и для настройки скорости обучения не требуется большая часть ручной работы.

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

Циклическая скорость обучения

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Скорость обучения Диапазон тест

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

Объем регуляризации, который мы делаем, должен быть сбалансирован в зависимости от данных и модели, которую мы реализуем.

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

Размер партии относится к числу обучающих выборок, распространяемых по сети.

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

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

Во второй части этого руководства я расскажу о спаде импульса и веса, а также о коде для воспроизведения результатов.Ура!

Источник

HyperBand и BOHB. Понимание современных алгоритмов оптимизации гиперпараметров

Специально к старту курса «Машинное обучение» в этом материале представляем сравнение BOHB и HyperBand — двух передовых алгоритмов оптимизации гиперпараметров нейронной сети и простого случайного поиска оптимальных гиперпараметров. Сравнение выполняется с помощью платформы neptune.ai — инструмента для управления экспериментами в области ИИ. Рисунки, графики, таблицы результатов сравнения — всё это вы найдете под катом.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

Оглавление

Немного о подходах HPO

HPO — это метод, помогающий решить задачу настройки гиперпараметров алгоритмов машинного обучения. Выдающиеся алгоритмы ML имеют множество разных и сложных гиперпараметров, порождающих огромное пространство поиска. Многие стартапы предпочитают применять глубокое обучение в ядре своих конвейеров, а пространство поиска в методах глубокого обучения даже больше, чем у традиционных алгоритмов ML. Тонкая настройка в огромном пространстве поиска — сложная задача. Чтобы решить задачи HPO, мы должны применять основанные на данных методы. Ручные методы неэффективны. В этом смысле предлагалось множество подходов:

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Мы обсудим четыре основных наиболее эффективных метода.

Байесовская оптимизация

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

Предположим, что пространство поиска состоит только из двух гиперпараметров, один из которых значим, а другой — нет. Мы хотим настроить их так, чтобы повысить точность модели. Если каждый из них имеет 3 разных значения, то всё пространство поиска имеет 9 возможных вариантов. Можно попробовать каждый из них, чтобы найти оптимальное значение для обоих гиперпараметров.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Почему байесовская оптимизация эффективна?

Случайный поиск в конечном счёте приводит к оптимальному ответу, но это просто случайный поиск. Есть ли способ поиска разумнее? Да, есть, это байесовская оптимизация, предложенная J. Mockus. Вы найдёте более подробную информацию о байесовской оптимизации в Bayesian Optimization Primer и в Practical Bayesian Optimization of Machine Learning Algorithms.

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Изображение из главы Hyperparameter Optimization книги об AutoML, авторы Матиас Фойер, Фрэнк Хаттер

На рисунке выше видно хорошее объяснение байесовской оптимизации, основанное на главе об оптимизации гиперпараметров из книги Automated Machine Learning. На этом рисунке мы хотим найти истинную целевую функцию, показанную в виде пунктирной линии. Представьте себе, что у нас есть один непрерывный гиперпараметр, и на второй итерации мы наблюдали две чёрные точки, а затем установили суррогатную (регрессионную) модель, которая показана чёрной линией. Синяя область вокруг чёрной линии — это неопределённость.

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

Байесовская оптимизация: за и против

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

Кадр из лекции Мариуса Линдауэра на открытой конференции по Data Science

Реализации байесовской оптимизации

Пришло время посмотреть некоторые реализации Байесовской оптимизации. Я перечислил самые популярные из них:

Название реализацииСуррогатная модельСсылки
SMACСлучайный лесСтатья, GitHub
HYPEROPTTree Parzen estimatorСтатья, GitHub
MOEГауссовский процессСтатья, GitHub
scikit-optimizeГауссовский процесс, случайный лес и т.д.GitHub

Оптимизация Multi Fidelity

В байесовском методе оценка целевой функции стоит очень дорого. Есть ли более дешёвый способ оценить целевую функцию? Ответ на этот вопрос — методы оптимизации Multi Fidelity. Я расскажу вам о:

Последовательное деление на два

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

Представьте, что у вас есть N различных конфигураций и бюджет ß (например время). Как видно на рисунке ниже, в каждой итерации последовательное деление пополам сохраняет лучшую половину конфигураций и отбрасывает половину не самых удачных алгоритмов. Это продолжается до тех пор, пока мы не получим одну-единственную конфигурацию. Метод завершает работу, когда достигает максимума своего бюджета.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Рисунок из поста в блоге automl.org

Последовательное деление пополам впервые предложено в статье Кевина Джеймисона и Амита Талвалкара Non-stochastic Best Arm Identification and Hyperparameter Optimization.

В чем проблема последовательного деления пополам?

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

HyperBand

Этот метод — расширение последовательных алгоритмов деления пополам, предложенное в статье Novel Bandit-Based Approach to Hyperparameter Optimization от Лиши Ли и других авторов.

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Рисунок из блога automl.org

Простую реализацию HyperBand можно найти в репозитории HpBandSter от automl.org. Если вам интересно, как применять этот инструмент на Python, ознакомьтесь с документацией.

BOHB — передовой алгоритм оптимизации гиперпараметров, предложенный в работе BOHB: Robust and Efficient Hyperparameter Optimization at Scale, написанной Стефаном Фолкнером, Аароном Кляйном и Фрэнком Хаттером. Идея BOHB основана на одном простом вопросе: почему мы постоянно выполняем последовательное деление пополам?

Вместо слепого повторения последовательного деления пополам BOHB использует алгоритм байесовской оптимизации. На самом деле BOHB сочетает в себе HyperBand и байесовскую оптимизацию, чтобы эффективно использовать оба этих алгоритма. Дэн Райан прекрасно объясняет метод BOHB в своей презентации.

Отличная презентация Дэна Райана об эффективной и гибкой оптимизации гиперпараметров на PyData Miami 2019

BOHB — это метод оптимизации Multi Fidelity, такие методы зависят от бюджета, поэтому важно найти его косвенные издержки. С другой стороны, BOHB надёжен, гибок и масштабируем. Если вам нужна более подробная информация, взгляните на официальный пост в блоге о BOHB от Андре Биденкаппа и Фрэнка Хаттера.

Кроме того, HpBandSter — это хорошая реализация BOHB и HyperBand. Документация по BOHB находится здесь.

Случайный поиск, HyperBand и BOHB результаты сравнения в Neptune

Теперь, когда мы знакомы со всеми этими методами, воспользуемся Neptune и проведём некоторые эксперименты и сравнения. Если вы хотите провести эксперименты вместе со мной, то:

КонфигурацииЗначение диапазона
Минимальный бюджет[1]
Максимальный бюджет[1,2,3,4,5]
Число итераций[1,2,3,4,8,10]

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

Название параметраДиапазон
Скорость обучения[1e-6, 1e-2]
Количество слоев свертки[1,3]
Количество фильтров в первом слое конфигурации[4, 64]
Процент отсева[0, 0.9]
Количество скрытых нейронов в полносвязном слое[8,256]

Проведя эти эксперименты с различными конфигурациями в Neptune, я получил содержательные результаты.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Все эксперименты в Neptune

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Сравнение BOHB, HyperBand и случайного поиска для n_iteration=3 и max_budget=3

В конечном счете при max_budget=5 и n_iteration=4 каждый оптимизатор находит одну лучшую конфигурацию, которую вы можете проверить в следующей таблице.

Источник

Нейронные сети для начинающих. Часть 2

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Добро пожаловать во вторую часть руководства по нейронным сетям. Сразу хочу принести извинения всем кто ждал вторую часть намного раньше. По определенным причинам мне пришлось отложить ее написание. На самом деле я не ожидал, что у первой статьи будет такой спрос и что так много людей заинтересует данная тема. Взяв во внимание ваши комментарии, я постараюсь предоставить вам как можно больше информации и в то же время сохранить максимально понятный способ ее изложения. В данной статье, я буду рассказывать о способах обучения/тренировки нейросетей (в частности метод обратного распространения) и если вы, по каким-либо причинам, еще не прочитали первую часть, настоятельно рекомендую начать с нее. В процессе написания этой статьи, я хотел также рассказать о других видах нейросетей и методах тренировки, однако, начав писать про них, я понял что это пойдет вразрез с моим методом изложения. Я понимаю, что вам не терпится получить как можно больше информации, однако эти темы очень обширны и требуют детального анализа, а моей основной задачей является не написать очередную статью с поверхностным объяснением, а донести до вас каждый аспект затронутой темы и сделать статью максимально легкой в освоении. Спешу расстроить любителей “покодить”, так как я все еще не буду прибегать к использованию языка программирования и буду объяснять все “на пальцах”. Достаточно вступления, давайте теперь продолжим изучение нейросетей.

Что такое нейрон смещения?

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Перед тем как начать нашу основную тему, мы должны ввести понятие еще одного вида нейронов — нейрон смещения. Нейрон смещения или bias нейрон — это третий вид нейронов, используемый в большинстве нейросетей. Особенность этого типа нейронов заключается в том, что его вход и выход всегда равняются 1 и они никогда не имеют входных синапсов. Нейроны смещения могут, либо присутствовать в нейронной сети по одному на слое, либо полностью отсутствовать, 50/50 быть не может (красным на схеме обозначены веса и нейроны которые размещать нельзя). Соединения у нейронов смещения такие же, как у обычных нейронов — со всеми нейронами следующего уровня, за исключением того, что синапсов между двумя bias нейронами быть не может. Следовательно, их можно размещать на входном слое и всех скрытых слоях, но никак не на выходном слое, так как им попросту не с чем будет формировать связь.

Для чего нужен нейрон смещения?

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Нейрон смещения нужен для того, чтобы иметь возможность получать выходной результат, путем сдвига графика функции активации вправо или влево. Если это звучит запутанно, давайте рассмотрим простой пример, где есть один входной нейрон и один выходной нейрон. Тогда можно установить, что выход O2 будет равен входу H1, умноженному на его вес, и пропущенному через функцию активации (формула на фото слева). В нашем конкретном случае, будем использовать сигмоид.

Из школьного курса математики, мы знаем, что если взять функцию y = ax+b и менять у нее значения “а”, то будет изменяться наклон функции (цвета линий на графике слева), а если менять “b”, то мы будем смещать функцию вправо или влево (цвета линий на графике справа). Так вот “а” — это вес H1, а “b” — это вес нейрона смещения B1. Это грубый пример, но примерно так все и работает (если вы посмотрите на функцию активации справа на изображении, то заметите очень сильное сходство между формулами). То есть, когда в ходе обучения, мы регулируем веса скрытых и выходных нейронов, мы меняем наклон функции активации. Однако, регулирование веса нейронов смещения может дать нам возможность сдвинуть функцию активации по оси X и захватить новые участки. Иными словами, если точка, отвечающая за ваше решение, будет находиться, как показано на графике слева, то ваша НС никогда не сможет решить задачу без использования нейронов смещения. Поэтому, вы редко встретите нейронные сети без нейронов смещения.

Также нейроны смещения помогают в том случае, когда все входные нейроны получают на вход 0 и независимо от того какие у них веса, они все передадут на следующий слой 0, но не в случае присутствия нейрона смещения. Наличие или отсутствие нейронов смещения — это гиперпараметр (об этом чуть позже). Одним словом, вы сами должны решить, нужно ли вам использовать нейроны смещения или нет, прогнав НС с нейронами смешения и без них и сравнив результаты.

ВАЖНО знать, что иногда на схемах не обозначают нейроны смещения, а просто учитывают их веса при вычислении входного значения например:

input = H1*w1+H2*w2+b3
b3 = bias*w3

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

Как сделать чтобы НС давала правильные ответы?

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

Что такое градиентный спуск?

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

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Посмотрев на этот график, мы поймем, что график функция f(w) является зависимостью ошибки от выбранного веса. На этом графике нас интересует глобальный минимум — точка (w2,e2) или, иными словами, то место где график подходит ближе всего к оси х. Эта точка будет означать, что выбрав вес w2 мы получим самую маленькую ошибку — e2 и как следствие, самый лучший результат из всех возможных. Найти же эту точку нам поможет метод градиентного спуска (желтым на графике обозначен градиент). Соответственно у каждого веса в нейросети будет свой график и градиент и у каждого надо найти глобальный минимум.

Так что же такое, этот градиент? Градиент — это вектор который определяет крутизну склона и указывает его направление относительно какой либо из точек на поверхности или графике. Чтобы найти градиент нужно взять производную от графика по данной точке (как это и показано на графике). Двигаясь по направлению этого градиента мы будем плавно скатываться в низину. Теперь представим что ошибка — это лыжник, а график функции — гора. Соответственно, если ошибка равна 100%, то лыжник находиться на самой вершине горы и если ошибка 0% то в низине. Как все лыжники, ошибка стремится как можно быстрее спуститься вниз и уменьшить свое значение. В конечном случае у нас должен получиться следующий результат:

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Представьте что лыжника забрасывают, с помощью вертолета, на гору. На сколько высоко или низко зависит от случая (аналогично тому, как в нейронной сети при инициализации веса расставляются в случайном порядке). Допустим ошибка равна 90% и это наша точка отсчета. Теперь лыжнику нужно спуститься вниз, с помощью градиента. На пути вниз, в каждой точке мы будем вычислять градиент, что будет показывать нам направление спуска и при изменении наклона, корректировать его. Если склон будет прямым, то после n-ого количества таких действий мы доберемся до низины. Но в большинстве случаев склон (график функции) будет волнистый и наш лыжник столкнется с очень серьезной проблемой — локальный минимум. Я думаю все знают, что такое локальный и глобальный минимум функции, для освежения памяти вот пример. Попадание в локальный минимум чревато тем, что наш лыжник навсегда останется в этой низине и никогда не скатиться с горы, следовательно мы никогда не сможем получить правильный ответ. Но мы можем избежать этого, снарядив нашего лыжника реактивным ранцем под названием момент (momentum). Вот краткая иллюстрация момента:

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Как вы уже наверное догадались, этот ранец придаст лыжнику необходимое ускорение чтобы преодолеть холм, удерживающий нас в локальном минимуме, однако здесь есть одно НО. Представим что мы установили определенное значение параметру момент и без труда смогли преодолеть все локальные минимумы, и добраться до глобального минимума. Так как мы не можем просто отключить реактивный ранец, то мы можем проскочить глобальный минимум, если рядом с ним есть еще низины. В конечном случае это не так важно, так как рано или поздно мы все равно вернемся обратно в глобальный минимум, но стоит помнить, что чем больше момент, тем больше будет размах с которым лыжник будет кататься по низинам. Вместе с моментом в методе обратного распространения также используется такой параметр как скорость обучения (learning rate). Как наверняка многие подумают, чем больше скорость обучения, тем быстрее мы обучим нейросеть. Нет. Скорость обучения, также как и момент, является гиперпараметром — величина которая подбирается путем проб и ошибок. Скорость обучения можно напрямую связать со скоростью лыжника и можно с уверенностью сказать — тише едешь дальше будешь. Однако здесь тоже есть определенные аспекты, так как если мы совсем не дадим лыжнику скорости то он вообще никуда не поедет, а если дадим маленькую скорость то время пути может растянуться на очень и очень большой период времени. Что же тогда произойдет если мы дадим слишком большую скорость?

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

Как видите, ничего хорошего. Лыжник начнет скатываться по неправильному пути и возможно даже в другом направлении, что как вы понимаете только отдалит нас от нахождения правильного ответа. Поэтому во всех этих параметрах нужно находить золотую середину чтобы избежать не сходимости НС (об этом чуть позже).

Что такое Метод Обратного Распространения (МОР)?

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

А теперь давайте подробно разберем каждый этап. Если вы помните то в предыдущей статье мы считали выход НС. По другому это называется передача вперед (Forward pass), то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат. В моих вычисления я буду пользоваться методом нахождения дельты, так как это наиболее простой и понятный способ. Также я буду использовать стохастический метод обновления весов (об этом чуть позже).

Теперь давайте продолжим с того места, где мы закончили вычисления в предыдущей статье.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

H1input = 1*0.45+0*-0.12=0.45
H1output = sigmoid(0.45)=0.61

H2input = 1*0.78+0*0.13=0.78
H2output = sigmoid(0.78)=0.69

O1input = 0.61*1.5+0.69*-2.3=-0.672
O1output = sigmoid(-0.672)=0.33

Результат — 0.33, ошибка — 45%.

Так как мы уже подсчитали результат НС и ее ошибку, то мы можем сразу приступить к МОРу. Как я уже упоминал ранее, алгоритм всегда начинается с выходного нейрона. В таком случае давайте посчитаем для него значение δ (дельта) по формуле 1.
что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сетиТак как у выходного нейрона нет исходящих синапсов, то мы будем пользоваться первой формулой (δ output), следственно для скрытых нейронов мы уже будем брать вторую формулу (δ hidden). Тут все достаточно просто: считаем разницу между желаемым и полученным результатом и умножаем на производную функции активации от входного значения данного нейрона. Прежде чем приступить к вычислениям я хочу обратить ваше внимание на производную. Во первых как это уже наверное стало понятно, с МОР нужно использовать только те функции активации, которые могут быть дифференцированы. Во вторых чтобы не делать лишних вычислений, формулу производной можно заменить на более дружелюбную и простую формула вида:
что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Таким образом наши вычисления для точки O1 будут выглядеть следующим образом.

O1output = 0.33
O1ideal = 1
Error = 0.45

δO1 = (1 — 0.33) * ( (1 — 0.33) * 0.33 ) = 0.148

На этом вычисления для нейрона O1 закончены. Запомните, что после подсчета дельты нейрона мы обязаны сразу обновить веса всех исходящих синапсов этого нейрона. Так как в случае с O1 их нет, мы переходим к нейронам скрытого уровня и делаем тоже самое за исключение того, что формула подсчета дельты у нас теперь вторая и ее суть заключается в том, чтобы умножить производную функции активации от входного значения на сумму произведений всех исходящих весов и дельты нейрона с которой этот синапс связан. Но почему формулы разные? Дело в том что вся суть МОР заключается в том чтобы распространить ошибку выходных нейронов на все веса НС. Ошибку можно вычислить только на выходном уровне, как мы это уже сделали, также мы вычислили дельту в которой уже есть эта ошибка. Следственно теперь мы будем вместо ошибки использовать дельту которая будет передаваться от нейрона к нейрону. В таком случае давайте найдем дельту для H1:

H1output = 0.61
w5 = 1.5
δO1 = 0.148

δH1 = ( (1 — 0.61) * 0.61 ) * ( 1.5 * 0.148 ) = 0.053

Теперь нам нужно найти градиент для каждого исходящего синапса. Здесь обычно вставляют 3 этажную дробь с кучей производных и прочим математическим адом, но в этом и вся прелесть использования метода подсчета дельт, потому что в конечном счете ваша формула нахождения градиента будет выглядеть вот так:
что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Здесь точка A это точка в начале синапса, а точка B на конце синапса. Таким образом мы можем подсчитать градиент w5 следующим образом:

H1output = 0.61
δO1 = 0.148

GRADw5 = 0.61 * 0.148 = 0.09

Сейчас у нас есть все необходимые данные чтобы обновить вес w5 и мы сделаем это благодаря функции МОР которая рассчитывает величину на которую нужно изменить тот или иной вес и выглядит она следующим образом:
что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Настоятельно рекомендую вам не игнорировать вторую часть выражения и использовать момент так как это вам позволит избежать проблем с локальным минимумом.

Здесь мы видим 2 константы о которых мы уже говорили, когда рассматривали алгоритм градиентного спуска: E (эпсилон) — скорость обучения, α (альфа) — момент. Переводя формулу в слова получим: изменение веса синапса равно коэффициенту скорости обучения, умноженному на градиент этого веса, прибавить момент умноженный на предыдущее изменение этого веса (на 1-ой итерации равно 0). В таком случае давайте посчитаем изменение веса w5 и обновим его значение прибавив к нему Δw5.

E = 0.7
Α = 0.3
w5 = 1.5
GRADw5 = 0.09
Δw5(i-1) = 0

Δw5 = 0.7 * 0.09 + 0 * 0.3 = 0.063
w5 = w5 + Δw5 = 1.563

Таким образом после применения алгоритма наш вес увеличился на 0.063. Теперь предлагаю сделать вам тоже самое для H2.

GRADw6 = 0.69 * 0.148 = 0.1

Δw6 = 0.7 * 0.1 + 0 * 0.3 = 0.07

И конечно не забываем про I1 и I2, ведь у них тоже есть синапсы веса которых нам тоже нужно обновить. Однако помним, что нам не нужно находить дельты для входных нейронов так как у них нет входных синапсов.

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

H2input = 1 * 0.73 + 0 * 0.124 = 0.73
H2output = sigmoid(0.73) = 0.675

Результат — 0.37, ошибка — 39%.

Как мы видим после одной итерации МОР, нам удалось уменьшить ошибку на 0.04 (6%). Теперь нужно повторять это снова и снова, пока ваша ошибка не станет достаточно мала.

Что еще нужно знать о процессе обучения?

Нейросеть можно обучать с учителем и без (supervised, unsupervised learning).

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

Обучение без учителя — этот тип обучения встречается не так часто. Здесь нет учителя, поэтому сеть не получает желаемый результат или же их количество очень мало. В основном такой вид тренировок присущ НС у которых задача состоит в группировке данных по определенным параметрам. Допустим вы подаете на вход 10000 статей на хабре и после анализа всех этих статей НС сможет распределить их по категориям основываясь, например, на часто встречающихся словах. Статьи в которых упоминаются языки программирования, к программированию, а где такие слова как Photoshop, к дизайну.

Существует еще такой интересный метод, как обучение с подкреплением (reinforcement learning). Этот метод заслуживает отдельной статьи, но я попытаюсь вкратце описать его суть. Такой способ применим тогда, когда мы можем основываясь на результатах полученных от НС, дать ей оценку. Например мы хотим научить НС играть в PAC-MAN, тогда каждый раз когда НС будет набирать много очков мы будем ее поощрять. Иными словами мы предоставляем НС право найти любой способ достижения цели, до тех пор пока он будет давать хороший результат. Таким способом, сеть начнет понимать чего от нее хотят добиться и пытается найти наилучший способ достижения этой цели без постоянного предоставления данных “учителем”.

Также обучение можно производить тремя методами: стохастический метод (stochastic), пакетный метод (batch) и мини-пакетный метод (mini-batch). Существует очень много статей и исследований на тему того, какой из методов лучше и никто не может прийти к общему ответу. Я же сторонник стохастического метода, однако я не отрицаю тот факт, что каждый метод имеет свои плюсы и минусы.

Вкратце о каждом методе:

Стохастический (его еще иногда называют онлайн) метод работает по следующему принципу — нашел Δw, сразу обнови соответствующий вес.

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

Мини-пакетный метод является золотой серединой и пытается совместить в себе плюсы обоих методов. Здесь принцип таков: мы в свободном порядке распределяем веса по группам и меняем их веса на сумму Δw всех весов в той или иной группе.

Что такое гиперпараметры?

Гиперпараметры — это значения, которые нужно подбирать вручную и зачастую методом проб и ошибок. Среди таких значений можно выделить:

Что такое сходимость?

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети
Сходимость говорит о том, правильная ли архитектура НС и правильно ли были подобраны гиперпараметры в соответствии с поставленной задачей. Допустим наша программа выводит ошибку НС на каждой итерации в лог. Если с каждой итерацией ошибка будет уменьшаться, то мы на верном пути и наша НС сходится. Если же ошибка будет прыгать вверх — вниз или застынет на определенном уровне, то НС не сходится. В 99% случаев это решается изменением гиперпараметров. Оставшийся 1% будет означать, что у вас ошибка в архитектуре НС. Также бывает, что на сходимость влияет переобучение НС.

Что такое переобучение?

Переобучение, как следует из названия, это состояние нейросети, когда она перенасыщена данными. Это проблема возникает, если слишком долго обучать сеть на одних и тех же данных. Иными словами, сеть начнет не учиться на данных, а запоминать и “зубрить” их. Соответственно, когда вы уже будете подавать на вход этой НС новые данные, то в полученных данных может появиться шум, который будет влиять на точность результата. Например, если мы будем показывать НС разные фотографии яблок (только красные) и говорить что это яблоко. Тогда, когда НС увидит желтое или зеленое яблоко, оно не сможет определить, что это яблоко, так как она запомнила, что все яблоки должны быть красными. И наоборот, когда НС увидит что-то красное и по форме совпадающее с яблоком, например персик, она скажет, что это яблоко. Это и есть шум. На графике шум будет выглядеть следующим образом.

что такое гиперпараметры нейронной сети. Смотреть фото что такое гиперпараметры нейронной сети. Смотреть картинку что такое гиперпараметры нейронной сети. Картинка про что такое гиперпараметры нейронной сети. Фото что такое гиперпараметры нейронной сети

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *