Как сменить карьеру с разработчика программного обеспечения на инженера по машинному обучению

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

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

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

От разработчика программного обеспечения до инженера по машинному обучению — хорошие новости

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

Было бы идеально, если бы вы последние 3 года работали разработчиком Python, поскольку Python является наиболее широко используемым языком среди инженеров по машинному обучению. Это не конец света, если ваш опыт работы с Java, C или Go — и это лишь некоторые из них — на самом деле здесь есть скрытое преимущество. Python довольно снисходителен, и вы можете обойтись ужасным стилем написания кода и не слишком много думать об архитектуре. Это не относится к более строгим языкам со статической типизацией.

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

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

Хорошие новости продолжаются с REST API. Как разработчик программного обеспечения, вы, вероятно, знаете, как их разрабатывать и как делать это хорошо. Вам понадобятся эти знания в области науки о данных. Инженеры по машинному обучению развертывают прогностические модели в виде REST API. Таким образом, функция прогнозирования развертывается и отображается в виде URL-адреса, доступ к которому может получить любой, у кого есть правильные учетные данные и/или план подписки.

Вот несколько ресурсов, которые помогут вам начать работу с Python:

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

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

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

Перечисление всех алгоритмов машинного обучения было бы похоже на перечисление всех цветов — есть несколько основных, и каждый разветвляется дальше. Например, основой для повышения градиента является алгоритм дерева решений, а повышение градиента разветвляется далее на XGBoost, LightGBM, CatBoost и т. д. .

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

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

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

Мы рекомендуем эти ресурсы, чтобы начать работу с машинным обучением в качестве разработчика программного обеспечения:

От разработчика программного обеспечения до инженера по машинному обучению — что вы не хотите слышать

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

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

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

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

Мы рекомендуем следующие бесплатные онлайн-курсы для изучения математики в качестве разработчика программного обеспечения:

Заключение

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

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

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

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