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

embedded/2024/10/18 16:53:46/

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

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


文章目录

  • 深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。
  • 1. 玻尔兹曼机(Boltzmann Machine, BM)
    • 1.1 提出与概述
    • 1.2 发展与应用
    • 1.3 优缺点
    • 1.4 BM的Python实现
  • 2. 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)
    • 2.1 提出与概述
    • 2.2 发展与应用
    • 2.3 优缺点
    • 2.4 RBM的Python实现
  • 3. 深度信念网络(Deep Belief Network, DBN)
    • 3.1 提出与概述
    • 3.2 发展与应用
    • 3.3 优缺点
    • 3.4 DBN的Python实现
  • 总结


参考地址: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 npclass BM:def __init__(self, n_visible, n_hidden):self.n_visible = n_visibleself.n_hidden = n_hiddenself.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_biasvisible_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 npclass RBM:def __init__(self, n_visible, n_hidden, learning_rate=0.1):self.n_visible = n_visibleself.n_hidden = n_hiddenself.learning_rate = learning_rateself.weights = np.random.randn(n_visible, n_hidden) * 0.01self.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_biashidden_probs = self.sigmoid(hidden_activations)return hidden_probsdef 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 = datafor 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,构建了强大的深度学习架构,适合处理复杂的高维数据,并解决了深层神经网络中的梯度消失问题。

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


http://www.ppmy.cn/embedded/120509.html

相关文章

使用API有效率地管理Dynadot域名,设置域名服务器(NS)

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

js设计模式(26)

js设计模式(26) JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表: 一、创建型模式 这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。 工厂模…

harproxy

安装依赖包 apt update && apt -y install gcc make libssl-dev libpcre3 libpcre3-dev zlib1g-dev libreadline-dev libsystemd-dev liblua5.3-dev 下载 [rootubuntu2204 ~]#wget http://www.haproxy.org/download/2.8/src/haproxy- 2.8.0.tar.gz 编译安装 [rootubun…

Stable Diffusion绘画 | SDXL模型使用注意事项

注意事项 SDXL模型的使用,对电脑配置要求更高,需要 8GB 以上显存的显卡SDXL模型兼容性不太好,容易出现错误,对 Mac 电脑不友好只能选择 SDXL模型 训练的 LoRA 使用不能使用旧的 VAE文件 SDXL 专用 VAE 文件:sdxl_vae.…

【java】前端RSA加密后端解密

目录 1. 说明2. 前端示例3. 后端示例3.1 pom依赖3.2 后端结构图3.3 DecryptHttpInputMessage3.4 ApiCryptoProperties3.5 TestController3.6 ApiCryptoUtil3.7 ApiDecryptParamResolver3.8 ApiDecryptRequestBodyAdvice3.9 ApiDecryptRsa3.10 ApiCryptoProperties3.11 KeyPair3…

【C语言指南】数据类型详解(下)——自定义类型

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C语言指南》 期待您的关注 目录 引言 1. 结构体(Struct) 2. 联合体(Union) 3…

CSS链接

链接是网站的重要组成部分,几乎在每个网页上都能看到不少的链接,合理的设计链接的样式能够给网页的颜值加分。链接有四种不同的状态,分别是 link、visited、active 和 hover,可以通过以下伪类选择器来为链接的四种状态设置不同的样…

MongoDB 入门及实践

MongoDB 入门 一、简介二、安装与配置1. 下载与安装2. 启动 MongoDB3. 使用 MongoDB Shell 三、基本概念1. 数据库2. 集合3. 文档4. 字段 四、基本操作1. 创建数据库2. 插入数据3. 查询数据4. 更新数据5. 删除数据 五、高级主题1. 索引2. 聚合框架3. 分布式部署4. 安全性 六、最…