Чудове запитання!
tl; dr: стан клітини та прихований стан - це дві різні речі, але прихований стан залежить від стану клітини і вони дійсно мають однаковий розмір.
Більш тривале пояснення
Різниця між ними видно з діаграми нижче (частина того ж блогу):
Стан клітини - це смілива лінія, що рухається на захід на схід через вершину. Весь зелений блок називається "комірка".
Прихований стан з попереднього етапу часу розглядається як частина вводу на поточному етапі часу.
Однак трохи складніше бачити залежність між ними, не роблячи повного проходження. Я зроблю це тут, щоб забезпечити іншу точку зору, але під сильним впливом блогу. Моя нотація буде такою ж, і я буду використовувати в своєму поясненні зображення з блогу.
Мені подобається думати про порядок операцій трохи інакше, ніж вони були представлені в блозі. Особисто, як, починаючи з вхідних воріт. Я викладу цю точку зору нижче, але будь ласка, майте на увазі, що блог може бути найкращим способом встановити LSTM в обчислювальній формі, і це пояснення є чисто концептуальним.
Ось що відбувається:
Вхідні ворота
txtht−1
xt=[1,2,3]ht=[4,5,6]
xtht−1[1,2,3,4,5,6]
WiWi⋅[xt,ht−1]+biWibi
Припустимо, ми переходимо від шестивимірного вводу (довжина об'єднаного вхідного вектора) до тривимірного рішення про те, які стани потрібно оновити. Це означає, що нам потрібна матриця ваги 3x6 та вектор зміщення 3x1. Дамо цим значенням:
Wi=⎡⎣⎢123123123123123123⎤⎦⎥
bi=⎡⎣⎢111⎤⎦⎥
Розрахунок буде:
⎡⎣⎢123123123123123123⎤⎦⎥⋅⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢123456⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢111⎤⎦⎥=⎡⎣⎢224262⎤⎦⎥
it=σ(Wi⋅[xt,ht−1]+bi)
σ(x)=11+exp(−x)x
σ(⎡⎣⎢224262⎤⎦⎥)=[11+exp(−22),11+exp(−42),11+exp(−62)]=[1,1,1]
Англійською мовою це означає, що ми збираємось оновити всі наші штати.
Вхідний затвор має другу частину:
Ct~=tanh(WC[xt,ht−1]+bC)
Суть цієї частини полягає в обчисленні того, як ми оновлювали б стан, якби ми це робили. Це внесок нового введення на цьому етапі в стан комірок. Розрахунок проводиться за тією ж процедурою, що показана вище, але з танховою одиницею замість сигмовидної одиниці.
Ct~it
itCt~
Потім виходить ворота забуття, яка була сутністю вашого питання.
Ворота забуття
Мета ворота забуття - видалити раніше засвоєну інформацію, яка вже не є актуальною. Приклад, наведений у блозі, заснований на мові, але ми можемо також думати про розсувне вікно. Якщо ви моделюєте часовий ряд, який, природно, представлений цілими числами, як, наприклад, кількість заражених людей у районі під час спалаху хвороби, то, можливо, після того, як хвороба вимерла в районі, ви більше не хочете турбуватися, враховуючи цю область, коли думаючи про те, як хвороба буде подорожувати далі.
Так само, як і вхідний шар, рівень забуття приймає прихований стан з попереднього кроку часу, а новий вхід - з поточного кроку часу і з'єднує їх. Сенс у тому, щоб вирішити стохастично, що забути і про що пам’ятати. У попередньому обчисленні я показав сигмоподібний шар всіх 1-х, але насправді це було ближче до 0,999, і я округлювався.
Розрахунок схожий на те, що ми зробили у вхідному шарі:
ft=σ(Wf[xt,ht−1]+bf)
Це дасть нам вектор розміру 3 зі значеннями від 0 до 1. Зробимо вигляд, що він нам дав:
[0.5,0.8,0.9]
Тоді ми вирішуємо стохастично виходячи з цих значень, яку з цих трьох частин інформації забути. Один із способів зробити це - генерувати число з рівномірного (0, 1) розподілу, і якщо це число менше, ніж ймовірність включення одиниці (0,5, 0,8 та 0,9 для одиниць 1, 2 і 3 відповідно), тоді ми включаємо цей блок. У цьому випадку це означає, що ми забуваємо цю інформацію.
Швидка примітка: вхідний і забутий шар незалежні. Якби я був людиною, що робить ставку, я б став би, що це хороше місце для паралелізації.
Оновлення стану клітини
Тепер у нас є все необхідне для оновлення стану комірок. Ми беремо комбінацію інформації з вхідних і забутих воріт:
Ct=ft∘Ct−1+it∘Ct~
∘
Убік: продукт Адамара
x1=[1,2,3]x2=[3,2,1]
x1∘x2=[(1⋅3),(2⋅2),(3⋅1)]=[3,4,3]
Кінець убік
Таким чином ми поєднуємо те, що хочемо додати до стану комірки (вхід) з тим, що ми хочемо зняти зі стану клітини (забути). Результат - новий стан клітин.
Вихідні ворота
Це дасть нам новий прихований стан. По суті, суть вихідного ворота полягає у тому, щоб вирішити, яку інформацію ми хочемо врахувати в наступній частині моделі під час оновлення наступного стану комірок. Приклад у блозі - це знову мова, мова: якщо іменник у множині, то сполучення дієслів на наступному кроці зміниться. У моделі захворювання, якщо сприйнятливість особи в певній місцевості відрізняється, ніж в іншій області, то ймовірність зараження інфекцією може змінитися.
Вихідний шар знову приймає той же вхід, але потім враховує оновлений стан комірки:
ot=σ(Wo[xt,ht−1]+bo)
Знову ж таки, це дає нам вектор ймовірностей. Тоді ми обчислюємо:
ht=ot∘tanh(Ct)
Таким чином, поточний стан комірки та вихідні ворота повинні узгоджувати, що потрібно виводити.
tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]
htyt=σ(W⋅ht)
ht
Варіантів LSTM є дуже багато, але це стосується суттєвого!