В данный момент я играю с Restricted Boltzmann Machines, и, поскольку я в нем, я хотел бы попытаться классифицировать рукописные цифры по ним.
Модель, которую я создал, теперь является довольно модной генеративной моделью, но я не знаю, как дальше с ней работать.
В этой статье автор говорит, что после создания хорошей порождающей модели один « затем обучает дискриминантный классификатор (то есть линейный классификатор, метод опорных векторов) поверх УОК, используя помеченные образцы », и далее заявляет, что « поскольку вы распространяете векторы данных к скрытым единицам модели RBM, чтобы получить скрытые векторы единиц или представление данных более высокого уровня ". Проблема в том, что я не уверен, правильно ли я понял.
Означает ли это, что все, что мне нужно сделать, это передать входные данные скрытым единицам, и у меня есть функция RBM для классификации?
Может кто-нибудь объяснить мне этот процесс?
источник
Ответы:
Обзор ограниченных машин Больцмана
Использование УКР для классификации
Этот скрытый вектор является просто преобразованной версией входных данных - он не может ничего классифицировать сам по себе. Чтобы выполнить классификацию, вы должны обучить любой классификатор (линейный классификатор, SVM, нейронную сеть с прямой связью или что-нибудь еще) со скрытым вектором вместо «необработанных» обучающих данных в качестве входных данных.
Если вы строите глубокую сеть убеждений (DBN) - которая использовалась для предварительной подготовки глубоких нейронных сетей с прямой связью без надзора - вы бы взяли этот скрытый вектор и использовали его в качестве входных данных для нового RBM, который вы складываете Сверху. Таким образом, вы можете обучать сеть слой за слоем, пока не достигнете желаемого размера, без необходимости каких-либо помеченных данных. Наконец, вы добавите, например, слой softmax вверху, и обучите всю сеть обратному распространению в своей задаче классификации.
источник
@hbaderts отлично описал весь рабочий процесс. Тем не менее, это может не иметь никакого смысла, если вы совершенно новичок в этой идее. Поэтому я собираюсь объяснить это в манере неспециалиста (поэтому я опущу детали):
Думайте о глубоких сетях как о функции для преобразования ваших данных. Примерами преобразований являются нормализация, сбор данных и т. Д. Глубокие сети, которые вы обучаете, имеют несколько уровней. Каждый из этих уровней обучается с использованием своего рода алгоритма обучения. Для первого слоя вы передаете исходные данные в качестве входных данных и пытаетесь получить функцию, которая вернет вам те же «исходные данные», что и выходные данные. Тем не менее, вы не получите идеальный результат. Следовательно, вы получаете преобразованную версию ваших входных данных в качестве выходных данных первого слоя.
Теперь для второго уровня вы берете эти «преобразованные данные» и передаете их в качестве входных данных и повторяете весь процесс обучения. Вы продолжаете делать это для всех слоев вашей глубокой сети.
На последнем слое вы получаете «преобразованную версию» ваших исходных входных данных. Это можно подумать о более высоком уровне абстракции ваших исходных входных данных. Обратите внимание, что вы еще не использовали метки / выходные данные в вашей глубокой сети. Следовательно, все до этого момента - обучение без присмотра. Это называется послойной предварительной подготовкой.
Теперь вы хотите обучить модель классификатора / регрессии, и это проблема обучения под наблюдением. Для достижения этой цели вы берете «окончательно преобразованную версию» вашего исходного ввода с последнего слоя в вашей глубокой сети и используете их в качестве входных данных для любого классификатора (например, классификатор knn / классификатор softmax / логистическая регрессия и т. Д.). Это называется укладкой.
Обучая этого классификатора / ученика последнего шага, вы распространяете все свои знания по всей сети. Это гарантирует, что вы сможете учиться по меткам / выводам и соответствующим образом изменять полученные параметры слоя.
Итак, как только вы обучите свою генеративную модель, возьмите выходные данные своей генеративной модели и используйте ее в качестве входных данных для классификатора / ученика. По мере продолжения обучения позвольте ошибке проходить через всю сеть, чтобы вы могли изменить послойный параметр, полученный на предыдущих этапах.
источник
Вы можете обучить стекированные RBM на своих изображениях, а затем обучить окончательный RBM для объединения выходных данных из стека RBM и меток. Тогда вы можете использовать RBM для классификации. Эта статья Hinton ++ объясняет этот подход . Алгоритм быстрого обучения для сетей глубокого убеждения , также вы можете взглянуть на эту демонстрацию
источник