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

Вопрос или проблема

Ранее я работал над задачами с небольшими нейронными сетями с прямой связью.

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

Мой вопрос:

В такой задаче я должен разработать 25 независимых моделей (которые имеют одинаковую структуру входных данных) или одну модель с 25 выходами?

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

Было бы это задачей параллелизма данных или параллелизма моделей?

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

Существует несколько типов моделей, которые позволяют выполнять «мультивыходную» регрессию/классификацию.

документация sklearn содержит хороший обзор:

введите описание изображения здесь

Однако MultiOutputRegressor просто подгоняет один регрессор для каждой цели. В то время как с RegessorChain

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

Функциональный API Keras позволяет моделировать несколько целей одновременно. Общая структура таких моделей выглядит так (полный минимальный пример здесь):

# Входные данные и архитектура модели
Input_1=Input(shape=(YOUR_SHAPE_HERE, ))
x = LAYERS_HERE

# Выходы
out1 = Dense(1)(x)
out2 = Dense(1)(x)

# Компиляция/обучение модели
model = Model(inputs=Input_1, outputs=[out1,out2])
model.compile(optimizer = "rmsprop", loss="mse")

# Добавьте реальные данные в операцию fit
model.fit(train_data, [train_targets,train_targets2], epochs=500, batch_size=4, verbose=0, validation_split=0.2)

Ответ или решение

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

1. Независимые модели против комплексной модели

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

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

2. Параллельные нейронные сети

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

# Пример архитектуры модели
from keras.layers import Input, Dense
from keras.models import Model

# Входные данные и архитектура модели
input_layer = Input(shape=(input_shape,))
x = ...  # слой/слои вашей модели

# Выходы
output_1 = Dense(1)(x)  # Прогноз для локации 1
output_2 = Dense(1)(x)  # Прогноз для локации 2
# Добавьте выходы для всех 25 локаций

# Компиляция и обучение модели
model = Model(inputs=input_layer, outputs=[output_1, output_2, ...])  # все выходы
model.compile(optimizer='adam', loss='mse')
model.fit(train_data, [targets_1, targets_2, ...], epochs=500, batch_size=4, validation_split=0.2)

3. Параллелизм данных или моделей

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

Заключение

Рекомендуется рассмотреть создание одной модели с 25 выходами для оптимизации времени обучения и обработки данных, а также для захвата взаимосвязей между различными локациями. Тем не менее, при наличии значительных различий в зависимости от местоположения может быть разумным разработать несколько независимых моделей. Баланс между этими подходами зависит от ваших специфических требований к точности и вычислительным ресурсам.

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

Капча загружается...