Машинное обучение без учителя: скрытые марковские модели на языке Python

Введение и план курса. Зачем нужны скрытые марковские модели

Здравствуйте и добро пожаловать на занятия по теме «Машинное обучение без учителя: скрытые марковские модели на языке Python».

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

Рассмотримследующее предложение: «Кошек и я собак люблю». Разумеется, это предложениебессмысленно, а именно это и происходит, когда мы используем модели вроде«мешка слов». Суть в том, что становится очень трудно сказать, в чём смыслпредложения, если убрать последовательность слов, поскольку в ней содержитсямного информации. Первоначальное предложение звучит так: «Я люблю кошек и собак».Вы, наверное, и сами это поняли, но представьте себе, насколько возрастаетсложность расшифровки по мере удлинения предложения.

Начнёммы этот курс с базовых марковских моделей – не скрытых. Как вы убедитесь, даже самипо себе они весьма полезны для моделирования предложений. Мы поговорим оматематических свойствах марковских моделей и рассмотрим ряд примеров, чтобы вынаглядно увидели, как они используются. Алгоритм ранжирования страниц в Google основан именно на марковских моделях, поэтому,несмотря на неудержимый технологический порыв, марковские модели и по сей деньещё очень полезны и актуальны. Мы также поговорим о моделировании языков и какпроанализировать данные о посетителях сайта, чтобы можно было устранитьпроблемы, например, высоких показателей отказов.

Далеемы рассмотрим скрытую марковскую модель. Она куда сложнее в математическомплане, но первый раздел должен будет вас к этому подготовить. Мы рассмотрим триосновные проблемы скрытой марковской модели: во-первых, это прогнозированиевероятности последовательности; во-вторых, прогнозирование наиболее вероятнойпоследовательности скрытых состояний относительно наблюдаемойпоследовательности; и, в-третьих, как обучить скрытую марковскую модель.

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

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

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

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

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

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

Обучение – с учителем или без?

Мызнаем, что обучение без учителя – это когда мы хотим найти закономерность илимодель распределения, но у нас нет меток. С другой стороны, обучение с учителем– это когда у нас есть метки, а мы хотим создать модель, которая будет точнопредсказывать появление меток.

Скрытыемарковские модели предназначены для моделирования последовательностей.Последовательность саму по себе можно рассматривать как ряд значений x(1), x(2), …, x(T). Здесь нетникаких меток, а скрытые марковские модели лишь моделируют распределениепоследовательности. Таким образом, они относятся к обучению без учителя. Сдругой стороны, мы часто видим, что скрытые марковские модели используются вкачестве классификаторов. К примеру, мы можем обучить скрытую марковскую модельмоделировать мужской голос, а затем – обучить марковскую модель моделироватьженский голос. В результате мы сможем, получив новую запись голоса,предсказать, мужской это голос или женский.

Каким образом это может получиться, учитывая, что у нас есть только модель вероятности данных? Ключевой здесь является теорема Байеса. В действительности мы моделируем вероятности p(X|male) и p(X|female). Теорема Байеса, как известно, помогает «обратить» условия, так что мы можем найти p(male|X) и p(female|X). Таким образом, мы можем найти наиболее вероятный класс, а наш прогноз будет состоять в том, каким именно будет этот наиболее вероятный класс.

Из теоремы Байеса мы знаем, что вероятность p(male|X) равна

p(male|X)=\frac{p (X|male)p(male)}{{p(X)}}.

Аналогично для p(female|X)

p(female|X)=\frac{p (X|female)p(female)}{{p(X)}}.

Приэтом мы можем просто проигнорировать нормирующую константу, поскольку она одинаковадля обоих случаев. Нас даже не интересует реальная вероятность того или иногослучая, нам важно лишь, какой из них вероятнее. Истинная прелесть теоремыБайеса в том, что совершенно неважно, чему равно p(X|C).

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

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

p(X|C)=p(x(1,1)|C)p(x(1,2)|C) ... p(x(T,D)|C).

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

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

Где взять код и данные

Весь код для моих курсов по машинному обучению находится в репозитарии по адресу https://github.com/lazyprogrammer/machine_learning_examples. Нужная для данного курса папка называется hmm_class. Если не указано другого, то и все данные, используемые в этом курсе, также находятся в данной папке. Команда для загрузки кода

git clone

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

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

git pull

чтобы иметь последнюю версию.

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

Ипоследнее. Если вы не знаете, как использовать Gitили вам нужна помощь в настройке среды разработки с нужными библиотеками Python, вы можете ознакомиться с лекцией по настройкесреды в приложении.

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: