Части 1 и 2 этого блога были написаны Нитьеш Агарвалом при сотрудничестве и при спонсорской поддержке Exxact Corporation.

Часть 1. Противоречие OpenAI GPT 2

«Утилизация НЕ приносит пользу миру. Это плохо для окружающей среды, для нашего здоровья и для экономики. Я не шучу. Переработка вредна для окружающей среды. Это разрушительно для Земли и является одним из основных факторов глобального потепления. Переработка вредна для нашего здоровья. Он способствует ожирению и таким заболеваниям, как болезни сердца и рак. Переработка вредна для нашей экономики. Это увеличивает стоимость продукта и, в свою очередь, цену всего, что сделано с этим продуктом. Переработка вредна для нашей нации. Мы платим огромную цену за привилегию обладать самой современной и эффективной системой утилизации в мире. Переработка - это огромная и колоссальная трата времени, энергии, денег и ресурсов ». - Модель GPT 2 от OpenAI

Да, это не слова какого-то помешанного на утилизации отходов, пытающегося популяризировать манифест против утилизации в социальных сетях. Все это написано с использованием языковой модели… алгоритма… ИИ, если говорить грубо.

GPT-2 - это генеративная модель, созданная OpenAI, обученная на 40 ГБ Интернета для предсказания следующего слова. И OpenAI обнаружил, что эта модель настолько хороша, что они не выпустили полностью обученную модель - что, по мнению некоторых, противоречит их основополагающему девизу - сделать ИИ открытым для всех - из-за их опасений по поводу вредоносных приложений этой технологии.

О каких вредоносных программах идет речь?

Открытый ИИ сообщает: Мы также можем представить себе применение этих моделей для« злонамеренных целей , включая следующие (или другие приложения, о которых мы пока не можем ожидать):

  • Создавайте вводящие в заблуждение новостные статьи
  • Выдавать себя за других в Интернете
  • Автоматизируйте создание оскорбительного или фальшивого контента для публикации в социальных сетях
  • Автоматизировать создание спама и фишингового контента »

«Но действительно ли эта модель так хороша?»

Или это всего лишь мнение некоторых параноиков?

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

Что он сделал, так это показал, насколько наши текущие методы языкового моделирования способны создавать текст. Это значительно увеличенная версия своего предшественника. GPT-2 имеет колоссальные 1,5 миллиарда параметров (в 10 раз больше, чем исходный GPT) и обучается на тексте с 8 миллионов веб-сайтов.

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

Но сначала в сторону - очень простое объяснение языковых моделей

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

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

Они пригласили Томаса Миддледича, Ричарда из Кремниевой долины, на главную роль в этом !!

Или как насчет этого фанфика о Гарри Поттере, созданного искусственным интеллектом, который стал популярным в конце 2017 года и:

Как видите, оба они по качеству намного хуже, чем в примере с GPT-2. Open AI отобрал и опубликовал в своем блоге еще несколько примеров - Лучшие языковые модели и их значение.

Образец единорога читается как настоящий научный пресс-релиз. Образец кража ядерного материала читается как настоящая новость. Пример Кража Майли Сайрус в магазине читается как настоящий пост с сайта сплетен о знаменитостях. Образец GPT-2 читается как настоящий пресс-релиз OpenAI. Образец Леголаса и Гимли читается как настоящий фантастический роман. Домашнее задание времен Гражданской войны »читается как настоящая работа старшеклассника. Речь в знак признательности JFK читается как речь настоящего политика. Образец рециклинга читается как настоящая правая стяжка.

И это не только эти 8 тщательно отобранных примеров. Open AI также предоставляет нам дамп сотен необработанных образцов GPT-2, который может дать нам более четкое представление о возможностях модели.

Да, каждый из них «читается как» настоящий контент, созданный людьми. Но это не так.

В этой статье утверждается, что бегло просматривая текст, вы упускаете очевидные абсурды. Дело в том, что OpenAI ДОЛЖЕН пройти тест Тьюринга против людей на автопилоте.« Так что, если вы на самом деле не концентрируетесь и просто просматриваете, вы не сможете заметить, что это было создано языковой моделью. Это определенно неверно для других примеров, которые я представил выше. Даже «читать как обычный контент, созданный людьми, - это большой подвиг.

