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

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

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

Мне эти принципы помогли относительно быстро перейти из 1С в дата-сайентиста и за два года вырасти до уровня синьора, по уровню ЗП и автономности (ссылка на прошлю статью об этом)

Надо понимать суть, принципы и концепции, интуицию. Не стоит пытаться просто запомнить

"Знание некоторых принципов избавляет от необходимости знания многих фактов"

"Зри в корень" (Козьма Прутков)

В школе и институте многие становились жертвами подходов, когда важно было выучить что-то наизусть или знать какие-то маловажные детали. Помню, как меня поразило, что многие топовые американские профессора, ведущие учебные курсы на coursera.org, пытаются сначала обяснить интуицию разных подходов, в том числе абсолютно математических, вместо того чтобы сарзу показать формулы. Знание точных формул, на практике, вам часто будет не нужно (или у вас будет время их вспомнить). Но чтобы принимать верные решения, необходимо крепко держать в памяти принципы и логику, которая стоит за разными подходами.

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

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

Эндрю Ын (Andrew Ng), известный евангелист использования нейронных сетей и педагог, чьи курсы по нейронным сетям очень популярны, подчеркивал ключевую роль данного принципа в своих интервью. Свои курсы он строит так, чтобы научить интуиции разных подходов (в будущих статьях дам ссылки и рекомендации по этим курсам).

Примеры

Примеры принципов машинного обучения, которые надо понять интуитивно:

  • идея стохастического градиентного спуска и почему именно стохастический вариант

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

  • что такое оверфиттинг (упаси Вас бог стараться это понять через формулы)

  • в чем суть кросс-валидации и почему без неё нельзя сказать ни об одном способе прогнозирования насколько он хорош

  • почему средняя "аккуратность" прогнозирования - плохое средство измерить его качество модели машинного обучения

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

В математике тоже работает понимание принципов, которое поможет запомнить формулы:

  • в логистической регрессии надо понять зачем вводят логарифм соотношения шансов разных классов (log-odds), хотя в конечном счете обучают модель, предсказывающую вероятность

  • в методах log-likelihood: зачем снова этот log? Почему с ним легче, чем без него

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

Для запоминания нужно повторение

"Успех - это 10% таланта и 90% упорства". Развитие навыка требует практики.

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

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

Как применять повторение:

  • в изучении математики: решите 2-3 примера. Этот подход использовали в школе, и он действительно работает. Важно: решить самостоятельно и потом проверить ответ. Смотреть как решает кто-то другой - не работает

  • в изучении программирования: напишите мини-программу. Поэтому, например, для изучения самых базовых основ Python для меня было эффективно решение мини-задачек, как на сайте http://pythontutor.ru/

  • в изучении машинного обучения: каждый раз встречая упоминания чего-либо в статье: кросс-валидации, софт-макс функции, проклятия размерности, байесовского принципа - задавайте себе вопрос: "полностью ли я понимаю, о чём идет речь?". И отвечая - не врите себе! Если чувствуете, что вроде примерно это знаете, но не до конца помните/понимаете детали - вернитесь к этому снова, перечитайте. Часто бывает лучше перечитать в новых источниках (искусственные нейронные сети тоже обучают подобным образом, показывая ту же картинку кота, но под другим углом, чтобы научить сеть отличать кота от других животных).

Нередко перечитывая даже одну и ту же книгу или статью по 2-3 раза можно всё более глубоко понять ту же концепцию или мысль автора. Также об этом в следующем принципе.

Обучение по спирали: возвращайтесь к одной теме многократно, постепенно углубляясь

Снова может показаться, что этот принцип противоречит самому первому, что во всём следует стараться разбираться основательно. Так и есть, но даже стремясь к качественному пониманию - не всегда получается что-то досконально понять сразу.

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

