Объяснение рекуррентных нейронных сетей, долговременной кратковременной памяти и знаменитого подхода, основанного на внимании

Когда вы углубляетесь в текст книги, вы читаете в логическом порядке глав и страниц и не без причины. Идеи, которые вы формируете, ход мыслей — все зависит от того, что вы поняли и сохранили до определенного места в книге. Эта настойчивость или способность иметь некоторую память и внимание помогают нам развивать понимание концепций и мира вокруг нас, позволяя нам думать, использовать наши знания, писать, решать проблемы, а также вводить новшества.

Для последовательных данных существует неотъемлемое понятие продвижения по шагам с течением времени. Последовательная память — это механизм, который облегчает нашему мозгу распознавание последовательностей.

Традиционные нейронные сети, несмотря на то, что они хороши в том, что они делают, лишены этой интуитивной врожденной склонности к настойчивости. Как простая нейронная сеть с прямой связью могла бы прочитать предложение и передать ранее собранную информацию, чтобы полностью понять и связать последовательность входящих данных? Не может (заметьте, обучение NN для весов — это не то же самое, что сохранение информации для следующего шага).

RNN спешат на помощь

В рекуррентных нейронных сетях есть что-то волшебное.

— Андрей Карпаты

Рекуррентные нейронные сети устраняют этот недостаток обычных NN с помощью простого, но элегантного механизма и отлично подходят для моделирования последовательных данных.

https://www.reddit.com/r/plantvstruaxlivesst/
https://www.reddit.com/r/Truaxvplantlivestt/
https://www.reddit.com /r/plantvtruaxlivetrems/
https://www.reddit.com/r/royalrumblelivest/
https://www.reddit.com/live/16eim0y7kjifw/
https://www.reddit.com/live/16eim7sr7ldzk/
https://www.reddit.com/live/16egzf3bnp4bm/
https://www.reddit.com /live/16ejaddovktbe/

https://www.reddit.com/live/16ejakqnhgurl/

https://www.reddit.com/live/16ejaro91lw0n/

https://www.reddit.com/live/16egznd2ekrm5/

https://www.reddit.com/live/16egzxr0q8qct/

https://www.reddit.com/live/16eh04ujjrcoy/

https://www.reddit.com/live/16eh0b61schsf/

https://www.reddit.com/live/16eh0jmrbrwav/

https://app.livestorm.co/czxczxc/watch-caleb-truax-vs-caleb-plant-live-stream-free-boxing-full-fight-online/

https://app.livestorm.co/czxczxc/crackstreams-caleb-plant-vs-caleb-truax-full-fight-live-streams-reddit-buffstreams

https://app.livestorm.co/czxczxc/boxingtv-plant-vs-truax-fight-live-streams-reddit-free-watch-boxing-full-match-2021

https://app.livestorm.co/czxczxc/watch-plant-vs-truax-live-strem-2021-boxing-free

https://medium.com/@ruth_forsyth/i-accidentally-sent-a-sexually-explicit-text-to-my-employer-2ca51dd3ab24

https://ruth-forsyth.medium.com/i-accidentally-sent-a-sexually-explicit-text-to-my-employer-2ca51dd3ab24

https://www.deviantart.com/ppv-live/journal/Buffstreams-Plant-vs-Truax-Live-Stream-On-Reddit-868780556

https://www.deviantart.com/ppv-live/journal/Boxing-Fight-Plant-vs-Truax-Live-Stream-reddit-868780615

https://www.deviantart.com/ppv-live/journal/WATCH-CALEB-TRUAX-VS-CALEB-PLANT-LIVE-STREAM-FRE-868780707

https://www.deviantart.com/ppv-live/journal/BOXING-HD-Watch-Plant-vs-Truax-Live-On-Anywhere-868780806

https://www.deviantart.com/ppv-live/journal/OFFICIAL-LIVE-Truax-vs-Plant-Live-Stream-868780874

https://www.deviantart.com/ppv-live/journal/T-V-Plant-vs-Truax-Live-Stream-Boxing-868780976

https://www.deviantart.com/ppv-live/journal/H-D-Plant-vs-Truax-Live-Stream-Boxing-868781080

https://www.deviantart.com/ppv-live/journal/Watch-Plant-vs-Truax-Live-Stream-2021-868781148

https://www.deviantart.com/ppv-live/journal/BOxiNG-Plant-vs-Truax-Live-Stream-2021-868781186

https://www.deviantart.com/ppv-live/journal/PPV-Plant-vs-Truax-Live-Stream-2021-868781249

https://www.deviantart.com/ppv-live/journal/LIVE-Plant-vs-Truax-Live-Stream-Free-2021-868781309

