machine learning что нужно знать

Что нужно знать о machine learning, чтобы найти хорошую работу?

Перевод: Мария Агеева, Binary District

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

Термин «искусственный интеллект», как известно, программисты и исследователи использовали ещё в 1950-х — для описания машин, способных без посредничества человека адекватно решать абстрактные задачи. А machine learning — это один из наиболее известных методов практической реализации возможностей искусственного интеллекта. Машинное обучение базируется на создании алгоритмов, обладающих встроенной способностью распознавать паттерны при анализе больших массивов данных и использовать их для самообучения.

Кейсы Netflix и Amazon наглядно иллюстрируют, насколько умными, причём именно по-человечески умными, могут быть технологии благодаря применению machine learning. Когда Netflix, словно читая ваши мысли, предлагает вам именно те фильмы и сериалы, что непременно вас заинтересуют, — за этим стоит ML. Благодаря машинному обучению Amazon столь успешно убеждает вас купить в нагрузку к приобретаемому товару ещё что-нибудь. Чтобы предложить именно те товары, которые придутся вам по вкусу, используются сложные алгоритмы, обрабатывающие терабайты данных. Попробуйте представить, сколько существует бизнес-кейсов, в которых ML может изменить статус-кво. Очевидно, что machine learning — привлекательная сфера как для тех, кто только готовится к выбору профессии, так и для тех, кто мечтает о новом витке IT-карьеры.

Большинство энтузиастов machine learning волнует вопрос – учить Python или R? Для разработки программ, основанных на алгоритмах машинного обучения, действительно чаще всего применяются эти два языка программирования. Однако разработчикам, ориентированным на долгосрочный карьерный успех, такой вопрос себе задавать не стоит.

— Уникальные преимущества некоторых языков программирования облегчают решение связанных с AI проблем, а вы ведь не хотите провалить проект?

— Обладая доступом к библиотекам, не так уж сложно разрабатывать основанные на ML программы на любом языке программирования

— Некоторые из основанных на ML технологий не могут справиться с определёнными задачами, в таком случае программист должен уметь найти альтернативный вариант

— Помимо этого, появляются и новые подходы к реализации алгоритмов ML. Чтобы «оставаться в игре», нужно уметь адаптироваться к ситуации и осваивать технологию по мере того, как она меняется

Основы теории вероятности составляют ядро машинного обучения. Теорема Байеса, условная вероятность, функция правдоподобия, независимые и взаимообусловленные события — всем, кто мечтает об интересной работе в сфере machine learning, необходимо разобраться в этих элементах теории вероятности. Ведь эти концепции являются научной базой для решения проблемы неопределённости в алгоритмах машинного обучения. Математическое ожидание, медиана, мода, дисперсия, биномиальное распределение и т.д. — любой программист или специалист по анализу данных должен владеть этими концепциями, ведь иначе он не сможет проверять работу алгоритмов ML и совершенствовать их. Многие алгоритмы машинного обучения представляют из себя логичное продолжение процедур статистического моделирования.

Моделирование данных — это определение базовой структуры сложных массивов. Результативность алгоритма машинного обучения зависит от того, найдутся ли в этом массиве полезные паттерны: например, корреляция, собственный вектор, категоризация. В основе ML лежит постоянное совершенствование моделей данных. В зависимости от того, какая степень толерантности к ошибке заложена в приложении, для которого вы разрабатываете модель, принимается решение о мере точности и мере погрешности. Итеративные алгоритмы обучения должны уметь модифицировать модель в зависимости от меры погрешности. Без базовых знаний в области моделирования данных не получится разработать даже самый простой алгоритм.

Хорошая новость: для большей части базовых и стандартных реализаций ML-решений существуют библиотеки, API, пакеты программного обеспечения. Однако, чтобы преуспеть в работе над ML-проектами, совершенно необходимо:

— уметь выбирать подходящую модель (ближайший сосед, дерево решений, нейросеть, компиляция нескольких моделей)

— уметь выбирать подходящую для конкретного типа данных обучающую процедуру

— понимать, как гиперпараметры влияют на обучаемость алгоритма

— уметь оценивать плюсы и минусы разных подходов

Советуем энтузиастам, желающим постичь все нюансы machine learning, посетить сайт Kaggle, где собрано немало интересного материала по ML и анализу данных, включая практические задания.