Так что да. Я бы сказал, что эта модель действительно хороша.

Эффект невыпуска веса модели

Тот факт, что Open AI не выпустил модель, стал огромным шоком для AI-сообщества и СМИ.

Некоторые люди утверждают, что это был просто рекламный ход со стороны Open AI, потому что не было алгоритмического подвига. А другая группа людей считает, что эта попытка будет тщетной, поскольку исходный код кода открыт, и крупные компании / люди, готовые потратить достаточно денег на вычислительные ресурсы, смогут воспроизвести результаты. всего за несколько месяцев.

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

Soumith Chintala - создатель PyTorch. Это нить между ним, Джеком Кларком и Джереми Ховардом!

Так разве не было бы здорово узнать, как это работает, знать алгоритм, который его поддерживает?

Часть 2: Краткое описание того, как работают трансформаторы

Трансформаторная архитектура

Эта архитектура была впервые предложена в основополагающем документе Google Внимание - это все, что вам нужно в середине 2017 года.
С того короткого промежутка времени эта архитектура использовалась для получения самых современных результатов в двух статьях: одна - GPT / GPT-2, другая - BERT.

Самый маленький соответствует модели GPT; вторая по величине эквивалентна самой большой модели в BERT; самый крупный, который более чем на порядок больше, соответствует модели GPT-2.

Теперь посмотрим на архитектуру:

Первое, что мы видим, это то, что он имеет архитектуру кодировщика-декодера «последовательность-последовательность». Большая часть литературы по Трансформаторам, представленной в Интернете, использует именно эту архитектуру для объяснения Трансформаторов. Но это не тот, который использовался в модели GPT Open AI (или модели GPT-2, которая была просто увеличенной версией своего предшественника).

GPT - это 12-слойный преобразователь только для декодирования с параметрами 117M.

Архитектура Transformer, использованная в GPT paper от Open AI.

GPT (и выпущенная меньшая версия GPT-2) имеет 12 слоев трансформаторов, каждый с 12 независимыми механизмами внимания, называемыми головами; в результате получается 12 x 12 = 144 различных паттерна внимания. Каждый из этих паттернов внимания соответствует лингвистическому свойству, зафиксированному моделью.

Как мы можем видеть на приведенных выше архитектурах трансформаторов, внимание - важная часть трансформатора. На самом деле, это было бы преуменьшением. Внимание - вот что заставляет трансформатор работать. Итак, давайте кратко познакомимся с вниманием.

Модель внимания

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

Допустим, мы хотели перевести «L 'accord sur la zone économique européenne a été signé en aout 1992» (французский) на английский, что означает «Соглашение о Европейской экономической зоне было подписано в августе 1992 года ».

На графике ниже показано, чему модель внимания научилась обращать внимание на каждое слово перевода, которое она сгенерировала.

Обратите внимание на то, что это в основном просто линейное выражение, кроме случаев, когда «zone économique européenne» переводится в «европейская экономическая зона». В этом случае он правильно посещает в обратном порядке.

Такая способность позволяет вниманию учиться дальнодействующим зависимостям.

Сравнение с RNN

Как упоминалось ранее, некоторые практикующие считают, что сейчас мы являемся свидетелями падения RNN / LSTM. С момента своего появления в 2014 году они стали стандартной архитектурой для всех задач НЛП, начиная от языкового моделирования, машинного перевода, суммирования текста, субтитров к изображениям / видео, преобразования речи в текст и многого другого.

Но у RNN и его разновидностей было 2 основных недостатка:

  1. Неспособность запомнить долгосрочные зависимости

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

RNN должны кодировать информацию из всей последовательности в одном единственном векторе контекста. "Источник"

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

По мере того, как разрыв между двумя словами увеличивается, RNN, кажется, «забывает» предыдущие слова.

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

  1. Невозможность использовать мощь графических процессоров

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

На приведенной выше диаграмме фрагмент нейронной сети A смотрит на некоторый вход xt и выводит значение ht. Цикл позволяет передавать информацию от одного шага сети к следующему. Это означает, что они могут одновременно обрабатывать только один входной блок.

