Передовой искусственный интеллект: Tensor2Tensor | Google Developer Conference 2018

Google искусственный интеллект Keras алгоритм

«Tensor2Tensor: организация моделей и данных мира». Приглашенный спикер - Лоуренс Морони.

Обзор Tensorflow

Первый обзор Tensorflow:

Tensorflow может работать где угодно.tf.dataЭто может помочь вам построить эффективный конвейер ввода данных,tf.layersиtf.keras.Modelможет быстро помочь вам построить нейронную сеть, иtd.estimatorиDistributionStrategyЭто может помочь вам быстро построить распределенное обучение.

Tensor2Tensor

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

Tensor2Tensor выпускается вместе с некоторыми наборами данных и моделями и их гиперпараметрами:

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

Для лучшего готового использования Tensor2Tensor подготовил вспомогательные инструменты для всех, такие как настройки набора гиперпараметров, распределенное обучение GPU или TPU, которые предоставляются в Tensor2Tensor.

Tensor2Tensor с открытым исходным кодом

Tensor2Tensor полностью открыт на GitHub:

Tensor2Tensor не отстает от академических рубежей

Tensor2Tensor не отстает от академических достижений.

Есть интересный пример парня, который написал в Твиттере:

Этот толкатель означает: Алгоритм AMSGrad — это новейший алгоритм оптимизации SGD.

Затем другой пользователь отвечает:

Значение: это уже не последний алгоритм оптимизации SGD, последним является алгоритм AdaFactor, который был реализован в Tensor2Tensor три недели назад.

Затем этого человека быстро нанял Google. лол :-D

Конечно, Лоуренс также поместил скриншот псевдокода алгоритма AdaFactor, заинтересованные студенты могут узнать о нем больше:

Кроме того, Tensor2Tensor также реализует модель Transformer:

Модель Transformer — это новая модель, предложенная Google в статье «Внимание — это все, что вам нужно» в 2017 г. Она отказалась от традиционных CNN и RNN и использовала только механизм внимания для достижения высшего уровня в то время. Эта модель широко используется в областях НЛП, таких как машинный перевод, системы ответов на вопросы, суммирование текста и распознавание речи.

В настоящее время в нашем проекте Tensor2Tensor задействовано много людей:

Мы настоятельно рекомендуем исследователям использовать Tensor2Tensor для помощи в своих исследованиях.

Meet t2t-trainer

Далее давайте взглянем на t2t-trainer, инструмент, предоставляемый Tensor2Tensor, который позволяет людям, которые не понимают код, делать что-то с помощью машинного обучения.

С Tensor2Tensor вам нужно определить всего несколько параметров для выполнения вашей задачи.

pip install tensor2tensor & t2t-trainer \
  --problem=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Здесь есть три основных параметра:

  • --problem: проблема или задача
  • --model: выбранная модель
  • --hparams_set: набор гиперпараметров

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

Вот несколько очень распространенных примеров.

текстовое резюме

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

Ты можешь это сделать:

pip install tensor2tensor & t2t-trainer \
  --problem=summarize_cnn_dailymail32k \
  --model=transformer \
  --hparams_set=transformer_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Всего за несколько строк команд, после обучения у вас будет неплохая модель реферирования текста!

классификация изображений

Вам нужно всего несколько строк таких команд:

pip install tensor2tensor & t2t-trainer \
  --problem=image_cifar10 \
  --model=shake_shake \
  --hparams_set=shake_shake_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Модель, обученная по выбранной здесь модели и набору параметров, год назад была лучшей моделью!

перевести

Для реализации модели перевода en-de (англо-немецкий) вам нужно всего лишь:

pip install tensor2tensor & t2t-trainer \
  --problem=translate_ende_wmt32k \
  --model=transformer \
  --hparams_set=transformer_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Достигнутый эффект:

  • >29 BLEU, текущие лучшие результаты!

Распознавание речи

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

pip install tensor2tensor & t2t-trainer \
  --problem=librispeech \
  --model=tranformer \
  --hparams_set=transformer_librispeech \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Достигнутый эффект:

  • <7.5 WER, что является чуть ли не лучшим результатом!

генерация изображения

pip install tensor2tensor & t2t-trainer \
  --problem=librispeech \
  --model=tranformer \
  --hparams_set=transformer_librispeech \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Достигнутый эффект:

  • ~2.92 bits/dim, текущий лучший

масштаб

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

В среде с несколькими GPU вам нужно только:

t2t-trainer \
  --worker_gpu=8 \
  --problem=translate_ende_wmt32k \
  --model=transformer \
  --hparams_set=transformer_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

просто добавил строку--worker_gpu=8, ваша модель может обучаться параллельно на машине с 8 графическими процессорами!

В среде Cloud TPU вам нужно только:

t2t-trainer \
  --use_tpu --cloud_tpu_name=$TPU_NAME \
  --problem=translate_ende_wmt32k \
  --model=transformer \
  --hparams_set=transformer_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

В движке Cloud ML с настройкой гиперпараметров вам нужно только:

t2t-trainer \
  --cloud_mlengine --worker_gpu=8 \
  --autotune --autotune_maximize \
  --autotune_objective='metrics/neg_log_perplexity' \
  --autotune_max_trails=100 \
  --autotune_parallel_trials=20 \
  --hparams_range=transformer_base_range \
  --problem=translate_ende_wmt32k \
  --model=transformer \
  --hparams_set=transformer_big \
  --generate_data \
  --data_dir=$DATA_DIR \
  --output_dir=$TRAIN_DIR \
  --train_steps=$TRAIN_STEPS \
  --eval_steps=$EVAL_STEPS

Хотите больше контроля?

Tensor2Tensor предоставляет множество очень удобных инструментов, но что, если мне нужно более точное управление?

Наборы данных

Прежде всего, многие люди хотят контролировать набор данных. Например, многие люди не хотят использовать набор данных в Tensor2Tensor, а используют только его часть, так что же мне делать?

Сначала создадим соответствующийproblem, затем укажите каталог данныхdata_dir, а затем сгенерируйте данные.

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

Реализация моделей с помощью Keras

Есть также люди, которые хотят использовать слои Keras для реализации модели.

Tensor2Tensor реализовал множество моделей, если кто-то хочет построить лучшую модель на основе этого, ему нужно сделать это (например):

# 选择超参数
hparams = registry.hparams('bytenet_base')
# 实例化模型
model = tensor2tensor.models.byte_net.ByteNet(hparams,mode='train')

# 调用模型
features = {'inputs':embedded_inputs,'targets':embedded_targets}
outputs,_ = model(feature)

Сначала получите гиперпараметры и постройте модель, а затем, позвонив, вы сможете получить результат.

Содержание и название сказанного спикером кажутся несколько надуманными, и прямого отношения к керасу здесь нет.

Внедрение собственных наборов данных и моделей

Чтобы реализовать свои собственные наборы данных и модели, вы можете сделать это:

  • наследоватьProblemили его подклассы для создания пользовательских наборов данных
  • наследоватьT2TModelреализовать собственную модель

Суммировать

В настоящее время наш Tensor2Tensor содержит следующее:

  • Наборы данных
  • Модели
  • Скрипты

Далее мы в основном улучшаем нашу работу со следующих аспектов:

Спасибо вам всем! Узнайте больше о технических материалах Google Developers Conference 2018