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

Философия встраивания заключалась в том, чтобы выяснить, существует ли скрытое пространство, в котором каждое слово может быть выражено как состоящее из многих измерений. Если бы такое пространство существовало, мы могли бы связывать совершенно разные / похожие слова (в смысле нашего использования языка) и более объективно выяснять, почему они разные / похожие. Наверное, пример может пролить свет -

Типичный пример: как связаны король, женщина и королева в этом пространстве. Допустим, мы используем только 3 измерения в этом пространстве. Для интуиции предположим, что измерения представляют «важность», «пол», «лидер». Тогда король будет представлен как [1,0,1], женщина - как [0,1,0], а королева - как [1,1,1]. И, следовательно, мы могли бы написать королеву как король - мужчина + женщина в таком пространстве.

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

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

Но ответ на мой второй вопрос был мне непонятен. Да, интуитивно понятно, что вложения слов могут быть похожими или разными в зависимости от данных, на которых они были созданы / обучены. Кто-то может тренировать вектор слова на средних сообщениях в блоге, другой - на художественных романах, и они оба могут в конечном итоге получить разные скрытые пространства. Но это все? Если бы нам пришлось объединить все текстовые данные, то получилось бы мы идеальное вложение? И это то, что такое Перчатка и другие словесные векторы?

Ответ стал очевиден ранее в этом месяце, когда я посетил курс углубленного изучения fast.ai 2017 в качестве международного стипендиата.

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

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

Возьмем пару примеров -

  1. Построение системы управления денежными потоками розничного магазина.
  2. Построение системы управления урожаем на ферме

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

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

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