Вот почему они не могут использовать невероятно мощные возможности параллельных вычислений графических процессоров. Такие графические процессоры позволили CNN обучаться на ОГРОМНОМ объеме данных и вырасти до абсолютно огромных размеров. RNNS,
LSTM или любые их варианты по своей сути неспособны использовать это средство.

Трансформаторы отлично справляются с обеими этими задачами.

Рабочие станции для глубокого обучения от Exxact с Quadro RTX 8000 идеально подходят для обучения даже больших моделей трансформаторов. Каждая Quadro RTX 8000 имеет 48 ГБ памяти графического процессора, и пара может быть подключена с помощью NVLink, чтобы получить 96 ГБ общей памяти графического процессора для установки в массивные модели трансформаторов.

Предварительно подготовленные языковые модели - перенос обучения в НЛП

Архитектура Transformer позволяет создавать модели НЛП, обученные на абсолютно огромных наборах данных, как мы видели в этой статье. Такие модели невозможно обучить всем, так же как вы не ожидаете обучить сеть VGG с нуля на наборе данных ImageNet. Следовательно, наступает эра предварительно обученных языковых моделей.

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

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

Часть 3: Обучение сети трансформаторов с нуля в Docker

Обучение по этому руководству будет проводиться на нашей Exxact Valence Workstation с использованием NVIDIA RTX 2080 Ti. Кроме того, мы создадим переводчик с английского на немецкий, используя реализацию модели преобразователя, расположенную здесь на официальном TensorFlow GitHub. Предполагая, что у вас есть все необходимые зависимости для графического процессора TensorFlow, мы предоставляем простое руководство по началу работы с трансформаторами в докере.

Шаг 1) Запустите контейнер Docker для графического процессора TensorFlow

Использование Docker позволяет нам создать полностью изолированную среду для наших учебных нужд. Мы всегда рекомендуем использовать Docker, поскольку он обеспечивает максимальную гибкость (и простоту) в нашей среде обучения. Для начала мы откроем окно терминала и введем следующую команду, чтобы запустить наш контейнер на базе NVIDIA CUDA.

nvidia-docker run -it -p 6007:6006 -v /data:/datasets tensorflow/tensorflow:nightly-gpu bash

Примечание. Краткое описание основных параметров приведенной выше команды (если вы не знакомы с Docker).

Шаг 2) Установите git

Это может быть необходимо, если вы используете новый док-контейнер.

apt-get install git

Шаг 3) Загрузите модели TensorFlow

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

git clone https://github.com/tensorflow/models.git

Шаг 4) Установите требования

В качестве необходимого шага будут установлены требования пакета python для обучения моделей TensorFlow.

pip install --user -r official/requirements.txt

Шаг 5) Экспорт Pythonpath

Экспортируйте PYTHONPATH в папку, в которой находится папка моделей на вашем компьютере. Приведенная ниже команда указывает, где в нашей системе расположены модели. Обязательно замените синтаксис ‘/ datasets / models‘ на путь данных к папке, в которой вы сохранили / загрузили свои модели.

export PYTHONPATH="$PYTHONPATH:/datasets/datasets/models"

Шаг 6) Загрузите и предварительно обработайте набор данных

Команда data_download.py загрузит и предварительно обработает наборы данных WMT для обучения и оценки. После загрузки и извлечения данные обучения используются для генерации того, что мы будем использовать в качестве переменных VOCAB_FILE. Фактически, строки eval и обучение токенизируются, а результаты обрабатываются и сохраняются как TFRecords.

ПРИМЕЧАНИЕ. (согласно официальным требованиям): будет загружено 1,75 ГБ сжатых данных. В целом необработанные файлы (сжатые, извлеченные и объединенные файлы) занимают 8,4 ГБ дискового пространства. В результате размер файлов TFRecord и словаря составляет 722 МБ. На выполнение скрипта уходит около 40 минут, большая часть времени уходит на загрузку и ~ 15 минут на предварительную обработку.

python data_download.py --data_dir=/datasets/datasets/transformer

Шаг 7) Установите обучающие переменные

‘PARAM_SET’

