Site icon AppTractor

Настоящее и будущее машинного обучения на устройствах

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

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

Нейросеть для определения лиц, встроенная в смартфон

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

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

Машинное обучение сегодня

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

iOS использует несколько моделей глубокого обучения на устройствах: распознавание лиц на фото, фразы «Привет, Siri» и рукописных китайских иероглифов. Но все эти модели ничему не учатся от пользователя.

Почти все API машинного обучения (MPSCNN, TensorFlow Lite, Caffe2) могут делать предсказания на основе пользовательских данных, но вы не можете заставить эти модели узнавать новое из этих данных.

Сейчас обучение происходит на сервере с большим количеством GPU. Это медленный процесс, требующий большое количество данных. Сверточная нейронная сеть, например, обучается на тысячах или миллионах изображений. Обучение такой сети с нуля займет несколько дней на мощном сервере, несколько недель на компьютере и целую вечность на мобильном устройстве.

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

Сейчас обучение больших моделей на устройстве невозможно, но так будет не всегда. Эти модели и не должны быть большими. И самое важное: одна модель для всех может быть не лучшим решением.

Зачем нужно обучение на устройстве?

Существует несколько преимуществ обучения на устройстве:

Это решение подойдет не для каждой ситуации, но для него найдутся свои применения. Я думаю, что его главным преимуществом является возможность подгонки модели под конкретного пользователя.

На iOS-устройствах это уже делают некоторые приложения:

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

Модель клавиатуры достаточно проста, и обучение может происходить в режиме реального времени. Приложение «Фото» обучается медленнее и расходует много энергии, поэтому обучение происходит, когда устройство находится на зарядке. Многие практические применения обучения на устройстве находятся между этими двумя крайностями.

Другие существующие примеры включают в себя определение спама (ваш email-клиент учится на письмах, которые вы определяете как спам), коррекцию текста (она изучает ваши наиболее частые ошибки при наборе текста и исправляет их) и умные календари, вроде Google Now, которые учатся распознавать ваши регулярные действия.

Насколько далеко мы можем зайти?

Если целью обучения на устройстве является адаптация модели машинного обучения к потребностям или поведению конкретных пользователей, то что мы можем с этим делать?

Вот забавный пример: нейронная сеть превращает рисунки в эмодзи. Она просит вас нарисовать несколько разных фигур и учит модель распознавать их. Это приложение реализовано на Swift Playground, не самой быстрой платформе. Но даже при таких условиях нейронная сеть учится недолго — на устройстве это занимает всего несколько секунд (вот как работает эта модель).

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

Примечание: на iPhone X у разработчиков есть доступ к 3D-модели пользовательского лица в низком разрешении. Вы можете использовать эти данные, чтобы обучить модель, которая выбирает эмодзи или другое действие в приложение на основе выражения лица пользователей.

Вот несколько других будущих возможностей:

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

Разные сценарии обучения моделей

Перед применением модели вам нужно её обучить. Обучение нужно продолжать и далее, чтобы улучшать модель.

Существует несколько вариантов обучения:

  1. Отсутствие обучения на данных пользователя. Сбор собственных данных или использование публично доступных данных для создания единой модели. При улучшении модели вы выпускаете обновление приложения или просто загружаете в него новые параметры. Так делают большинство существующих приложений с машинным обучением.
  2. Централизованное обучение. Если ваше приложение или сервис уже требует данные от пользователя, которые хранятся на ваших серверах, и у вас есть к ним доступ, тогда вы можете осуществлять обучение на основе этих данных на своем сервере. Пользовательские данные можно использовать для обучения под конкретного пользователя или под всех пользователей. Так поступают платформы вроде Facebook. Этот вариант вызывает вопросы, связанные с приватностью, безопасностью, масштабированием и многие другие. Вопрос с приватностью можно решить методом «избирательной приватности» Apple, но и у него есть свои последствия.
  3. Коллаборативное обучение. Этот способ перемещает затраты на обучение на самих пользователей. Обучение происходит на устройстве, и каждый пользователь обучает небольшую часть модели. Обновления модели отправляются другим пользователям, так что они могут учиться на ваших данных, а вы — на их. Но это по-прежнему единая модель, и у всех в итоге оказываются одни и те же параметры. Главным плюсом такого обучения является его децентрализованность. В теории это лучше для приватности, но, согласно исследованиям, этот вариант может быть хуже.
  4. Каждый пользователь обучает собственную модель. В этом варианте лично я заинтересован больше всего. Модель может учиться с нуля (как в примере с рисунками и эмодзи) или это может быть обученная модель, которая настраивается под ваши данные. В любом случае модель можно совершенствовать со временем. Например, клавиатура начинает с уже обученной на определенном языке модели, но со временем учится предсказывать, какое предложение вы хотите написать. Минусом этого подхода является то, что другие пользователи не могут получить от этого пользу. Так что этот вариант работает только для приложений, которые используют уникальные данные.

Как осуществлять обучение на устройстве?

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

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

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

С нашими текущими методами обучения настройка моделей на устройстве все ещё далека. Но не все потеряно. Простые модели уже можно обучить на устройстве. Такие классические модели машинного обучения, как логистическая регрессия, дерево принятия решений или наивный байесовский классификатор, можно быстро обучить, особенно при использовании методов оптимизации второго порядка, таких как L-BFGS или сопряженный градиент. Даже базовая рекуррентная нейронная сеть должна быть доступна для реализации.

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

Вот ещё несколько проблем, с которыми предстоит столкнуться при обучении на устройстве:

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

 

Exit mobile version