Как использовать RBM для классификации?

12

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

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

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

Означает ли это, что все, что мне нужно сделать, это передать входные данные скрытым единицам, и у меня есть функция RBM для классификации?

Может кто-нибудь объяснить мне этот процесс?

показать имя
источник
Ограниченная машина Больцмана является одним из самых ранних компонентов, используемых для глубокого обучения. На самом деле, первая важная работа в DNN была проделана Хинтоном - это сеть глубокого убеждения, основанная на RBM. Пожалуйста, поищите эту статью (глубокое убеждение, 2007, для Хинтона) для получения дополнительной информации. На его веб-сайте вы можете найти очень важные ресурсы, а также демонстрационный эксперимент. Cs.toronto.edu/~hinton/digits.html
Башар Хаддад
@hbaderts Я начал играть с RBM. Принятый ответ был легко читаемым. Я хотел попросить разъяснений, скрытые слои RBM являются случайными после выборки из двоичного распределения. Для классификации используются ли скрытые вероятности единиц или выборки скрытых единиц из двоичного распределения (1 и 0) в классификатор?
M3tho5

Ответы:

15

Обзор ограниченных машин Больцмана

v

p(vh)=i=0Vp(vih),
p(vih)=σ(ai+j=0Hwjihj)
σaiiwjihjviп(v|час)часv

Использование УКР для классификации

час

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

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

hbaderts
источник
Спасибо за правку @ Seanny123, это намного облегчает чтение.
hbaderts
5

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

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

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

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

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

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

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

Сэл
источник
0

Вы можете обучить стекированные RBM на своих изображениях, а затем обучить окончательный RBM для объединения выходных данных из стека RBM и меток. Тогда вы можете использовать RBM для классификации. Эта статья Hinton ++ объясняет этот подход . Алгоритм быстрого обучения для сетей глубокого убеждения , также вы можете взглянуть на эту демонстрацию

Кристин Н
источник