Учебное пособие для начинающих о том, как реализовать машинное обучение в системах Apple с помощью CreateML и CoreML, чтобы перенести его в приложение.

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

Хотя эта статья предназначена для тех, кто уже имеет опыт работы с ML, в первой части я расскажу об основах, чтобы сделать эту статью доступной для всех, потому что (спойлер) в Apple сделали ML для всех, так что сидите , не торопитесь и давайте начнем!

План статьи:

  • Что такое искусственный интеллект (ИИ)
  • Что такое Машинное обучение (ML)
  • Разница между машинным обучением и глубоким обучением (ГО)
  • Концепции на вынос, которые вы должны знать, чтобы начать с машинного обучения
  • Как Apple интегрирует машинное обучение в свои системы

В любом случае, если вы уже знакомы с ML, вы можете сразу перейти к последней части, чтобы войти в среду Apple ML.

Что такое искусственный интеллект?

Общеизвестно, что отцом ИИ является Алан Матисон Тьюринг, который провел самые ранние исследования в этой области и к 50-м годам разговор об ИИ вот-вот должен был открыться благодаря его работам» Компьютерная техника и интеллект», где он задал знаменитый вопрос Могут ли машины мыслить?.

Хотя универсального определения того, что такое ИИ, не существует, мы можем положиться на определение, данное Джоном Маккарти (2004), согласно которому: «Это наука и техника создания интеллектуальных машин, особенно интеллектуальные компьютерные программы. Это связано с аналогичной задачей использования компьютеров для понимания человеческого интеллекта, но ИИ не должен ограничиваться методами, которые поддаются биологическому наблюдению».

Теперь, не теряя сути, давайте поймем, какое отношение AI имеет к ML и DL, взглянув на следующий не требующий пояснений рисунок.

Как показано на рисунке, машинное обучение и глубокое обучение являются подобластями ИИ.

Как примечание, существует два типа ИИ:

  • Слабый ИИ (иногда также называемый узким ИИ), который обучен выполнять конкретную задачу и на который полагаются многие известные приложения, такие как: Alexa, Siri и автономные автомобили.
  • Вместо этого сильный ИИ представляет собой теоретический вид ИИ, в котором машина обладает интеллектом, сравнимым с человеческим; у него есть самосознающая совесть, способная решать проблемы, учиться и планировать будущее со способностью превосходить интеллект и возможности человеческого мозга.

Что такое машинное обучение

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

Машинное обучение можно описать как процесс автоматизации и улучшения процесса обучения компьютеров на основе опыта без необходимости программирования, то есть без какого-либо вмешательства человека. Процедура начинается с предоставления высококачественных данных нашим машинам (компьютерам), которые затем обучаются путем разработки моделей машинного обучения с данными и различными методами. Алгоритмы, которые мы используем, определяются типом данных, которые у нас есть, и задачей, которую мы пытаемся автоматизировать, и в большинстве случаев этот процесс определения алгоритмов приходит с практикой и опытом.

Некоторые ключевые моменты, чтобы лучше охарактеризовать ML:

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

Давайте теперь дадим строгое определение ML в смысле компьютера или компьютерной программы, которая «обучается»:

Говорят, что компьютерная программа учится на опыте E в отношении набора задач T и показателя производительности. P, если, как указывает P, его производительность в задачах T улучшается с опытом E

Основываясь на предыдущем определении, если вы сейчас приближаетесь к области ML, вам необходимо знать некоторые ключевые термины, которые характеризуют задачу. Есть:

  • Задачи обучения с учителем, в которых помеченные наборы данных используются для обучения алгоритмов эффективной идентификации данных или прогнозированию результатов. По мере ввода входных данных в модель веса корректируются до тех пор, пока модель не будет хорошо подобрана. Прогнозы модели в значительной степени связаны с набором весов, которые модель изучает на этапе обучения. Такие веса затем используются для оценки функции, которая связывает вход с выходом. Это особенно заметно в рамках нейронных сетей. Просто упомянем некоторые из них: линейная регрессия, деревья решений, K-ближайшие соседи, машины опорных векторов и т. д.
  • Задачи Неконтролируемое обучение, в которых немаркированные наборы данных анализируются и группируются. Без необходимости участия человека эти алгоритмы выявляют скрытые закономерности и помогают группировать данные. Например, вы можете сгруппировать похожие точки данных на основе метрики расстояния (часто используется евклидово расстояние) с помощью K-средних. Иногда неконтролируемое обучение также используется для уменьшения размерности набора данных с помощью метода уменьшения размерности, в котором общим подходом является использование анализа основных компонентов (PCA). . Когда количество точек данных меньше или равно количеству функций, описывающих одну точку данных, вы можете столкнуться с так называемым «Проклятием размерности», и поэтому необходимость уменьшения размерности данных
  • Задания Semi-supervised Learning представляют собой нечто среднее между контролируемым и неконтролируемым обучением. Когда задача попадает в эту категорию, это означает, что в наборе данных есть небольшое количество помеченных примеров и большое количество неразмеченных примеров. Помеченные данные используются для маркировки неразмеченных данных для прогнозирования.

Разница между ML и DL

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

Представителем алгоритмов DL являются нейронные сети (NN), они представляют собой основу, на которой держится автоматическое обучение в этой области. Нейронные сети в зависимости от решаемой задачи делятся на различные типы:
- Искусственные нейронные сети (ИНС)
- Сверточные нейронные сети (CNN)
- Рекуррентные нейронные сети(RNN)
Судя по рисунку, это тип ANN.

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

Следует отметить, что потенциал ГО по сравнению с «классическим» МО, как уже было сказано, заключается в возможности использовать очень большие наборы данных для обучения моделей, и в этом заключается существенное отличие от «традиционных» подходов. Имея большое количество доступных данных, даже MLP с несколькими скрытыми слоями может аппроксимировать любую функцию, фактически мы часто называем NN универсальными аппроксиматорами функций. Очевидно, что даже в ДО продолжают применяться различные типы обучения:
- Обучение с учителем
- Обучение без учителя
- Обучение с частичным учителем

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

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

Вот несколько моментов, с которых можно начать работу с ML:

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

Как Apple интегрирует машинное обучение в свои системы

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

Если ваша цель — внедрить машинное обучение в разработку приложений, то с Apple нет ничего проще, чем сделать это.

На самом деле, благодаря приложению CreateML (доступно на Mac), машинное обучение стало доступно каждому. С CreateML можно обучать ML-модель широкому сценарию задач, фактически она идет от компьютерного зрения (например: классификация изображений) до обработки звука. В примере, показанном на экранах ниже, я обучаю модель классификации изображений.

Используемый набор данных очень известен в области машинного обучения и называется MNIST. Он состоит из изображений рукописных цифр (написанных от руки чисел от 0 до 9), и мы хотим затем обучить модель распознавать числа на фотографии, например. классификация изображений.

Для начала первое, что нам нужно сделать, это найти приложение CreateML.

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

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

Нажав Далее, мы должны решить, в какой папке Mac мы хотим сохранить проект. Как только вы выбрали папку, нажмите Создать.

Мы почти готовы к работе, на самом деле сейчас самое главное — дать модели обучающие данные, на которых она будет обучаться.

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

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

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

  • 50 итераций: здесь мы определяем количество раз (или эпох в терминологии машинного обучения), в течение которых модель будет работать через весь обучающий набор данных. Имейте в виду тот факт, что увеличение количества итераций замедлит процесс обучения!
  • Все галочки в поле Augmentations: здесь подразумевается аугментация данных. Этот метод довольно распространен в ML, особенно если мы работаем с небольшим набором данных или вообще хотим сделать нашу модель более устойчивой к проблеме дисперсии, когда дело доходит до обобщения. Итак, что мы делаем, так это добавляем модифицированную версию изображений к нашим данным, добавляя к ним некоторые характеристики.

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

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

Здесь есть извлечение функций из 42 000 изображений, так что наберитесь терпения, потому что это займет некоторое время! В моем случае это занимает почти 2 часа, и, в зависимости от ваших вычислительных ресурсов и сложности задачи, ваш Mac может не так реагировать на этапе обучения.

Глядя на кривую точности обучения и проверки, мы можем оценить, как модель работала лучше после каждой итерации на этапе обучения, повышая ее точность при классификации изображений. В конце 50 итераций мы получаем точность данных проверки 94,4%, что довольно хорошо! А также следует отметить тот факт, что кривая обучения и проверки перекрывается, это указывает на то, что модель работает хорошо и она не выполняет переобучение данных обучения. Когда обучение завершено, мы готовы оценить производительность нашей модели, таким образом мы можем понять, удовлетворены ли мы способностью модели выполнять задачу классификации рукописных цифр.

В случае, если мы не удовлетворены, мы всегда можем вернуться к первому экрану и работать с параметрами модели. Допустим, мы довольны и можем двигаться дальше и «увидеть волшебство». Давайте пропустим раздел оценки и перейдем непосредственно к предварительному просмотру, здесь мы можем загрузить данные из папки testSet, чтобы протестировать модель вживую.

Давайте посмотрим некоторые результаты

Иногда модель, конечно, может ошибаться! Посмотрите на следующий рисунок.

В целом, взглянув на результаты на других изображениях, мы можем быть очень довольны результатами.

В качестве дополнительного примера также можно получить данные испытаний из разных источников, на самом деле мы можем принести наш iPhone (и его не нужно подключать кабелем к Mac), написать номер на бумаге и сфотографировать это, это фантастика!!

Результаты потрясающие, модель со 100% уверенностью классифицирует число, которое я написал как число 8.

Наконец, чтобы использовать модель в проекте приложения, все, что нам нужно, это экспортировать ее. Самый простой способ сделать это — нажать кнопку Получить на странице вывода или, альтернативно, нажать кнопку Xcode. CreateML отправит модель непосредственно в проект Xcode. Теперь вы готовы к работе!

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

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

А как насчет работы с нашими таможенными моделями ML?

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

Сегодняшние задачи ML и DL в основном решаются при работе с python. Если вам удастся построить свою собственную модель, используя известные фреймворки, такие как: PyTorch, TensorFlow, Keras, scikit-learn… и хотите внедрить ее в свое приложение для iOS, вам придется полагаться на инструменты ядра. В то время для меня это было большим открытием! на самом деле coremltools позволяет конвертировать модели из сторонних библиотек в Core ML.

Далее я покажу вам, как простой MLP, написанный на python и TensorFlow, можно легко экспортировать как .mlmodel, с coremltools, готовый к использованию внутри вашего Xcode. проект.

Прежде всего установите библиотеку с помощью команды pip:

Теперь я пропущу часть, касающуюся сбора данных, вот пользовательская и очень простая модель:

Далее также сообщается о выступлениях.

Допустим, мы удовлетворены производительностью, теперь настала самая крутая часть, давайте конвертируем модель в .mlmodel для экспорта и использования в проекте Xcode!

В конце, если все заработало, вы должны найти файл!

Весь код Python доступен на моем личном GitHub в следующем репозитории, который я создал для всех тех, кто не знаком с coremltools и хочет увидеть полный рабочий пример.

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

Заключение

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

В конце этой статьи я надеюсь, что она вам понравилась и оказалась полезной.
Не стесняйтесь оставлять комментарии (всегда хорошо принимаются) и делиться статьей.