Машинне навчання за рік - Бібліотека програміста

Історія програміста, якому вдалося освоїти машинне навчання та deep learning за один рік і навіть успішно застосувати його у реальному проекті

З нуля до використання у роботі

Це доповнення до моєї торішньої статті про те, як я почав свій шлях у машинне навчання.

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

Це було саме тим, що люди називають гарною роботою – отримувати гроші за те, що зазвичай робиш заради насолоди.

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

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

У цій статті, я хочу поділитися з вами своїм досвідом, так як це може надихнути інших почати свій шлях в машинне навчання.

Початок: Hacker News та Udacity

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

Так що я почав дивитися перші кілька частин окремого курсу на сайті Udacity, паралельно читаючи кожну статтю з цієї тематики.

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

Провал курсу з машинного навчання на Coursera

Чудовий курс, який багато чому мене навчив, проте я б його не порадив початківцям. Мені доводилося переглядати лекції щоразу, перш ніж почати щось розуміти. Програмування на Octave також було складним, особливо якщо ви не знайомі з цією програмою. Як результат, члени нашої групи повільно відсіювалися тиждень за тижнем. Зрештою, я, подібно до них, вилетів з курсу.

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

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

Якби я міг відмотати час тому, я віддав би перевагу курсу Udacity «Intro to Machine Learning», тому що він легший і передбачає використання Python і Scikit Learn. Підійшовши саме цим шляхом, ми набагато раніше забруднили б руки, стали впевненішими і отримали масу задоволення від вивчення.

Засвоєний урок: починай з чогось простого і практичного, ніж з чогось складного з тонної теорії.

Машинне навчання за тиждень

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

За цей тиждень я зробив таке:

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

За весь час, що я намагався розібратися з машинним навчанням, це був, безумовно, найпродуктивніший період. Якщо вам цікаві подробиці, можете прочитати цю статтю.

Засвоєний урок: присвяти тиждень вивченню чогось одного, і ти здивуєшся, наскільки ефективно пройде цей тиждень.

Невдача у вивченні нейронних мереж

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

Нічого не вийшло.

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

Засвоєний урок: для кожного виду діяльності підбери собі відповідне оточення.

У другій половині року, я трохи сповільнився у своєму навчанні, тому що в мене з'явилася нова робота. Найважливіше те, що мені вдалося винести з цього періоду – це перехід від невекторної імплементації нейронних мереж до векторної. У процесі мені довелося повторити курс лінійної алгебри.

До кінця року я написав статтю, в якій зібрав докупи все, що я вивчив за цей рік.

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

Протягом своєї відпустки у 2015 році я отримав додаткову мотивацію і вирішив спробувати Kaggle. Це проект, де можна поекспериментувати з наборами даних та отримати відгуки про свою роботу. Отже, я почав експериментувати, використовуючи різні алгоритми в їх конкурсахHomeQuoteConversion,OttoGroupProductClassificationтаBikeSharingDemand.

програміста

Мені вдавалося покращувати свої результати щоразу, експериментуючи з алгоритмами та даними.

Я навчився довіряти своїй логіці в машинному навчанні. Якщо підключення нового параметра або реалізація нової фічі логічно здавалося гарною ідеєю, то, швидше за все, це справді гарна ідея.

Самоосвіта як щоденна рутина

Коли я повернувся на роботу після новорічних вихідних, я хотів продовжити постійне вивчення чогось нового, тому я мав розмову з менеджером з цього приводу. На щастя, я отримав схвалення та міг займатися самоосвітою у робочий час.

На той момент, маючи уявлення про основи в області нейронних мереж, мені хотілося перейти до deep learning.

Deep Learning на Udacity

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

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

На захист Udacity лише скажу, що на той момент я був профаном у всьому, що якось стосувалося IPython Notebook, тому для інших цей курс може і був корисний, а я, просто, не був готовий до нього.

Стенфорд – Deep Learning для обробки природної мови

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

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

Хоча я досі його не закінчив, цей курс дав мені значний поштовх у розумінні того, як працює обробка природної мови та нейронні мережі в цілому.

Проте треба сказати, що це було складно, дуже складно. У якийсь момент я зрозумів, що мені потрібна допомога від когось, хто розуміє це краще за мене, так що я зв'язався зі студентом з докторським ступенем, який був готовий допомагати мені в моїй справі за 40 доларів на годину. Я пізніше зрозумів, що це було саме те, чого мені не вистачало, щоб рухатися далі, тому що ця людина заповнила величезну кількість прогалин у моїй голові.

Засвоєний урок: якщо ви можете дозволити собі вчителя з машинного навчання за 50 доларів на годину, це безумовно варте того.

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

Зліт продажів у Xeneta

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

Мій шлях до цієї точки був довгим, але швидким. Коли я розпочинав свій тижневий проект, я навіть і сподіватися не міг на те, що використовуватиму машинне навчання у професійній діяльності вже через рік.

Це може і складно, але, як кажуть, той, хто йде дорогу, здолає.