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

Нейросети все активнее используются в разработке мобильных приложений. Отчет Delloitte свидетельствует о том, что более 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 достаточно компактны для работы на мобильных устройствах и могут использоваться в автономном режиме.

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.

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