С чего начать свой путь в нейронные сети, или Ответы будущему AI-специалисту
Я Михаил Константинов — Senior Deep Learning Research Engineer в SQUAD. Специалист по глубокому обучению в области компьютерного зрения и обработки естественного языка. Долгое время занимался автоматическим прохождением капчи с использованием современных Deep Learning подходов, а также adversarial защитой капчи от нейронных сетей.
Здесь могло быть нудное вступление, но давайте попробуем перейти сразу к сути.
Хочу писать нейронные сети
Сразу ответьте себе на вопрос — зачем вам нужны нейронные сети? Я считаю, что это должен быть вопрос номер ноль. А, как вы знаете, у программистов все начинается с нуля. Я спрашиваю об этом всех своих студентов. Также это мой первый вопрос на собеседованиях, который я задаю еще до непосредственного знакомства с кандидатом. Ответить на него сложно, но если это сделать, то можно понять все внутренние мотивации, а это самое важное. Вам это нужно ради карьеры или ради научного интереса? Вы хотели бы заниматься ресерчем или стать Data Scientist’ом?
Что вам ближе: работа с табличными данными, компьютерное зрение или обработка естественного языка? Возможно, есть конкретные задачи или проекты, которые хотели бы взять на себя? Если дать себе честный ответ, станет намного яснее, к чему стремиться. И еще, как вы заметили, писать про знание Python и классических алгоритмов я, конечно, не буду.
Что дальше
Хотите выучить английский, переезжайте в Англию. Погрузите себя в среду. Это самое важное, что советуют для быстрого изучения иностранных языков. Правда, с языками проще, чем с изучением нейронных сетей. Тут можно начать смотреть фильмы с субтитрами (возможно, с двойными), обучаться, слушая речь актеров и обогащая словарный запас, запоминая конструкции. Можно... Вы знаете, что можно многое, но при чем тут машинное обучение и нейронные сети? Поступите похожим образом.
Подписывайтесь на тематические телеграм-каналы, чтобы быть в курсе новостей и трендов в машинном обучении. Например, «Мишин Лернинг» — мой субъективный телеграм-канал об искусстве машинного обучения, нейронных сетях и новостях из мира искусственного интеллекта. Пусть рекомендательная система будет на вашей стороне. Начните смотреть тематические видео на YouTube, чтобы видеть больше полезного контента, к примеру, лекцию «Нейронные сети: как их создают и где применяют?». Создайте свою среду сами. Подпишитесь на твиттер Andrew Ng. Вы ведь знаете, кто это?
Хочу написать крутую нейронную сеть
Сразу в бой? Что ж. Сначала поищите готовые решения, их уже миллионы, многие из них в открытом коде. Загуглите ту технологию или нейросеть, что вам интересна. Найдите ее код или уже готовый colab (ноутбук с кодом, который можно запускать прямо в твоем браузере) и проверьте, как эта сеть работает. Возможно, вам и не нужна собственная модель, не надо самим ее тренировать. Огромное количество продуктов делаются вокруг уже написанных и натренированных нейтронных сетей.
Соберите собственную нейронную сеть и посмотрите, как она обучается прямо в браузере в песочнице TensorFlow. Это даст понимание того, из чего состоят нейронные сети, как они строятся, какие параметры и как влияют на их обучение.
Визуализация процесса обучения нейронной сети в песочнице TensorFlow. Взято из статьи «Краткий курс машинного обучения, или Как создать нейронную сеть для решения скоринг задачи»
Нет, я хочу сам написать свою сеть с нуля и натренировать ее
Есть конкретная задача, для которой не существует готового решения? Или лучшие результаты на сегодня не удовлетворяют запрос по точности, скорости работы и так далее? Или дело в том, что вы хотите стать специалистом в области машинного обучения? Но даже специалисты не делают все с нуля и далеко не всегда пишут кастомные нейронные сети. Но все верно. Чтобы быть инженером в области машинного обучения, нужно знать все, что происходит под капотом. Нужна матчасть, теория и, что еще более важно, практика.
С чего начать? Зайдите на сайт фреймворка Keras и посмотрите туториал по своей первой нейронной сети: тут вас ждет целое море нейросетей под разные задачи. Запускайте, пробуйте, тренируйте и тестируйте. Но, чтобы начать изменять готовые архитектуры и писать свои, нужно понимать, что именно в них происходит и почему они так устроены.
А как тогда начать изучать нейронные сети?
Ответ простой: курсы, туториалы, книги. Я большой сторонник практики и уделяю ей на курсах внимания не меньше, чем теории. Но я бы не стал говорить, что туториалы сделают из вас ресерчера и специалиста. Нужно хорошо знать теорию, чтобы понимать, почему сети устроены именно так, зачем нужны функции активации и где именно; как инициализировать нейронную сеть и какой слой как обучать, какие типы свертки использовать и прочее.
И курсы, и книги — то, что дает фундаментальные и последовательные знания. Я знаю ребят, которые не смогли пройти собеседования в крутые компании, хотя к тому времени уже много лет работали в этой сфере. Проблемы возникали именно из-за того, что в их знаниях (или в их обучении) не было системности.
Скажи уже, какие книги купить?
По поводу книг все не так однозначно. Все люди, конечно, разные. И мои советы основаны лишь на субъективном опыте. Но мне кажется, что книга по ML хороша тогда, когда уже есть неплохие знания в предметной области.
Читая некоторые книги, я был рад, что к тому времени уже обладал знаниями по отдельным главам. Поэтому они не пугали меня своей сложностью, а наоборот — я зачитывался ими. Сейчас я знаю, что математика, стоящая за машинным обучением, в доминирующем большинстве тем очень проста. Нужно лишь привыкнуть к стилю и формулировкам. Но я боюсь представить, что бы испытал, не зная об этом и увидев пару страниц из этих изданий.
Есть много прекрасных книг типа «Pattern Recognition and Machine Learning» Кристофера Бишопа и прочих. Но для старта я бы порекомендовал две (одну на русском, другую на английском): «Глубокое обучение. Погружение в мир нейронных сетей» — Сергей Николенко; «Deep Learning» — Ian Goodfellow, Yoshua Bengio, Aaron Courville.
Я получал удовольствие от этих книг, от их языка и подачи. Это просто маст-хэв в каждой библиотеке специалиста по машинному обучению. Но опять же учить ML только по книгам, думаю, — очень долгий и неоптимальный путь.
Я так понимаю, что курсы необходимы?
Да, именно это я имею в виду. Я считаю, что курсы — лучший способ быстро и, главное, последовательно двигаться в нужном направлении. Сейчас таких очень много.
Офлайн и онлайн-курсы имеют ряд своих преимуществ и недостатков. К плюсам онлайн-курсов можно отнести возможность проходить их в любое время и в свободном темпе. Формат требует, чтобы такие курсы были хорошо записаны. Да и не нужно ездить в метро туда и обратно. Минусы — отсутствие фидбэка, нет возможности задать вопрос и сразу получить на него ответ.
Офлайн-подход более классический, но он требует определенной привязки к расписанию. И если пропустить занятие и записи нет, то «все пропало». Ну а если запись есть, видео и звук там записаны идеально, то все равно нет ощущения присутствия на занятии.
Онлайн или офлайн
Зависит только от вас. От того, как вы лучше воспринимаете информацию, от вашего календаря. Но смотрите, не все ограничивается только онлайном или офлайном. Canon’ом или Nikon’ом. Не забывайте, что есть и Sony, и Fujifilm.
Сейчас набирает популярность еще один формат, который кажется мне самым оптимальным. Это онлайн-курс с живыми лекциями, где во главу ставится менторство. Назовем его интерактивным онлайном. Такие курсы хороши тем, что обладают преимуществами обоих форматов.
Курсовая работа моего студента Артема Валеева Sneakers StyleGan. Дизайн, цвет форма, да что там, каждый пиксель этих кроссовок был сгенерирован с помощью нейронной сети
Для студента такое кураторство, где можно задать вопрос не только на уроке, по уровню вовлеченности и пользе оказывается наиболее удачным решением.
Чтобы вы не выбрали (онлайн, офлайн или интерактивный онлайн), важен стиль, подход, темп, который будет оптимален именно для вас. И поэтому особенно внимательно выбирайте куратора. Нравится ли вам его речь, манера изложения? Где он работает, чем занимается? Подходит ли вам предлагаемый им формат?
На какие курсы стоит пойти
Я не боюсь выглядеть банально. По моему мнению, лучший курс для старта — онлайн-курс по Machine Learning от Andrew Ng. Не буду расписывать его плюсы, иначе мы погрязнем в тексте на несколько страниц. Это лучший онлайн-курс! Из минусов лишь то, что он относительно не новый, а также ведется на языке Octave/Matlab, который в этой сфере полностью уступил Python.
Кроме того, на Coursera есть множество специализаций от deeplearning.ai, которые подойдут для последующего продолжения обучения. Например, по Deep Learning или TensorFlow, где серия курсов рассчитана на более глубокое, если можно так выразиться о Deep Learning, погружение в сам фреймворк. Появилась и новая специализация по GAN, которая подойдет специалистам, продолжающим свой путь и желающим овладеть искусством генеративно-состязательных сетей. И как я писал в первом пункте, не забывайте про YouTube. Там полно прекрасных материалов — от обычных разборов статей энтузиастами в сфере машинного обучения до лекций по теме от преподавателей Стэнфорда и MIT. Еще рекомендую курс Introduction to Deep Learning, отличный украинский онлайн-курс по Data Science и нейронным сетям.
Офлайн-курсы стоит искать у себя в регионе: смотрите отзывы, читайте о преподавателе. Если есть возможность найти интерактивный онлайн, то, кроме преимуществ офлайна и куратора вместо лектора, чаще всего вы получаете более качественные занятия благодаря высокой конкуренции в онлайн-пространстве.
Желаю вам удачи! И запомните: все зависит от вас, вашей мотивации и усидчивости.
Чтобы не пропустить новые статьи Михаила Константинова — подпишитесь на него в телеграм-боте Ленты DOU.