Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
путем схлопывания последовательных входных данных и подачи их на вход плот
ного слоя, так как он принимает входной сигнал только фиксированной формы.
Более того, цикл
for
отражает еще одно важное свойство RNN —
единство па-
раметров
(parameter sharing). Под ним понимается использование одних и тех же
весовых параметров (
W
и
U
) для всех временн
ы
х шагов. Можно взять и собственное
значение
W
(и
U
) для каждого из временн
ы
х шагов, но это нежелательно, поскольку
ограничивает число временн
ы
х шагов, которое может обработать RNN, и ведет
к резкому росту числа настраиваемых параметров, а значит, и росту объема вы
числений и вероятности переобучения. Таким образом, RNNслои подобны слоям
conv2d в сверточных сетях тем, что для эффективности вычислений и защиты от
переобучения используется единство параметров, хотя рекуррентные и conv2dслои
реализуют его поразному. Слои conv2d применяют трансляционную инвариант
ность относительно пространственных измерений, а RNNслои — относительно
измерения
времени
.
На рис. 9.2 изображено происходящее в simpleRNN во время выполнения вывода
(при прямом проходе). На нем не показано обновление весовых параметров (
W
и
U
)
во время обучения (обратный проход). Однако обучение RNN следует правилам
обратного распространения ошибки, описанным в подразделе 2.2.2 (см. рис. 2.8), —
начинается с функции потерь, прохода обратно по списку операций с взятием их
производных и накопления по мере этого значений градиентов. Математически
обратный проход рекуррентной сети не отличается от прямого. Единственное
отличие — при обратном проходе RNNслоя мы идем обратно во времени по раз
вернутому графу наподобие приведенного в блоке A на рис. 9.2. Именно поэтому
процесс обучения RNN иногда называют
обратным распространением во времени
(backpropagation through time, BPTT).
SimpleRNN в действии
Хватит абстрактных рассуждений о simpleRNN и RNN в целом. Давайте посмотрим,
как создать слой simpleRNN и включить его в объект модели, чтобы предсказывать
с его помощью температуру точнее, чем раньше. В коде из листинга 9.2 (отрывок из
файла
jena-weather/train-rnn.js
) показано, как это делается. Несмотря на вну
треннюю сложность слоя simpleRNN, сама модель очень проста. Она состоит всего
из двух слоев. Первый из них — simpleRNN на 32 нейрона. Второй — плотный слой,
в котором для генерации непрерывных численных предсказаний температуры ис
пользуется линейная функция активации по умолчанию. Отметим, что поскольку
модель начинается со слоя RNN, схлопывать последовательные входные данные боль
ше не нужно (сравните с листингом 8.3, где мы создавали MLP для решения той же
задачи). На самом деле, если поместить слой схлопывания перед слоем simpleRNN,
будет сгенерирована ошибка, поскольку входные сигналы слоев RNN в TensorFlow.js
должны быть как минимум трехмерными (включая измерение батчей).
Увидеть эту модель simpleRNN в действии можно с помощью следующей команды:
yarn train-rnn --modelType simpleRNN --logDir /tmp/
jean-weather-simpleRNN-logs
Do'stlaringiz bilan baham: |