Что могут делать нейронные сети в Андроид в 2021? — обложка

За последние 10 лет термин “нейронные сети” или просто “нейросети” вышел за рамки научной и профессиональной среды. Теория организации нейросетей появилась еще в середине прошлого века, но только к 2012 году назад мощности компьютеров достигли достаточных значений, чтобы обучать нейросети. Благодаря этому началось их повсеместное использование.

Нейросети всё активнее применяются в разработке мобильных приложений. Отчёт Deloitte показывает, что более 60% приложений, установленных взрослыми в развитых странах, используют нейросети. По статистике, Android уже несколько лет уверенно лидирует по популярности. Сегодня нейросети помогают распознавать и обрабатывать речь (например, в голосовых помощниках), определять объекты (компьютерное зрение), анализировать естественный язык и находить вредоносные программы. Они активно внедряются и в приложения для здравоохранения. Например, существуют приложения, способные выявлять диабетическую ретинопатию по снимку сетчатки глаза.

Что такое нейросети и как они работают

Человечество переняло идею нейросетей у природы. За основу учёные взяли нервную систему человека и животных. Естественный нейрон состоит из ядра, дендритов и аксона. Аксон разветвляется, образуя синапсы — связи с дендритами других нейронов.

Как устроены нейросети мозга

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

Схема искусственных нейронных связей

Соединения нескольких нейронов формируют слои, а соединения слоёв — нейронную сеть. Существует три основных типа нейронов: входной (принимает информацию), скрытый (обрабатывает информацию) и выходной (выдаёт результат вычислений) (см. рисунок).

Схема нейронных связей

Нейроны разных уровней соединены между собой через синапсы. При передаче сигнала через синапс он может усиливаться или ослабляться. У каждого синапса есть вес — это коэффициент, который может быть любым вещественным числом, и именно он определяет, как изменится сигнал. На вход подаются числа (сигналы), они умножаются на соответствующие веса и складываются. Затем функция активации вычисляет выходной сигнал и передаёт его дальше (см. картинку).

Как работают нейросети

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

Подготовка нейросети к использованию

Работа с нейросетями проходит через несколько этапов:

  1. Подготовка нейросети включает выбор архитектуры (способа организации нейронов), топологии (структуры их расположения относительно друг друга и внешнего мира), алгоритма обучения и других параметров.
  2. Загрузка входных данных в нейросеть.
  3. Обучение нейросети — очень важный этап, без которого она бесполезна. Именно здесь происходит «магия»: нейросеть получает не только входные данные, но и информацию о том, какой результат от неё ожидают. Полученный нейросетью ответ сравнивается с правильным. Если они не совпадают, сеть вычисляет, какие нейроны сильнее всего повлияли на ошибку, и корректирует веса связей с ними — это и есть алгоритм обратного распространения ошибки. Это очень упрощённое объяснение. Советую почитать данную статью, чтобы глубже разобраться в теме. Обучение нейросетей требует много ресурсов, поэтому его не проводят на смартфонах. Время обучения зависит от задачи, архитектуры сети и объёма данных.
  4. Проверка адекватности обучения. Сеть не всегда учится тому, чему её пытались научить. Был случай, когда нейросеть обучали распознавать танки на фотографиях. Но поскольку все снимки с танками были сделаны на одном и том же фоне, сеть начала определять именно этот фон, а не сами танки. Качество обучения нейросети нужно проверять на примерах, которые не использовались при обучении.
  5. Использование нейросети — разработчики подключают обученную модель к приложению.

Ограничения работы нейросетей на мобильных устройствах

Ограничения оперативной памяти

Большинство доступных на рынке мобильных устройств среднего и низкого уровня оснащены от 2 до 4 ГБ ОЗУ. При этом операционная система обычно занимает около трети этого объёма. Из-за нехватки памяти система может принудительно завершать работу приложений с нейросетями, когда лимит оперативной памяти почти достигнут.

Размер приложения

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

Время выполнения

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

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

Работа с одним приложением на нескольких устройствах

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

Обзор библиотек для разработки нейросетей на Android

TensorFlow

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

Библиотека может обучать и запускать глубокие нейронные сети для распознавания рукописных цифр, изображений, преобразования слов в векторы и обработки естественного языка. Поддерживает Ubuntu, macOS, Android, iOS и Windows.

Чтобы проще освоить TensorFlow, команда разработчиков подготовила дополнительные учебные материалы и улучшила руководства для новичков. Некоторые энтузиасты создали свои учебные пособия по TensorFlow (включая InfoWorld). Вы можете почитать книги по TensorFlow или пройти онлайн-курсы.

