Смартфоны в наши дни — это не просто полезные вещи. Они стали неотъемлемой частью нашей жизни и во многом определяют наше восприятие мира. В этом посте я кратко расскажу об истории смартфонов, росте объемов данных и вычислительной мощности, а также о том, как такие компании, как Google, используют машинное обучение, чтобы сделать смартфоны более интеллектуальными и актуальными. Я представлю простое приложение для Android, которое я создал, чтобы продемонстрировать, как легко создавать и развертывать модели машинного обучения на устройстве с помощью библиотеки Google TensorFlow lite и делать выводы в реальном времени. Наконец, я закончу этот пост, поделившись своими взглядами на будущее ИИ и то, как он изменит мир, каким мы его знаем. Приятного чтения!

Смартфоны

В 1992 году IBM представила миру смартфоны, представив персональный коммуникатор Simon. Хотя по сегодняшним меркам это смехотворно, функции, предоставленные Саймоном, действительно опередили свое время. Но Саймон был неуклюжим, очень дорогим (стартовая цена 1100 долларов) и имел плохое время автономной работы. Неудивительно, что, несмотря на шумиху и ценность бренда, IBM удалось продать только 50 000 из них.

Перенесемся в 2007 год, когда Стив Джобс выпустил первый iPhone, и смартфоны стали реальностью. По цене от 499 до 599 долларов Apple продала 1,4 миллиона iPhone в течение первого года после запуска и колоссальные 11,6 миллиона в следующем году, практически уничтожив рынок уже успешного продукта — iPod.

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

Последняя версия Android — Pie с такими функциями, как облачное хранилище, Adaptive Battery, навигация с помощью жестов и помощник с искусственным интеллектом, который может позвонить в салон и записаться на прием от имени пользователя, делает бедного Саймона похожим на какой-то забытый артефакт из Стоуна. Возраст.

Вычисления и данные

Невероятно, сколько вычислительной мощности мы носим в кармане, не обращая на это внимания. Управляющий компьютер Аполлона (ACG), который имел решающее значение для первого полета человека на Луну в 1969 году, имел 64 КБ памяти и работал на частоте 0,043 МГц. Не говоря уже о том, что он был размером с автомобиль и стоил миллионы долларов. Быстро выходящий из моды iPhone 6 работает на частоте 1,6 ГГц (почти в 32 600 раз быстрее, чем ACG), имеет минимум 16 ГБ памяти, стоит всего 199 долларов и помещается в кармане.

Но как это ни удивительно, увеличение вычислительной мощности — это только половина дела. Несколько десятилетий назад министр нефти Саудовской Аравии шейх Ямани сказал: «Каменный век не закончился из-за отсутствия камней, а нефтяной век закончится задолго до того, как в мире закончится нефть». Эпоху, в которой мы живем сегодня, справедливо называют веком информации, и сегодняшней валютой являются данные, которые нам не грозят исчерпать в обозримом будущем. На самом деле ошеломляет, сколько данных генерируется сегодня, и я имею в виду не только данные, генерируемые традиционными источниками, такими как бизнес-транзакции. Данные датчиков, генерируемые множеством всепроникающих периферийных устройств, преодолевают все барьеры с точки зрения объема, разнообразия и скорости. Вы двигаете мышцей, и смарт-браслет на вашем запястье генерирует точку данных.

Машинное обучение

Этот ускоренный рост объема данных и вычислительной мощности привлек внимание к довольно загадочной области компьютерных наук. С 1950 года, когда Алан Тьюринг изобрел знаменитый тест Тьюринга, многие великие ученые активно занимаются машинным обучением. За прошедшие годы исследователи в этой области сделали большой прорыв. Но только в последнее десятилетие или около того, когда предприятия внезапно оказались на грудах данных и получили доступ к доступным вычислительным мощностям, машинное обучение приобрело популярность как инструмент для создания новых потоков доходов.

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

Глубокое обучение

Хотя традиционные программы или модели машинного обучения «изучаются» на основе данных, они не создаются полностью с нуля с использованием этих данных. Вместо этого эксперт по машинному обучению выполняет что-то, называемое Feature Engineering, которое представляет собой своего рода ручную обработку определенных ключевых аспектов модели, называемых экспертным пониманием проблемной области на основе функций.

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

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

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

y = f(x)

Теперь, если эксперт по машинному обучению считает, что отношение между x и y является линейным, то есть движение в y монотонно относится к движению в x, затем f можно представить просто так:

f(x;w) = (x)w

Здесь w представляет параметры модели, полученные из данных. Уравнение выше — это просто компактный способ представления продукта между x и w. Теперь очень редко соотношение между x и y на самом деле является линейным. В ситуации, когда это отношение не является линейным, модель f(x;w) всегда будет делать предвзятый прогноз, независимо от того, насколько хорошо мы справимся с обучением. w используя данные.

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

f(x;w) = (g(x))w

В традиционном машинном обучении эксперт вручную создает функцию g на этапе разработки функций.

Теперь, если мы хотим узнать g из данных, мы добавим дополнительный параметр в f.

f(x; θ,w) = (g(x;θ))w

Здесь θпредставляют параметры для функцииg, которые также извлекаются из данных. функция f,в этой форме известна как нейронная сеть с прямой связью, а функция g(x;θ) представляет собой скрытый слой этой сети.

Мы можем применить больше функций, таких как g, прежде чем мы умножим их вывод на w.

f(x;θ₁,θ₂…θₙ,w) = (g ₙ(….g₂(g₁(x;θ₁);θ₂);….θₙ))w

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

ТензорФлоу

Поняв на очень высоком уровне, что такое Deep Learning, мы теперь обратимся к некоторым инструментам, доступным для построения Deep Networks. Оказывается есть из чего выбрать. Здесь я бы дал свою весьма предвзятую рекомендацию — TensorFlow от Google. TensorFlow предоставляет API-интерфейсы, которые абстрагируются от деталей реализации и позволяют эксперту сосредоточиться на проектных решениях, имеющих решающее значение для решения проблемы.

TensorFlow работает с графами вычислений. Модель машинного обучения представлена ​​в виде графа с переменными параметрами. На этапе обучения на график подаются данные, ошибка вычисляется путем сравнения выходных данных графика с истинной истиной, а значения переменных изменяются для уменьшения ошибки. После нескольких таких итераций мы достигаем значений параметров, при которых ошибка минимизируется.

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

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

ТензорФлоу Лайт

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

Для решения этих проблем TensorFlow разработал легкое решение под названием TensorFlow Lite. Используя некоторую магию вуду (Flatbuffers, жесткие зависимости, предварительную активацию и смещения), TF lite позволяет выполнять вывод на устройстве.

Я не буду вдаваться в детали реализации TF lite здесь. Вместо этого я поделюсь созданным мной приложением Andriod, которое выполняет классификацию цифр с использованием предварительно обученной облегченной модели TF. Полный код можно клонировать из моего репозитория GitHub.

Вы можете просмотреть код на GitHub, чтобы понять всю реализацию. Здесь позвольте мне выделить фрагмент кода, который генерирует модель TFLite из замороженного графа.

После создания TFlite я просто включаю его в папку Asset в своем проекте Andriod, создаю его экземпляр и вызываю его при нажатии кнопки.

Ниже видео показывает приложение в действии

Дорога вперед

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

Смартфоны — это всего лишь один из видов устройств. С появлением Интернета вещей все вокруг нас становится умнее. Кто знает, как будет выглядеть будущее. В 1989 году в голливудском фильме «Назад в будущее» одной из «крутых» вещей, показанных в будущем, были кроссовки Nike с автоматической шнуровкой. С современной умной обувью, которая не только отслеживает ваши движения, но и помогает улучшить вашу производительность, кого волнует глупая самостоятельная шнуровка. Я хочу сказать, что наше воображение сильно ограничено нашим прошлым опытом, а экстраполяция, которую мы делаем, когда представляем себе будущее, сильно не соответствует реальности.

Эндрю Нг, один из ведущих специалистов в области ИИ, недавно процитировал: «ИИ — это новое электричество». Десятилетия назад, когда было открыто электричество, никто и представить себе не мог, что оно во многих отношениях станет главным движущим фактором в нашей жизни. То же самое касается ИИ и МО. Он переопределит так много областей, что будет невозможно представить, какой была бы жизнь без него.