Здесь указывается, какую модель тренировать: «большую» или «базовую».

I ВАЖНОЕ ПРИМЕЧАНИЕ: большая модель не будет работать с большинством графических процессоров потребительского уровня, таких как RTX 2080 Ti, GTX 1080 Ti. Если вам нужно обучить большую модель, мы рекомендуем систему с не менее 48 ГБ доступной памяти графического процессора, такую ​​как Рабочая станция для анализа данных, оснащенная Quadro RTX 8000 или 2 x Qudaro RTX 6000. с NVLink. В качестве альтернативы также должно быть достаточно рабочей станции TITAN RTX с 2x TITAN RTX (с мостом NVLink). В этом примере мы используем RTX 2080 Ti, поэтому выбираем ‘base‘.

PARAM_SET=base

DATA_DIR

Эта переменная должна быть установлена ​​в том месте, где находятся обучающие данные.

DATA_DIR=$root/datasets/datasets/transformer

‘MODEL_DIR’

Эта переменная определяет местоположение модели в зависимости от того, какая модель указана в переменной ‘PARAM_SET’.

MODEL_DIR=$root/datasets/datasets/transformer/model_$PARAM_SET

«VOCAB_FILE»

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

VOCAB_FILE=$DATA_DIR/vocab.ende.32768

‘EXPORT_DIR’ Экспорт обученной модели

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

EXPORT_DIR=$root/datasets/datasets/transformer/saved_model

Шаг 8) Обучите трансформаторную сеть

Следующая команда ‘python transformer_main.py’ обучит трансформатор всего 260 000 шагов. Посмотрите, как устанавливаются флаги для ссылки на переменные, которые вы установили на предыдущих шагах. Вы можете тренироваться менее чем на 260 000 шагов, решать вам.

ПРИМЕЧАНИЕ. Обучение займет много времени, в зависимости от ресурсов вашего графического процессора. Официальная модель преобразователя TensorFlow находится в постоянном развитии, не забудьте периодически проверять их github на предмет каких-либо оптимизаций и методов сокращения времени обучения.

python transformer_main.py --data_dir=$DATA_DIR --model_dir=$MODEL_DIR --vocab_file=$VOCAB_FILE --param_set=$PARAM_SET --bleu_source=test_data/newstest2014.en --bleu_ref=test_data/newstest2014.de --train_steps=260000 --steps_between_evals=1000 --export_dir=$EXPORT_DIR

Шаг 9) Просмотр результатов на тензорной плате

Как мы отметили ранее, мы можем проверить статус обучения в графическом интерфейсе Tensorboard. Чтобы проверить в реальном времени, выполните следующую команду в отдельном терминале (или контейнере TensorFlow) и введите localhost: 6007 в браузере, чтобы просмотреть Tensorboard. Вы также можете дождаться завершения обучения, чтобы использовать текущий контейнер.

tensorboard --logdir=$MODEL_DIR

Вы должны увидеть некоторые результаты обучения, подобные приведенным ниже.

Шаг 10) Протестируйте обученную модель (переведите с английского на немецкий)

Теперь мы обучили нашу сеть, давайте наслаждаться плодами нашего труда с помощью translate.py! В приведенной ниже команде замените текст «привет, мир» желаемым текстом для перевода.

python translate.py --model_dir=$MODEL_DIR --vocab_file=$VOCAB_FILE \ --param_set=$PARAM_SET --text="hello world"

Вывод вышеуказанной команды:

I0411 18: 05: 23.619654 139653733598976 translate.py:150] Перевод слова «hello world»: «Hallo Welt»

Последние мысли

Мы рассмотрели трансформаторные сети, как и почему они так эффективны. В настоящее время современная архитектура, эта область является активной областью исследований НЛП. Теперь у вас также должно быть общее представление о том, что нужно для обучения сети трансформаторов. Для более глубокого погружения в обучение трансформаторов посетите официальную реализацию трансформатора в репозитории TensorFlow на github. Мы надеемся, что вам понравилась эта серия блогов, а теперь выходите и создайте что-нибудь потрясающее!

Первоначально опубликовано на https://blog.exxactcorp.com 29 мая 2019 г.