Мотивация
Если вы, как и я, инженер, который много слышал о глубоком обучении и временами даже применял его к конкретным задачам, но всегда чувствовал, что ваше понимание предмета несколько поверхностно, надеюсь, этот пост покажется вам интересным.
Поскольку в мою академическую программу не входили курсы по этой теме, я решил улучшить свои знания, пройдя несколько онлайн-курсов. Этот пост призван кратко сравнить стили преподавания и содержание курсов, обобщить мои личные впечатления от опыта обучения и, надеюсь, помочь решить, в каком порядке вы должны проходить курсы, если вы это сделаете.
Прежде чем продолжить, я хочу уточнить, что нижеизложенное — это только мои личные мысли, и я не претендую на звание эксперта ни в глубоком обучении, ни в преподавании. Существует множество ресурсов для онлайн-обучения, и упомянутые здесь — мой личный выбор.
Кроме того, стоимость курсов не упоминается намеренно в качестве параметра, поскольку она может меняться в зависимости от времени и скорости вашего прогресса.
Избранные курсы
Изучив множество курсов, я решил сосредоточиться на двух группах курсов в зависимости от их программы:
- Курсы специализации глубокого обучения, предоставляемые deeplearning.ai. Специализация преподается Эндрю Нг на Coursera и включает следующие курсы:
- Нейронные сети и глубокое обучение
- Улучшение глубоких нейронных сетей: настройка гиперпараметров, регуляризация и оптимизация
- Сверточные нейронные сети
- Структурирование проектов машинного обучения
- Последовательные модели
2. Курсы от «Ленивого Программиста на Udemy», которые включают в себя:
- Наука о данных: глубокое обучение в Python
- Современное глубокое обучение в Python
- Глубокое обучение: сверточные нейронные сети в Python
- Неконтролируемое глубокое обучение в Python
- Глубокое обучение: GAN и вариационные автоэнкодеры
Сравнение основано на первых трех курсах в каждой группе, которые в основном охватывают одни и те же темы. Остальные два курса в каждой группе охватывают разные темы и не упоминаются в сопоставимом контексте.
Основные точки сравнения
Стиль преподавания
В рамках специализации глубокого обучения, представленной на Coursera, вас обучает теории профессор Эндрю Нг, который является соучредителем Coursera и в прошлом возглавлял проект Google Brain Project и группу Baidu AI. Профессор Нг преподает очень расслабленным и терпеливым тоном, а объяснения ясны и хорошо сформулированы. Одним из основных преимуществ, которые мне понравились, является то, что используемые обозначения тщательно подобраны и очень понятны. Профессор Нг обязательно ссылается на наиболее важные научные статьи, которые способствовали каждой идее, и это здорово, если вы хотите немного больше погрузиться в детали. Чтобы продвигаться по курсу, в конце каждой основной главы вам нужно будет выполнить тест с несколькими вариантами ответов и одно или два задания по программированию на python. Задания по программированию требуют, чтобы вы завершили 3/4 готового кода, и основное внимание уделяется пониманию концепции, а не программированию.
На курсах Ленивого Программиста материал вводится следующим образом: по каждой теме вы сначала изучаете теорию, а затем реализуете ее (с нуля) с помощью python. Теория очень хорошо объяснена, однако обозначения иногда непоследовательны (не слишком большая проблема, но требует внимания). Обязательных заданий для завершения курса нет. Упражнения по программированию выполняются в стиле «код вместе» с предоставленными ссылками на исходный код, если это необходимо. Упражнение сосредоточено как на теории, так и на правильной реализации всех концепций в среде Python.
Глубина объяснений
По сравнению со специализацией по глубокому обучению, курсы, которые преподает Lazy Programmer, охватывают гораздо больше математики, лежащей в основе основных концепций. Вас учат «почему», а не только «как». Материал преподается шаг за шагом с использованием идей из исчисления и линейной алгебры, подкрепленных примерами из реальной жизни. Что мне больше всего понравилось в этом стиле обучения, так это то, что многие идеи были разработаны путем задавания вопросов и обсуждения возможных ответов, что, на мой взгляд, является более эффективным способом обучения.
В специализации глубокого обучения во многих случаях вам дается «как» без представления математической основы. Курсы даются с практической точки зрения, основанной на реализации. Это нормально, если у вас достаточно базовых знаний или вы просто хотите быстро внедрить решения для глубокого обучения, однако в моем случае я часто открывал ссылочные документы, чтобы понять больше, поскольку фраза «оказывается» используется слишком часто в течение курса.
Единственным отличием от упомянутого выше является курс Convolutional Neural Networks, который, я думаю, лучше объяснил Эндрю Нг.
Вклад в практическое применение (могу ли я настроить систему глубокого обучения после прохождения курса?)
Здесь я нахожу курсы Lazy Programmer гораздо более полезными, так как сначала вы реализуете все с нуля, а уже потом используете продвинутые библиотеки, такие как tensorFlow, Theano и Keras. Таким образом, вы получаете гораздо больше инструментов в свой арсенал реализации, чем после завершения специализации глубокого обучения. В специализации уже реализовано много кода и вам представлены волшебные функции, которые просто работают.
Стоит также отметить, что после завершения специализации глубокого обучения на Coursera, если вы отмените подписку, часть исходного кода, используемого в упражнениях по программированию, больше не будет вам доступна.
Объем контента и темп (сколько времени это занимает?)
Здесь я пытаюсь оценить, «сколько вы узнали?» и «Как быстро вы этому научитесь?». В качестве примечания: я не думаю, что прохождения курса или нескольких курсов достаточно, чтобы по-настоящему изучить тему, и внедрение изученного материала в ваш собственный проект имеет решающее значение. Сказав это, я чувствую, что курсы, предлагаемые Lazy Programmer, охватывают меньше тем в каждом курсе, и каждая тема рассматривается более глубоко. Тем не менее, курсы специализации по глубокому обучению могут дать более широкое понимание области за более короткое время. Вкладывая ~ 6 часов в день, у меня ушло около недели на прохождение каждого курса «Ленивый программист» и примерно полторы недели на прохождение всех 5 курсов специализации глубокого обучения.
Подводя итог, я бы рекомендовал сделать и то, и другое, если у вас есть время.
Специальное упоминание: Структурирование проектов машинного обучения от deeplearning.ai
Особого внимания заслуживает курс «Структурирование проектов машинного обучения» от deeplearning.ai. Это, на мой взгляд, самый важный курс в специализации! Он научит вас, как планировать проект машинного обучения, какие ошибки и проблемы могут возникнуть во время реализации и как с ними справиться. Лично я чувствую, что это очень помогло мне, поскольку в настоящее время я пытаюсь спланировать свой проект по машинному обучению как часть моей диссертации.
Предлагаемый порядок прохождения курсов
Во-первых, я настоятельно рекомендую убедиться, что вы чувствуете себя комфортно с концепциями логистической регрессии, так как это основа для всего последующего. Я бы даже посоветовал пройти курс, специально посвященный этой теме, если у вас есть время. Вот порядок, который я бы рекомендовал:
- Наука о данных: глубокое обучение на Python (ленивый программист)
- (Необязательно) Нейронные сети и глубокое обучение (deeplearning.ai)
- Современное глубокое обучение на Python (ленивый программист)
- (Необязательно) Улучшение глубоких нейронных сетей: настройка гиперпараметров, регуляризация и оптимизация (deeplearning.ai)
- Сверточные нейронные сети в Python (deeplearning.ai)
- (Необязательно) Глубокое обучение: сверточные нейронные сети в Python (ленивый программист)
- Структурирование проектов машинного обучения (deeplearning.ai)
- Последовательные модели (deeplearning.ai)
- (Необязательно) Дополнительные курсы в зависимости от ваших личных интересов
Заключительное примечание
В эти странные времена COVID-19 онлайн-обучение является отличным ресурсом для образования. Глубокое обучение сложное, и для полного понимания требуется больше, чем прохождение курсов, но как deeplearning.ai, так и Lazy Programmer предоставляют прекрасную возможность начать.
«Самое сложное в любой важной задаче — это начать ее с самого начала. Как только вы действительно начинаете работать над важным заданием, у вас появляется естественная мотивация продолжать». (Брайан Трейси)