https://www.deviantart.com/ppv-live/journal/PPV-Livestream-Plant-vs-Truax-Live-Free-On-Fox-Tv-868781400

катаный РНН

RNN кажется вам странным? Позвольте мне объяснить и устранить путаницу.

Сначала возьмите простую нейронную сеть с прямой связью, показанную ниже. Он имеет ввод, красная точка, в скрытый слой, синяя точка, что приводит к выходу черной точки.

Простой NN

RNN передает свои выходные данные себе на следующем временном шаге, формируя цикл, передавая столь необходимую информацию.

RNN передает скрытое значение состояния себе

Чтобы лучше понять поток, посмотрите на развернутую версию ниже, где каждая RNN имеет разные входные данные (токен в последовательности) и выходные данные на каждом временном шаге.

Развернутый RNN, от временного шага 0 до t

NN A принимает входные данные на каждом временном шаге, выдавая выходные данные h и передавая информацию себе для следующего входящего введите t+1 шаг. Входящие последовательные данные сначала кодируются с использованием RNN, а затем используются для определения намерения/действия через другую сеть прямой связи для принятия решения.

RNN стали популярными NN, которые можно использовать для различных задач, связанных с понятием последовательных данных, таких как: распознавание речи, языковое моделирование, перевод, субтитры к изображениям и т. д.

Допустим, мы задаем вопрос вашему собственному ИИ-помощнику по имени Пири (или как вы предпочитаете 'iri'): «Который час?», здесь мы пытаемся нарушить последовательность и цвет код это.

Как RNN работают для токенов последовательности

Окончательный запрос, полученный в результате обработки всей последовательности

Память: важное требование для того, чтобы сделать нейронные сети умными.

Люди склонны извлекать информацию из памяти, короткую или длинную, использовать с ней текущую информацию и выводить логику для следующего действия (или импульса/привычки, опять же на основе предыдущего опыта).

Подобная идея состоит в том, чтобы заставить RNN удерживать предыдущую информацию или состояние (состояния). Поскольку выход рекуррентного нейрона на заданном временном шаге t,явно является функцией предыдущего ввод (или думать об этом как о предыдущем вводе с накопленной информацией) до временного шага t-1,можно рассматривайте этот механизм как форму памяти. Любая часть нейронной сети, в которой существует понятие сохранения состояния, даже частично, на временных шагах, обычно называется ячейкой памяти.

Каждый рекуррентный нейрон имеет выход, а также скрытое состояние, которое передается нейрону следующего шага.

скрытое состояние

Развернутая RNN со скрытым состоянием и выводом на каждом временном шаге

Слишком хорошо, чтобы быть правдой ? Исчезающие градиенты и длинная зависимость

Иногда вариант использования требует только немедленной информации с предыдущего шага или только нескольких шагов назад, если не 1. Пример: Облака в небе . Если небоздесьследующее слово, которое нужно предсказать с помощью языковой модели, то это становится простой задачей для RNN, поскольку разрыв или расстояние, или, лучше сказать, зависимость между текущий шаг и предыдущая информация малы.

Краткосрочная зависимость: RNN работает как шарм

Как вы можете видеть, выводв h3требуется X0 и X1, который представляет собой краткосрочная зависимость,легкая задача для простых RNN. Являются ли RNN абсолютно безошибочными?

А как насчет больших последовательностей и зависимостей? Теоретически RNN способны обрабатывать такие «долговременные зависимости».

Однако на практике, по мере увеличения разрыва между зависимостями и увеличения потребности в контексте, RNN не могут обучаться, что может привести к дефенестрации для Конечно. Эти вопросы были проанализированы Hochreiter (1991) и Bengio, et al. (1994).

Вы можете увидеть изменение распределения цветов с каждым временным шагом, при этом последние имеют большую площадь, а предыдущие уменьшаются. Это прекрасно показывает проблему с RNN, называемую «кратковременной памятью».

Старая проблема с исчезающим градиентом. Основная проблема, которая делает обучение RNN очень медленным и неэффективным для использования, — это проблема с исчезающим градиентом. Процесс для нейронной сети с прямой связью выглядит следующим образом: a) прямой проход выводит некоторые результаты b) результаты используются для вычисления значения потерь c) значение потерь используется для выполнения обратного распространения для вычисления градиентов относительно весов d) эти градиенты относительно весов передаются в обратном направлении для точной настройки весов, чтобы улучшить работу сети. представление.

Поскольку манипулирование весами происходит в соответствии со слоем перед ним, небольшие градиенты имеют тенденцию уменьшаться с большим запасом после каждого слоя и достигают точки, в которой они очень близки к нулю, поэтому обучение для начальных слоев падает, и общая эффективность обучения замедляется.

проблема исчезающего градиента в NN при обратном распространении по слоям