Нам, мобильным разработчикам, стоит обратить внимание на TensorFlow Lite — лёгкую версию TensorFlow для мобильных и встроенных устройств. Она позволяет выполнять задачи машинного обучения прямо на устройстве (но не обучение моделей) с низкой задержкой и небольшим объёмом памяти. TensorFlow Lite поддерживает аппаратное ускорение через API нейронных сетей Android. Модели этой платформы достаточно компактны, чтобы работать на смартфонах, и могут использоваться без подключения к интернету.

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

Основная идея TensorFlow Lite — обучить модель в TensorFlow и преобразовать её в формат TensorFlow Lite. После этого можно использовать полученный файл в мобильном приложении.

TensorFlow Lite состоит из двух основных компонентов:

  • иинтерпретатор TensorFlow Lite — запускает оптимизированные модели на мобильных телефонах, устройствах Linux и микроконтроллерах.
  • конвертер TensorFlow Lite — преобразует модели TensorFlow в компактный формат, пригодный для работы с интерпретатором, и применяет оптимизации, чтобы повысить производительность и

размер двоичного файла.

TensorFlow Lite разработан, чтобы упростить машинное обучение прямо на мобильных устройствах — без необходимости отправлять данные на сервер и ждать ответа. Для разработчиков машинное обучение на устройстве даёт следующие преимущества:

  • время ответа: запрос не отправляется на сервер, а обрабатывается на устройстве;
  • конфиденциальность: данные не покидают устройство;
  • подключение к интернету не требуется;
  • устройство потребляет меньше энергии, потому что не отправляет запросы на сервер.

Firebase ML Kit

Благодаря TensorFlow Lite стало проще внедрять и использовать нейросети в приложениях. Однако разработка и обучение моделей по-прежнему требуют много времени и усилий. Чтобы облегчить работу разработчикам, была создана библиотека Firebase ML Kit.

Библиотека позволяет легко использовать уже обученные глубокие нейросети в приложениях — для этого нужно написать минимум кода. Большинство моделей можно запускать как локально, так и в Google Cloud. Разработчики применяют их для задач компьютерного зрения: распознавание символов, сканирование штрих-кодов, обнаружение объектов. Библиотека пользуется популярностью. Например, её используют в:

  • "Яндекс.Деньги", чтобы распознавать QR-коды;
  • фитнес-приложении FitNow, чтобы распознавать тексты с этикеток продуктов для подсчёта калорий;
  • платежном приложении TutboTax, чтобы распознавать штрих-коды документов.

Также в ML Kit есть:

  • определение языка написанного текста;
  • перевод текстов на устройстве;
  • умный ответ на сообщение (генерация ответного предложения на основе всего разговора).

Помимо стандартных методов, поддерживается использование пользовательских моделей.

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

Разработчикам не нужно публиковать приложение после каждого обновления, так как ML Kit будет автоматически обновлять модель при подключении к интернету.

Команда ML Kit решила заняться сжатием моделей. Сейчас идут эксперименты с функцией, которая позволяет загрузить полную модель TensorFlow вместе с данными обучения и получить на выходе сжатую модель TensorFlow Lite. Разработчики ищут партнёров, чтобы протестировать технологию и получить обратную связь. Если вам это интересно, зарегистрируйтесь здесь.

Поскольку эта библиотека доступна через Firebase, можно использовать и другие сервисы этой платформы. Например, тестирование Remote Config и A/ B-тестирование позволяют экспериментировать с разными вариантами поведения приложения. Если в приложение уже загружена обученная нейросеть, можно добавить ещё одну без повторной публикации — переключаться между ними или использовать обе одновременно. Пользователь при этом ничего не заметит.

Проблемы использования нейросетей в мобильной разработке

Разработка приложений под ОС Android, где используются нейросети, по-прежнему остаётся сложной задачей для мобильных разработчиков. Обучение нейросетей может длиться неделями или даже месяцами, поскольку входные данные могут включать миллионы элементов. Такая серьёзная вычислительная нагрузка пока недоступна для большинства смартфонов.

Проверьте, можно ли обойтись без нейросети в мобильном приложении, если:

  • в компании нет специалистов, знакомых с нейросетями;
  • ваша задача достаточно нетривиальна, и для её решения нужно разрабатывать собственную модель, то есть нельзя воспользоваться готовыми решениями от Google — это займёт слишком много времени;
  • заказчику нужен быстрый результат — обучение нейросетей может занимать очень много времени;
  • приложение будет использоваться на устройствах со старой версией Android (ниже 9). Такие устройства не обладают достаточной производительностью.

Заключение

Нейросети стали популярны несколько лет назад, и всё больше компаний применяют эту технологию в своих приложениях. Мобильные устройства накладывают определённые ограничения на работу нейросетей, поэтому, если вы решили их использовать, лучше всего выбрать готовое решение от Google (ML Kit) или разработать и внедрить свою нейросеть с помощью TensorFlow Lite.

  • Технологии
    Вопросы клиентов