Как компьютеры могут понимать контекст? Что такое рекуррентная нейронная сеть и как она может нам помочь? Существуют ли разные типы повторяющихся нейронных сетей?

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

Пределы нейронных сетей с прямой связью

Сначала давайте взглянем на нейронную сеть прямого распространения (FFNN). Чаще всего он представлен слева направо, начиная с входного слоя и заканчивая выходным слоем, проходящим через определенное количество скрытых слоев. Из ошибок прогнозирования мы обновляем веса благодаря обратному распространению. На каждой итерации модель начинается с нуля и не учитывает предыдущие входные данные.

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

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

Но подождите секунду, мой школьный учитель говорит, что для перевода нам нужно сначала понять все предложение, так как же вы хотите перевести текст, просто выбирая каждое слово отдельно? Разве не разумнее передать модели все предложение? Кроме того, слово «банко» на испанском языке можно перевести как «банк» или «скамья», как модель может узнать, имеем в виду банк или скамейку, если у нас нет окружающих слов, если нам не хватает контекста и мы пытаемся просто перевести слово в слово? Так почему бы просто не накормить модель полным предложением? Потому что даже если мы создадим горячую кодировку со всеми словами в предложении, это будет просто мешок слов без сохранения структуры, что приведет к потере всего смысла, то же самое произойдет и с выходным слоем.

Что такое рекуррентная нейронная сеть?

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

На первом изображении мы видим, как нейронная сеть с прямой связью пытается перевести полное предложение. Мы создаем горячую кодировку для предложения, этот первый слой будет включать все возможные испанские слова. Если слово присутствует в предложении, например, «банко», мы вводим 1, если нет - 0. выходной слой такой же, горячая кодировка английских слов. Основная проблема заключается в том, что порядок потерян, поскольку мы предоставляем набор слов, а не последовательность.

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

Мы все еще можем видеть первый слой, который является входным слоем синим цветом, который соединяется со скрытым слоем зеленым цветом. Второе большое отличие, которое мы видим по сравнению с FFNN, где ячейки в скрытом слое не взаимодействуют друг с другом, заключается в том, что есть новая стрелка из ячейки предыдущего шага, соединяющаяся со следующей ячейкой в ​​том же слое. . В этом волшебство: во втором предсказании ячейка получит не только испанское слово, но и контекст. Клетка создала память и теперь использует ее для второго прогноза, вместо памяти мы называем ее состоянием. Наконец, мы видим выходной слой, который сделает перевод. На основе ошибок прогнозирования мы обновляем веса благодаря обратному распространению во времени.

Типы рекуррентных нейронных сетей

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

Один ко многим. Хорошим примером может быть ситуация, когда у нас есть изображение в качестве входных данных, и мы обучаем модель, способную описывать то, что в нем содержится. Таким образом, модель вернет последовательность слов, чтобы объяснить, что она видит на изображении.

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

Многие ко многим (одинаковой длины): ввод и вывод представляют собой последовательности, в следующем разделе мы создадим rnn от многих до многих для перевода предложений с английского на испанский. Одна из проблем - это длина предложений, как мы можем видеть на изображении, для каждого временного шага на входе есть выход. Что, если выходной перевод короче или длиннее входной последовательности? Давайте посмотрим в упражнении, как ее решить.

Многие ко многим (кодер-декодер): Вторая структура от многих ко многим также известна как кодер-декодер. Первая часть модели получает последовательность и создает новое представление. Новое представление будет затем декодировано второй частью модели. Благодаря этой структуре длина входного и выходного данных больше не должна быть одинаковой.

Чтобы закончить теорию, мы введем термин Двунаправленность. В предыдущем объяснении мы упростили повторяющийся слой, создав стрелку от ячейки на временном шаге t до временного шага t + 1, чтобы слой мог получать информацию из прошлого (в обратном направлении), но почему бы нам не получить также информацию из будущее? Чтобы предсказать первое слово, нам нужно будет прочитать остальную часть предложения, поэтому мы получаем информацию из будущих временных шагов в момент времени t (вперед). Эта сетевая структура известна как двунаправленная рекуррентная нейронная сеть и выглядит следующим образом.

Заключение

Мы видели, каковы пределы FFNN, когда мы принимаем решения с учетом контекста. Лучшим подходом для таких ситуаций является RNN, которая может управлять контекстом и генерировать состояние для лучшего понимания данных по временным шагам. Давайте применим то, что мы только что узнали, создав конвейер перевода с Python и Keras в следующей статье.