Соответственно, на каждой стадии обучения книги и курсы вы должны подбирать в соответствии со своими текущим этапом:

  • На первом хорошо подходят книги рассказывающие об общих конецпциях machine learning и data science и, например, вообще не вдающиеся в математику. В математике в данный момент достаточно знать, что такое производная/градиент и иметь общие представления о теор.вере (без знаний о проверке гипотез и разных стат.распределениях).

  • Далее имеет смысл разобраться, какие алгоритмы существ, их ключевые принципы, классификацию по видам и отличия между видами. Всё еще не следует вдаваться в детали реализации отдельных алгоритмов и пытаться запомнить формулы. В математике на данном этапе достаточно понять формулу байеса и байесовский подход (например, наивный байесовский классификатор)

  • Потом имеет смысл брать книги, раскрывающие детали реализации отдельных методов, изучать их принципы более глубоко, понимать математику этих методов. Тут уже полезно и математику более глубоко вспоминать/учить, по мере того, как она будет необходима для понимания алгоритмов. Потому что "сухая математика" без примеров применения - понимается и запоминается хуже, из этого также следует будущий принцип, и об этом писал даже Ричард Фейнман (нобелевский лауреат по физике), в своей автобиографии.

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

Сюда же относится подход к первому прохождения курсов и прочтению книг или статей "по диагонали", с тем, чтобы еще раз, не перескакивая, прочитать их позднее. Кажется, видел этот совет у Andrej Karpathy, руководителя группы искуственного интеллекта в Tesla, чьи блог-посты о нейронных сетях стали ключевыми вехами, на которые ссылаются другие авторы.
Предлагается читать научные статьи о новинках в области нейронных сетей три раза:

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

Не заставляйте себя. Поддерживайте свою энергию и интерес к обучению

Изучение любой сложной дисциплины - это марафон, который займёт годы.

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

Если вы устали - давайте себе отдыхать. И эффективно отдыхать тоже надо научиться.

"Товарищ, запомни правило простое: Работаешь — сидя, Отдыхай — стоя!" (В.Маяковский).

Для людей из ИТ эффективный отдых - это движение. Потому что вашему телу оно необходимо по многим медицинским причинам, так же как кислород и достаточный сон. Важно: именно движение, а не "пребывание на свежем воздухе", т.к. кровь в сосудах двигает сокращение мышц, а не только сердце. А при неидеальном кровоснабжения все системы организма работают неидеально. Интересно, что многие специалисты в ИТ просто вынужены приходить к вопросам более здорового образа жизни и питания, т.к. начинают осознавать что иначе они быстрее устают и не способны заниматься работой, которая им так нравится (пример: Andrej Karpathy в своём блоге опубликовал свой подход к диете).

Помимо отдыха не надо заставлять себя учить что-то (читать книгу или смотреть лекции), которые не понимаете, которые на вас новодят тоску или усыпляют вас. Даже если все вокруг их рекомендуют. Значит, для вас они не подходят, и нужно, например, сначала получить более базовые знания. Или для вас лучше подходят книги, а на лекциях вы не способны долго концентрироваться (мой случай).

Интуицию данного принципа хорошо выразил Михаил Жванецкий:

"Надо уметь уходить с плохого фильма. Бросать плохую книгу. Уходить от плохого человека. Их много, время дороже. Дела неидущие  - бросать. От посредственности уходить. Их много, время дороже.

Лучше поспать. Лучше поесть. Лучше посмотреть на огонь, на ребенка, на женщину, на воду…"

Постоянно исследуйте алтернативные способы обучения

Одна из ключевых концепций в применении методов машинного обучения - Explore/exploit trade-off.

Интуитивно, в соответствии с первым из предложенных принципов обучения, эту концепцию можно описать так:

Это принцип поиска баланса между применением наиболее эффективных способов чего-либо и попыткой иследовать альтернативы. Даже когда вы уже многократно удостоверились в достоинствах какого-то подхода - нельзя точно сказать, что он однозначно лучший, не попробовав всех возможных альтернатив. И даже когда вы многократно удостоверились в преимуществе лучшего подхода над альтернативыами - имеет смысл, хотя бы изредка, перепроверить не окажутся альтернативы лучше на этот раз (ведь, возможно, их эффективность также меняется во времени). Вопрос: как решить в каждому случае стоит ли исследовать альтернативы (explore) или следовать тому способу, который пока показал своё преимущество (exploit). Для этого используют, например, такой подход: чем ниже уверенность в преимуществе какого-то метода перед остальными, тем больше времени имеет смысл тратить на поиск новых альтернатив или повторные пробы уже известных альтернатив, которые раньше показались менее эффективными.

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

В целом, это супер-универсальный принцип, который можно применять везде и в обычной жизни. Например:

