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

news2024/11/28 3:50:15

【深度学习基础模型】玻尔兹曼机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 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,构建了强大的深度学习架构,适合处理复杂的高维数据,并解决了深层神经网络中的梯度消失问题。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

65 切面AOP

65 切面AOP 切面基础概念 AOP:Aspect Oriented Programming,面向切面编程。是通过预编译方式(aspectj)或者运行期动态代理(Spring)实现程序功能的统一维护的技术。 面试问题: Spring的两大核心…

上市公司企业平台生态嵌入数据(2001-2023年)

一、资料名称:2023-2001年上市公司企业平台生态嵌入数据 二、测算方式:参考C刊《管理学刊》陈南旭(2024)老师的做法,从上市公司年报中爬取“平台生态嵌入”的有关词频来衡量其嵌入程度具有可行性与科学性。 为更好地…

dfs +剪枝sudoku———poj2676

目录 前言 lowbit函数 数独 suduku 问题描述 输入 输出 问题分析 子网格位置 优化搜索顺序剪枝1 优化搜索顺序剪枝2 可行性剪枝 代码 前言 lowbit函数 这是一个利用二进制位运算取出二进制数最后一位’1‘的函数 数独 数独大家肯定都玩过,…

26届日常实习 momenta一面(牛客)

26届日常实习 momenta一面 八股问答sql 40min java的集合:list map set底层数据结构,特性,线程安全 get post区别 mysql跟redis以外你还知道哪些数据库:回答了大二参加大数据竞赛用的hive hbase 你觉得hbase链式存储的优势是什么…

与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)

与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布, 且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新…

离散数学概述

离散数学概述 离散数学(Discrete Mathematics)是计算机科学、信息科学、数学等领域的基础学科之一。与连续数学(如微积分)不同,离散数学主要研究离散对象,如整数、图、逻辑公式等。在大学的课程中&#xf…

大学的离散数学:探索数学的逻辑之美

大学的离散数学:探索数学的逻辑之美 离散数学,作为数学的一个分支,它研究的是离散而非连续的对象。在大学课程中,离散数学是计算机科学、信息科学、电子工程等专业的重要基础课程。它不仅为学生提供了必要的数学工具,…

qt打包程序后运行提示缺少dll文件(使用官方打包程序)

qt打包程序后运行提示缺少dll文件(使用官方打包程序) 当使用Qt完成程序打包后,把程序生成的文件全部复制到另外的一台没有Qt开发环境的电脑上,双击运行.exe可执行程序,提示缺少一系列的.dll程序。 提示找不到 libstdc-6.dll libwinpthread-1…

算法.图论-bfs及其拓展

文章目录 广度优先搜索简介经典bfs习题地图分析贴纸拼词 01bfs解析基本过程相关习题 广度优先搜索简介 bfs的特点是逐层扩散, 从源头到目标点扩散了几层, 最短路就是多少 bfs的使用特征是任意两个节点的距离(权值)是相同的(无向图, 矩阵天然满足这一特点) bfs开始的时候可以是…

高性能缓存方案 —— Caffeine

一、简介 Caffeine是一个高性能的Java缓存库,它提供了本地缓存的功能。 Caffeine和Redis都是内存级别的缓存,为什么要使用在这两缓存作为二级缓存,它们两有什么区别呢? 虽然它们都是内存级别的缓存,但是Redis是需要单独部署的&…

DAY42WEB 攻防-PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作

一、PHP-MYSQL-SQL注入-常规查询 1.PHP-MYSQL-Web组成架构 MySQL(统一管理) ​ root(自带默认) ​ 网站A testA ​ 网站B testB MySQL(一对一管理) ​ testA用户 ​ 网站A testA ​ testB用户 ​ 网站B testB access无数据库用户 mysql里面有内置的管理…

使用 Stata 调用本地部署的大语言模型进行文本主要内容提取——历年政府工作报告中的经济增长目标提取

因此今天给大家分享一个新的方法。也就是通过部署在本地的大模型进行文本内容提取。 安装 Ollama 通过 Ollama 可以快速在本地部署一些常用的大模型。可以根据自己的系统从这里安装下载:https://github.com/ollama/ollama MacOS 下载 Ollama 链接: https://ollama…

计算机的错误计算(一百一十八)

摘要 探讨一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然&#xff0c;每个 均为 0.5 . 不妨在Visual Studio 2010 下用下列C语言代码计算&#xff1a; #include <stdio.h> #include <math.h>int main() {do…

Mac上功能全面,免费好用的解压缩工具

在日常使用Mac的过程中&#xff0c;相信不少朋友都有解压缩需求&#xff0c;目前存在的解压缩软件可以说各种各样&#xff0c;但是有的收费&#xff0c;有的解压速度慢&#xff0c;有的解压类型不全&#xff0c;各有优缺点&#xff0c;挑选起来眼花缭乱&#xff0c;挑来挑去也没…

西安凭借入驻企业展示科技“硬”实力的数字媒体产业园

在古城西安的怀抱中&#xff0c;一座以科技“硬”实力为核心竞争力的数字媒体产业园——西安国际数字影像产业园&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着全球的目光。这里&#xff0c;不仅是数字创意的孵化场&#xff0c;更是科技创新的策源地。 西安国际数…

STM32 HAL库

1. 相关概念 1.1. 回调函数 Callback()回调函数与普通函数的本质区别在于调用者不同&#xff1a;普通函数由用户代码调用&#xff0c;而回调函数则是由系统在适当的条件下调用。回调函数用于对各种事件的响应和处理&#xff0c;如当指定的EXTI线上发生中断或事件时&#xff0…

windows基于MediaPipe 和 TensorFlow.js的3D手势检测

目录 流程总结 第一步&#xff1a;安装 Node.js 和 Yarn 1.安装 Node.js&#xff1a; 1.1 如果安装了其他版本不合适&#xff0c;可以安装调整nvm-setup.exe来调整 2.安装 Yarn&#xff1a; 第二步&#xff1a;克隆项目仓库 第三步&#xff1a;替换共享文件 1.删除旧的…

Java基本数据类型和String类型的转换

1.基本介绍 在程序开发中&#xff0c;我们经常需要将基本数据类型转换成String类型。或者将String类型转为基本数据类型。 2.基本类型转String类型 语法&#xff1a;将 基本数据类型的值 “” 即可 3.String类型转基本数据类型 语法&#xff1a;通过基本类型的包装类调用…

Web3与传统互联网的比较:机遇与挑战

随着科技的不断进步&#xff0c;Web3作为新一代互联网的概念逐渐浮出水面&#xff0c;改变了我们对网络的认知。相较于传统互联网&#xff0c;Web3在许多方面展现出不同的特征与潜力。本文将对Web3与传统互联网进行比较&#xff0c;探讨其带来的机遇与挑战。 一、核心概念的差异…

MySQL启动失败解决方案

目录 引言 一、查看/启动mysql服务的两种方式 方法一&#xff1a; 方法二&#xff1a; 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…