Следовательно, исчезающие градиенты приводят к тому, что RNN НЕ хорошо изучает долгосрочные зависимости на разных временных шагах. Это означает, что более ранние токены последовательности не будут иметь большого значения, даже если они имеют решающее значение для всего контекста. Следовательно, эта неспособность учиться на длинных последовательностях приводит к кратковременной памяти.

Длинная последовательность для RNN поднимает проблему долгосрочной зависимости, из-за чего RNN изо всех сил пытаются сохранить всю необходимую информацию.

Эта штука с долгосрочной зависимостью, кажется, затрудняет использование RNN для реальных приложений с последовательностями приличного размера. Означает ли это, что RNN навсегда подвергнуты остракизму?

Не совсем, как оказалось, разновидность RNN или, скажем, специальная RNN подходит для решения проблем долгосрочной зависимости, возникающих с простыми RNN.

Приветствую вечного героя: LSTM

Длительнаядолгая короткаякраткосрочная краткосрочная память (LSTM) помогает выполнить требование «долговременной зависимости» ( или решает проблему с кратковременной памятью), так как поведение по умолчанию — запоминать долговременную информацию.

От RNN к LSTM

Предположим, что RNN может запомнить хотя бы последний шаг в последовательности слов.

Наш набор данных предложений:

Собака пугает кошку.
Кошка пугает мышь.
Мышь пугает собаку.

В начале ввод RNN будет пустым токеном для начала каждого предложения (для слов Dog, Cat и Mouse).

Модель RNN видит каждое из этих слов, за которым следуют пугает и . (точка) после этого для каждого предложения.

Если мы попытаемся предсказать слова в предложениях, предсказания могут принять даже такую ​​форму из-за двусмысленности:

‹Empty› Собака пугает собаку.

‹Empty› Мышь пугает кошку.

‹Empty› Мышь пугает Кошка пугает Собаку.

Что НЕ имеет никакого смысла, поскольку предыдущий контекст не играет никакой роли в выборе следующего подходящего слова.

Основные идеи LSTM:

Перво-наперво: обозначения!

Обозначения, используемые для объяснения LSTM

Основным компонентом, который делает LSTM популярными, является наличие состояния/вектора ячейки для каждого узла LSTM, который передается каждому узлу в цепочке.

Состояние/вектор ячейки, работающий поверх ячейки LSTM

Это состояние ячейки может быть изменено, если это необходимо, с линейными математическими взаимодействиями в каждом узле в зависимости от изученного поведения, регулируемого другими внутренними компонентами. Проще говоря, эти внутренние компоненты, известные как ворота с функциями активации, могут добавлять или удалять информацию о состоянии клетки, тем самым помогая продвигать релевантную (иногда измененную) информацию.

Простой RNN имеет простую NN сам по себе, действующий как единственные ворота для некоторых манипуляций с данными, однако LSTM имеет более сложную внутреннюю структуру из 4 ворот.

ПРИМЕЧАНИЕ. В LSTM есть возможность удалять или добавлять информацию о состоянии ячейки, тщательно регулируемую структурами, называемыми вентилями, что делает их по своей сути лучше, чем простые RNN.

Цепь LSTM из 3 узлов и изображение внутренней структуры

Ворота позволяют опционально изменять и пропускать информацию. Для этого внутри используются сигмовидные и танские ворота.

Прежде чем мы рассмотрим пошаговую работу с ячейкой LSTM, давайте посмотрим, что такое функции активации Sigmoid и Tanh:

Активация сигмовидной кишки:

Сигмоид помогает раздавить входящие значения между 0 и 1 ([0, 1]). Это используется в сочетании с другим компонентом, чтобы остановить (если 0) или разрешить (1) входящую информацию.

Сигмоид сжимает входные значения

Активация Тан:

С другой стороны, Tanh помогает сжимать значения в диапазоне от -1 до +1.

Это помогает добавлять или удалять данные с -1 и +1 соответственно.

Эти функции активации также помогают обуздать выходы, которые в противном случае просто взорвались бы после последовательных умножений по цепочке.

Внутренняя работа LSTM 🧐

Шаг 1. Решите, что сохранить, а что ЗАБЫТЬ.

Первым делом нужно решить, что вообще следует забыть из состояния ячейки. Чтобы решить эту проблему, в слое забытых ворот используется сигмоид. Как объяснялось ранее, сигмоид помогает выводить значения в закрытом диапазоне [0,1]. Здесь 0 означает «полностью удалить», а 1 означает «сохранить информацию как есть».

Ворота забывания смотрят на hₜ₋₁ и xₜ и выводят число от 0 до 1 для каждого числа. в состоянии ячейки Cₜ₋₁.

Забыть слой ворот

Шаг 2.Какую новую информацию добавить обратно

