Подробный план, основанный на опыте

Это глава из моей будущей книги Мета-обучение: мощные ментальные модели для глубокого обучения и процветания в эпоху цифровых технологий. В настоящее время он доступен для предварительного заказа и вы можете забрать его со скидкой 50%.

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

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

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

С чего начать

Моя первая остановка - пройти один из МООК по программированию. Они не учат вас многому о том, как быть разработчиком, но они действительно учат вас некоторым вещам о написании кода. Я бы, наверное, выбрал Harvard CS50 на edx. И, поскольку я хочу повеселиться, я могу выбрать трек программирования игры.

У Harvard CS50 есть одна замечательная вещь: помимо обучения программированию, он также учит вас и о компьютере, и о том, как он работает! Две птицы с одним камнем. Тем не менее, независимо от того, какой MOOC или книгу по программированию вы выбрали, ошибиться сложно. Программированию обучают на протяжении многих поколений, и есть много хороших учителей. Самая большая ошибка, которую вы можете сделать на этом этапе, - это пройти более одного курса программирования для начинающих. Было бы ошибкой стремиться выучить какой-либо конкретный язык программирования по-настоящему хорошо.

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

Все, что нам нужно на этом этапе, - это некоторое знакомство с концепциями программирования - достаточно, чтобы мы могли выполнять значимый поиск в Интернете. Навыки программирования, которые нам нужны, - это понимание ценности Stack Overflow, документации и того, как достичь и того, и другого. Это может показаться насмешливым, но эти навыки действительно лежат в основе карьеры программиста. Добавьте к этому несколько базовых знаний о программировании, и у вас будет очень прочная платформа, на которой можно строить.

Как перемещаться в коде - важный навык

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

Это сводится к тому, чтобы научиться действительно хорошо пользоваться редактором кода. Подойдет любой крупный редактор кода. Некоторые люди используют textmate, sublime text, atom, vscode, emacs или vim. Неважно, какой из них вы выберете. Сосредоточьте на его изучении такое же внимание, как на написании кода, и все будет в порядке. Если вы совершенно не знаете, какой из них выбрать, выберите vscode. Не беспокойтесь о выборе слишком сильно - это не тот выбор, которого вы должны придерживаться вечно. Я не знаю ни одного разработчика, который за свою карьеру не пробовал работать с несколькими редакторами. Однако я также не знаю ни одного достойного разработчика, который не верил бы, что научиться пользоваться редактором - это важный навык.

Контроль версий может дать вам суперсилы

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

Инструмент называется git. Это небольшая программа командной строки, которая может превратить любой каталог в репозиторий git. В процессе он наделяет каталог сверхспособностями, такими как возможность путешествовать во времени или создавать альтернативные временные шкалы!

Git поставляется с онлайн-аналогом, называемым GitHub. В то время как git отлично справляется с управлением исходным кодом на вашем компьютере, GitHub отлично подходит для совместного использования кода и совместной работы с другими. Отправка вашего кода на GitHub также предоставляет вам резервную копию. Если с вашим компьютером случится какая-то авария, ваша работа будет сохранена в другом месте.

Git - это чудо программной инженерии, но, к сожалению, API, который он предоставляет, не очень удобен для человека. К счастью, GitHub создал собственный инструмент командной строки, gh cli. У него гораздо более мягкая кривая обучения, чем у git.

Возможность пользоваться компьютером - вот где он

Последнюю ножку нашего четвероногого стола, вероятно, построить сложнее всего. Проблема заключается исключительно в отсутствии хороших учебных ресурсов. Эта часть посвящена изучению того, как использовать компьютер в контексте написания кода. Для глубокого обучения это выходит за рамки вашей локальной настройки. Как развернуть облачную виртуальную машину? Как вы подключитесь к нему по ssh? Как вы перемещаете данные? Как построить собственный домашний снаряд для экспериментов? Хорошая новость в том, что вам не нужно узнавать все это сразу. Отличной отправной точкой может быть изучение навигации по файловой системе в выбранной вами операционной системе. По мере освоения командной строки вы можете постепенно добавлять новые команды в свой арсенал.

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

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

Как стать экспертом по машинному обучению

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

И почему курс fast.ai, а не что-то другое? Ни один другой ресурс не научит вас всему, что вам нужно знать, чтобы заниматься машинным обучением на высоком уровне. Многие хорошие предложения сосредоточены на конкретном наборе инструментов или некотором аспекте конвейера машинного обучения, но другого полного пакета не существует. Это единственный известный мне курс, который научит вас сквозному процессу поиска хорошего решения проблемы машинного обучения.

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

Если вы хорошо проведете лекции и станете активным участником форумов fast.ai или fast.ai discord, все будет в порядке. Тем не менее, курсы предлагают способ обучения, который может быть новым для многих. Хотя курс объясняет подход, письменное его резюме, с моей точки зрения, с объяснением всего прогресса в одном месте, все же может быть полезным. Это то, что мы рассмотрим в оставшейся части этой главы.

Эффективный способ учиться

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

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

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

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

Такой подход к обучению работает как шарм. Здесь нет жестких правил, и вы можете изменять их по ходу дела. Творчество и придумывание сложных и интересных для вас упражнений - это очень ценный навык сам по себе; его приобретение выведет ваше обучение на новый уровень. Результат всегда один и тот же: прийти к месту, где вы сможете с комфортом применить методы, которые вы изучаете на лекциях, для решения проблем, с которыми вы раньше не сталкивались.

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

Куда пойти дальше

В более широком смысле, изучение материалов лекции является отправной точкой. Это дает нам платформу, на которой мы можем строить. Даже до того, как вы закончите курс, рекомендуется начать придумывать собственные мини-проекты и работать над ними. Если у вас мало вдохновения, вы можете проверить эту удивительную ветку форума с проектами, над которыми студенты fast.ai работали во время одного из курсов. Там вы найдете множество идей: сообщения в блогах, инструкции, сообщения на форумах, репозитории GitHub, обучающие видеоролики и соревнования Kaggle.

Резюме

Описанный выше способ обучения был для меня совершенно новым. Однако после того, как я понял, на что он способен, я никогда не переставал быть студентом fast.ai. Любой другой подход кажется пустой тратой времени.

Так было не всегда. Изначально я подумал, что метод обучения fast.ai не может работать. Упражнения, предложенные на лекциях, мне не показались интересными. Как я мог добиться прогресса, тратя столько времени на выполнение? Для меня обучение - это процесс, в котором вы садитесь с книгой на час или два, а выходите на другом конце, имея возможность обсудить что-то очень сложное и абстрактное.

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

Наткнуться на fast.ai оказалось приключением всей моей жизни.

Спасибо за внимание! Если вам понравилось и вы хотите узнать больше, свяжитесь со мной в Твиттере!