Зрозумійте, як d; LSTM і d; ГРУ на схемах - Штучна думка

Повторювані нейронні мережі (RNN) широко використовуються у штучному інтелекті, коли a часове поняття втручається в дані (іноді "приховані", як при аналізі тексту).

Але останні страждають у своїй внутрішній структурі через обмеження, які змушують їх не працювати в багатьох ситуаціях. Потім втручаються комірки LSTM та GRU, ефективність яких лише дорівнює їх складності !

Спробуймо, завдяки цьому посібнику, мати просте, глибоке та проілюстровано як вони працюють.

Проблема рекуррентних нейронних мереж (RNN)

Як працює RNN ?

Нейронні мережі, що повторюються (RNN) - це нейронні мережі, що широко використовуються в процесі глибокого навчання. Дуже нагадує штучну нейронну мережу (скорочено ANN), доцільно знати останню, щоб повністю зрозуміти пояснення RNN.

Для читачів, які не знайомі з тим, як працює ANN, ось короткий підсумок:

  • Вхідні дані надходять на вхідний рівень мережі. Дані мають форму вектора, наприклад (0,7, 0,4, 0,9), і кожна координата вектора направляється на жовтий нейрон нижче
  • Потім 3 значення будуть просуватися в мережевому рівні за шаром (1-й синій, потім 2-й синій, потім оранжевий, що є вихідним). Говорять, що сині шари приховані, а оранжевий - вихідним.
  • Щоб рухатися вперед, між кожним нейроном є лінія, яка їх з’єднує: ця лінія пов’язана зі значенням, званим вагою (наприклад, 0,3 між 1-м жовтим нейроном і 1-м синім), яке буде зважувати вхідне значення (тобто ми матимемо 0,7 * 0,3 = нове значення, що надходить у 1-й синій нейрон).
  • Всі вхідні (і зважені) значення додаються до входу нейрона, а потім до результату застосовується певна функція, яка дає вихідне значення для кожного нейрона
  • Потім ці значення поширюються на наступний шар тощо.
зрозумійте
Архітектура періодичної нейронної мережі (кредит: Ламберт Росік)

Ось схема RNN. На відміну від ANN (і це єдина різниця), на кожному блакитному нейроні ми маємо цикл (розроблений на схемі мережі):

  • ми маємо дані t (3 значення, по одному для кожного жовтого нейрона), які надходять у мережу
  • вони поширюються в мережі, як у ANN
  • за винятком того, що кожен блакитний нейрон, крім отримання зважених виходів попередніх нейронів, також отримує значення, яке вийшло само собою для даних t-1
  • вихідне значення кожного синього нейрона зберігається і буде використовуватися для даних t + 1

Отже, ми маємо пам'ять 1 ітерації для синіх нейронів.

Ось більш анімований погляд на RNN, тепер, коли у вас є основна ідея. Почнемо з використання RNN для аналізу слів речення «Вчора ввечері я з’їв гамбургер і трохи» та передбачити наступне слово («фрі»).

Спочатку кожне слово перетворюється у вектор. Наприклад, “вчора” стає (0,1, 0,5, 1): це перетворення є важливим етапом підготовки даних. Потім кожен вектор направляється по черзі на RNN, показаний нижче у вигляді зеленого квадрата (який представляє його клітину, тобто нейрон).

Речення "Вчора ввечері я з'їв гамбургер і трохи" перетворюється у вектори, а потім подається в RNN (кредит: Michaël Nguyen)

Між кожним словом, надісланим у RNN, вихідний сигнал, зазначений \ (h_t \) для попереднього слова, додається як вхідне слово з новим словом. Цей вихід називається "прихованим станом"

Вектор поточного слова з позначкою \ (x_t \) та вихід (а також вектор) для попереднього слова, з позначкою \ (h_ \), ставляться наскрізним, а потім переходять у математичну функцію « tanh ”Перш ніж стати новим результатом, зазначив \ (h_t \)

У нейронних мережах дуже часто використовують «активаційні функції» на виході нейронів. Наприклад, tanh, представлений навпроти, - це функція, яка перетворює значення (наприклад, 300) у нове значення між - 1 і 1 (див. Криву). Перевагою такої функції є запобігання надмірному виходу нейронів, оскільки для цього потрібно більше часу для обчислення та пам’яті комп’ютера ...

Проблема навчання та пам’яті

Що стосується персептрона свого часу, то РНН страждає від проблеми розсіювання градієнта. Що це означає ?

