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

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

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

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

Инициализация: присвойте произвольные значения параметрам модели.

Шаг Е: Используя параметры модели (начальные или из предыдущей итерации), вычислите ожидаемое значение отсутствующих данных. Ожидаемый, потому что может быть несколько возможных способов вывода недостающих данных, каждый с определенной вероятностью.

Шаг «M»: Используя ожидаемое значение недостающих данных, определенное на шаге E выше, плюс наблюдаемые данные, вычислите наиболее вероятные параметры модели, используя методы оптимизации.

Повторяйте шаги E и M, пока параметры модели не сойдутся.

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

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

Итак, я начинаю читать эту книгу и сталкиваюсь с примером, в котором используются структуры данных Classes and Objects, Map и List. Если бы я уже знал, что такое классы и объекты, карты и списки из моего предыдущего опыта программирования, или если бы в книге также было объяснение каждого из компонентов, то понять, как реализована карта или список, было бы проще простого. или Класс определен в Python.

Но, как правило, кулинарные книги не знакомят с базовыми структурами данных и алгоритмами. Они предназначены только для обучения на примерах. Таким образом, это становится недостающими данными в нашем контексте. Один простой способ заполнить недостающие данные — использовать книгу по структурам данных и алгоритмам, чтобы узнать о картах и ​​​​списках, и книги OOPS, чтобы узнать о классах и объектах. Но доступность внешних ресурсов для превращения неполных данных в полные не является прецедентом для EM, так как предполагает, что никоим образом, кроме использования наблюдений, мы не можем делать какие-либо выводы о недостающих данных.

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

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

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

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

Первоначально опубликовано на www.stokastik.in 6 мая 2017 г.