Ідея, що стоїть за періодичною нейронною мережею (RNN), мені зрозуміла. Я розумію це таким чином:
У нас є послідовність спостережень ( ) (або, іншими словами, багатоваріантний часовий ряд). Кожне окреме спостереження - -вимірний числовий вектор. У моделі RNN ми припускаємо, що наступне спостереження є функцією попереднього спостереження , а також попереднього «прихованого стану» , де приховані стани також представлені числовими векторами (розміри спостережуваних та прихованих станів можуть бути різними). Приховані стани також передбачаються залежними від попереднього спостереження та прихованого стану:
Нарешті, у моделі RNN функція вважається нейронною мережею. Ми тренуємо (підганяємо) нейронну мережу, використовуючи доступні дані (послідовність спостережень). Наша мета в навчанні - вміти прогнозувати наступне спостереження максимально точно, використовуючи попередні спостереження.
Тепер мережа LSTM - це модифікація мережі RNN. Наскільки я зрозумів, мотивація LSTM полягає у вирішенні проблеми короткої пам’яті, властивої RNN (звичайні RNN мають проблеми із пов’язаними подіями, які занадто далеко розділені за часом).
Я розумію, як працюють мережі LSTM. Ось найкраще пояснення LSTM, яке я знайшов. Основна ідея така:
На додаток до вектора прихованого стану ми вводимо так званий вектор "стан комірки", який має такий же розмір (розмірність), як вектор прихованого стану ( ). Я думаю, що вектор "стан клітин" вводиться для моделювання довгострокової пам'яті. Як і у випадку звичайних RNN, мережа LSTM отримує спостережуваний та прихований стан як вхід. Використовуючи цей вхід, ми обчислюємо новий "стан комірки" таким чином:
де функції , та моделюються нейронними мережами. Щоб зробити вираз більш простим, я просто видаляю аргументи:
Отже, ми можемо бачити, що новий "вектор стану клітини" ( ) - це зважена сума старого вектора стану ( ) та "проміжного" вектора стану клітин ( ). Множення між векторами є компонентним (ми множимо два N мірних векторів і отримуємо, як результат, ще один розмірний вектор). Іншими словами, ми змішуємо два вектори стану клітин (старий та проміжний), використовуючи ваги, що відповідають компонентам.
Отже, моє запитання: чому (або як саме) ця архітектура вирішує проблему?
Зокрема, я не розумію наступного:
- Ми використовуємо нейронну мережу, щоб генерувати "проміжну" пам'ять (вектор стану комірки), змішану зі "старою" пам'яттю (або стан комірки), щоб отримати "нову" пам'ять (стан комірки). Вагові коефіцієнти для змішування також розраховуються нейронними мережами. Але чому ми не можемо використовувати лише одну нейронну мережу для обчислення "нового" стану комірки (або пам'яті). Або, іншими словами, чому ми не можемо використовувати спостережуваний стан, прихований стан та стару пам'ять як входи до нейронної мережі, яка обчислює "нову" пам'ять?
- Зрештою, ми використовуємо спостережувані та приховані стани для обчислення нового прихованого стану, а потім використовуємо "новий" стан комірки (або (довготривалу) пам'ять) для корекції складової щойно обчисленого прихованого стану. Іншими словами, компоненти стану клітини використовуються так само, як ваги, які просто зменшують відповідні компоненти обчисленого прихованого стану. Але чому саме вектор стану клітин використовується саме таким чином? Чому ми не можемо обчислити новий прихований стан, поставивши вектор стану комірки (довготривалу пам'ять) на вхід нейронної мережі (що також приймає спостережувані та приховані стани як вхідні дані)?
Додано:
Ось відео, яке може допомогти з'ясувати, як організовані різні ворота ("зберігати", "писати" та "читати").