В этом уроке вы узнаете, как происходит решение задачи с использованием нейронных сетей, поговорим об этапах нейросетевого моделирования, рассмотрим решение задачи в общем виде.
Для того, чтобы решить какую-то задачу при помощи нейронной сети, эту сеть необходимо предварительно обучить. Как мы уже говорили (см. урок 2.3) существуют несколько способов обучения искусственных нейронных сетей:
Говоря по-простому, нейронная сеть — это черный ящик. Вы подаете на вход, какие-либо значения, и получаете от нее ответ на выходе.
Нейронная сеть строит сложную функциональную зависимость выхода от входа.
Чтобы нейронная сеть построила эту зависимость правильно, пройдите 9 шагов. Эти шаги часто называют этапами нейросетевого моделирования.
Предположим, вы хотите решить задачу прогнозирования метеоусловий. Для простоты возьмем только один параметр — температуру воздуха.
Важно! На этом этапе обязательно нужно определиться какой параметр мы будете предсказывать. Температура воздуха может быть среднегодовая, среднемесячная, среднесуточная. Исходя из этого допущения, нужно будет определять источник данных для обучающей выборки.
В при постановке задачи определяем, что требуется решить задачу прогнозирования, которая сводится к построению аппроксимирующей зависимости выходного значения от входного. То есть на вход вы будете подавать значение температуры сегодня, чтобы получить значение температуры завтра (прогноз).
В качестве источника данных можно использовать достоверные данные из любого агрегатора погоды (Яндекс.Погода, Gismeteo и др.).
С решением задачи нелинейной аппроксимации хорошо справляются нейронные сети прямого распространения. Выбираем эту архитектуру.
На вход нейронной сети рекомендуем подавать два значения. Месяц от 1 до 12 и значение температуры. Сеть будет содержать два нейрона первого слоя. Определим число скрытых слоев, например 2 слоя по 3 нейрона в каждом. И один нейрон выходного слоя. Получится структура изображенная на картинке ниже.
У вас есть выборка примеров для обучения — значения температуры воздуха в Москве в разбивке по месяцам и по дням за 10 лет. То есть 365*10 = 3650 строк. Эти цифры нужно нормировать в диапазоне от -1 до 1 (см. статью Способы нормализации данных).
Стоит подумать над исключением аномальных значений, например +1-2 градус в в июне, или +5-10 градусов в январе, так как это экстремальные значения. Если их не исключать сеть может давать худший прогноз, т. к. будет учитывать эти аномалии, встречающиеся раз в несколько десятилетий.
Выборка должна быть разделена на обучающую и тестовую. Обучающую выборку используем для обучения, тестовую для проверку адекватности модели.
В качестве алгоритма обучения НС можно выбрать метод обратного распространения ошибки (см. урок 2.4.) или любой градиентный метод.
Проводим обучение нейронной сети при помощи Python или любого другого пакета прикладных программ. Обучение ведем до достижения заданной ошибки или числа эпох.
Оценку адекватности проводим на тестовых данных. Например, можно рассчитать среднеквадратичную ошибку для 10-20 примеров, если она будет выше 80-90%, то модель можно использовать для прогноза. Если нет — тогда есть три варианта:
— сеть необходимо дообучить, добавив в обучающую выборку новые примеры,
— использовать другие алгоритмы обучения (оптимизаторы в Python),
— изменить структуру сети (число скрытых слоев и/или количество нейронов в них),
Теперь нейронную сеть можно использовать «в боевых условиях», подав текущий месяц и текущую температуру воздуха в Москве и посмотреть в реальности насколько ваша модель точно предсказывает погоду.
Мы рассмотрели в общем виде, как происходит нейросетевое моделирование. Данный алгоритм применим не только для простых задач. Его можно масштабировать и использовать для обучения сложных моделей с множеством параметров.
Чтобы избежать детских ошибок, от которых не застрахованы даже крупные компании (подробнее в статье), обратите внимание на этап корректной постановки задачи, выбора источника данных для обучающей выборки и подготовки самой обучающей выборки. Заменить структуру сети или метод обучения зачастую гораздо легче, чем собирать данные для обучения или в самом конце осознать, что формулировка задачи некорректна.
В качестве задачи на подумать, можете самостоятельно концептуально решить вот эту задачу.
Текст задачи: Сетевая компания, обслуживает город N, поставляя IP-адреса частным лицам. Компания хочет обработать данные клиентов, разделив клиентов на три класса: бедные, среднего достатка и богатые.
Вопросы:
Ответ под спойлером: