В наше время большинству из нас знаком термин машинное обучение. Некоторые говорили, что эта выдающаяся технология — самый близкий взгляд на наше будущее. Но вы можете спросить, что такое машинное обучение? Как оно работает? Проще говоря, как следует из названия «Машинное обучение», мы заставляем машины учиться. Хоть это и не звучит убедительно, но так оно и есть.

Чему вообще учится машина?

Если вы не заметили, компьютер или, в частности, машина, может распознавать только числа, в частности, сигнал, состоящий из нулей и/или единиц. Мы называем их битами, биты, объединенные вместе, создают нечто, называемое байтами, байт обычно состоит из 8 битов, соединенных вместе, а строки байтов образуют многочисленные комбинации, которые в конечном итоге образуют нечто, называемое данными, как мы все знаем и знаем.

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

Как он учится?

На поверхностном уровне существует три способа обучения машины, а именно:

  • Контролируемое обучение
  • Неконтролируемое обучение
  • Обучение с подкреплением

Обучение с учителем — это то, где мы направляем эту машину, чтобы узнать, что есть что, кто есть кто и т. д. Мы называем эти представления метками. В моем случае я говорю машине, что изображение А — это здоровый перец чили, а изображение Б — потенциально больной перец чили, чтобы позже, после процесса обучения, она могла классифицировать состояние здоровья растения чили, когда мы даем изображение. Это можно сделать с абсолютной легкостью в программе Apple CreateML, мы вернемся к этой части позже.

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

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

Какую проблему может решить машинное обучение?

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

Типы приложений машинного обучения

Машинное обучение подошло к состоянию, когда почти все наши данные можно обрабатывать. Некоторые почетные упоминания о его применении:

  • Классификация изображений
  • Обнаружение объекта
  • Текстовая классификация

Однако в CreateML от Apple вы найдете целый ряд приложений для машинного обучения.

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

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

  • Данные для обучения, как следует из названия, — это данные, которые мы предоставили для обучения и анализа с помощью модели машинного обучения, которую мы собираемся создать. Чтобы добавить подготовленные данные, это так же просто, как старое доброе действие перетаскивания, или, в качестве альтернативы, мы можем щелкнуть значок плюса, а затем добавить его.
  • Проверочные данные также будут использоваться на этапе обучения. Единственная цель этого набора данных — проверить, правильно ли обучена машина, это можно сделать из потерь при обучении и точности.
  • Тестирование данных, как следует из названия, единственной целью этого набора данных является проверка производительности модели в конце после завершения процесса обучения. Этот процесс тестирования используется в качестве параметра успеха нашей модели. Мы можем оценить, хорошо ли обучена наша модель. Это можно измерить с помощью таких показателей, как баллы F1, точность, полнота и, в конечном счете, точность.
  • Итерации, сколько раз мы хотим, чтобы модель выполняла итерацию в процессе обучения.
  • Дополнения, этот параметр доступен исключительно для параметра классификации изображений. С параметрами, показанными выше, мы можем манипулировать нашими изображениями, добавляя шум, размывая их, обрезая и т. д., таким образом заполняя наш набор данных, который помогает модель, чтобы узнать множество случаев в наших данных.

После завершения процесса обучения мы столкнемся с интерфейсом, как показано ниже:

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

Использование обученной модели

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

static func createImageClassifier() -> VNCoreMLModel{
        let defaultConfig = MLModelConfiguration()
        
        let imageClassifierWrapper = try? LeoChiliV4(configuration: defaultConfig)
        
        guard let imageClassifier = imageClassifierWrapper else{
            fatalError("Failed to create an ML Model instance")
        }
        let imageClassifierModel = imageClassifier.model
        guard let imageClassifierVisionModel = try? VNCoreMLModel(for: imageClassifierModel) else{
            fatalError("Failed to create VNCoreMLModel Instance")
        }
        return imageClassifierVisionModel
}
func processImage(for image : CIImage){
        let imageClassificationRequest = VNCoreMLRequest(model: shared)
        let handler = VNImageRequestHandler(ciImage: image, orientation: .up)
        let requests : [VNRequest] = [imageClassificationRequest]
        try? handler.perform(requests)
        guard let observations = imageClassificationRequest.results as? [VNClassificationObservation] else{
            print("VNRequest produced the wrong result type : \(type(of: imageClassificationRequest.results))")
            return
        }
        if let confidenceLevels = observations.first?.confidence{
            self.confidenceLevels = confidenceLevels
        }
        if let firstResult = observations.first{
            self.result = firstResult.identifier
        }
}

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

Вторая функция с именем processImage — это место, где мы обрабатываем введенное изображение, чтобы вывести, считается ли это изображение здоровым перцем чили или потенциально больным. Создав запрос классификации изображений в Vision, который в приведенном выше коде создает массив экземпляров VNRequest, мы позволим обработчику запроса (VNImageRequestHandler экземпляр), чтобы обрабатывать эти запросы изображений. Наконец, после того, как это будет сделано, мы можем получить доступ к возвращаемым значениям запросов или, в приведенном выше коде, к переменной наблюдения, которая представляет собой массив экземпляров VNClassificationObservation. Оттуда, в моем случае, я хотел получить метку результата, а также его уровень достоверности, в другом случае это не всегда будет то, что нам нужно.

Окончательный вид

Это окончательный вид работающего приложения chiliwise:

Вот несколько выводов из этого опыта:

  • Машинное обучение — это мощный инструмент, который можно использовать для решения повседневных проблем, используя данные в качестве топлива и справочной информации.
  • Использование машинного обучения в среде Apple — единственный в своем роде опыт, в основном из-за его доступности, и его относительно легко понять даже человеку, не имеющему опыта машинного обучения, такому как я.
  • Процесс обучения модели машинного обучения носит итеративный характер. Это означает, что, скорее всего, нам придется повторять наш тренировочный процесс, чтобы выяснить его ограничения и возможности.
  • Помните, что идеальной модели не бывает, как бы хорошо мы ее ни обучали, но всегда будет та модель, которая нам нужна, если мы ее хорошо обучим.
  • Для полного проекта, не стесняйтесь получить доступ к следующему репозиторию, chiliwise.