Статьи
Настоящее и будущее машинного обучения на устройствах
Специалист по глубокому обучению Маттейс Холлеманс рассмотрел перспективы машинного обучения на устройствах и как его можно использовать уже сейчас.
Как вы, конечно, заметили, машинное обучение на устройствах сейчас все больше развивается. Apple упомянула это около ста раз во время WWDC 2017. Неудивительно, что разработчики хотят добавить машинное обучение в свои приложения.
Однако многие из этих моделей обучения используются только для совершения выводов на основе ограниченного набора знаний. Несмотря на термин “машинное обучение”, никакого обучения на устройстве не происходит, знание находится внутри модели и не улучшается со временем.
Причина этого заключается в том, что обучение модели требует большой вычислительной мощности, а мобильные телефоны пока на это не способны. Гораздо проще обучать модели офлайн на серверной ферме, а все улучшения модели включать в обновление приложения.
Стоит отметить, что обучение на устройстве имеет смысл для некоторых приложений, и я верю, что со временем такое обучение моделей станет таким же привычным, как использование моделей для прогнозирования. В этом тексте я хочу исследовать возможности этой технологии.
Машинное обучение сегодня
Самым распространенным применением глубокого и машинного обучения в приложениях сейчас является компьютерное зрение для анализа фото и видео. Но машинное обучение не ограничено изображениями, оно также используется для аудио, языка, временных последовательностей и других типов данных. Современный телефон имеет множество различных сенсоров и быстрое соединение с интернетом, что приводит к большому количеству данных, доступных для моделей.
iOS использует несколько моделей глубокого обучения на устройствах: распознавание лиц на фото, фразы «Привет, Siri» и рукописных китайских иероглифов. Но все эти модели ничему не учатся от пользователя.
Почти все API машинного обучения (MPSCNN, TensorFlow Lite, Caffe2) могут делать предсказания на основе пользовательских данных, но вы не можете заставить эти модели узнавать новое из этих данных.
Сейчас обучение происходит на сервере с большим количеством GPU. Это медленный процесс, требующий большое количество данных. Сверточная нейронная сеть, например, обучается на тысячах или миллионах изображений. Обучение такой сети с нуля займет несколько дней на мощном сервере, несколько недель на компьютере и целую вечность на мобильном устройстве.
Обучение на сервере — это хорошая стратегия, если обновление модели происходит нерегулярно, и каждый пользователь использует одну и ту же модель. Приложение получает обновление модели каждый раз при обновлении приложения в App Store или при периодической загрузке новых параметров из облака.
Сейчас обучение больших моделей на устройстве невозможно, но так будет не всегда. Эти модели и не должны быть большими. И самое важное: одна модель для всех может быть не лучшим решением.
Зачем нужно обучение на устройстве?
Существует несколько преимуществ обучения на устройстве:
- Приложение может учиться на данных или поведении пользователя.
- Данные будут оставаться на устройстве.
- Перевод любого процесса на устройство экономит деньги.
- Модель будет обучаться и обновляться непрерывно.
Это решение подойдет не для каждой ситуации, но для него найдутся свои применения. Я думаю, что его главным преимуществом является возможность подгонки модели под конкретного пользователя.
На iOS-устройствах это уже делают некоторые приложения:
- Клавиатура учится на основе текстов, которые вы набираете, и делает предположения о следующем слове в предложении. Эта модель обучается конкретно для вас, а не для других пользователей. Так как обучение происходит на устройстве, ваши сообщения не отправляются на облачный сервер.
- Приложение «Фото» автоматически организует изображения в альбом «Люди». Я не совсем уверен, как это работает, но программа использует API распознавания лиц на фото и размещает похожие лица вместе. Возможно, это просто неконтролируемая кластеризация, но обучение все равно должно происходить, так как приложение позволяет вам исправлять его ошибки и совершенствуется на основе вашей обратной связи. Вне зависимости от вида алгоритма это приложение — хороший пример кастомизации пользовательского опыта на основе их данных.
- Touch ID и Face ID учатся на основе вашего отпечатка пальца или лица. Face ID продолжает учиться со временем, поэтому, если вы отрастите бороду или начнете носить очки, оно по-прежнему будет узнавать ваше лицо.
- Обнаружение движения. Apple Watch изучает ваши привычки, например, изменение биения сердца во время разных активностей. Опять же, я не знаю, как это работает, но, очевидно, обучение должно происходить.
- Clarifai Mobile SDK позволяет пользователям создавать свои модели классификации изображений при помощи фотографий предметов и их обозначения. Обычно классификационная модель требует тысячи изображений для обучения, но этот SDK может научиться всего на нескольких примерах. Возможность создавать классификаторы изображений из ваших собственных фото, не будучи экспертом в машинном обучении, имеет много практических применений.
Некоторые из этих задач проще, чем остальные. Часто «обучение» является просто запоминанием последнего действия пользователя. Для многих приложений этого достаточно, и это не требует причудливых алгоритмов машинного обучения.
Модель клавиатуры достаточно проста, и обучение может происходить в режиме реального времени. Приложение «Фото» обучается медленнее и расходует много энергии, поэтому обучение происходит, когда устройство находится на зарядке. Многие практические применения обучения на устройстве находятся между этими двумя крайностями.
Другие существующие примеры включают в себя определение спама (ваш email-клиент учится на письмах, которые вы определяете как спам), коррекцию текста (она изучает ваши наиболее частые ошибки при наборе текста и исправляет их) и умные календари, вроде Google Now, которые учатся распознавать ваши регулярные действия.
Насколько далеко мы можем зайти?
Если целью обучения на устройстве является адаптация модели машинного обучения к потребностям или поведению конкретных пользователей, то что мы можем с этим делать?
Вот забавный пример: нейронная сеть превращает рисунки в эмодзи. Она просит вас нарисовать несколько разных фигур и учит модель распознавать их. Это приложение реализовано на Swift Playground, не самой быстрой платформе. Но даже при таких условиях нейронная сеть учится недолго — на устройстве это занимает всего несколько секунд (вот как работает эта модель).
Если ваша модель тоже не очень сложна, как эта двухслойная нейронная сеть, вы уже можете проводить обучение на устройстве.
Примечание: на iPhone X у разработчиков есть доступ к 3D-модели пользовательского лица в низком разрешении. Вы можете использовать эти данные, чтобы обучить модель, которая выбирает эмодзи или другое действие в приложение на основе выражения лица пользователей.
Вот несколько других будущих возможностей:
- Smart Reply — это модель от Google, которая анализирует входящее сообщение или письмо и предлагает подходящий ответ. Она пока не обучается на устройстве и рекомендует одни и те же ответы всем пользователям, но (в теории) она может обучаться на текстах пользователя, что значительно улучшит модель.
- Распознавание почерка, которое будет учиться именно на вашем почерке. Это особенно полезно на iPad Pro с Pencil. Это не новая функция, но если у вас такой же плохой почерк, как и у меня, то стандартная модель будет допускать слишком много ошибок.
- Распознавание речи, которое будет становиться более точным и подстроенным под ваш голос.
- Трекинг сна/фитнес-приложения. Прежде чем эти приложения будут давать вам советы об улучшении здоровья, им нужно узнать вас. Из соображений безопасности этим данным лучше оставаться на устройстве.
- Персонализированные модели для диалога. Нам ещё предстоит увидеть будущее чат-ботов, но их преимущество заключается в том, что бот может адаптироваться под вас. Когда вы говорите с чат-ботом, ваше устройство будет изучать вашу речь и предпочтения и изменять ответы чат-бота под вашу личность и манеру общения (например, Siri может учиться давать меньше комментариев).
- Улучшенная реклама. Никому не нравится реклама, но машинное обучение может сделать её менее назойливой для пользователей и более прибыльной для рекламодателя. Например, рекламный SDK может изучать, как часто вы смотрите и кликаете на рекламу, и подбирать более подходящую рекламу для вас. Приложение может обучать локальную модель, которая будет запрашивать только рекламу, работающую для конкретного пользователя.
- Рекомендации — это распространенное использование машинного обучения. Проигрыватель подкастов может обучаться на программах, которые вы слушали, чтобы давать советы. Сейчас приложения осуществляют эту операцию в облаке, но это можно делать и на устройстве.
- Людям с ограниченными возможностями приложения могут помогать ориентироваться в пространстве и лучше его понимать. Я не разбираюсь в этом, но могу представить, что приложения могут помогать, например, различать разные лекарства при помощи камеры.
Это только несколько идей. Так как все люди разные, модели машинного обучения могли бы подстраиваться под наши конкретные нужды и желания. Обучение на устройстве позволяет создать уникальную модель для уникального пользователя.
Разные сценарии обучения моделей
Перед применением модели вам нужно её обучить. Обучение нужно продолжать и далее, чтобы улучшать модель.
Существует несколько вариантов обучения:
- Отсутствие обучения на данных пользователя. Сбор собственных данных или использование публично доступных данных для создания единой модели. При улучшении модели вы выпускаете обновление приложения или просто загружаете в него новые параметры. Так делают большинство существующих приложений с машинным обучением.
- Централизованное обучение. Если ваше приложение или сервис уже требует данные от пользователя, которые хранятся на ваших серверах, и у вас есть к ним доступ, тогда вы можете осуществлять обучение на основе этих данных на своем сервере. Пользовательские данные можно использовать для обучения под конкретного пользователя или под всех пользователей. Так поступают платформы вроде Facebook. Этот вариант вызывает вопросы, связанные с приватностью, безопасностью, масштабированием и многие другие. Вопрос с приватностью можно решить методом «избирательной приватности» Apple, но и у него есть свои последствия.
- Коллаборативное обучение. Этот способ перемещает затраты на обучение на самих пользователей. Обучение происходит на устройстве, и каждый пользователь обучает небольшую часть модели. Обновления модели отправляются другим пользователям, так что они могут учиться на ваших данных, а вы — на их. Но это по-прежнему единая модель, и у всех в итоге оказываются одни и те же параметры. Главным плюсом такого обучения является его децентрализованность. В теории это лучше для приватности, но, согласно исследованиям, этот вариант может быть хуже.
- Каждый пользователь обучает собственную модель. В этом варианте лично я заинтересован больше всего. Модель может учиться с нуля (как в примере с рисунками и эмодзи) или это может быть обученная модель, которая настраивается под ваши данные. В любом случае модель можно совершенствовать со временем. Например, клавиатура начинает с уже обученной на определенном языке модели, но со временем учится предсказывать, какое предложение вы хотите написать. Минусом этого подхода является то, что другие пользователи не могут получить от этого пользу. Так что этот вариант работает только для приложений, которые используют уникальные данные.
Как осуществлять обучение на устройстве?
Стоит помнить, что обучение на данных пользователя отличается от обучения на большом объеме данных. Начальную модель клавиатуры можно обучить на стандартном корпусе текстов (например, на всех текстах Википедии), но текстовое сообщение или письмо будет написано языком, отличающимся от типичной статьи в Википедии. И этот стиль будет отличаться от пользователя к пользователю. Модель должна предусматривать эти виды вариаций.
Проблема также заключается в том, что наши лучшие методы глубокого обучения довольно неэффективны и грубы. Как я уже говорил, обучение классификатора изображений может занять дни или недели. Обучающий процесс, стохастический градиентный спуск, проходит по небольшим этапам. В наборе данных может быть миллион изображений, каждое из которых нейронная сеть просмотрит около ста раз.
Очевидно, этот метод не подходит для мобильных устройств. Но зачастую вам не нужно обучать модель с нуля. Многие люди берут уже обученную модель и затем используют transfer learning на основе своих данных. Но эти небольшие наборы данных все равно состоят из тысяч изображений, и даже так обучение происходит слишком медленно.
С нашими текущими методами обучения настройка моделей на устройстве все ещё далека. Но не все потеряно. Простые модели уже можно обучить на устройстве. Такие классические модели машинного обучения, как логистическая регрессия, дерево принятия решений или наивный байесовский классификатор, можно быстро обучить, особенно при использовании методов оптимизации второго порядка, таких как L-BFGS или сопряженный градиент. Даже базовая рекуррентная нейронная сеть должна быть доступна для реализации.
Для клавиатуры может сработать метод онлайн-обучения. Вы можете проводить сеанс обучения после определенного количества слов, набранных пользователем. То же самое относится к моделям, использующим акселерометр и информацию о движении, где данные поступают в виде постоянного потока цифр. Так как эти модели обучаются на небольшой части данных, каждое обновление должно происходить быстро. Поэтому, если ваша модель небольшая и у вас не так много данных, то обучение будет занимать секунды. Но если ваша модель имеет больший размер или у вас много данных, тогда вам нужно проявить творческий подход. Если модель изучает лица людей в вашей галерее фото, у нее слишком много данных для обработки, и вам нужно найти баланс между скоростью и точностью алгоритма.
Вот ещё несколько проблем, с которыми предстоит столкнуться при обучении на устройстве:
- Большие модели. Для сетей глубокого обучения текущие методы обучения проходят слишком медленно и требуют слишком много данных. Многие исследования сейчас посвящены обучению моделей на небольшом количестве данных (например, на одном фото) и за небольшое число шагов. Я уверен, что любой прогресс приведет к распространению обучения на устройстве.
- Несколько устройств. Вероятно, вы пользуетесь не одним устройством. Ещё предстоит решить вопрос передачи данных и моделей между устройствами пользователя. Например, приложение «Фото» в iOS 10 не передает информацию о лицах людей между устройствами, поэтому обучается на всех устройствах отдельно.
- Обновления приложения. Если ваше приложение включает обученную модель, которая подстраивается под поведение и данные пользователя, то что происходит, когда вы обновляете модель вместе с приложением?
Обучение на устройстве пока находится в начале своего развития, но мне кажется, что эта технология неизбежно станет важной в создании приложений.
-
Новости2 недели назад
Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
-
Новости2 недели назад
Видео и подкасты о мобильной разработке 2024.39
-
Видео и подкасты для разработчиков5 дней назад
Lua – идеальный встраиваемый язык
-
Разработка2 недели назад
Android сломался или я чего-то не понимаю? — Обсуждение на Reddit