Это общие мысли, которыми я делюсь с людьми, переходящим на машинное обучение.
В этой статье я расскажу непосредственно о своем опыте работы в области машинного обучения, хотя многие из этих вещей могут быть применимы и к науке о данных.
Терпение и практика
Будьте терпеливы в процессе. Для успешного машинного обучения требуется множество различных навыков, многие из которых лучше всего приобретаются на практике.
Практика, практика, практика. Машинное обучение — это новый навык, и лучший способ научиться — это практиковаться. Подпитывайте себя положительной энергией по мере продвижения и будьте терпеливы в этом процессе. Как и в случае с любым другим навыком, для его овладения требуется много времени и внимания.
Сообщение в блоге Научитесь программировать за 10 лет отражает это настроение. Постарайтесь принять долгосрочное обязательство по обучению машинному обучению как набору навыков. Есть чему поучиться, и область постоянно развивается. Представление об этом как о стремлении к обучению на протяжении всей жизни захватывает и приносит удовлетворение, но в то же время и пугает, так что наберитесь терпения. Вам не нужно учить все это сегодня, вчера или завтра. Просто расслабьтесь, доверьтесь себе, и оно придет.
Хотя от практики никуда не деться, постарайтесь критически подумать о навыках, которые вы должны приобрести сейчас, и о тех, которые можно отложить на потом. Найдите описания вакансий для ролей или секторов, которые вас интересуют, и ознакомьтесь с требованиями. Вы постоянно видите навыки в нескольких приложениях, которые вы еще не изучили? Сначала попробуйте освоить эти навыки.
Слушайте себя. Узнайте, что вам нравится делать, и постарайтесь делать это чаще. Полное развитие набора навыков займет некоторое время, и если вы убедитесь, что вам нравится практика, это позволит вам упорствовать.
Случайный совет от Эндрю Нг: перестаньте копировать и вставлять код из переполнения стека или других источников; вместо этого введите код самостоятельно. Вы узнаете небольшие детали форматирования, печатая текст, и укрепите свою мышечную память.
Рассмотрите возможность расширения способов обучения:
- Любите слушать подкасты? Найдите подкаст об интересующей вас технологии. Вот один, который я сейчас слушаю.
- Надоело смотреть на экран весь день? Подумайте о том, чтобы прочитать книгу по предмету, технологии или языку программирования. Вы все равно будете много читать код, поэтому чтение кода в книге ценно. Постарайтесь сделать чтение увлекательным. Читайте в кафе, парке или, как мне нравится, в ванной. Это все хорошая практика.
- Не можете найти конкретную книгу по теме? Просто распечатайте документацию. В какой-то момент я распечатал документацию по Python Pandas и Apache Beam и прочитал ее.
- У каких других СМИ вы могли бы поучиться? YouTube видео? Онлайн-курсы?
Это окупится, просто продолжайте практиковаться!
Навыки и умения
Как упоминалось выше, просмотрите описания вакансий, которые вас интересуют, чтобы расставить приоритеты в навыках, которые вы изучаете. Проходите курсы по этим приоритетным навыкам и размещайте их в LinkedIn. Вы можете обнаружить, что рекрутеры в этом районе начнут обращаться к вам. Через несколько недель после того, как я разместил Курс Google IoT в своем Linkedin, ко мне обратился кто-то, у кого есть работа, связанная с IoT.
Вот несколько навыков, которые, по моему мнению, являются общими для машинного обучения и/или работы с данными:
- питон
- SQL
- Гит
- Облачные вычисления
- Алгоритмы и структуры данных: они не будут перечислены в описании вакансии, но вам все равно могут понадобиться базовые знания для прохождения викторин по программированию.
- Библиотеки машинного обучения, такие как Pytorch или Tensorflow: это чаще встречается для инженерных ролей машинного обучения, реже — для ролей науки о данных.
Раньше у меня была «командная строка Linux» в списке выше, но это не часто упоминаемый навык в описании работы. Я лично живу в командной строке Linux и нахожу это действительно ценным навыком. Вам может понадобиться только базовое понимание командной строки, чтобы получить работу в ML.
Рабочая
Посмотрите Workera. У них может быть еще масса объявлений о вакансиях, но, что более важно, сайт предоставляет действительно отличные отзывы о ваших способностях в различных областях, связанных с машинным обучением.
- Он также даст вам рекомендации о том, какие конкретные роли вам следует искать, например: «Инженер-программист» или «Инженер-программист-машинное обучение», «Инженер данных» или «Инженер глубокого обучения» и т. д.
- Обратная связь, викторины и инструкции превосходны. Отличный ресурс.
Пакет
Еще одна жемчужина от DeepLearning.ai Эндрю Нг: Пакет — это еженедельный информационный бюллетень с действительно отличным контентом, связанным с машинным обучением.
Интервью
Интервью с ролями машинного обучения часто включают в себя некоторую комбинацию:
- Тест по кодированию
- Начальное собеседование (часто 30 минут)
- Домашнее задание (~ 5 часов в течение 2–3 дней)
- Несколько технических интервью
- Личное или поведенческое интервью (иногда организованное для оценки «культурного» соответствия)
викторины по программированию
К сожалению, вам часто придется проходить викторины по кодированию для собеседований; Я провалил много тестов по кодированию. Я обнаружил, что викторины по кодированию разочаровывают, поскольку кто-то пытается проникнуть в ML, потому что нужно было так много узнать на стороне ML, и, ТОГДА, вы хотите, чтобы я знал разработку программного обеспечения ?? Дай мне перерыв!
Но, к сожалению, от этого никуда не деться. Определенные рабочие роли, такие как «Ученый по данным», могут с меньшей вероятностью иметь викторины по кодированию, но часто роли «Инженер по машинному обучению» или любая роль, в которой есть «Инженер», часто требуют от вас прохождения викторины по кодированию.
- Существует множество платформ, таких как HackerRank, Leet Code и другие, которые предоставляют практические тесты и инструкции для интервью по кодированию.
- Подход, который я в конце концов выбрал, потому что у меня было время, состоял в том, чтобы пройти Стэнфордскую специализацию по алгоритмам на Coursera. Тесты по кодированию часто представляют собой просто вопросы по структурам данных и алгоритмам, и это то, что охватывает курс Coursera. Это действительно отличные курсы, и после того, как вы их закончите, собеседования по кодированию будут гораздо менее пугающими, потому что весь курс в основном представляет собой собеседование по программированию. И в качестве бонуса вы сможете начать серьезно думать, как ученый-компьютерщик.
- Еще один замечательный ресурс — книга интервью Cracking the Coding. Я использовал эту книгу в умеренных количествах, и чтение этой книги определенно подготовит вас к собеседованиям по программированию.
Прием на работу
Есть некоторые компании, такие как Tripblebyte или Workera, которые подберут вам работодателей, как только вы пройдете их оценку. Другие, такие как HakerRank, также могут делать это.
Линкедин — твой друг
Я считаю Linkedin ценным ресурсом для найма. Думайте о Linkedin как о большом алгоритме машинного обучения, поэтому постарайтесь улучшить свой личный набор функций, чтобы оптимизировать свои возможности.
Установите статус в своем профиле на «открыт для работы», и больше рекрутеров свяжется с вами с вакансиями, потому что они увидят, что вы открыты для новых ролей.
Отвечайте рекрутерам, даже если до вашего реального поиска работы осталось несколько месяцев. Я обнаружил, что как только я перестаю отвечать рекрутерам, я получаю меньше сообщений. Как только я отвечаю снова, я начинаю получать больше сообщений.
Выполняйте викторины в разделе «Навыки», например, для Python, Git, ML и т. д. Вы можете проходить викторины только раз в 3 месяца, поэтому будьте вдумчивы в своих попытках. Я считаю, что викторины не очень строгие, и их прохождение даст вам приоритет для определенных заявлений о приеме на работу.
Соответственно, Linkedin использует раздел «Навыки» для подбора кандидатов, поэтому убедитесь, что вы добавили все соответствующие навыки.
Общайтесь с людьми, которых вы знаете, и общайтесь с новыми людьми, которых вы встречаете, чтобы расширить свою сеть. Наличие более крупной сети означает, что большему количеству людей будет легче связаться с вами, и больше людей будет.
Рассмотрите возможность использования письма в качестве инструмента
Подумайте о том, чтобы создать блог или среднюю страницу и писать о том, что вы изучаете. Или попробуйте взять интервью у людей для своего блога или онлайн-публикации. Многие устоявшиеся каналы СМИ, скорее всего, возьмут новых авторов. Свяжитесь с ними.
Письмо может быть инструментом для изучения новых тем, закрепления ваших знаний и расширения вашей сети. У меня был блог в течение многих лет. Раньше мне было тяжело публиковать публичные мысли в моем блоге, но я обнаружил, что очень немногие действительно читают мой блог, поэтому мне не нужно беспокоиться об этом! Для меня это скорее инструмент, помогающий развивать то, о чем я думаю.
На самом деле занимаюсь машинным обучением
Прохождение курсов действительно помогает получить общее представление о машинном обучении, хотя курсы не полностью подготовят вас к тому, на что похожа разработка моделей машинного обучения. Это связано с тем, что все модели в блокнотах Jupyter курса рассчитаны на безошибочную работу. И я лично знаю, как это раздражает и расстраивает, когда модель тетради для курсов не работает.
К сожалению, по моему опыту, большая часть реальной работы по разработке машинного обучения связана с моделями, которые либо не работают, либо работают недостаточно хорошо. Разработка рабочей модели машинного обучения может быть довольно сложной задачей, и в этой статье под названием Почему машинное обучение сложно представлены некоторые интересные точки зрения на этот счет.
Этот комментарий к статье о хакерских новостях описывает подход к машинному обучению, которому я следую. Ниже приведены мои личные мысли о подходе в этом комментарии:
- Установите базовый уровень, на который вы можете опереться. Попробуйте найти существующую реализацию, идентичную или похожую на вашу проблему. Существует множество моделей с открытым исходным кодом. Вы захотите сразу же приступить к обучению моделей, но если вы потратите дополнительное время на изучение существующих моделей, это будет потрачено не зря.
- Воссоздайте любые существующие результаты этой базовой модели, если это воссоздание не полностью соответствует вашему варианту использования. Повторное создание результатов помогает укрепить ваш базовый уровень, подтвердив, что все (скорее всего) работает так, как ожидалось.
- Постарайтесь понять и проанализировать ваши данные. Постройте распределение метаданных, таких как количество записей на говорящего или продолжительность звука, если вы используете речевые данные. Просматривайте образцы данных самостоятельно, как будто смотрите на изображения и слушаете звук. Если вы не можете разобраться в данных, то и модель машинного обучения, скорее всего, не сможет. Затем вам, возможно, потребуется улучшить качество данных.
- Если вы не найдете ничего похожего на то, что делаете, вам придется начать с нуля. В этом случае начните с более простой модели меньшего размера и постепенно увеличивайте масштаб. Но, действительно, НИЧЕГО похожего на то, что вы делаете, нет? Скорее всего есть, и попробуй начать оттуда. Не начинайте с нуля, если в этом нет особой необходимости.
- Не тратьте слишком много времени на настройку гиперпараметров изначально, потому что как только вы измените свою модель, оптимальные значения гиперпараметров изменятся. Гиперпараметры обычно не имеют большого значения, за исключением скорости обучения. Я несколько месяцев бился головой о стену, потому что добавил импульс, в результате чего моя скорость обучения стала слишком высокой, а производительность модели упала.
- Постепенное добавление сложности. После того, как вы установили прочную основу, вы можете начать добавлять более причудливые идеи.
Запуск экспериментов
Учитывая высокую размерность, описанную выше в статье, посвященной сложному машинному обучению, выполнение итеративного поиска часто является эффективным (а иногда и единственным) способом добиться прогресса. Под итеративным поиском я подразумеваю использование эталонной модели, конфигурации и производительности для сравнения с серией экспериментов, в которых вы изменяете один параметр. Одним из примеров может быть проведение множества экспериментов с разной скоростью обучения для настройки этого гиперпараметра. Другой пример — попробовать несколько разных подходов к разработке функций и посмотреть, какой из подходов дает наилучшие результаты.
Чтобы эффективно сравнивать результаты, я на собственном горьком опыте усвоил, что вы хотите изменить только один параметр между разными запусками. Если вместо этого вы измените два параметра, вы можете обнаружить, что модель теперь дает вам мусорную производительность. Какая из двух вариаций сломала модель?? Вы не знаете, поэтому теперь вам нужно вернуться и протестировать каждый параметр по отдельности.
Вы можете исследовать несколько параметров в данном наборе экспериментов, но ваше испытание должно отличаться от эталонного только одним параметром. Допустим, вы хотите понять, как скорость обучения (размер шага, альфа) и размер пакета влияют на производительность. У вас уже есть эталонный запуск. Вы можете провести эксперимент, в котором вы меняете как размер шага, так и размер партии, но вам нужно делать это независимо друг от друга. Ваше испытание может быть:
- ссылка: step_size: 1e-3, batch_size: 20
- испытание 1: step_size: 1e-4, batch_size: 20
- испытание 2: step_size: 1e-3, batch_size: 30
Вы можете запустить пробную версию 1 и пробную версию 2 одновременно, так как они обе отличаются от эталона только в одном измерении, но проведите отдельный эксперимент, например:
- ссылка: размер шага: 1e-3, размер_пакета: 20
- испытание 1: step_size: 1e-4, batch_size: 30
это не очень хорошая идея.
Кажется безумным и медленным изменять только один параметр, но это действительно лучший способ сделать это. Затем ваша энергия должна быть направлена на то, чтобы сократить время, которое вы тратите на этот итерационный цикл эксперимента, увеличив скорость обучения и найдя лучшие способы анализа ваших данных.