使用梯度下降训练受限玻尔兹曼机 (RBM)

数据挖掘 梯度下降 西阿诺 RBM
2021-09-22 15:22:17

嘿,我对整个RBM熵/能量训练有点陌生,在理解方面遇到了一些困难,并试图弄清楚是否值得付出努力去理解。

不能用标准的梯度下降算法很容易地训练 RBM 吗?当前的方式是否更快?

这是我的意思的一些示例 Theano 代码:

def rbm(inputs, shape, cost=0, last_cost=1):
    X = T.vector()                     # input
    W = theano.shared(np.zeros(shape)) # weights

    b = theano.shared(np.zeros( shape[1] )) # bias to hidden
    B = theano.shared(np.zeros( shape[0] )) # bias to reconstruction

    H = sigmoid(T.dot(X, W) + b) # hidden activation
    Y = T.dot(H, W.T) + B        # reconstruction

    L = ((X - Y) ** 2).mean()                    # loss function
    G = T.grad(L, W), T.grad(L, b), T.grad(L, B) # gradients

    a = .1                                                  # learning rate
    U = [(W, W - a*G[0]), (b, b - a*G[1]), (B, B - a*G[2])] # shared updates

    train = theano.function([X], L, updates=U) # training function

    while abs(last_cost-cost) > 0.01:
        last_cost, cost = cost, 0
        for input in inputs: cost += train(input)

    return W.get_value(), b.get_value()

是的,这段代码非常粗糙。

3个回答

您要做的是最小化输入与其重建之间的差异。它们可能是完全不同的值,RBM ​​可能工作正常!这是因为受限玻尔兹曼机对一些概率分布进行建模。学习规则是找到权重值来建模数据的分布。您可能会钳制数据(可见单位)并查看重建,但由于隐藏单位是随机单位,它们会有很多值。即使您将网络设置为免费并根据随机单位规则让单位具有一些值,一段时间后您也可以从 RBM 获得样本,这应该来自您的数据分布。

您的问题的完整答案是yesno让我详细说明:

是的,您可以使用 SGD 训练这样的模型:

的,您可以像描述的那样训练模型。这是众所周知的名称“自动编码器”。自动编码器的目标是找到输入数据的(通常更小)表示,然后可用于重建数据。这看起来如下:

自编码器的结构图片取自standford.edu

我们试图使x^1等于x1. 在您的代码中,您添加了额外的约束W1(从输入层到隐藏层的权重)等于W2(从隐藏层到输出层的权重)。重构误差通常是平方误差或交叉熵。正如您所建议的,可以使用 SGD 训练这样的自动编码器。

所以,答案是:是的,你提出的确实有效,被称为自动编码器。

不,您不能使用 SGD 训练 RBM:

在上一节中,我说过使用 SGD 训练 RBM,如您的问题中所述,是有效的。这不是全部真相:这不再是RBM

正如Quittend 的回答中所述,受限玻尔兹曼机对概率分布进行建模。RBM 训练的目标不是准确地重构输入,而是学习数据的概率分布。因此,重建与输入并不完全相同,而是来自相同概率分布的样本。

目标是为我们训练的输入数据分配高概率。输入向量的概率v 是(谁)给的

p(v)=1ZheE(v,h)
在哪里 E 是能量函数,并且 Z 是分区函数(归一化 p这样它是一个有效的概率)。在训练期间,我们想增加p(v) 对所有人 v 在我们的训练数据中,所以我们必须计算导数
logp(v)wij
并改变权重 wij 因此。

这就是我们使用对比散度 (CD- k ) 算法所做的,而这对于梯度下降 (SGD) 是不可能的

tl;博士:

存在使用 SGD 训练无监督神经网络,称为自动编码器。RBM 是一个不同的概念,它对概率分布进行建模并且不严格重构输入。RBM 不能用 SGD 训练。

只是一些细节,RBM被训练以最大化可见单元的概率 p(v)由模型使用最大似然定义,而不是重建误差,这是真的。但是最大似然估计是使用梯度下降来执行的。另一个缺陷是,对数似然 wrt 模型参数的梯度的解析表达式通常难以处理(因为各个总和中的项呈指数级增长),因此梯度本身使用基于 MCMC 的算法来近似,称为对比度散度(或其变体)。

TL;博士

RBM 使用 GD/SGD 进行训练,其中梯度使用对比度散度进行近似,要优化的函数是训练数据的对数似然。