如果我们不须要标记数据来演习我们的模型,那将会是一个很酷的事情。我的意思是标记和分类数据会花费我们很多的韶光,然而,事实是大多数从支持向量机到卷积神经网络的现有模型没有它们就无法进行演习。
无监督学习通过自己的无标签数据推断出一个函数。最著名的无监督算法是K-Means,它已被广泛用于将数据聚类成组,而主成身分剖析(PCA)是降维的一个主要办理方案。 K-Means和PCA可能是有史以来最好的两种机器学习算法。让他们变得更好的缘故原由是他们的大略性,当你节制了它们时,你就会感叹:“我为什么不早点想到它?”
接下来我们想到的下一个问题可能是:“是否存在无监督的神经网络?”。
为了更好地理解自动编码器,我将供应一些代码和解释。在本文中,我们将利用Pytorch来构建和演习我们的模型。
自动编码器是大略的神经网络,它们的输出便是输入,便是这么大略。他们的目标是学习如何重修输入数据。但它有什么用呢?关键是他们的构造。网络的第一部分便是我们所说的编码器,它吸收输入并将其编码在较低维度的潜在空间中。第二部分(解码器)采取该向量并对其进行解码以天生原始输入。
中间的潜在向量是我们想要的,由于它是输入的压缩表示,运用程序非常丰富,例如:
压缩降维此外,很明显,我们可以运用它们来重现相同但有点不同乃至更好的数据。例子是:
数据去噪:给他们输入存在噪声的图像,并演习它们,会输出相同的图像但没有噪声。演习数据增加非常检测:在单个类上演习它们,以便每个非常都会产生很大的重构缺点。然而,自动编码器面临与大多数神经网络相同的几个问题。他们每每方向于过度拟合,还遭受消逝的梯度问题。那么有办理方案吗?这里为您推举一个变分自动编码器。它实质上增加了随机性,但不完备准确。
让我们进一步阐明一下,变分自动编码器经由演习,可以学习仿照输入数据的概率分布,而不是映射输入和输出的函数。然后,它从该分布中采样点并将它们馈送到解码器,以天生新的输入数据样本。但是等一下,当我听说概率分布时,只有一件事物浮现在脑海中:贝叶斯。是的,贝叶斯规则再次成为紧张原则。顺便说一下,我并不是浮夸其词,但贝叶斯公式可能是有史以来最好的方程式。而且我不是在开玩笑,它无处不在。
回到变分自动编码器。我认为以下图片足够使你清楚的理解它:
在我们构建一个天生新图像的示例之前,我们须要谈论更多的细节。
VAE的一个关键方面是丢失函数。最常见的是,它由两部分组成,重构丢失衡量的是重修数据与原始数据的差异(例如二进制交叉熵)。KL-divergence方法考试测验着将这个过程规范化,并且使得重构数据尽可能的多样化。
另一个主要方面是如何演习模型。困难在于变量是确定性的,但随机和梯度低落常日不起浸染。为办理这个问题,我们利用重新参数化。潜在向量(z)将即是我们的分布的学习均匀值(μ)加长进修的标准偏差(σ)乘以epsilon(ε),个中ε遵照正态分布。我们重新参数化样本,使随机性与参数无关。
在示例中,我们将考试测验利用变量自动编码器天生新图像。同时利用MNIST数据集,重修的图像将是手写的数字。正如我已经见告过你的那样,利用Pytorch作为框架,只是由于熟习,除此之外,没有特殊的缘故原由。首先,我们该当定义我们的图层。
正如您所看到的,我们将利用一个非常大略的网络,只有Dense(在pytorch的情形下为Linear)层。下一步是构建运行编码器和解码器的功能。
它只是几行python代码。末了,我们演习模型并查看天生的图像。
提醒:与Tensorflow比较,Pytorch有一个动态图表,这意味着代码在运行中运行。 没有必要创建图形然后编译实行它,Tensorflow最近引入了上面的功能和它的即时实行模式。
演习完成后,我们实行测试功能以检讨模型的事情情形。事实上,它做得非常好,布局的图像与原始图像险些相同,我相信没有人能够在不知道全体故事的情形下将它们区分开来。
下图显示了第一行中的原始照片和第二行中天生的照片。
相称不错,不是吗?
在我们结束这篇文章之前,我想再先容一个主题。如我们所见,变分自动编码器能够天生新图像。这是天生模型的经典行为。天生模型意味着正在天生新数据。另一方面,判别模型是对类或种别中的现有数据进行分类或区分。
用一些数学术语来阐明:天生模型学习联合概率分布p(x,y),而判别模型学习条件概率分布p(y | x)。
在我看来,天生模型更有趣,由于它们为从数据增加到仿照未来可能状态的浩瀚可能性打开了大门。但更多关于下一篇文章的内容,可能是关于一种称为天生对抗网络的相对较新的天生模型的帖子。
在那之前,连续学习AI。