Вопрос или проблема
Я новичок в этой области и читал статью “Предсказание количества цитат на основе техник глубокого обучения нейронных сетей”. Там авторы описывают код, который они внедрили, если кто-то хочет воспроизвести результаты. Я попытался это сделать, но не уверен, получилось ли у меня.
Вот их описание:
- Модуль RNN - SimpleRNN
- Выходное измерение кодировщика - 512
- Выходной слой - полносвязный слой
- Активационная функция - ReLU
- Техника предотвращения перенапряжения - Dropout с коэффициентом 0,2
- Эпохи - 100
Оптимизационный алгоритм - RMSProp
Скорость обучения - 10^{-5}
Размер пакета - 256
А вот мое внедрение. Я не уверен, является ли созданная мной модель последовательностью к последовательности.
epochs = 100
batch_size = 256
optimizer = keras.optimizers.RMSprop(lr=0.00001)
model = keras.models.Sequential([
keras.layers.SimpleRNN(512, input_shape=[X_train.shape[0], X_train.shape[1]],
activation='relu', return_sequences=True, dropout=0.2),
keras.layers.Dense(9)
])
model.compile(loss="mse", optimizer=optimizer, metrics=[keras.metrics.RootMeanSquaredError()])
Резюме этой модели:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn (SimpleRNN) (None, 154521, 512) 266240
_________________________________________________________________
dense (Dense) (None, 154521, 9) 4617
=================================================================
Всего параметров: 270,857
Обучаемых параметров: 270,857
Необучаемых параметров: 0
_________________________________________________________________
Буду признателен за любую помощь. Спасибо!
Обновление: Вот набор данных.
год место c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14
1989 234 0 1 2 3 4 5 5 5 5 8 8 10 11 12
1989 251 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1990 346 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Мне нужно подать на вход все столбцы до c5 и пытаться предсказать остальные c (которые являются количеством цитирований на предстоящие годы).
Что является входом и выходом? Предполагая, что ваш вход – последовательность документов, вам нужно преобразовать ее в какую-то форму встраиваний (TF-IDF или другие). После этого идет RNN – на мой взгляд, это выглядит нормально. Выход RNN равен количеству временных шагов (количество слов в каждом документе?). Для каждого временного шага мы предсказываем, используя конечный плотный слой. У вас 9 выходов. Это какая-то классификация по 9 разным типам категорий или уровням количества цитирований?
В целом выглядит нормально с учетом вышеупомянутых предположений, за исключением того факта, что вы подаете сырые данные вместо использования слоя встраивания.
Ответ или решение
Вопрос о моделировании архитектуры Encoder-Decoder на основе статьи "Предсказание количества цитирований с использованием методов глубокого обучения нейронных сетей" требует внимательного и тщательного рассмотрения. Сначала необходимо понять теоретическую основу данной архитектуры (T – Theory), затем привести пример имплементации (E – Example) и, наконец, обсудить применение и возможные улучшения вашей реализации (A – Application).
Теория (Theory)
Архитектура Encoder-Decoder является популярной моделью в задачах обработки последовательностей, таких как машинный перевод или, как в вашем случае, предсказание количества цитирований в будущем. Эта архитектура часто использует рекуррентные нейронные сети (RNN), которые хорошо справляются с обработкой данных, имеющих временную зависимость.
В данной статье описывается использование SimpleRNN
в качестве модуля RNN, что является упрощенной версией более сложных моделей, таких как LSTM или GRU. Основная задача RNN в этом контексте — обработка входной последовательности и кодирование её в представление фиксированного размера, которое затем декодируется в выходную последовательность.
Входная часть (Encoder) обрабатывает последовательность данных (в вашем случае — колонки year
, venue
, c1
, c2
, c3
, c4
, c5
), а выходная часть (Decoder) должна предсказать следующие колонки (c6
, …, c14
), которые представляют количество цитирований. Конечный слой — это Dense
-слой, который осуществляет линейное преобразование закодированного представления для получения предсказанного результата.
Применение функции активации ReLU (Rectified Linear Unit
) помогает модели обучаться нелинейным зависимостям, а Dropout с долей 0.2 предотвращает переобучение. Optimizer RMSProp часто выбирается для задач, связанных с последовательными данными, благодаря своей способности к адаптации шага обучения.
Пример (Example)
Ваша реализация учитывает ключевые аспекты, описанные в статье, но требует уточнений. Прежде всего, необходимо определить, является ли задача строго регрессионной или она имеет какой-либо элемент классификации (например, предсказание уровней цитирований как категории).
Вот пример исправленной и улучшенной модели с учётом возможных ошибок:
import keras
from keras.layers import SimpleRNN, Dense, Dropout
# Определяем параметры модели
epochs = 100
batch_size = 256
learning_rate = 0.00001
# Оптимизатор
optimizer = keras.optimizers.RMSprop(lr=learning_rate)
# Создание модели Encoder-Decoder
model = keras.models.Sequential([
# Энкодер
SimpleRNN(512, input_shape=(None, X_train.shape[2]),
activation='relu',
return_sequences=False),
Dropout(0.2),
# Декодер
Dense(9, activation='relu')
])
model.compile(loss="mse", optimizer=optimizer, metrics=[keras.metrics.RootMeanSquaredError()])
model.summary()
Применение (Application)
Ваша текущая реализация модели предполагает, что RNN обрабатывает последовательности, и ваш выбор архитектуры на основе описания статьи в целом правильный. Однако необходимо учитывать несколько аспектов:
-
Предобработка данных: Прежде чем передавать данные в RNN, убедитесь, что они нормализованы, что особенно важно для обучения нейронных сетей. В задача анализа текстов часто применяется векторизация терминами TF-IDF или embeddings (например, Word2Vec или GloVe), чтобы преобразовать текстовые последовательности в числовые данные.
-
Переосмысление выходного слоя: Если предсказание, которое вы пытаетесь сделать, является регрессионной задачей (например, предсказание количества цитирований), значит, ваш выходной слой правильно настроен на 9 нейронов. Если же задача включает классификацию, возможно, потребуется изменить активацию выходного слоя на софтмакс (softmax) и использовать соответствующую функцию потерь, такую как cross-entropy.
-
Валидация и тестирование: Всегда используйте методологию кросс-валидации для оценки качества модели и избегания переобучения. Разделение данных на обучающую и тестовую выборки, а также возможно использование валидационной выборки, позволит более точно оценить качество модели.
-
Гиперпараметры: Вы можете экспериментировать с различными гиперпараметрами, такими как размер скрытого состояния RNN, размер партии, скорость обучения, и т.д. для достижения наилучших результатов.
Ваш подход можно улучшить, идя по пути увеличения сложности модели, используя более сложные нейронные слои или исследуя подходы энкодера-декодера с вниманием (attention), которые могут повысить способность модели находить зависимости в данных.