Почему использование псевдо-маркировки нетривиально влияет на результаты?

19

Я изучал полуобучаемые методы обучения и наткнулся на концепцию «псевдо-маркировки».

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

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

Граница принятия решений в методах полууправления

Изображение из Wikimedia Commons от Techerin CC BY-SA 3.0

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

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

Правильно ли я считаю, что объяснение, представленное диаграммой, отсутствует? Или мне чего-то не хватает? Если нет, то есть польза от псевдо-меток, учитывая предварительно переобучение решения границы имеет идеальную точность по сравнению с псевдо-лейбл?

RM
источник

Ответы:

16

Псевдо-маркировка не работает с данной проблемой игрушки

Оливер и соавт. (2018) оценивали различные полууправляемые алгоритмы обучения. На первом рисунке показано, как псевдо-маркировка (и другие методы) работают с той же проблемой с игрушкой, что и в вашем вопросе (называемом набором данных «две луны»):

введите описание изображения здесь

На графике показаны помеченные и немаркированные точки данных и границы принятия решений, полученные после обучения нейронной сети с использованием различных методов обучения под наблюдением. Как вы и подозревали, псевдо-маркировка в этой ситуации не работает. Они говорят, что псевдо-маркировка «это простая эвристика, которая широко используется на практике, вероятно, из-за ее простоты и универсальности». Но: «Интуитивно понятный, он, тем не менее, может давать неверные результаты, когда функция прогнозирования создает бесполезные цели для [немеченых данных], как показано на рис. 1».

Почему и когда работает псевдо-маркировка?

Псевдо-маркировка была введена Ли (2013), так что вы можете найти более подробную информацию там.

Предположение кластера

Теоретическое обоснование, которое Ли дал для псевдомаркировки, состоит в том, что это похоже на регуляризацию энтропии. Регуляризация энтропии (Grandvalet and Bengio 2005) - это еще одна методика обучения под наблюдением, которая побуждает классификатора делать уверенные прогнозы на немаркированных данных. Например, мы бы предпочли, чтобы непомеченной точке была назначена высокая вероятность нахождения в определенном классе, а не разбросанные вероятности, распределенные по нескольким классам. Цель состоит в том, чтобы использовать в своих интересах предположение, что данные кластеризованы в соответствии с классом (так называемое «предположение о кластере» в обучении под наблюдением). Таким образом, соседние точки имеют один и тот же класс, а точки в разных классах разделены более широко, так что границы истинного решения проходят через области низкой плотности входного пространства.

Почему псевдо-маркировка может потерпеть неудачу

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

Где это работает

Lee (2013) показал, что псевдомаркировка может помочь в наборе данных MNIST (на 100-3000 помеченных примерах). На рис. 1 из этой статьи, вы можете видеть, что нейронная сеть, обученная на 600 помеченных примерах (без какого-либо полууправляемого обучения), уже может восстановить кластерную структуру среди классов. Кажется, что псевдо-маркировка помогает улучшить структуру. Обратите внимание, что это не похоже на пример с двумя лунами, где нескольких помеченных точек было недостаточно для изучения правильных кластеров.

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

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

Grandvalet и Bengio (2005) сообщили, что псевдомаркировка превосходит обучение в наборах данных CIFAR-10 и SVHN (с 4000 и 1000 помеченных примеров, соответственно). Как и выше, это намного более помеченные данные, чем 6 помеченных точек в задаче двух лун.

использованная литература

  • Grandvalet and Bengio (2005) . Обучение под наблюдением путем минимизации энтропии.

  • Ли (2013) . Псевдо-этикетка: простой и эффективный метод обучения под наблюдением для глубоких нейронных сетей.

  • Оливер и соавт. (2018) . Реалистичная оценка алгоритмов обучения под наблюдением.

user20160
источник
5

То, что вы можете упускать из виду при самообучении, таково:

  1. Это итеративный, а не однократный.

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

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

Это не гарантировано, чтобы работать. Это зависит от вашего базового классификатора, вашего алгоритма (насколько вы должны быть уверены, чтобы назначить псевдометку и т. Д.), Ваших данных и так далее.

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

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

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

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

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

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

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

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

Wayne
источник
2
Не могли бы вы рассказать о том, с какими классификаторами / ситуациями он будет работать? Мое понимание большинства классификаторов, работающих на показанных в качестве примера данных, заключается в том, что это точки, находящиеся далеко от границы решения (по сравнению с близкими к известным точкам), которые получили бы высокую достоверность, поэтому эти дистальные хвосты были бы уверенно ошибочно классифицированы в пример. (Кроме того, любые ссылки / дальнейшего чтения вы могли бы указать в отношении эффективного использования pseudolabeling и связанных с ними методов будут оценены.)
RM
@RM Отредактировано. Как это?
Уэйн
1

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

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

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

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

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

Пример первый, банановидные данные

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

Пример два, 2D нормально распределенные данные] =

Код для примера 1 (пример 2 достаточно похож, что я не буду здесь дублировать):

import numpy as np
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import seaborn

np.random.seed(2018-10-1)
N = 1000

_x = np.linspace(0, np.pi, num=N)
x0 = np.array([_x, np.sin(_x)]).T
x1 = -1 * x0 + [np.pi / 2, 0]

scale = 0.15
x0 += np.random.normal(scale=scale, size=(N, 2))
x1 += np.random.normal(scale=scale, size=(N, 2))

X = np.vstack([x0, x1])

proto_0 = np.array([[0], [0]]).T # the single "labeled" 0
proto_1 = np.array([[np.pi / 2], [0]]).T # the single "labeled" 1

model = RandomForestClassifier()
model.fit(np.vstack([proto_0, proto_1]), np.array([0, 1]))
for itercount in range(100):
    labels = model.predict_proba(X)[:, 0]
    labels += (np.random.random(labels.size) - 0.5) / 10 # add some noise
    labels = labels > 0.5
    model = RandomForestClassifier()
    model.fit(X, labels)

f, axs = plt.subplots(1, 2, squeeze=True, figsize=(10, 5))

axs[0].plot(x0[:, 0], x0[:, 1], '.', alpha=0.25, label='unlabeled x0')
axs[0].plot(proto_0[:, 0], proto_0[:, 1], 'o', color='royalblue', markersize=10, label='labeled x0')
axs[0].plot(x1[:, 0], x1[:, 1], '.', alpha=0.25, label='unlabeled x1')
axs[0].plot(proto_1[:, 0], proto_1[:, 1], 'o', color='coral', markersize=10, label='labeled x1')
axs[0].legend()

axs[1].plot(X[~labels, 0], X[~labels, 1], '.', alpha=0.25, label='predicted class 0')
axs[1].plot(X[labels, 0], X[labels, 1], '.', alpha=0.25, label='predicted class 1')
axs[1].plot([np.pi / 4] * 2, [-1.5, 1.5], 'k--', label='halfway between labeled data')
axs[1].legend()
plt.show()
kbrose
источник
1

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

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

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

Я имею в виду, что вам нужно сделать это:

LaбеLLеddaTaсLUsTеряNграммсLassяеясaTяоN

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

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

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

На самом деле у меня нет ссылок, но в этом посте Reddit , насколько я понимаю, есть дискуссия о GAN, проводящем обучение под наблюдением. Это предчувствие, что он неявно выполняет кластеризацию с последующей классификацией.

InfProbSciX
источник