Второй шаг включает в себя решение, какие новые данные должны быть добавлены обратно в состояние ячейки. Это включает в себя 2 части и используются в сочетании.

a)Сигмовидный вентильный слой решает, что именно нужно изменить (с диапазоном от 0 до 1)

b) Слой ворот Tanh создает значения-кандидаты, которые можно добавить к состоянию ячейки (с диапазоном от -1 до +1).

Sigmoid и Tanh решают, чем и в какой степени манипулировать на уровне входных ворот.

Шаг 3.Действительно обновить состояние ячейки с помощью информации, полученной на шагах 1 и 2.

Этот шаг включает в себя манипулирование входящим состоянием ячейки Cₜ₋₁, чтобы отразить решения из слоев забывания (шаг 1) и входных ворот (шаг 2) с помощью поточечного умножения. и дополнение соответственно.

выполнение вычислений для фактического обновления состояния ячейки

Здесь fₜзначит точечное умножение на Cₜ₋₁чтобы забыть информация из вектора контекста и iₜ * Cₜэто новые значения-кандидаты, масштабированные по степени необходимости их обновления.

Шаг 4.Каков результат

Расчеты выходных ворот

Результатом является модифицированная версия состояния ячейки. Для этой сигмоиды решает, какую часть необходимо изменить, которая умножается на вывод после Tanh (используется для масштабирования), что приводит к выводу скрытого состояния.

RNN и LSTM широко использовались для обработки и понимания последовательных данных. Обычный подход — архитектура кодер-декодер для задач seq2seq.

Модели последовательности к последовательности (seq2seq) в НЛП используются для преобразования последовательностей типа A в последовательности типа B. Например, перевод английских предложений в немецкие предложения представляет собой преобразование последовательности в -задача последовательности.

Кодер имеет входную последовательность x1, x2, x3, x4. Мы обозначаем состояния кодировщика как c1, c2, c3. Кодер выводит один выходной вектор c, который передается в качестве входных данных декодеру. Как и кодировщик, декодер также является одноуровневой RNN, мы обозначаем состояния декодера как s1, s2, s3, а вывод сети — как у1, у2, у3, у4.

Механизм внимания: Супергерой! Но почему? 🤔

основной вопрос для (пере)рассмотрения — что именно требуется от RNN и LSTM (в архитектуре кодер-декодер): текущий узел или состояние имеет доступ к информации для всех входных данных, просмотренных до сих пор. (т. е. информация, текущая от t₀ до t-₁, доступна в некоторых измененных/ частичная форма для состояния на временном шаге t), поэтому конечное состояние RNN (лучше сказать кодировщик) должно содержать информацию для всего последовательность ввода.

Простое представление традиционной архитектуры кодировщика-декодера с использованием RNN/LSTM.

Основной недостаток этой архитектуры заключается в том, что на этапе кодирования необходимо представить всю входную последовательность x1, x2, x3, x4 как единый вектор c, который может привести к потере информации, так как вся информация должна быть сжата в c . Более того, декодер должен расшифровать переданную информацию только из этого единственного вектора, сама по себе очень сложная задача.

И именно здесь быстро устанавливается верхняя граница потенциала понимания модели, а также производительности, поскольку это может быть слишком многого, чтобы требовать от простых кодировщиков и декодеров для последовательной обработки длинных данных. входные последовательности.

Механизм внимания для моделирования последовательности был впервые использован в статье: хотя понятие «внимание» тогда не было так известно, и это слово редко использовалось в самой статье.

Как поясняется в статье [1]

Потенциальная проблема с этим подходом кодировщик-декодер заключается в том, что нейронная сеть должна иметь возможность сжимать всю необходимую информацию исходного предложения в вектор фиксированной длины. Это может затруднить работу нейронной сети с длинными предложениями, особенно с теми, которые длиннее предложений в обучающем корпусе.

Механизм внимания помогает просматривать все скрытые состояния из последовательности кодировщика для создания прогнозов, в отличие от стандартного подхода кодировщик-декодер.

Простые и основанные на внимании архитектуры кодировщика-декодера

Объяснение разницы на предыдущем изображении: В простой архитектуре кодировщик-декодер предполагается, что декодер начинает делать прогнозы, просматривая только конечный результат. шага кодировщика с сжатой информацией. С другой стороны, архитектура на основе внимания отслеживает каждое скрытое состояние от каждого кодировщика узел на каждом временном шаге и затем делает прогнозы после того, как решит, какой из них более информативен.

Подождите!!

Но как он решает, какие состояния более или менее полезны для каждого прогноза на каждом временном шаге декодера?

Решение.Используйте нейронную сеть, чтобы «узнать», какие состояния скрытого кодировщика «обслуживать» и в какой степени.