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

Как я попал в машинное обучение

За последние три месяца я участвовал в проекте по применению некоторых из новейших методов машинного обучения для улучшения распознавания текста на сфотографированных документах. В отличие от традиционных технологий оптического распознавания символов (OCR), которые лучше всего работают с плоскими отсканированными документами, машинное обучение может найти решения для более сложных сценариев, таких как плохие условия освещения, сложенные документы, промежуточные штрихи на тексте и т. Д. Для нашего проекта , мы приняли некоторые сложные алгоритмы глубокого обучения (глубокое обучение является частью более широкого семейства методов машинного обучения), включая сверточную нейронную сеть (CNN) и рекуррентную нейронную сеть (RNN), и смогли продемонстрировать очень удовлетворительные результаты в конце трехмесячный период.

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

Грязные руки

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

Языки и библиотеки

Во-первых, вам следует установить и изучить Python (поздравляем, если вы уже являетесь разработчиком Python), который является самым популярным языком для машинного обучения. Люди действительно используют другие языки в этой области, такие как Java, R, JavaScript, C ++, Julia, Scala, Lua и т. Д., Но как новичок в машинном обучении вы найдете гораздо больше проектов и примеров машинного обучения, написанных на Python.

СОВЕТ. Если вы работаете с Mac OS и не знакомы с Python, вы можете установить virtualenv, виртуальную среду Python, изолированную от других разработок Python. Это сэкономит вам много времени, пытаясь работать с Mac OS, что может помешать вам обновить некоторые пакеты Python, необходимые для многих библиотек машинного обучения.

Если вы планируете работать на Python, вам нужно будет установить пакет NumPy и изучить его использование. NumPy - это фундаментальный пакет для научных вычислений, который расширяет возможности многих библиотек машинного обучения. Он позволяет использовать очень сжатый синтаксис для выражения сложных матричных вычислений, обычно встречающихся в алгоритмах машинного обучения. Люди, имеющие опыт работы с R или MatLab, найдут сходство с NumPy.

СОВЕТ. Существует множество отличных руководств и книг по Python и NumPy. Как новичок в Python, я после обеда прочитал Учебное пособие по Python Numpy из популярного Онлайн-курса Stanford CS231n.

Также настоятельно рекомендую установить Jupyter Notebook. Это веб-приложение, которое позволяет вам в интерактивном режиме писать и выполнять код Python и визуализировать результаты выполнения. В машинном обучении люди часто проводят много времени, экспериментируя с различными параметрами алгоритмов и наблюдая, как они влияют на результаты. Jupyter Notebook идеально подходит для таких интерактивных экспериментов.

И, наконец, вам следует установить и научиться использовать некоторые библиотеки машинного обучения, чтобы не создавать все с нуля. В этой области есть много отличных вариантов. Scikit-learn, вероятно, является самой популярной точкой входа в машинное обучение со многими готовыми алгоритмами, такими как SVM, случайные леса, логистическая регрессия и т. Д. Для глубокого обучения TensorFlow предоставляет множество низкоуровневых графических процессоров. -enable Building Block и особенно выделяется в крупномасштабном распределенном машинном обучении. Как новичок в машинном обучении, вы можете выбрать библиотеку, которая соответствует вашему проекту, имеет большое сообщество и хорошую документацию, чтобы вы могли легко обращаться за помощью при возникновении проблем.

Графические процессоры

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

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

Запуск первого примера

Когда у вас есть среда с Python, Numpy и подходящей библиотекой машинного обучения, вы можете начать запускать несколько интересных приложений машинного обучения. Если вы используете TensorFlow, я бы порекомендовал вам начать с примера MNIST, Hello World машинного обучения. Пример в основном считывает MNIST, базу данных рукописных цифр, использует данные для обучения очень простого алгоритма классификации с целью распознавания цифры на изображении и проверяет алгоритм, чтобы определить точность его классификации. Сначала вы можете быть напуганы математикой и терминологией, использованной в учебном примере. Однако вы можете временно пропустить их и сосредоточиться на запуске примера в вашей среде. После этого примера вы можете попробовать версию MNIST для глубокого обучения или переключиться на другие, более интересные примеры.

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

Изучение теорий

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

Предварительные требования к математике

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

Мышление

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

На таких сайтах, как Coursera, Udacity, Stanford доступно множество бесплатных онлайн-курсов. Я лично потратил целую неделю на интенсивные занятия курсом Эндрю Нг и нашел его чрезвычайно полезным. Хотя курс не содержит современных алгоритмов машинного обучения, он очень хорошо балансирует между широтой и глубиной. Большая часть этого курса объясняет математику, лежащую в основе машинного обучения - совершенно нормально пропустить их, если вам трудно понять их и сосредоточиться на понимании общих концепций и методов.

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

Развитие более конкретных знаний

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

Для проекта OCR моя команда смогла идентифицировать связанную проблему в Идентификации номера дома в просмотре улиц, которую Google решил с помощью алгоритма CNN (сверточная нейронная сеть). Изучив основы машинного обучения и определив конкретную тему, в которой мне нужно было углубиться, я прошел Стэнфордский онлайн-курс по CNN (который я настоятельно рекомендую, если ваша проблема может быть решена CNN) и прочитал много статей о состоянии -современные алгоритмы CNN. Эти знания помогли мне лучше понять алгоритмы CNN и то, как мы можем настроить их для нашего проекта.

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

Начинаем вносить свой вклад

Теперь вы в хорошей форме, чтобы начать участвовать в проекте машинного обучения.

Помните, что вместо того, чтобы писать все с нуля, вы должны сначала проверить, существует ли существующая реализация алгоритма, наиболее подходящая для вашего проекта. Вы проверили варианты с открытым исходным кодом? Существуют реализации почти для всех известных алгоритмов машинного обучения, и, скорее всего, вы найдете тот, который подходит для вашего проекта. Например, вышеупомянутая библиотека scikit-learn предоставляет множество готовых решений для машинного обучения, а библиотека TensorFlow содержит множество примеров популярных алгоритмов глубокого обучения.

Для проекта OCR моя команда использовала проект deep-npr в качестве отправной точки. Проработав некоторую интуицию в начальных экспериментах, мы переключились на другой проект с открытым исходным кодом под названием crnn, который основан на комбинации CNN и RNN и оказался эффективным для нашей проблемы.

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

Оставаться в восторге

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