Автор | Чжоу Юйфэн, редактор | Винсент, продюсер AI Frontline | ID: ai-front
Эта статья представляет собой стенограмму выступлений инженера Google Brain Чжоу Юефэна на QCon Shanghai 2017 и DevFest 2017, организованных и опубликованных GDG.
Меня зовут Юефэн Чжоу, я инженер в Google Brain, и в настоящее время я занимаюсь распределенными разработками и исследованиями TensorFlow и TensorFlow, используя машинное обучение для оптимизации TensorFlow.
Сегодня я сначала поделюсь с вами примером глубокого и всестороннего обучения, а затем кратко расскажу, что такое TensorFlow и некоторые из последних функций TensorFlow, в том числе некоторые функции, которые вот-вот будут выпущены или еще не выпущены. завершена. Если у меня будет время, я потрачу немного времени, чтобы сосредоточиться на этом. Внедрить новые функции. В конце дня я кратко представлю два исследовательских проекта Google Brain.
Machine Learning
Сегодня мы видим, что машинное обучение изменило наш мир.Ученые-машиностроители используют методы глубокого обучения для выявления диабета и ретинопатии, которые могут выявлять ретинопатию с точностью 95%, что даже превышает точность 91% офтальмологов. Машинное обучение достигает показателей точности, сравнимых с машинными и человеческими экспертами.
В то же время машинное обучение можно использовать и в направлении автономного вождения, что может сделать движение более безопасным и эффективным.
Во-вторых, машинное обучение позволяет преодолевать языковые барьеры и добиваться более удобного общения и коммуникации.Мы знаем, что традиционные системы машинного перевода должны соответствовать разным языковым фразам, и преобразовывать один язык в один посредством каких-то сложных или даже рукописных правил.Язык, такого рода система очень большая и сложная в обслуживании, а точность недостаточно высока, поэтому недавно появился метод на основе нейронных сетей.Мы реализовали его с помощью TensorFlow и использовали этот метод для преодоления разрыва между машинным и человеческим переводом. может сделать перевод более точным и естественным.
Точно так же машинное обучение может радовать и людей: оно может автоматически изменять фотографии, выделять людей на переднем плане и размывать фон — скоро мы увидим эту функцию на мобильных телефонах.
Далее рассмотрим применение машинного обучения в промышленности. Первым примером является INSTACART, служба доставки продуктов в тот же день, клиенты выбирают желаемые товары у многих местных розничных продавцов через веб-приложение и покупают продукты. Есть много клиентов этого программного обеспечения. Проблема, с которой сталкиваются клиенты при покупке, заключается в том, чтобы выбрать нужные товары из миллионов розничных магазинов или продуктов, поэтому INSTACART использует TensorFlow для создания моделей глубокого обучения, которые используются для наиболее эффективного ранжирования списков продуктов, метод, который экономит покупателям много времени. поиск продуктов.
Второй пример — UBER. UBER использовал проекты с открытым исходным кодом на основе TensorFlow и TensorFlow для создания системы под названием «Микеланджело», которая представляет собой внутреннюю платформу машинного обучения, которую Google надеется использовать для внутреннего использования ИИ, например. поездка на автомобиле. Эта система охватывает управление данными, сбор данных и обучение моделей, оценку, развертывание и т. д., и эта система не только поддерживает глубокое обучение TensorFlow, но также поддерживает другие модели машинного обучения.
Третий пример — KEWPIE, который использует TensorFlow для создания системы искусственного интеллекта для улучшения качества детского питания, анализа пищевых продуктов с помощью искусственного интеллекта, чтобы он мог идентифицировать приемлемые ингредиенты в продуктах и исключать недопустимые ингредиенты в продуктах. Это обеспечивает качество детского питания.
What Is TensorFlow
А базовым фреймворком для всего вышеперечисленного является TensorFlow.
В конце 2015 года мы открыли исходный код TensorFlow, надеясь сделать его платформой машинного обучения, которая будет работать для всех. Мы хотим сделать его быстрым, гибким, готовым к работе фреймворком. Это может быть очень удобно для проведения исследований, и его также можно быстро развернуть в производственной среде. TensorFlow — это, по сути, крупномасштабная вычислительная среда, и ее операции абстрагируются в виде вектора операций. Точно так же, как здесь показан график операций, узлы выше представляют операции или состояния. Когда мы завершаем некоторые операции или выходим из некоторых состояний, наши данные перетекают из одного узла в другой. Этот граф можно построить на любом языке, и когда граф построен, мы передаем его в Ядро TensorFlow компилируется, оптимизируется и затем выполняется.
TensorFlow также поддерживает множество аппаратных платформ, от начального ЦП, ГП до грядущего ОБЛАЧНОГО ЦП, а также поддержку Android, iOS и даже встроенных устройств.
После того, как мы открыли исходный код TensorFlow на Github, за последние два года появилось много активных сообществ с открытым исходным кодом вокруг TensorFlow.Сейчас у нас более 67 000 звезд, и более 17 000 названий проектов Github включают TensorFlow.TensorFlow продолжает появляться в различных университетских курсах. и В онлайн-курсах многие университеты также разрабатывают курсы на основе TensorFlow. Кроме того, мы также выпустили китайский веб-сайт TensorFlow, который можно рассматривать как основное руководство по началу работы с TensorFlow, под названием https://tensorflow.google. .сп.
New Feature of TensorFlow
Теперь давайте взглянем на последние функции TensorFlow. Первый — это Eager Execution, новая парадигма программирования, и на предыдущем слайде я показал статический график, основанный на TensorFlow.
Eager Execution решает некоторые проблемы со статическими графами. Какую проблему он решает? Прежде всего, он может написать гораздо меньше кода, как на картинке выше. Во-вторых, при написании кода через Eager Execution можно сразу найти свои ошибки, что может значительно повысить эффективность проверки ошибок при написании кода. В-третьих, Tensor можно использовать для записи потока управления, поэтому нет необходимости использовать TF для цикла или даже оценки. Самый важный момент заключается в том, что если граф написан на другом языке, то перенос графа в ядро TensorFlow эквивалентен написанию другого вида кода. Увидев этот слайд, вы увидите простой пример, в полной мере говорящий о Eager Execution. простоты.
Конференция Google I/O в этом году объявила о TPU второго поколения, наш TPU второго поколения можно использовать как для рассуждений, так и для обучения. TPU может выполнять очень большие операции со словарем. Мы даже можем объединить несколько поколений TPU в вычислительное ядро, подобное суперкомпьютеру. С помощью TPU второго поколения мы можем полностью обучить модель RESNET-50 в течение часов 20. Раньше, если обучался только один TPU, на обучение модели могла уйти неделя. Сегодня второе поколение TPU будет выпущено в Google Cloud и будет доступно для всех.
Давайте поговорим об API верхнего уровня TensorFlow.Помимо скорости обучения нейронной сети, мы также сосредоточимся на том, как упростить создание нейронной сети с помощью API верхнего уровня TensorFlow. Keras — это один из API, который поддерживает множество бэкендов. Я считаю, что многие зрители использовали Keras, По сути, Keras больше похож на спецификацию разработки API. У TensorFlow есть TF под названием Keras, но это всего лишь способ реализовать спецификацию API, используя собственный бэкэнд TensorFlow, с этим бэкэндом мы можем сделать Keras и Estimators. Или Secving интегрирован, что обеспечит лучшую поддержку для распространения.
Существует также концепция, представленная в TensorFlow под названием Estimators, которая представляет собой относительно легкий API, который широко используется во внутренней производственной среде Google.Estimators предоставляет множество моделей для использования всеми, называемых Canned Estimator, и их взаимосвязь выглядит следующим образом: Estimators и tf .keras инкапсулирует Canned Estimator сверху, который можно использовать для инкапсуляции различных моделей.
Если вы привыкли к интерфейсу Keras, мы предоставляем инструмент для преобразования API верхнего уровня под названием model_to_estimator.После того как у вас есть скомпилированная модель Keras, вы можете вызвать этот model_to_estimator, чтобы получить оценщик, тем самым преобразовав Keras в оценщик.
Estimator также предоставляет интерфейс для распределенного обучения.Если вы используете TensorFlow для распределенного обучения, вы можете быть знакомы с нашим распределенным режимом. Наш Estimator обеспечивает хорошую поддержку распределенного обучения. Пока вы пишете один код, это может помочь вам создавать программы, которые выполняются на разных машинах. Учебную программу можно завершить, вызвав Estimator.train В этом процессе выполнения, если его Estimator.evaluate вызывается, весь кластер может начать обучение.
Вы можете ознакомиться с документацией этих API: TF, KERAS, TFLAYERS и т. д. Мы также выпустили улучшенное руководство программиста на официальном сайте, надеюсь, вы ознакомитесь.
Следующая функция — TensorFlow Lite, подмножество TensorFlow, работающее на мобильных устройствах. Мобильные устройства сейчас вездесущи и приобретают все большее значение. На мобильных устройствах мы можем судить о том, какой породы собака в дикой природе, заболело растение или нет.С помощью искусственного интеллекта мы можем делать некоторые приложения на мобильных устройствах, поэтому мы запустили TensorFlow Lite.
Почему так много на мобильных устройствах? В дополнение к только что упомянутым сценариям приложений, зачем вам нужно рассуждать о мобильных устройствах? Это связано с тем, что нам часто приходится выполнять ряд рассуждений в некоторых особых условиях.Часто, особенно в дикой природе, пропускная способность нашей сети очень низка, а сетевая задержка очень велика. Если каждый вывод — это отправка запроса на удаленный сервер, это очень требовательно к заряду батареи мобильного устройства. Несмотря на острую потребность в мобильных устройствах для выполнения выводов на рынке, существует множество проблем, наиболее важная из которых заключается в том, что память, вычислительные ресурсы и пропускная способность мобильных устройств ограничены. С точки зрения программирования, поскольку платформа сильно тормозит, разработка становится все более и более сложной.Например, на Android мы можем использовать Базовый код написан с помощью ЦП или инструкций, и на IOS есть некоторые платформы и инструменты.Инструменты разных платформ усложняют разработку нашего оборудования и API, и даже наличие разных API усложняет нашу разработку, поэтому мы разработали ТензорФлоу Лайт.
По сравнению с TensorFlow Lite, TensorFlow в основном ориентирован на некоторые большие устройства. TensorFlow Lite делает приложения для небольших устройств более эффективными, и теперь давайте посмотрим, как работает TensorFlow Lite, на небольшом примере.
Это жизненный цикл TensorFlow Lite.Сначала запускаем TensorFlow стандартным образом.После операции получаем Graphdef и Checkpoint.Предоставляем конвертер через TensorFlow Lite для преобразования в модельный формат TensorFlow Lite. Получив эту модель в формате TensorFlow Lite, мы можем перенести ее на мобильные устройства. Эту модель можно загрузить на мобильное устройство, подключив его к дисплею TensorFlow Lite. Если наш монитор отправляет NeonKerels напрямую , если он есть на других устройствах, вы также можете использовать интерфейс аппаратного ускорителя, чтобы определить некоторые оптимизации для вашего собственного оборудования.
Следующая функция — Input Pipeline, она будет интересна как новичкам, так и экспертам, потому что Input Pipeline очень болезненна в использовании.
В основном он имеет два режима, один из которых — Feeding, который имеет преимущество в гибкой обработке нулевого расстояния с помощью python, но производительность очень низкая. А при однопоточной работе каждый шаг обучения должен ждать завершения обработки данных, что очень неэффективно для GPU. Другой способ - превратить обработку данных в серию операций. При этом очереди используются как временное пространство для хранения данных. Мы помещаем предварительно обработанные данные и некоторые промежуточные предварительно обработанные данные в очереди. Через python Для контроля ввода и управления очередями. Но есть проблема, у этого питона есть блокировка интерпретатора веса, поэтому он делает эту Очередь Производительность ввода сильно ограничена.
Другая проблема заключается в том, что написанные нами модули обработки данных не имеют возможности повсеместного использования, и нет возможности изменить входные данные во время обучения. Поэтому мы разработали набор Input Pipeline, который по разным причинам разработан как ленивый список. Поскольку многие из наших данных выглядят одинаково, а объем данных может быть относительно большим, мы можем определить его как ленивый, После того, как мы определим его как ленивый список, мы можем естественным образом использовать карту и фильтр в функциональных языках программирования для определения конвейеров предварительной обработки. , мы можем видеть операции отображения и фильтрации на многих языках. Теперь давайте посмотрим на его интерфейс, у нас также есть второй интерфейс под названием Iterator, который можно легко edements данные вынимаются. Так же, как Iterator во многих общих языках программирования, мы можем настроить различные данные для этого Iterator, Это пример на PPT, вы можете посмотреть.
Learn To Learn
Когда нейронная сеть решит проблему, нейронная сеть также принесет нам некоторые новые проблемы, то есть нам нужно вложить много профессиональных знаний и временных затрат в проектирование архитектуры нейронной сети, Например, это архитектура .NET. для классификации изображений Google. , Эта архитектура нейронной сети разработана от начальной сверточной архитектуры до текущей сложной архитектуры. После многих лет экспериментов исследователей, повторяющихся и совершенствуемых, такая сложная модель может быть получена.
Вместо того, чтобы держать исследователей перед компьютером, почему бы не использовать мощные вычислительные ресурсы и позволить машине автоматически найти хорошую архитектуру нейронной сети? В Google мы используем метод, который заключается в использовании рекуррентной нейронной сети RNN для создания подсети.Источником этой идеи является то, что мы можем преобразовать нейронную сеть в обученную последовательность.RNN очень хорош в решении такого рода проблемы, поэтому мы используем RNN для создания подсети и обучаем эту подсеть реальными данными. Контроллер RNN обновляется в зависимости от того, насколько хороша точность обучения. На следующей итерации RNN выдаст подсеть более высокой точности. Это пример архитектуры перехода RNN, которая выглядит сложной, но несложной для понимания.
Мы также пытаемся использовать тот же метод для создания функций оптимизации, а затем сравниваем сгенерированные функции оптимизации с часто используемыми функциями.Из этой таблицы мы видим, что сгенерированные функции превосходят по точности существующие функции, но эти сгенерированные функции очень не является интуитивным, поэтому мы начали задаваться вопросом, есть ли более интуитивный способ решения проблемы обучения 2 обучения, поэтому мы подумали об эволюционном алгоритме или генетическом алгоритме. Поскольку простой одноклеточный организм может эволюционировать в очень сложный многоклеточный организм с самостоятельным мышлением, можем ли мы применить ту же теорию к построению модели, поэтому мы разработали такой алгоритм, в каждый момент времени В начале мы установили популяцию с тысячей обученных моделей и случайным образом выбрали две модели из тысячи моделей на каждом этапе и сравнили их точность.Модель останется, и модель будет воспроизводиться, и они воспроизводятся путем создания копии модели, и просто изменив модель, чтобы она выглядела как генетическая мутация, мы обучим копию этой мутации и поместим ее в популяцию.
Это детали распределенного обучения. Есть много видов мутаций модели, мы только что упомянули некоторые изменения в структуре, а некоторые даже останутся прежними, но мы ее еще немного обучим, или переобучим, потому что мутация инициализации очень важна. Выбор вариации — это модель равномерно распределенных вероятностей.
Давайте посмотрим на последний прогресс в эволюционном времени.Горизонтальная ось на рисунке представляет время, а вертикальная ось – точность.Каждая точка на рисунке представляет модель в популяции, а серая точка – это модель, которая была устранено. Синяя точка вверху справа — выжившая модель в этом положении после трех дней тренировок. После трех дней обучения можно получить относительно высокий показатель точности. После десяти дней обучения мы видим, что точность достигает стоп-периода, то есть мы нашли идеальную модель.
Device Placement
Давайте взглянем на другой исследовательский проект под названием Размещение устройств. Он использует обучение с подкреплением для размещения устройств. В настоящее время машинное обучение использует множество моделей и много данных. Это требует от нас большого количества оборудования для совместного обучения. модель.
Например, просмотр этой модели перевода очень велик. Мы обычно используем 128 графических процессоров для обучения.Давайте кратко представим Размещение устройств.Размещение устройств должно соответствовать вычислениям для устройств.В настоящее время мы все используем какие-то искусственные методы или даже простые алгоритмы. Нам нужно хорошо разбираться в устройстве и модели, чтобы настроить алгоритм, а алгоритм не просто обобщается с одной модели на другую. Но сейчас очень модный способ — преобразовать систему, основанную на этих правилах, в систему, основанную на машинном обучении, поэтому мы тоже используем аналогичный метод. Мы используем обучение с подкреплением, чтобы решить эту проблему. Модель для размещения устройств, мы вдохновлены подходом «обучение 2 обучения» для создания аналогичной модели.
У нас есть сеть, которая принимает нейронную сеть в качестве входных данных и сообщает нам, сколько вычислительных ресурсов имеет сеть. Сеть сообщает нам нейронную модель. Давайте запустим размещенную нейронную модель и настроим нейронную сеть в соответствии со временем работы. использовать аналогичную архитектуру машинного перевода. Поскольку модель относительно большая и медленная, мы используем параллелизм данных для обучения.
После этого давайте посмотрим на результаты обучения. Это результат системы нейронной трансляции. Размещение устройства. Белые точки вверху представляют узлы, работающие на ЦП и ЦП, а цветные точки внизу — узлы, работающие на разных графических процессорах. Улучшение около 20%, но это все еще очень трудно понять. На этом этапе ЦП используется на входе, а ГП используется позже.
Последние два графика показывают, что у нас есть очень сбалансированная работа на каждом графическом процессоре в системе нейронной трансляции, в то время как операция, разработанная человеком-экспертом справа, очень несбалансирована, занимает очень много времени на GPU2 и немного времени на других графических процессорах. , но это тоже понятно, т.к. экспертный дизайн вообще рассматривает только часть. В Inception V3 наши результаты не очень сбалансированы. Но, вероятно, из-за некоторого чрезмерного доверия к Inception V3 наши результаты по-прежнему имеют общее улучшение времени выполнения по сравнению с Inception V3. Позже мы провели некоторый анализ и обнаружили, что при копировании данных мы тратили меньше времени. Так что в целом есть улучшение во время выполнения.
The End
Мы говорили о двух примерах, мы исследовали, как использовать алгоритмы или машинное обучение для оптимизации моделей машинного обучения, и добились определенного прогресса, мы считаем, что в ближайшем будущем, если будут лучшие вычислительные ресурсы, все будущие архитектуры будут от поколения компьютеры, Google сделал первый шаг исследования для всех. Я надеюсь, что каждый может принять в нем участие. Я здесь, спасибо!
Выпущено с разрешения Шанхайского сообщества разработчиков Google, исходный адрес: