【深度学习基础模型】玻尔兹曼机BM|受限玻尔兹曼机RBM|深度置信网络DBN详细理解并附实现代码。

【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。

【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。



参考地址:https://www.asimovinstitute.org/neural-network-zoo/
论文地址:
https://ieeexplore.ieee.org/document/6302930
https://ieeexplore.ieee.org/document/6302931?arnumber=6302931
https://ieeexplore.ieee.org/document/6287632

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!

1. 玻尔兹曼机(Boltzmann Machine, BM)

1.1 提出与概述

玻尔兹曼机(BM)是一种随机生成模型,由Geoffrey Hinton等人在20世纪80年代提出。BM的主要特点是它具有双向连接的无向图结构每个神经元的状态受到与其连接的其他神经元的状态和权重影响。BM通过最小化能量函数,使网络达到稳定状态,并可以用于无监督学习。BM中包含输入神经元和隐藏神经元,输入神经元在每次网络更新后可以成为输出神经元。

BM是一种随机网络,神经元主要采用二进制激活模式(0或1),通过马尔可夫链蒙特卡洛方法(MC)进行训练。训练过程中,BM反复在输入和隐藏神经元之间交换信息,直到网络达到平衡状态。

1.2 发展与应用

BM虽然具有强大的表达能力,但由于全连接结构的存在,导致训练复杂度极高。在实际应用中,BM常用于学习复杂的概率分布和生成新数据。然而,随着BM训练的难度逐渐显现,人们更倾向于使用RBM等改进模型。BM适合用于需要学习数据分布或生成数据的领域,但由于其高计算开销,较少在现代大规模应用中使用。

1.3 优缺点

优点:

  • 能够学习复杂的概率分布并生成新数据。
  • 提供了概率解释,使得模型在统计物理学中有坚实的理论基础。

缺点:

  • 由于全连接结构,BM的计算复杂度极高,训练过程缓慢。
  • 训练时容易陷入局部最优,难以扩展到大规模数据集。

1.4 BM的Python实现

import numpy as np

class BM:
    def __init__(self, n_visible, n_hidden):
        self.n_visible = n_visible
        self.n_hidden = n_hidden
        self.weights = np.random.randn(n_visible, n_hidden)
        self.visible_bias = np.zeros(n_visible)
        self.hidden_bias = np.zeros(n_hidden)

    def energy(self, visible, hidden):
        return -np.dot(visible, np.dot(self.weights, hidden)) - np.dot(self.visible_bias, visible) - np.dot(self.hidden_bias, hidden)

    def train(self, data, epochs=1000):
        for epoch in range(epochs):
            # 简单的伪马尔可夫链蒙特卡洛训练过程
            visible = data[np.random.randint(0, len(data))]
            hidden = np.dot(visible, self.weights) + self.hidden_bias
            visible_recon = np.dot(hidden, self.weights.T) + self.visible_bias
            # 这里省略了具体的梯度更新逻辑
        print("BM训练完成")

data = np.array([[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0]])
bm = BM(n_visible=4, n_hidden=2)
bm.train(data)

代码解释:

  • energy: 能量函数用于计算系统的能量状态。
  • train: 简化版本的BM训练过程,通过随机初始化数据和简单的矩阵操作来模拟BM的训练。

2. 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)

2.1 提出与概述

RBM是BM的简化版本,由Hinton提出。与BM的全连接结构不同,RBM对连接方式进行了限制:输入层神经元之间没有连接,隐藏层神经元之间也没有连接这种限制大大降低了训练的复杂度,RBM通过对比散度算法(Contrastive Divergence, CD)进行训练,逐步成为一种有效的无监督学习模型

2.2 发展与应用

RBM广泛应用于降维、特征提取、推荐系统等领域。它是深度信念网络(DBN)的基本单元,并且常用于无监督预训练阶段。

2.3 优缺点

优点:

  • RBM的结构限制降低了计算复杂度,提高了训练效率。
  • 可以用于特征提取、降维等任务,并且能作为深度学习的预训练步骤。
  • 能够通过堆叠多个RBM,构建深度学习模型(如DBN)。

缺点:

  • 尽管RBM比BM高效,但训练过程中仍然依赖马尔可夫链,存在近似误差。
  • 在大规模数据集上应用时,仍需大量计算资源。

2.4 RBM的Python实现

import numpy as np

class RBM:
    def __init__(self, n_visible, n_hidden, learning_rate=0.1):
        self.n_visible = n_visible
        self.n_hidden = n_hidden
        self.learning_rate = learning_rate
        self.weights = np.random.randn(n_visible, n_hidden) * 0.01
        self.visible_bias = np.zeros(n_visible)
        self.hidden_bias = np.zeros(n_hidden)

    def sigmoid(self, x):
        return 1.0 / (1 + np.exp(-x))

    def sample_hidden(self, visible_states):
        hidden_activations = np.dot(visible_states, self.weights) + self.hidden_bias
        hidden_probs = self.sigmoid(hidden_activations)
        return hidden_probs

    def train(self, data, epochs=1000):
        for epoch in range(epochs):
            for sample in data:
                hidden_probs = self.sample_hidden(sample)
                positive_grad = np.outer(sample, hidden_probs)
                visible_recon = self.sigmoid(np.dot(hidden_probs, self.weights.T) + self.visible_bias)
                hidden_recon = self.sample_hidden(visible_recon)
                negative_grad = np.outer(visible_recon, hidden_recon)
                
                self.weights += self.learning_rate * (positive_grad - negative_grad)
                self.visible_bias += self.learning_rate * (sample - visible_recon)
                self.hidden_bias += self.learning_rate * (hidden_probs - hidden_recon)

        print("RBM训练完成")

data = np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])
rbm = RBM(n_visible=3, n_hidden=2)
rbm.train(data)

代码解释:

  • sample_hidden: 从可见层推导出隐藏层的激活概率。
  • train: 利用对比散度算法进行权重更新,正向传播与反向重建数据,调整模型参数。

3. 深度信念网络(Deep Belief Network, DBN)

3.1 提出与概述

DBN是由多个RBM堆叠而成的深度学习模型,Hinton于2006年提出。DBN通过贪婪逐层训练,每个RBM只需学习前一层的特征表示。DBN的目的是通过多个RBM的逐步预训练,将复杂数据表示为概率模型。

3.2 发展与应用

DBN常用于图像识别、语音识别等复杂任务中,尤其在无监督学习和半监督学习中表现突出。DBN的预训练可以有效解决梯度消失问题,并为后续的监督学习提供良好的初始权重

3.3 优缺点

优点:

  • DBN可以有效解决深层神经网络中的梯度消失问题,尤其在无监督预训练时表现优异。
  • 能够从数据中学习复杂的概率表示,用于生成模型、分类等任务。
  • 通过RBM层堆叠,DBN在图像识别、语音识别等领域表现出色。

缺点:

  • 训练时间较长,特别是在层数较多时,调优变得复杂。
  • 预训练和反向传播结合的训练方式增加了模型的复杂性。

3.4 DBN的Python实现

class DBN:
    def __init__(self, layer_sizes):
        self.rbms = [RBM(layer_sizes[i], layer_sizes[i+1]) for i in range(len(layer_sizes) - 1)]

    def pretrain(self, data, epochs=1000):
        input_data = data
        for rbm in self.rbms:
            rbm.train(input_data, epochs=epochs)
            input_data = rbm.sample_hidden(input_data)

    def fine_tune(self, data, labels, epochs=1000):
        # 细调阶段可以使用反向传播算法
        pass

# 创建一个DBN,包含3个RBM层
dbn = DBN([3, 4, 2])
data = np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])
dbn.pretrain(data, epochs=1000)

代码解释:

  • DBN: 初始化DBN时会创建多个RBM层。
  • pretrain: 使用贪婪的逐层预训练,每个RBM层分别学习前一层的表示。

总结

在这里插入图片描述

  • BM 是最原始的玻尔兹曼机,理论上强大但实际应用受限于其高计算复杂度
  • RBM 通过限制连接结构大大提高了效率,适合用于无监督学习任务,尤其是特征提取和预训练
  • DBN 通过堆叠多个RBM,构建了强大的深度学习架构,适合处理复杂的高维数据,并解决了深层神经网络中的梯度消失问题。

这些模型在深度学习的发展中起到了重要的奠基作用,尽管现在更为流行的技术(如深度卷积网络、生成对抗网络等)已经取代了它们,但它们在无监督学习领域的贡献仍然不可忽视。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值