Нейросети. Обработка естественного языка - страница 16

Шрифт
Интервал


plt.plot(np.arange(n_steps, n_steps+future_steps), future_predictions, label="Прогноз")

plt.xlabel("Временной шаг")

plt.ylabel("Значение")

plt.legend()

plt.show()

```

В этом примере:

– Мы создаем простую RNN с одним слоем, который прогнозирует следующее значение временного ряда на основе предыдущих значений.

– Обучаем модель с использованием оптимизатора "adam" и функции потерь "mse" (Mean Squared Error).

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

На результате кода, который вы предоставили, мы видим следующее:

1. Исходные данные (синяя линия): Это начальная часть временного ряда, который был сгенерирован. В данном случае, это линейная функция (0.1 * time) с добавленными синусоидальными колебаниями (np.sin(time)).

2. Прогноз (оранжевая линия): Это результаты прогноза, сделанные моделью RNN на будущее. Модель обучается на исходных данных и затем пытается предсказать значения временного ряда на заданное количество временных шагов вперед (future_steps).

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

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

В этом примере обучаемые параметры модели – это веса и смещения в слое RNN и в слое Dense. Модель настраивает эти параметры в процессе обучения, чтобы минимизировать ошибку прогноза временного ряда.

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

Однако RNN имеют несколько ограничений, из которых наиболее значимой является проблема затуханияградиентов (vanishing gradients). Эта проблема заключается в том, что при обучении RNN градиенты (производные функции потерь по параметрам сети) могут становиться очень маленькими, особенно на длинных последовательностях. Это затрудняет обучение, поскольку сеть может "забывать" информацию о давно прошедших событиях в последовательности.

Для решения проблемы затухания градиентов были разработаны более продвинутые архитектуры RNN: