【深度学习基础模型】玻尔兹曼机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,构建了强大的深度学习架构,适合处理复杂的高维数据,并解决了深层神经网络中的梯度消失问题。
这些模型在深度学习的发展中起到了重要的奠基作用,尽管现在更为流行的技术(如深度卷积网络、生成对抗网络等)已经取代了它们,但它们在无监督学习领域的贡献仍然不可忽视。