Важно понимать, что данные всегда важнее алгоритмов. На основе данных можно реализовать выдающуюся программу — даже если алгоритм будет базовым. Так что всем, кто хочет построить IT-карьеру, работая с ML, придётся сначала изучить управление данными, организацию данных, анализ данных и только потом погружаться в разработку продвинутых алгоритмов. Ведь программисты, специализирующиеся на machine learning, много времени уделяют преобразованию данных, это – ключевой аспект их работы.

Технология machine learning сопряжена с обработкой больших массивов данных. Программисты едва смогли бы выполнять такой огромный объём работ, используя ресурсы лишь одного компьютера. Решение проблемы — распределённая обработка данных. Любой опыт в этой сфере может оказаться бесценным. Apache Hadoop и Amazon EC2 предлагают удачные решения для распределённой обработки данных, так что вам, вероятно, было бы полезно ознакомиться хотя бы с их основами.

Machine learning — единственная технология, способная обеспечить работу приложений с достаточно мощным потенциалом, чтобы произвести переворот в функционировании целых отраслей. Компании по всему миру уже вкладывают огромные суммы денег в разработку основанных на ML сервисов для внутреннего пользования. Таким образом, появляется всё больше новых вакансий, открывается широкий спектр возможностей трудоустройства. Следуйте советам, изложенным в этой статье, чтобы освоить machine learning и спланировать новый виток карьеры.

Источник

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

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

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

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

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

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

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

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Краткое введение в Машинное обучение

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

Для старта хотелось почитать что-то совсем базовое, но поиск по строкам «машинное обучение для чайников» вменяемых результатов не дал. Все статьи начинались с тривиальных рассуждений, а потом перепрыгивали на загадочные формулы без особых пояснений. Я не сдавался и добыл несколько книг с хорошими отзывами, но получил то же самое, только уже на 600 страниц. Спустя полгода поисков могу сообщить вам следующее: при текущих темпах развития AI я не увижу роботов в старости, для работы с Machine Learning на самом деле не нужна математика, и как минимум одна статья «машинное обучение для чайников» существует, вы ее сейчас читаете.

Итак, ознакомившись с этой статьей вы поймете, что вообще представляет собой группа технологий ML. Имея эту базу вам будет проще двигаться дальше, и даже формулы в книгах станут понятнее. Раз уж зашел разговор о книгах, то сразу порекомендую ту, с которой у меня начался реальный прогресс: Andrew Glassner, «DEEP LEARNING: From Basics to Practice». В русском варианте она называется «Глубокое обучение без математики»: автор разжевывает алгоритмы не прибегая к формулам. После томов, полных математического пафоса, это был просто глоток свежего воздуха. Еще один важный момент: постарайтесь читать англоязычную литературу, т.к. перевод терминов на русский язык местами сильно страдает. Человеку, который ввел фразу «Обучение с учителем» должно быть очень стыдно.

Создадим модель и обучим ее

Начнем с классики жанра: у нас есть база данных недвижимости с десятком атрибутов (стоимость, площадь, количество комнат и т.д.), на ее основе надо научиться предсказывать стоимость других домов. Тут вы скажете: «Стопэ! Нам надо нейросетку, которая убирает купальники с фотографий, а ты пихаешь нам примитивную задачу о расчете усредненной стоимости!». Я поначалу тоже был в шоке, что эти задачи являются существенной частью ML. И я пришел в ужас от того, что в ML распознавание объектов на фотографии работает по такому же принципу, что и наше предсказание стоимости. Тут ключевое слово «Работает», так что давайте продолжим, сейчас все станет понятно.

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

machine learning что нужно знать

Теперь мы будем перебирать значения коэффициентов A до тех пор, пока уровень ошибки не станет приемлемым, это и называется Обучением модели.

Ошибку каждый раз вычисляем, конечно же, по нашей базе данных (Обучающей выборке, Training Set), алгоритм очень простой: для каждого дома находим разницу между расчетной и фактической стоимостью, возводим разницу в квадрат (чтобы избавиться от отрицательных чисел) и находим среднее значение всех этих отклонений. Формула для вычисления ошибки называется Функцией потерь (Loss Function), описанный алгоритм расчета популярный, но не единственный.

Если ошибку не удается снизить до вменяемых значений, значит мы неудачно выбрали модель: возможно, надо количество комнат брать в квадрат, или Удаленность от центра не плюсовать, а делить. Вариантов много, математики не могут ответить на вопрос «Как выбрать модель», поэтому просто сидим и пробуем разные, пока не получится (тут становятся понятны некоторые шутки про Data Scientist-ов).

А что насчет распознавания объектов на фотографиях? Идея простая: если сделать огромную формулу, которая на вход принимает миллион значений (пиксели фотографии) и внутри имеет сотню тысяч коэффициентов, то после удачного «обучения» она начнет на выходе выдавать «Вероятность наличия собаки на фото» (значение от 0.0 до 1.0). И это прокатило, такие формулы действительно работают, это называют Глубоким обучением (Deep Learning). Есть две сложности: формулу такого размера руками не написать, а ее коэффициенты даже на супер-компьютере методом простого перебора не вычислить. Приступаем к оптимизации.

Перцептрон и Нейронная сеть

machine learning что нужно знать

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

machine learning что нужно знать

machine learning что нужно знать

Всего одной строкой мы рассчитали стоимости всех домов в нашей базе: в одномерный массив W закидываем все веса перцептрона, в двумерный массив X помещаем всю базу недвижимости (кроме стоимости), а в выходном одномерном массиве Y получаем все рассчитанные стоимости. Но краткостью записи все достоинства матриц и заканчиваются. С вычислительной точки зрения здесь нет никакого ускорения (если вы конечно пишите не на Python), а сама операция сведется к трем вложенным циклам с расчетом все того же линейного уравнения. Отказ от матриц, напротив, дает больше пространства для маневра и оптимизаций, но это повод для отдельной статьи.

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

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

machine learning что нужно знать

Для большей гибкости перцептроны объединяют в нейронные сети (на таких рисунках не показывают Веса, но свой набор есть у каждого перцептрона в сети):

machine learning что нужно знать

Тут нас ждет сюрприз: какие бы сложные комбинации связей мы ни рисовали, в итоге получим наше исходное линейное уравнение. Ни одно из входных значений x не будет возведено в степень, т.к. перцептроны соединяются между собой через операцию Сложения. Чтобы как-то исправить ситуацию на выходе каждого перцептрона добавили Функцию активации (Activation function):

machine learning что нужно знать

Эта функция Ψ обязательно нелинейная, конечно же есть популярные варианты, которые вы найдете в любой книге (рисунки с Wikipedia):

machine learning что нужно знать

Какую функцию использовать в вашей модели? Математики также не могут ответить на этот вопрос, пробуйте разные и смотрите что лучше работает в вашем случае. Сигмоид относительно требователен к вычислительным ресурсам, поэтому его чаще ставят только на выходе нейросети, чтобы получить красивое значение от 0.0 до 1.0 (именно для красоты, на выходе он не влияет на работу сети). Говорят, что и обычный Косинус работает неплохо (если таки углубиться в математику и взглянуть на Ряд Фурье, то возникает ощущение, что именно им и надо пользоваться, но я сам пока не пробовал). Для полного понимания работы функций активации давайте взглянем, во что превратилось уравнение нашего перцептрона в случае Сигмоида:

machine learning что нужно знать

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

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

Обучение модели

Простой перебор весов займет очень длительное время, т.к. после любой их корректировки надо прогонять через нейронную сеть всю обучающую выборку, чтобы посмотреть, как изменилась ошибка. Здесь нам помогут два метода: Градиентный спуск (Gradient Descent) и в дополнение к нему Обратное распространение (Backpropagation). Детальное вменяемое описание работы этой пары вы найдете все в той же книге «DEEP LEARNING: From Basics to Practice», а я приведу только самую суть.

Шаг 1: после создания нейронной сети проставляем начальные значения всем весам (обычно, маленькие случайные числа), прогоняем через нее обучающую выборку и вычисляем ошибку (Loss function). Если ошибка равна нулю, то Бог есть и он сегодня с вами. Все остальные пройдемте к шагу два.

Шаг 2: теперь нам надо поправить веса так, чтобы ошибка стала меньше. Взглянем, например, на вес W508, в какую сторону будем его двигать?

