如何使用RBM进行分类?


12

目前,我正在使用Restricted Boltzmann Machines,由于我一直在使用它,所以我想尝试用它对手写数字进行分类。

我创建的模型现在是相当不错的生成模型,但是我不知道该如何进一步发展。

本文中,作者说,在创建了良好的生成模型后,“ 然后使用标记的样本在RBM上训练一个判别式分类器(即线性分类器,支持向量机),并进一步声明”,因为您传播了将数据向量传递到RBM模型的隐藏单元,以获取隐藏单元向量,或对数据进行更高级的表示。问题是我不确定我是否正确。

这是否意味着我要做的就是将输入传播到隐藏的单元,并且我有用于分类的RBM功能?

有人可以向我解释这个过程吗?


受限的Boltzmann机器是用于深度学习的最早组件之一。实际上,Hinton在DNN中所做的第一项重要工作是基于RBM的深度信念网络。有关更多信息,请搜索此文章(deep信念网络,2007年,Hinton)。在他的网站上,您可以找到非常重要的资源以及演示实验cs.toronto.edu/~hinton/digits.html
Bashar Haddad

@hbaderts我开始和RBM一起玩。接受的答案很容易阅读。我想澄清一下,从二进制分布采样后,RBM隐藏层是随机的。对于分类,是使用隐藏的单元概率还是从二进制分布(1和0)中采样的隐藏单元传递到分类器中?
M3tho5 '18 -10-11

Answers:


15

受限玻尔兹曼机器的评论

v

p(vh)=i=0Vp(vih),
p(vih)=σ(ai+j=0Hwjihj)
σaiiwjihjvip(vh)hv

使用RBM分类

h

这个隐藏的向量只是输入数据的转换版本-这本身无法对任何内容进行分类。要进行分类,您将使用隐藏的向量而不是“原始”训练数据作为输入来训练任何分类器(线性分类器,SVM,前馈神经网络或其他任何东西)。

如果您要构建一个深度信念网络(DBN)(用于以无人监督的方式对深度前馈神经网络进行预训练),则需要使用此隐藏向量并将其用作新RBM的输入,然后将其堆叠在它的上面。这样,您可以逐层训练网络,直到达到所需的大小,而无需任何标记的数据。最后,您将在顶部添加一个softmax层,然后对您的分类任务进行反向传播训练整个网络。


感谢您对@ Seanny123进行编辑,这确实使它更易于阅读。
hbaderts '16

5

@hbaderts完美地描述了整个工作流程。但是,如果您完全不熟悉此想法,则可能没有任何意义。因此,我将以外行的方式进行解释(因此,我将省略细节):

将深度网络视为转换数据的功能。转换的示例包括规范化,记录数据等。您正在训练的深度网络具有多层。这些层中的每一层都使用某种学习算法进行训练。对于第一层,您将原始数据作为输入传递,并尝试获得一个函数,该函数将把那些“相同的原始数据”还给您作为输出。但是,您无法获得理想的输出。因此,您将获得输入的转换版本作为第一层的输出。

现在,对于第二层,您将获取这些“转换后的数据”并将其作为输入传递,并重复整个学习过程。您一直在对深层网络中的所有层执行此操作。

在最后一层,您得到的是原始输入数据的“转换版本”。可以考虑对原始输入数据进行更高级别的抽象。请注意,您尚未在深层网络中使用标签/输出。因此,到目前为止,一切都是无监督的学习。这称为分层预训练。

现在,您想训练一个分类器/回归模型,这是一个监督学习问题。实现该目标的方法是从深度网络的最后一层获取原始输入的“最终转换版本”,并将其用作任何分类器(例如knn分类器/ softmax分类器/逻辑回归等)的输入。这称为堆叠。

在培训此最后一步的分类器/学习者时,您会在整个网络中传播所有学习内容。这样可以确保您能够从标签/输出中学习并相应地修改所学习的分层参数。

因此,一旦您对生成模型进行了培训,就可以获取生成模型的输出,并将其用作分类器/学习器的输入。随着学习的继续,让错误遍及整个网络,以便您可以修改在先前步骤中学习的逐层参数。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.