Машинное обучение за год

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

С нуля до использования в работе

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

https://proglib.io/p/basics-of-ml/

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

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

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

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

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

Начало: Hacker News и Udacity

Мой интерес к машинному обучению начался в 2014 году, когда я прочитал пару статей по данной теме на сайте Hacker News. Меня привлекала идея того, что компьютер, подобно человеку, может учиться. На тот момент, я не был профессиональным разработчиком, а напротив, кодером-любителем, который успел закончить лишь несколько небольших проектов.

Так что я начал смотреть первые несколько частей отдельного курса на сайте Udacity, параллельно читая каждую попавшуюся статью по данной тематике.

https://www.youtube.com/watch?v=Ki2iHgKxRBo

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

Провал курса по машинному обучению на Coursera

В январе 2015 года, я вступил в учебный лагерь Founders and Coders в Лондоне, чтобы стать крутым разработчиком. Спустя пару недель, я уже хотел научиться писать программы для обучения своего компьютера, так что я со своими сверстниками организовал учебную группу. Каждый вечер вторника мы смотрели лекции курса машинного обучения на сайте Coursera.

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

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

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

Если бы я мог отмотать время назад, я бы предпочёл курс Udacity «Intro to Machine Learning», так как он легче и предполагает использование Python и Scikit Learn. Пойдя именно этим путем, мы гораздо раньше замарали бы руки, стали увереннее и получили массу удовольствия от изучения.

Усвоенный урок: начинай с чего-то простого и практичного, нежели с чего-то сложного с тонной теории.

Машинное обучение за неделю

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

За эту неделю я сделал следующее:

  • Освоил Scikit Learn;
  • Испытал машинное обучение на реальном наборе данных;
  • Написал алгоритм линейной регрессии с нуля (на Python);
  • Немного поигрался с обработкой естественного языка.

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

Усвоенный урок: посвяти неделю изучению чего-то одного, и ты удивишься, насколько эффективно пройдёт эта неделя.

Неудача в изучении нейронных сетей

После окончания Founders and Coders, я вернулся в Норвегию и попытался повторить успех в изучении машинного обучения, только уже на нейронных сетях.

Ничего не вышло.

Было слишком много отвлекающих факторов, чтобы проводить 10 часов в день за написанием кода и постоянным изучением новых вещей. Я слишком недооценивал то, насколько важным было для меня присутствие сверстников с Founders and Coders.

Усвоенный урок: для каждого вида деятельности подбери себе подходящее окружение.

Однако я, по крайней мере, начал свой путь в нейронные сети и у меня потихоньку получалось схватывать основы. Уже к июлю я закончил свою первую нейронную сеть. Это, вероятно, самая ужасная имплементация из когда-либо написанных и мне, честно сказать, стыдно показывать её здесь. Как говорится, первый блин комом, а цель свою я достиг: я смог доказать себе, что понимаю концепты обратного распространения и градиентного спуска.

 

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

К концу года я написал статью, в которой собрал воедино всё, что я изучил за этот год.

Проверка себя на конкурсах Kaggle

В течение своего отпуска в 2015 году, я получил дополнительную мотивацию и решил попробовать Kaggle. Это проект, где можно поэкспериментировать с наборами данных и получить отзывы о своей работе. Так что, я начал экспериментировать, используя разные алгоритмы в их конкурсах Home Quote Conversion, Otto Group Product Classification и Bike Sharing Demand.

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

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

Самообразование как ежедневная рутина

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

На тот момент, уже имев представление об основах в области нейронных сетей, мне хотелось перейти к deep learning.

Deep Learning на Udacity

Моей первой попыткой стал курс по Deep Learning на Udacity, в конце которого я получил одно большое разочарование. Лекции были слишком короткими и неинформативными для меня.

https://www.youtube.com/watch?v=X_B9NADf2wk&t=1s

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

В защиту Udacity лишь скажу, что на тот момент я был профаном во всём, что как-либо относилось к IPython Notebook, поэтому для других этот курс может и был полезен, а я, попросту, не был готов к нему.

Стэнфорд – Deep Learning для обработки естественного языка

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

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

https://www.youtube.com/watch?list=PLlJy-eBtNFt4CSVWYqscHDdP58M3zFHIG&v=Qy0oEkCZkBI

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

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

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

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

Взлёт продаж в Xeneta

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

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

Это может и сложно, но, как говорится, идущий дорогу осилит.

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