Рекуррентные нейронные сети / структура LSTM: c_t + 1 = i_t * k_t + c_t * f_t - PullRequest
0 голосов
/ 07 апреля 2019

Источник на LSTM в: https://medium.com/@jon.froiland/recurrent-neural-networks-part-6-d585c7af8923

output_t = activation(dot(state_t, Uo) + dot(input_t, Wo) + dot(C_t, Vo) + bo)
i_t = activation(dot(state_t, Ui) + dot(input_t, Wi) + bi)
f_t = activation(dot(state_t, Uf) + dot(input_t, Wf) + bf)
k_t = activation(dot(state_t, Uk) + dot(input_t, Wk) + bk)

Вы получаете новое состояние переноса (следующий c_t), комбинируя i_t, f_t и

c_t+1 = i_t * k_t + c_t * f_t

Я понимаюпотребность в f_t и i_t ИЛИ k_t, однако, я не понимаю, зачем нужны i_t и k_t.Каждый содержит одни и те же входные данные (state_t и input_t).Это для целей реализации, чтобы помочь выровнять с c_t * f_t с точки зрения размерности матрицы?Любые мысли по этому поводу приветствуются!

1 Ответ

0 голосов
/ 09 апреля 2019

В классическом LSTM эти два имеют разные функции активации.i_t называется входным затвором с функцией активации сигмоида, k_t также называется «подходящими значениями» с помощью функции активации tanh.Я также прочитал термины «вход» и «вход» и «входная модуляция» (например, Гал & Гахрамани ).Чтобы процитировать замечательный пост в блоге Кристофера Олаха о LSTM,

Следующий шаг [после слоя забытых ворот] - решить, какую новую информацию мы будем хранить всостояние клетки.Это состоит из двух частей.Во-первых, сигмовидный слой, называемый «входным слоем затвора», решает, какие значения мы будем обновлять.Затем слой tanh создает вектор новых значений-кандидатов C ~ t, которые можно добавить в состояние.На следующем шаге мы скомбинируем эти два, чтобы создать обновление состояния.

Входной слой затвора, на который он ссылается, это ваш i_t, возможные значения k_t.По сути,

сигмовидный слой говорит нам, какие (или какая пропорция) значения обновлять, а tanh - как обновлять состояние.

(цитирует Янна)Крынов в посте поста обсуждения).Обязательно ознакомьтесь с этим постом, мне было очень полезно понимать LSTM!

...