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

Контент

I. Подготовка данных
II. Количество нейронов
III. Размер партии и эпоха
IV. Другие параметры для настройки
• Регуляризация отсева
• Функция активации нейронов
• Инициализация веса сети
• Скорость обучения и импульс
• Алгоритм оптимизации обучения
В. Заключение

I. Подготовка данных для GridSearchCV

II. Количество нейронов в скрытом слое

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

Этот код определяет функцию create_model_neurons, которая создает модель нейронной сети с заданным количеством нейронов в скрытом слое.

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

Модель построена с использованием класса Sequential от Keras, который позволяет определить линейный стек слоев.

Модель имеет входной слой, определенный с помощью InputLayer, который определяет форму входных данных для модели. Форма входных данных определяется количеством признаков в обучающих данных, как указано в X_train.shape[1].

Скрытый слой модели определяется с помощью Dense, который создает полносвязный слой нейронов. Количество нейронов в скрытом слое определяется аргументом нейронов, переданным функции. Функция активации, используемая для скрытого слоя, — ReLU (activation=’relu’). Кроме того, kernel_initializer=’glorot_uniform’ используется для инициализации весов слоя. Эта схема инициализации предназначена для поддержания примерно постоянной дисперсии выходных данных каждого слоя во время обучения, что может помочь улучшить производительность сети.

Выходной слой модели определяется с помощью другого плотного слоя с двумя выходными нейронами, поскольку это проблема бинарной классификации. Функция активации, используемая для выходного слоя, — это softmax (activation=’softmax’), которая обычно используется для задач классификации с несколькими классами.

Наконец, модель компилируется с помощью метода compile. Используемая функция потерь представляет собой категориальную кросс-энтропию (loss = ‘categorical_crossentropy’), которая подходит для задач классификации с несколькими классами. В качестве оптимизатора используется Adam (optimizer=’adam’), широко используемый алгоритм оптимизации для нейронных сетей. Кроме того, модель оценивается с использованием метрики отзыва (metrics=[tf.keras.metrics.Recall()]), которая является мерой способности модели правильно идентифицировать положительные образцы.

Код определяет KerasClassifier, используя функцию create_model_neurons в качестве модели. KerasClassifier используется, чтобы модель можно было использовать с GridSearchCV от scikit-learn. Модель настроена на обучение в течение 100 эпох и использование размера пакета 17. Подробный параметр установлен на 0, что означает, что во время обучения не будут отображаться выходные данные. Если для verbose установлено значение 1, то будут распечатаны выходные данные каждой эпохи.

Цель этого кода — найти наилучшую комбинацию гиперпараметров для модели нейронной сети, используя настройку гиперпараметров с помощью метода GridSearchCV из scikit-learn.

Настраиваемый гиперпараметр в этом коде — это количество нейронов в скрытом слое модели. Список проверяемых значений этого гиперпараметра: [17, 34, 51, 68].

Словарь param_grid в коде определяет гиперпараметры для настройки и тестируемые значения. В данном случае model__neurons — это настраиваемый гиперпараметр, и его значения указываются в списке нейронов.

Аргументу оценки метода GridSearchCV присваивается значение model, представляющее собой модель KerasClassifier, созданную с помощью функции create_model_neurons. Гиперпараметры epochs и batch_size не настраиваются, а указываются в функции create_model_neurons.

Аргументу n_jobs присваивается значение -1, чтобы использовать все доступные процессоры, а аргументу verbose присваивается значение 1, чтобы отображались сообщения о ходе выполнения.

Как правило, значение по умолчанию 5-кратной перекрестной проверки является хорошей отправной точкой. Однако для небольших наборов данных большее количество кратностей (например, 10) может быть более подходящим для уменьшения дисперсии оценки производительности. С другой стороны, для больших наборов данных меньшего количества кратностей (например, 3) может быть достаточно для получения надежных оценок производительности модели при одновременном снижении вычислительных затрат.

Переменная grid_result является результатом метода GridSearchCV, полученным путем вызова метода подгонки для объекта сетки. Для параметра shuffle установлено значение False, чтобы гарантировать, что порядок обучающих выборок не изменится в течение каждой эпохи обучения.

Note:

  1. После повторного запуска поиска по сетке несколько раз я заметил, что результаты различаются, несмотря на установку случайного начального числа. Это говорит о том, что существуют дополнительные факторы, влияющие на воспроизводимость результатов, а не просто установка затравки.
  2. Когда для подробного параметра в GridSearchCV установлено значение 1, он будет печатать сведения о каждой итерации перекрестной проверки, включая результаты обучения и тестов для каждой комбинации гиперпараметров.
  3. Атрибут grid_result.best_score_ возвращает средний балл по всем итерациям перекрестной проверки для лучшего набора гиперпараметров, найденного во время поиска.

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

Reproducibility is a Problem

Воспроизводимость — важнейший аспект машинного обучения, поскольку он позволяет исследователям проверять и сравнивать производительность своих моделей. Однако даже при настройке seed для numpy и tensorflow результаты не всегда воспроизводятся на 100%. Это может быть особенно проблематично при поиске по сетке в обернутых моделях Keras, поскольку существуют дополнительные факторы, которые могут повлиять на воспроизводимость помимо простой установки начальных значений. Поэтому важно знать об этих дополнительных факторах и принимать соответствующие меры для обеспечения воспроизводимости, например, установить для параметра перемешивания в методе подгонки значение False и последовательно инициализировать веса.

Оценка модели (тестовый набор данных)

III. Batch_size and Epoch

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

number of epochs относится к тому, сколько раз весь набор обучающих данных отображается в сети во время обучения. Каждая эпоха состоит из одного полного прохода по обучающему набору данных. Количество эпох — еще один важный гиперпараметр для настройки, поскольку он определяет, как долго будет обучаться сеть. Слишком малое количество эпох может привести к недообучению, когда модель не может уловить основные закономерности в данных. И наоборот, слишком много эпох может привести к переоснащению, когда модель становится слишком специализированной для обучающих данных и не может хорошо обобщать новые данные. Попробовав разное количество эпох, мы можем найти оптимальное число, обеспечивающее наилучшую производительность на проверочном наборе.

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

IV. Другие параметры для настройки

Регуляризация отсева

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

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

  • Weight_constraint = [1.0, 2.0]
  • dropout_rate = [0,0, 0,1, 0,2]

Функция активации нейронов

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

Существуют различные функции активации, которые можно использовать в нейронной сети, такие как sigmoid, ReLU (выпрямленная линейная единица), tanh (гиперболический тангенс) и softmax. Каждая из этих функций имеет свои сильные и слабые стороны, и выбор функции активации может оказать существенное влияние на производительность нейронной сети.

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

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

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

Общие значения скорости обучения включают 0,1, 0,01, 0,001 и 0,0001, а импульс часто устанавливается в диапазоне от 0,9 до 0,99. Однако эти значения могут варьироваться в зависимости от конкретной проблемы и архитектуры.

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

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

Алгоритм оптимизации обучения

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

Некоторые популярные алгоритмы оптимизации включают в себя:

  • Стохастический градиентный спуск (SGD)
  • Адам
  • Адаград
  • Ададельта
  • RMSprop

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

V. Заключение

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