Получение градиентов для обратного распространения в RNN

Первую часть этого поста можно найти здесь.

Обратное распространение в одной ячейке RNN

Целью обратного распространения в RNN является вычисление частных производных весовых матриц (W_xh, W_ah, W_ao) и векторов смещения (b_h, b_o) относительно окончательных потерь L.

Вывести требуемые производные довольно просто, мы просто вычисляем их, используя формулу цепного правила.

Шаг 1: функция потерь определяется для расчета стоимости. Выбор функции потерь обычно основан на поставленной задаче, в этом случае мы используем функцию потерь кросс-энтропии для мультиклассов outputL⟨t⟩ и рассчитываем, как показано ниже:

Шаг 2: Затем мы работаем в обратном направлении, вычисляя частную производную прогнозируемой выходной активации ŷ⟨t⟩ по отношению к потерям L⟨t⟩,, и поскольку функция softmax принимает значения из выходных данных нескольких классов во время прямого распространения, 𝜕ŷ⟨t⟩ рассчитывается для класса i и других классов k, как показано ниже:

Шаг 3: Затем вычислите частную производную прогнозируемого выхода o⟨t⟩ относительно потерь L⟨t⟩, используя частную производную 𝜕ŷ⟨t⟩ для класса i и других классов k как показано ниже:

Шаг 4. Вычислите частную производную вектора смещения выхода b_o относительно потерь L⟨t⟩, используя 𝜕o⟨t⟩ в цепном правиле, как показано ниже:

Шаг 5. Вычислите частную производную матрицы весов скрытого вывода W_ao относительно потерь L⟨t⟩, используя 𝜕o⟨t⟩ в цепном правиле, как показано ниже:

Шаг 6. Вычислите частную производную активации скрытого состояния a⟨t⟩ в отношении потерь L⟨t⟩, используя 𝜕o⟨t⟩ and 𝜕h⟨t+1⟩ в цепном правиле, как показано ниже:

Шаг 7. Вычислите частную производную скрытого состояния h⟨t⟩ относительно потерь L⟨t⟩, используя 𝜕a⟨t⟩ в цепном правиле, как показано ниже:

Шаг 8. Вычислите частную производную смещения скрытого состояния b_h относительно потерь L⟨t⟩, используя 𝜕h⟨t⟩ в цепном правиле, как показано ниже:

Шаг 9: Вычислите частную производную смещения «входные данные-скрытые» W_xh по отношению к потерям L⟨t⟩, используя 𝜕h⟨t⟩ в цепном правиле, как показано ниже:

Шаг 10. Вычислите частную производную смещения «входные данные-скрытые» W_ah по отношению к потерям L⟨t⟩, используя 𝜕h⟨t⟩ в цепном правиле, как показано ниже:

Шаг 11: Наконец, передайте частную производную скрытого состояния h⟨t⟩ по потерям 𝜕h⟨t⟩ в предыдущую ячейку RNN:

Обратное распространение во времени (BPTT)

Как и во время прямого распространения в предыдущем посте, BPTT также просто выполняет указанные выше шаги в обратном направлении по всей развернутой рекуррентной сети.

Основное различие здесь состоит в том, что для обновления весов и смещений мы должны вычислять сумму каждой частной производной 𝜕W_ao, 𝜕b_o, 𝜕W_ah, 𝜕W_xh, 𝜕b_h, на каждом временном шаге t, поскольку эти параметры используются совместно во время прямого распространения.

Заключение

В частях I и II этого поста мы рассмотрели этапы прямого и обратного распространения, участвующие в обучении рекуррентной нейронной сети. Далее мы исследуем проблему взрывающегося и исчезающего градиента в RNN и решения, разработанные для ее устранения.