вы переехали в новый район, нашли там кафе/продуктовый магазин. Можно ходить в него всю жизнь, но логичнее попробовать сходить в другие кафе/магазины вокруг, возможно, какой-то из них окажется лучше. Со временем вы выбрали одно место и ходите в него регулярно. Рациональным будет переодически изучать, что нового появилось, возможно, что-то лучшее возникло с тех пор, как вы определили своё любимое кафе. Даже когда ничего нового не появилось, вам стабильно нравится там, где вы регулярно бываете, и не понравилось в других местах, рационально попробовать их еще раз (!), потому что, кто знает, может быть, в прошлый раз вы их попробовали в неудачный день, может быть, вам не повезло и вы выбрали самое неудачное из их блюд, или шеф-повар ошибся именно в тот день и т.д.

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

Применение данного принципа в образовании

Большинство людей применяют этот принцип интуитивно. Но при этом могут использовать его не во всех сферах своей жизни. Хотя он эффективно применим, например, к самообразованию. Существуют десятки разных курсов и книг, по которым можно что-либо изучать. Можно ли точно знать заранее, какой из них окажется эффективнее для вас? По разным признакам это можно определить. С опытом вы можете понять, что курсы на udemy.com часто оказываются менее глубокими чем на coursera.org. Но всё равно: возможно, вы попробовали мало вариантов или что-то изменилось. Поэтому следует изучать новинки и альтернативные книги/курсы. Особенно когда вы только начинаете изучать эту сферу, особенно когда вы чувствуете что текущий курс или книга, которые вам все рекомендовали, почему то "не идут".

Следуя этому принципу я просмотрел почти сотню разных курсов и книг о машинном обучении и программировании, но целиком проходил/читал всего порядка 20% из них. Зато, изучив все возможности, рискну предположить что я учился по одним из лучших книг и курсов.

Экстра-принцип для одноязычной аудитории: учите английский!

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

Для некоторых вещей лучшие объяснения, которые я видел, были на русском, в том числе в статьях на Хабр. Не следует недооцениваь интеллектуальную мощь русскоязычного комьюнити. Но большая (бОльшая!) часть материалов на русском языке бывает или недоступна, или доступна с большой задержкой.

Чтобы быть эффективным в data science, вы должны уметь свободно понимать технические тексты. Это легче, чем понимать художественные тексты, вам даже необязательно учиться и уметь говорить/писать самому. Достаточно, чтобы с английским у вас было как у персонажей из "Кавказской пленницы": "Они соверешнно не умеют говорить по-русски, но всё понимают".

Это приходит с практикой. Заставляйте себя читать именно на английском всё, что изначально было издано и написано на английском. Поначалу это будет очень медленно, но скорость будет быстро расти.

Для запоминания слов в соответствии с принципом повторения, описанным выше, рекомендую компьютерную версию anki и ankidroid для Андроида и составлять для себя свой собственный словарь только по самым важным словам. Эту программу я открыл благодаря курсу об эффективном обучении, ссылку на который давал выше. И позже я встретил гигантский пост от автора одной из уникальных базовых книг о нейронных сетях о том, как он использует этот ankidroid для изучения всего от концепций машинного обучения до сигнатуры команд bash.  Он именно составляет свой собственный словарь, не используя стандартные, и ведёт один словарь для всего, без деления по темам. Нюансы читайте в статье. 

Другие статьи о самообразовании

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

В ближайшее время напишу статьи с обзором книг и курсов.

Готов стать ментором

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

Буду раду помочь: пишите в личку, или на почту ниже.

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

self.development.mentor в домене gmail.com, Олег

Источник: https://habr.com/ru/post/537326/


Интересные статьи

Интересные статьи

Когда понадобилось в один день перевести весь CS центр на домашнее обучение, кураторы проделали большую работу по замене живых лекций на равноценные альтернативы, зато всё остальное уже работало....
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
«Битрикс» — кошмар на костылях. Эта популярная характеристика системы среди разработчиков и продвиженцев ныне утратила свою актуальность.
При просмотре профилей пользователей соцсетей, невольно задаешься вопросом, а сколько информации лежит в открытых источниках? Понятно, что много. Но как это посчитать? И у кого еще, кроме спецслу...
Привет, Хабр! Мы нечасто решаемся размещать здесь переводы текстов двухлетней давности, без кода и явно академической направленности — но сегодня сделаем исключение. Надеемся, что дилемма, вын...