machine learning что нужно знать

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

machine learning что нужно знать

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

Шаг 3: опять прогоняем обучающую выборку через сеть, вычисляем ошибку, вычисляем новые градиенты для весов:

machine learning что нужно знать

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

Какие есть подводные камни? А давайте все-таки построим полный график для Веса W508

machine learning что нужно знать

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

А что там с Backpropagation? Вроде все посчитали, все работает, он нам зачем? Вычисление градиента для каждого из весов, описанное выше, относительно затратная процедура. Метод обратного распространения сильно упрощает этот процесс: зная градиент для правой части нейронной сети мы легко вычисляем градиенты для весов, находящихся левее. Двигаясь по сети все левее и левее мы постепенно обновляем все веса. Из-за этого движения справа налево метод и назвали «Обратным».

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

Виды нейронных сетей

Выше уже был показан вариант Полносвязной нейронной сети (Fully connected neural network), но они бывают еще и такими:

machine learning что нужно знать

Кстати о картинках: в Полносвязную сеть пиксели изображения подаются построчно:

machine learning что нужно знать

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

machine learning что нужно знать

Так и появились Сверточные нейронные сети (Convolutional neural network), или просто CNN. Это все еще набор перцептронов с функциями активации внутри, но набор связей между ними специфический, уже не все со всеми. Обучаются они все тем же методом Backpropagation.

machine learning что нужно знать

Выделенную на рисунке цветом область называют «Фильтр». Обычно это квадрат со стороной 3-5 пикселей. Фильтр накладывают на изображение: значения x умножаем на веса и суммируем их, т.е. пропускаем значения через перцептрон. Результат сохраняем в новый двумерный массив. Далее снова накладываем этот же фильтр на изображение, но уже сдвинув его вправо на один пиксель (иногда используют большее смещение), и так пробегаем по всему изображению. Все это повторяем с другими фильтрами (еще несколько перцептронов с другими значениями весов), сохраняя результаты в отдельные массивы. Отфильтрованные изображения прогоняем еще через несколько фильтров, подвергаем дополнительным обработкам, и результат можно, например, подать на полносвязную сеть.

machine learning что нужно знать

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

machine learning что нужно знать

В перцептрон добавилось Состояние (массив S): это переменные, в которых мы сохраняем результат вычисления всего перцептрона (домножив на веса), чтобы использовать их при следующем вызове перцептрона. При первом запуске Состояние заполняется нулями. Если вы уже распознали какой-то блок текста (например, e-mail) и готовы перейти к следующему независимому блоку данных, то Состояние принудительно обнуляется.

Если вы пытаетесь предсказать температуру на завтра, то такая нейросеть будет оперировать не только текущими показаниями (облачность, сила и направление ветра), но и предыдущим значением температуры, что очень логично.

Для Состояния есть несколько усложнений, которые повышают качество работы RNN. Если мы хотим учитывать не только последнее выходное значение, но и несколько предыдущих, то формула вычисления Состояния немного меняется (исходный код, не математическая формула):

machine learning что нужно знать

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

Решаемые задачи

Алгоритмы машинного обучения подразделяют на «Обучение с учителем» (Supervised Learning, привет переводчику) и «Обучение без учителя» (Unsupervised Learning). Года два назад я был уверен, что речь идет о самообучаемых алгоритмах и о тех, за которыми надо присматривать. На самом деле здесь идет речь о двух группах:

Рассмотрим сами алгоритмы, начнем с Классификации, выше уже был пример: что находится на фото (кошка, собака и т.д.)? Другие классические примеры: является ли письмо спамом (бинарная классификация, т.к. ответ да/нет), распознавание букв и цифр на изображениях.

Генерация контента, можно выполнить с помощью Автокодировщика. Для этого используется специфическая нейронная сеть с «бутылочным горлышком»:

machine learning что нужно знать

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

machine learning что нужно знать

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

За что же платят так много денег?

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

Успех складывается из двух вещей:

у вас есть очень много данных в обучающей выборке и очень мощные серверы для их обработки (тогда достаточно взять готовую GPT-3 и обучить ее русскому языку);

вы отлично знаете предметную область, в которой пытаетесь применить машинное обучение.

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

machine learning что нужно знать

Заключение

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *