Модели -

Вариант — 2

В этом подходе предпоследний временной шаг ввода кодировщика используется в качестве маркера «конец» для кодировщика, а последний временной шаг ввода кодировщика используется в качестве маркера «начало» для декодера.

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

  • Принуждение учителей с общими весами

В этой модели мы используем принуждение учителя для создания модели кодер-декодер.

Архитектура модели выглядит так:

Код поезда -

Код вывода -

Форсирование учителей с общими весами и Dot Attention Луонга

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

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

Механизм внимания точки можно объяснить как —

Let n_in = 10 and units/hidden size = 256

Encoder hidden states = Hen = (None,10,256)
Decoder hidden states at each decoder time step = Hd = (None,256)
Hd = tf.expand_dims(Hd,1) = (None,1,256)

So,

score = Hen.Hd.T
score = (None,10,256).(None,1,256).T
score = (None,10,256).(None,256,1)
score = (None,10,1)

attention_weights = tf.nn.softmax(score, axis=1) = (None,10,1)

context_vector = attention_weights * Hen
context_vector = (None,10,1) * (None,10,256)
context_vector = (None,10,256)

context_vector = tf.reduce_sum(context_vector, axis=1)
context_vector = (None,256)

This context vector is concatenated 
with the input at each time step at the decoder side.

Код поезда -

Код вывода -

  • Форсирование учителей с общими весами и общим вниманием Луонга

Механизм общего внимания можно объяснить как —

Let n_in = 10 and units/hidden size = 256

Encoder hidden states = Hen = (None,10,256)
Decoder hidden states at each decoder time step = Hd = (None,256)
Hd = tf.expand_dims(Hd,1) = (None,1,256)
Trainable matrix Wa = (None,Encoder hidden size,Decoder hidden size)
Trainable matrix Wa = (None,256,256)

So,

score = Hen.Wa
score = (None,10,256).(None,256,256)
score = (None,10,256)

score = score.Hd.T
score = (None,10,256).(None,1,256).T
score = (None,10,256).(None,256,1)
score = (None,10,1)

attention_weights = tf.nn.softmax(score, axis=1) = (None,10,1)

context_vector = attention_weights * Hen
context_vector = (None,10,1) * (None,10,256)
context_vector = (None,10,256)

context_vector = tf.reduce_sum(context_vector, axis=1)
context_vector = (None,256)

This context vector is concatenated 
with the input at each time step at the decoder side.

Код поезда -

Код вывода -

  • Форсирование учителей с общими весами и Concat Attention Луонга

Механизм внимания Concat можно объяснить как —

Let n_in = 10 and units/hidden size = 256

Encoder hidden states = Hen = (None,10,256)
Decoder hidden states at each decoder time step = Hd = (None,256)
Hd = tf.expand_dims(Hd,1) = (None,1,256)
Trainable matrix W1 = (None,hidden size,Downsample)
Trainable matrix W1 = (None,256,128)
Trainable matrix W2 = (None,hidden size,Downsample)
Trainable matrix W2 = (None,256,128)
Trainable matrix V = (None,1,hidden size)
Trainable matrix V = (None,1,256)

So,

enc_w1 = Hen.W1
enc_w1 = (None,10,256).(None,256,128)
enc_w1 = (None,10,128)

dec_w2 = Hd.W2
dec_w2 = (None,1,256).(None,256,128)
dec_w2 = (None,1,128)
dec_w2 = tf.broadcast_to(dec_w2, tf.shape(enc_w1))
dec_w2 = (None,10,128)

score = tf.math.tanh(tf.concat([enc_w1, dec_w2], axis=-1))
score = (None,10,256)
score = score.V.T
score = (None,10,256).(None,1,256).T
score = (None,10,256).(None,256,1)
score = (None,10,1)

attention_weights = tf.nn.softmax(score, axis=1) = (None,10,1)

context_vector = attention_weights * Hen
context_vector = (None,10,1) * (None,10,256)
context_vector = (None,10,256)

context_vector = tf.reduce_sum(context_vector, axis=1)
context_vector = (None,256)

This context vector is concatenated 
with the input at each time step at the decoder side.

Код поезда -

Код вывода -

  • Без принуждения учителя с общими весами

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

Архитектура модели выглядит так:

Код поезда -

Код вывода -

  • Без принуждения учителя с общими весами и Dot Attention Луонга

Код поезда -

Код вывода -

  • Без принуждения учителя с общими весами и общим вниманием Луонга

Код поезда -

Код вывода -

  • Без принуждения учителя с общими весами и Concat Attention Луонга

Код поезда -

Код вывода -

  • Учитель форсирует отдельные веса

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

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

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

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

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

Код поезда -

Код вывода -

  • Без форсирования учителем отдельных весов

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

Код поезда -

Код вывода -

  • Принуждение учителей с гибридными весами

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

Допустим, мы работаем над приложением IOT, в котором у нас есть несколько датчиков разных типов.

Например -

  1. Первые 10 временных рядов представляют собой измерения температуры в различных местах умного здания.
  2. Следующие 10 временных рядов — это измерение количества света, попадающего в умное здание в разных местах.
  3. Следующие 2 временных ряда являются измерением некоторой величины «x».
  4. Следующий 1 временной ряд представляет собой измерение некоторой величины «у».
  5. Следующий 1 временной ряд представляет собой измерение некоторой величины «z».

Здесь мы создаем модель с разделенным распределением весов, т.е.

  1. Первые 10 временных рядов имеют общие веса только друг с другом.
  2. Следующие 10 временных рядов делят веса только друг с другом.
  3. Следующие 2 временных ряда делят веса только друг с другом.
  4. Следующий 1 временной ряд имеет свои веса.
  5. Следующий 1 временной ряд имеет свои веса.

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

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

ПРИМЕЧАНИЕ. Результаты из записной книжки не отражают этот сценарий, так как это всего лишь пример. Если вы работаете над чем-то подобным, вам нужно изменить код в соответствии с вашим набором данных.

Код поезда -

Код вывода -

  • Без форсирования учителем гибридных весов

Код поезда -

Код вывода -

  • Все части

Часть — 1

"Часть 2"

Часть — 3

Часть — 4

  • Github и LinkedIn


https://www.linkedin.com/in/puneet-chandna-050486131/

  • Ссылки






https://machinelearningmastery.com/teacher-forcing-for-recurrent-neural-networks/

https://machinelearningmastery.com/develop-encoder-decoder-model-sequence-sequence-prediction-keras/

https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/

https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/