自监督学习这个领域的发展也很快。在自监督学习中,监督过程,也就是根据标签判断损失的过程是存在的,然而区别在于不需要手工贴标签。
那是怎么做到的呢?
在回答该问题之前,先说说什么是特征的潜隐空间(latent space)。这个概念在机器学习中时有出现,但是并不容易被明确定义。
潜隐空间指的是从A到B的渐变空间。这个空间我们平时看不见,但是在机器学习过程中,又能够显示出来。比如,两个28px×28px的灰度图像,分别是5和9这两个数字,机器通过对像素点的灰度值进行从5到9的微调,并进行可视化,就可以显示出潜隐空间中的渐变,如下图所示。
潜隐空间—从5到9的渐变
把这种渐变应用于更复杂的图像,比如人脸图像,就会产生很多奇妙的效果,如下图所示。
从美女到俊男的渐变
之前在词嵌入中介绍过的词向量,也可以通过潜隐空间进行过渡。从狼到狗,从青蛙到蟾蜍,从《垂直极限》到《我和我的祖国》,机器学习有能力在特征向量的潜隐空间中进行探索,找到一些很有趣的“中间状态”。
下面说说自监督学习的典型应用—自编码器(autoencoders)。
咖哥说:“自编码器是神经网络处理图像、压缩图像,因此也叫自编码网络。为什么说自编码器是一种自监督学习呢?我们先看看自编码器做了什么。它是通过神经网络对原始图像先进行压缩,进入一个潜隐空间,然后用另一个神经网络进行解压的过程,如下图所示。”
自编码器的原理
小冰感到奇怪:“看起来这是用神经网络做一个压缩工具。但是这和自监督学习又有何关联?”
咖哥说:“关键在于后半部分。神经网络把原始图像X压缩进潜隐空间,在这个过程中,我们特意减小输出维度,因此潜隐空间中只剩下了比较小的图像,但是同时保留了图像X各个特征之精髓。然后另一个神经网络对其解压,得到X'。此时还没有体现出自监督学习过程。但是,马上,自监督学习过程即将发生!”
在下一个步骤中,自编码器会把X'和X进行对比,以确定损失的大小,这时原来的X就变成了X'的标签!也就是说,通过自己和自己的复制品进行比照,以判断神经网络的压缩和解压的效率。
■如果差异很大,就继续学习,调整参数。
■如果差异小到一个阈值范围之内,那么这个神经网络就训练好了。
然后,在实际应用中,自编码器的前半部分,也就是负责压缩的这部分网络可以用作一个图像压缩工具,它的任务就是“取其精华,去其糟粕”。
在实践中,上面说的这种原始的自编码器已经过时了,因为它不一定会得到特别好的潜隐空间,因而没对数据做多少压缩。
而变分自编码器(Variational Auto-Encoder,VAE)在自编码器的基础上进行了优化。
VAE把图像数据视为纯粹的统计数据,因此不是直接将输入图像压缩成潜隐空间,而是将图像的像素矩阵值转换为统计分布的参数值,即平均值和标准差。然后在解码时,VAE也通过平均值和标准差这两个参数来从分布中随机采样一个元素,并将这个元素解码到原始输入。
上述过程的随机性提高了自编码器的稳健性,使潜隐空间的任何位置都能够对应有意义的表示,即潜在空间采样的每个点都能解码为有效的输出。
这样,VAE就能够学习更连续的、高度结构化的潜隐空间,因此VAE目前是图像生成的强大工具之一。
在Keras中,通过对卷积层的堆叠就可以实现VAE网络。这里就不展示代码了,但是你们可以下载源码包,里面有VAE的一些案例。你们可以运行一下这些例子,看看VAE能够在原始图像的潜隐空间中找到什么样的新图像。