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