机器学习 无监督反向传播的应用

机器学习 无监督反向传播的应用

机器学习中的人工智能分支使计算机能够从数据中学习并作出判断。在监督学习中,使用带有标签的数据集来训练模型,而在无监督学习中使用无标签的数据集。无监督反向传播使用神经网络在无标签的数据集中发现模式。本篇博文将概述无监督反向传播,并介绍实际的Python代码。

什么是无监督反向传播

反向传播是一种监督学习方法,通过修改神经网络的权重来减少预测结果与观察结果之间的差异。另一方面,无监督反向传播使用无标签的输入来训练网络,以发现隐藏的结构和模式。在这种方法中,输入数据通过自编码器神经网络压缩为称为潜在空间的较小表示,然后通过解码器网络使用潜在空间重新构建原始输入。无监督反向传播的目标是最小化输入数据与解码器网络输出之间的重构误差。

自编码器神经网络

在反向传播的无监督学习中,最流行的神经网络架构是自编码器。自编码器是由两个神经网络组成的神经网络,编码器网络将输入数据转换为较低维度的表示,解码器网络将这种较低维度的表示转换回原始输入空间。

生成对抗网络

GANs是一种机器学习模型,由一个用于生成的神经网络和一个用于区分的神经网络组成。鉴别器试图区分真实和虚假的数据,生成器试图产生逼真的合成数据。在无监督反向传播的背景下,GANs可以用来创建不带标签的新数据样本。然后神经网络可以从这些生成的样本中学习,以发现数据中隐藏的模式和结构。对于标签数据贫乏或不可用的问题,使用GANs的无监督学习策略可能是有用的。

使用Python进行无监督反向传播

首先,我们将使用两个数据点簇构建一个虚构的数据集。然后使用Keras构建一个具有两个稠密层的编码器网络和两个稠密层的解码器网络来构建自编码器神经网络。使用无监督反向传播在数据集上训练自编码器。使用散点图显示数据集的潜在空间表示。最后,使用散点图显示自编码器的重构输出,并将其与输入数据进行对比。结果表明自编码器已经学习到数据集的适当模型。

创建数据集

为了用于无监督反向传播研究,让我们创建一个特定的数据集。使用scikit-learn工具,将创建一个具有两个数据点簇的二维数据集。

from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=42)

使用上述代码创建了一个有两个属性的1000个数据点的数据集。数据集中两个聚类的中心分别为(-5, 0)和(5, 0)。

可视化数据集

让我们使用散点图来可视化数据集,以识别两个数据点的分组。

import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1])
plt.title('Dataset')
plt.show()

输出

机器学习 无监督反向传播的应用

散点图显示数据集包含两个数据点集群。

定义自动编码器模型

使用Keras软件包,让我们定义自动编码器神经网络。一个解码器网络和一个编码器网络组成了自动编码器。解码器网络由两个具有sigmoid激活函数的密集层组成,而编码器网络由两个具有ReLU激活函数的密集层组成。

from keras.layers import Input, Dense
from keras.models import Model

input_layer = Input(shape=(2,))
encoded = Dense(32, activation='relu')(input_layer)
encoded = Dense(16, activation='relu')(encoded)
decoded = Dense(32, activation='relu')(encoded)
decoded = Dense(2, activation='sigmoid')(decoded)
autoencoder = Model(inputs=input_layer, outputs=decoded)
autoencoder.compile(optimizer='adam', loss='mse')

为了与我们的数据集的维度相对应,我们在上述代码中构建了一个具有两个维度的输入层。接下来,我们定义了编码器网络,该网络包含两个具有ReLU激活函数的密集层。潜在空间表示是编码器网络的输出。考虑到是解码器网络的两个具有sigmoid激活函数的密集层。解码器网络产生与输入具有相同维度的重建输出。

训练自编码器模型

在定义好自编码器神经网络之后,让我们使用无监督的反向传播算法来训练它,以适应我们的数据集。该模型将使用fit()技术进行训练。

auto encoder.fit(X, X, epochs=50, batch_size=32)

我们使用上面的代码使用fit()技术来训练自动编码器模型。由于目标是重新创建输入数据,我们将原始数据作为输入数据和目标输出数据进行输入。我们还定义了批次大小和训练模型的时期数。

可视化潜在空间

一旦自动编码器训练完毕,我们可以使用编码器网络来检索我们数据集的潜在空间表示。之后,可以使用散点图来查看潜在空间。

encoder = Model(inputs=input_layer, outputs=encoded)
latent_space = encoder.predict(X)

plt.scatter(latent_space[:, 0], latent_space[:, 1])
plt.title('Latent Space')
plt.show()

在上面的代码中,我们引入了一个全新的模型,称为编码器(encoder)。编码器接收输入层作为输入,并从编码器网络的第二个稠密层输出潜在空间(latent space)表示。然后,我们使用编码器模型获得数据集的潜在空间表示。散点图用于描绘潜在空间。

机器学习 无监督反向传播的应用

散点图显示出我们的数据集的潜在空间表示清晰地区分了两组数据点,表明自编码器已经学习到了数据集的可用表示。

可视化重建输出

最后让我们使用输入数据运行自编码器,并将输出与原始输入数据进行比较,以观察输出是如何重建的。

reconstructed = autoencoder.predict(X)

fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].scatter(X[:, 0], X[:, 1])
axes[0].set_title('Original Data')
axes[1].scatter(reconstructed[:, 0], reconstructed[:, 1])
axes[1].set_title('Reconstructed Data')
plt.show()

在上面的代码中,输入数据通过自动编码器进行处理,生成重构的输出,然后与原始数据一起使用散点图进行可视化。
机器学习 无监督反向传播的应用

散点图表明自动编码器的重建输出与原始输入数据非常接近,表明它已经学到了数据集的可靠表示。

结论

最后,无监督反向传播是一种有效的神经网络方法,用于无监督学习。在不利用标记的训练数据的情况下,它让神经网络学习如何表示输入数据。聚类、异常检测和降维是可以用这种方法处理的几个无监督学习问题。由于它们可以在不需要标记的训练数据的情况下获取可用的高维数据表示,自动编码器是一种常见的用于无监督学习的神经网络形式。机器学习从业者可以将无监督反向传播和自动编码器应用于自己的数据集,并通过掌握这些方法从数据中获取独到的知识。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程