Для «вивчення» RNN використовує метод градієнтний спуск для того, щоб оновити ваги між нейронами. Це базується на наступній формулі:

\ (w: = w - \ alpha \ cdot F_w \)

  • \ (w \) вага мережі
  • \ (\ alpha \) швидкість навчання мережі
  • \ (F_w \) градієнт мережі щодо ваги \ (w \)

Проблема: ваги оновлюються справа наліво. Коли ми рухаємось ліворуч, добуток \ (\ alpha \ cdot F_w \) стає дуже мало а ваги перших шарів нейронів майже не змінюються! Таким чином, ці шари не вчаться абсолютно нічого ...

Отже, RNN може легко забути дані, які є трохи старими (або слова, які досить далекі від поточного слова в тексті) на етапі навчання: його пам’ять коротка.

На шляху до кращої архітектури: LSTM та GRU

Якщо клітина (нейрон) RNN в кінцевому підсумку дуже проста (ми об’єднуємо два вектори, а потім застосовуємо на них tanh), це спочатку не стосується LSTM та GRU.

LSTM та GRU були створені як метод для ефективного управління короткостроковою та довгостроковою пам'яттю через їхні системи воріт. Якщо варіантів багато, оригінальні версії (представлені тут) все ще дуже широко використовуються в кращих моделях глибокого навчання для автоматичної обробки природної мови, яка стосується розпізнавання/синтезу мовлення, а також для генерації тексту або дослідження ринку ...

Як працює LSTM

LSTM, що означає «Довга короткочасна пам’ять» - це комірка, що складається з трьох «воріт»: це області обчислення, які регулюють потік інформації (виконуючи конкретні дії). У нас також є два типи виходів (звані станами).

  • Забути ворота
  • Вхідні ворота
  • Вихідні ворота
  • Прихований стан
  • Стан клітини

Почнемо з розуміння всіх можливих операцій в LSTM, щоб тоді не натрапити на них.

Ці операції у дверях дозволяють LSTM зберегти або видалити інформацію, яку він має у своїй пам'яті. Наприклад, у нашому реченні "Вчора ввечері я з'їв гамбургер і трохи", важливо пам'ятати слова "гамбургер" і "з'їсти", тоді як детермінанти "один", "і" можуть бути забуті мережею.

Дані, що зберігаються в мережевій пам’яті, насправді є вектором, позначеним \ (c_t \): стан комірки. Оскільки цей стан залежить від попереднього стану \ (c_ \), який сам по собі залежить навіть від попередніх станів, мережа може зберігати інформацію, яку бачила давно (на відміну від класичної RNN).

Як дізнається мережа LSTM, які її внутрішні змінні ?

Входи для кожного воріт зважуються ваги, пов'язані з дверима, а також через ухил. У нас є 4 вагові матриці (їх розміри залежать від розмірів \ (h_ \) та \ (x_t \)):

  • \ (W_f \): обважнення входу ворота забуття
  • \ (W_i \): зважує вхідні дані вхідного затвора
  • \ (W_C \): зважує дані, які будуть поєднуватися із входом для входу для оновлення стану комірки
  • \ (W_o \): зважує вхідні дані вихідного затвора

Тепер давайте детально розберемо, що роблять кожні двері, маючи на увазі це дані зважуються за вагами W (до яких ми додаємо зміщення, яке залежить від воріт і яке також оновлюється на етапі навчання).

Забути ворота

Цей шлюз вирішує, яку інформацію слід зберігати чи відкидати: інформація з попереднього прихованого стану з’єднується із вхідними даними (наприклад, векторизоване слово “des”), тоді ми застосовуємо до нього функцію сигмовидної форми для нормалізації значень 0 і 1. Якщо вихід сигмоїди близький до 0, це означає, що ми повинні забути інформацію а якщо ми близькі до 1, то повинні запам'ятати це для решти.

Вхідні ворота

Роль вхідного входу полягає у вилученні інформації з поточних даних (наприклад, слово "з"): ми будемо застосовувати паралельно сигмоїд до двох об'єднаних даних (див. Попередній затвор) і.

  • Sigmoid поверне вектор, для якого координата, близька до 0, означає, що координата в еквівалентному положенні в об'єднаному векторі не важлива. І навпаки, координата, близька до 1, буде вважатися "важливою" (тобто. корисно для прогнозування що намагається зробити LSTM).
  • Tanh просто нормалізує значення (перезапише їх) від -1 до 1, щоб уникнути проблем із перевантаженням комп'ютера.
  • Таким чином, добуток цих двох дозволить зберігати лише важливу інформацію, інші майже замінені на 0

Стан клітини

Ми говоримо про стан комірки перед наближенням до останніх дверей (вихідних дверей), оскільки в ній використовується розраховане тут значення.

Стан клітини можна розрахувати досить просто за дверима забуття та вхідними дверима: спочатку ми множимо координати, координуючи вихід із забуття зі старим станом клітини. Це дозволяєзабути якусь інформацію з попереднього стану, які не використовуються для нового прогнозу. Потім ми додаємо все (координата до координати) з виходом вхідних дверей, що дозволяє записати в стан комірки те, що має LSTM (серед входів та попереднього прихованого стану) визнані доречними.

Вихідні ворота

Останній крок: вихідний шлюз повинен вирішити, яким буде наступний прихований стан, який містить інформацію про попередні записи в мережі та використовується для прогнозування.

Для цього новий стан клітини, розрахований безпосередньо перед цим, нормалізується між -1 та 1 завдяки tanh. Зв'язаний вектор поточного входу з попереднім прихованим станом переходить, зі свого боку, у сигмоподібну функцію, метою якої є прийняття рішення про інформацію, яку потрібно зберігати (близько 0 означає, що ми забуваємо, а близько 1, що ми будемо зберігати цю координату стану клітини).

Це все може здатися магічний в тому сенсі, що схоже на те, що мережа повинна вгадати, що їй потрібно зберегти у векторі на льоту, але пам’ятайте, що в якості вхідних даних застосовується матриця ваги. Саме ця матриця, конкретно, збереже той факт, що така чи інша інформація важлива чи ні з тисяч прикладів, які мережа побачила !

Як працює ГРУ

ГРУ, Закритий рекуррентний блок, зі свого боку, має дві двері та вихідний стан:

  • Скинути ворота
  • Оновити ворота
  • Стан клітини

Ось різні функції, які ми знайдемо в комірці.

Як тільки ви зрозумієте, як працює LSTM, GRU вже не далеко (хоча і простіше). Зверніть увагу на появу нової операції, яка полягає в інвертуванні вектора відносно 1 (ми обчислюємо 1 - вектор). Це має на меті змінити висновки ворота (наприклад, те, що все, що було визнано важливим, стає тривіальним і навпаки): за логікою це НЕ ворота.

Але спочатку ... про що дізнається ГРУ ?

Ось схема розташування вагових матриць, які обтяжують вектори, що входять у ворота.

  • \ (W_r \): зважте вхідні дані воріт скидання
  • \ (W_z \): зважує вхідні дані шлюзу оновлення
  • \ (W_h \): зважує дані, які будуть об'єднані для визначення поточного прихованого стану

Скинути ворота

Ці ворота використовуються для контролю того, скільки інформації, яку передає мережа, повинна забути. Попередній прихований стан, об'єднаний з вхідними даними, проходить через сигмовидну (щоб зберегти лише відповідні координати), а потім множиться на старий прихований стан: тому ми зберігаємо лише важливі координати (наприклад, "вони" попереднього стану ( тому ми втратили частину попереднього стану в цих дверях).

Оновити ворота

Ці двері працюють точно так само, як двері забуття та входу LSTM: вони вирішують, яку інформацію зберігати, а що забути.

Вхідні дані та старий прихований стан об'єднуються і проходять через сигмоподібну функцію, роль якої полягає у визначенні важливих компонентів.

Вихід з мережі GRU

Попередній прихований стан (частково стирається воротами скидання) поєднується з входом мережі і нормалізується значенням від -1 до 1. Потім ми скасовуємо всі його координати, які вважаються "марними для прогнозів" (завдяки виходу з оновлення), тоді ми додаємо координати попереднього прихованого стану, який вважався "марним" (на цей раз скасувавши всі відповідні координати).

Розрахунки, зроблені ГРУ, швидші та простіші. Однак зауважте, що можливості/ефективність останнього більше не підлягають доведенню, і він використовується стільки, скільки LSTM.

Дякую

Я хотів подякувати Майкл Нгуєн за його чудову роботу з представлення LSTM та GRU на середньому рівні, зокрема для схеми, показані тут що він дозволив мені використовувати (з перекладом його статті) !

Під час написання/перекладу цієї статті я не тільки зрозумів (принципово), як працюють типи клітин LSTM та GRU, але й навчився робити красиві анімовані схеми ^^

Не соромтеся дивитись відео Міхаеля:

Кредит зображення обкладинки: Міхаел Нгуєн