Получение градиентов для обратного распространения в 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 и решения, разработанные для ее устранения.