深度学习的关键:无监督深度学习简介(附Python代码)

2018 年 7 月 17 日 AI前线
作者 | Faizan Shaikh
译者 | 马卓奇
编辑 | Vincent
AI 前线导读:在这篇文章中,我们用一个直观的案例研究概述了无监督深度学习的概念。并且详解了在 MNIST 数据集上进行无监督学习的代码,包括 K-Means、自编码器以及 DEC 算法。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)
介绍

作为数据科学家,我们平时的工作是使用各种机器学习算法从数据中提取可操作的信息。其中大多数是有监督学习问题,因为你已经知道目标函数是什么。给出的数据有很多细节能帮助你实现最终目标。

虽然无监督学习是一项十分复杂的挑战,但是它有许多优点。它有潜力解决以前无法解决的问题,在机器学习和深度学习领域得到了大量的注意力。

这篇文章的目的是直观地介绍一下无监督学习,以及它在现实生活中的应用。

注意——阅读这篇文章需要读者具有一定深度学习基础,并且了解机器学习的概念。如果还没有掌握基础知识,可以阅读以下参考文献:

  • 数据课程实验:https://trainings.analyticsvidhya.com/courses/course-v1:AnalyticsVidhya+EWD01+2018_EWD_T1/about

  • 深度学习基础——以人工神经网络为起点:https://www.analyticsvidhya.com/blog/2016/03/introduction-deep-learning-fundamentals-neural-networks/

下面就让我们进入正题吧!

为什么要用无监督学习?

机器学习项目中的典型方法是以有监督的方式设计的。我们告诉算法该做什么和不该做什么。这是一个解决问题的通用结构,但是它从两个方面限制了算法的潜力:

  • 算法受到监督信息的偏见的约束。没错,算法是自己学会的如何完成这项任务。但是,算法在解决问题时无法去考虑其他可能出现的情况。

  • 由于学习在监督下进行,为算法创建标签需要花费巨大的人力。手动创建的标签越少,算法可以用于训练的数据就越少。

为了以一种智能的方式来解决这一问题,我们可以采用非监督学习算法。非监督学习直接从数据本身得到数据的性质,然后总结数据或对数据分组,让我们可以使用这些性质来进行数据驱动的决策。

让我们用一个例子来更好地理解这个概念。比如说,银行想要对客户进行分组,以便他们能向客户推荐合适的产品。他们可以通过数据驱动的方式来完成这件事——首先通过客户的年龄对客户进行细分,然后从这些分组中得到客户的特性。这将有助于银行向客户提供更好的产品推荐,从而提高客户满意度。

无监督深度学习范例研究

在这篇文章中,我们将介绍一个基于非结构化数据的无监督学习的范例研究。深度学习技术通常在处理非结构化数据时能力最强。因此,我们以深度学习在图像处理领域的应用为例,来理解这个概念。

定义问题——如何整理照片库

现在,我的手机里有 2000 张照片。如果我是一个自拍狂,照片的数量很可能是这个数字的 10 倍。挑选这些照片是一场噩梦,因为基本上每三张照片中就有一张对我来说是无用的。我相信大多数人都有同样的问题。

理想情况下,我想要的是一个能够整理照片的应用程序,可以让我随时浏览大部分照片。这样我也可以知道我目前有多少类照片。

为了更清楚地了解这个问题,我尝试自己对照片进行分类。以下是我总结的情况:

  • 首先,我发现我的照片库中有三分之一都是 网络趣图(感谢 WhatsApp 的可爱的朋友们)。

  • 我个人也会收集一些在 Reddit 上看到的有趣的回答或分享。

  • 至少有 200 张照片,是我在著名的 DataHack Summit 会议上,和随后去喀拉拉的旅行中拍摄的,也有一些是同事分享给我的。

  • 也有一些照片记录了会议期间的白板讨论内容。

  • 还有一些截图记录了代码错误,需要内部团队讨论。使用后必须清除它们。

  • 我还发现了一些“个人隐私”图像,如自拍、合影和几个特殊场景。它们数量不多,但它们是我珍贵的财产。

  • 最后,有无数张“早上好”、“生日快乐”和“幸福的排灯节”的海报,我想方设法把它们从照片库中删除。但是不管我怎么删除它们,它们还是会出现!

在下面的章节中,我们将讨论一些我想出的解决这个问题的方法。

方法一:基于时间分类

最简单的方法是按照时间来整理照片。每一天都可以有不同的文件夹。大多数照片浏览应用程序均使用这种方法(如谷歌照片应用程序)。

这样做的好处是,当天发生的所有事件都会被存储在一起。这种方法的缺点是它太普通了。每一天,我都可能拍摄郊游的照片,同时把有意思的回答截图下来,等等。它们会混在一起,这完全没有达到我的目的。

方法二:基于位置分类

一个相对较好的方法是根据拍摄地点整理照片。例如,每次照相,我们都可以记录照片拍摄的地方。然后,我们可以根据这些位置——无论是国家、城市还是地区,按照我们想要的区域粒度来制作文件夹。这种方法也被许多照片应用程序所使用。

这种方法的缺点在于它的想法过于简单。我们如何定义一张搞笑图片,或者一张卡通图的位置?而它们在我的照片库中占有相当大的份额。所以这种方法也不够巧妙。

方法三:提取照片的语义信息,并用它来定义我的照片库

到目前为止,我们所看到的方法大多依赖于和照片同时获得的元数据。整理照片的一种更好的方法是从图像本身中提取语义信息并智能地使用这些信息。

让我们把这个想法分成几个部分。假设我们有多样性类似(如上所述)的照片。我们的算法应该捕捉哪些趋势?

1、拍摄的是 自然场景 图像还是 人工生成 的图像?

2、照片里有 文字材料 吗?如果有的话,我们能识别出它是什么吗?

3、照片中有什么 不同的物体?它们的结合能确定照片的美感吗?

4、照片里 有人吗?我们能认出他们吗?

5、网络上有 相似的图像 可以帮助我们识别图像的内容吗?

因此,我们的算法应该能理想地捕捉这个信息,而不需要明显的标记,并用它来整理、分类我们的照片。理想情况下,最终的应用程序界面应该是这样的:

这种方法就是以“无监督的方式”来解决问题。我们没有直接定义我们想要的结果。相反,我们训练一个算法为我们找到这些结果。我们的算法以智能的方式对数据进行了总结,然后在这些推论的基础上尝试解决这个问题。很酷,对吧?

现在你可能想知道,我们该如何利用深度学习来处理无监督的学习问题?

正如我们在上面的案例研究中看到的,通过从图像中提取语义信息,我们可以更好地了解图像的相似性。因此,我们的问题可以表述为:我们该如何降低图像的维度,使我们可以从这些编码表示重建图像。

我们可以利用一个深度学习网络结构——自编码器

自动编码器的思想是,训练它从学习到的特征来重构输入。亮点在于,它用一个很小的特征表示来重构输入。

例如,一个设置编码维度为 10 的自动编码器,在猫的图像上训练,每一张图像大小为 100×100。所以输入维数是 10000,而自动编码器需要用一个大小为 10 的矢量表示输入所有信息(如下图所示)。

一个自动编码器从逻辑上可以分为两个部分:编码器和解码器。编码器的任务是将输入转化成一个低维表示,而解码器的任务是从低维表示重构输入。

这是对自编码器的高度概括,下一篇文章中我们将仔细解读自编码器的算法。

虽然这一领域的研究正在蓬勃发展,但目前最先进的方法也无法轻松解决工业层面的问题,我们的算法想真正“投入工业使用”还需几年时间。

在 MNIST 数据集上进行无监督深度学习的代码详解

现在我们已经基本了解了如何使用深度学习解决无监督学习问题,下面我们要把学到的知识运用在现实生活的问题中。这里,我们以 MNIST 数据集为例,MNIST 数据集一直是深度学习测试的必选数据集。在解读代码之前,让我们先了解一下问题的定义。

原始问题是确定图像中的数字。数据库会给出图像所含数字的标签。在我们的案例研究中,我们将尝试找出数据库中相似的图片,并将它们聚成一类。我们将通过标签来评估每个类别的纯度。你可以在 AV 的 DataHack 平台下载数据——“识别数字”实践问题。

我们会测试三种无监督学习技术,然后评价它们的表现:

  1. 直接对图像进行 KMeans 聚类

  2. KMeans + 自编码器

  3. 深度嵌入式聚类算法

在开始实验之前,确保你已经在系统中安装了 Keras。(可参考官方安装指南。)我们将用 TensorFlow 作为后台,所以你要确保配置文件中有这一项。如果没有,按照这里给出的步骤进行操作。

我们需要用到 Xifeng Guo 实现的 DEC 算法开源代码。在命令行输入如下命令:

你可以打开一个 Jupyter Notebook,跟着下面的代码一起操作。

首先我们需要导入所有必需的模块。

下面我们将种子的值设为一个受限随机数。

现在设置数据的工作路径,方便后续访问。

读入训练和测试文件。

在这个数据库中,每个图片都有类标,这在非监督学习中并不常见,这里,我们用这些类标来评估无监督学习模型的表现。

现在让我们把数据显示成一张图片:

随后我们读入所有图片,将它们存储成一个 numpy 矩阵,创建训练和测试文件。

我们将训练数据分成训练集和测试集。

K-Means

我们首先直接对图像使用 K-Means 聚类,将其聚成 10 类。

现在我们已经训练了模型,下面看一下它在验证集上的表现如何。

我们将使用归一化互信息(NMI)分数来评估我们的模型。

互信息是聚类结果和人工分类之间依赖程度的对称性度量。它基于聚类纯度 PI 的概念,通过将 Ci 与 M 中的所有手动分类进行比较,衡量单个聚类 Ci 的质量,即 Ci 与 Mj 中相同目标的最大数量。因为 NMI 是归一化的,所以我们可以使用它来比较聚类个数不同的聚类结果。

NMI 公式如下:

K-Means + AutoEncoder

现在,我们不直接使用 K-Means,我们首先用自编码器降低数据维度,提取有用信息,再将这些信息传递给 K-Means 算法。

现在训练自编码器模型:

从结果可以看到,将自编码器与 K-Means 结合起来,算法效果比仅使用 K-Means 的效果要好。

DEC

最后,我们看一下 DEC 算法的实现。DEC 算法将聚类和自编码器放在一起训练以取得更好的效果。(论文:Junyuan Xie, Ross Girshick, and Ali Farhadi. Unsupervised deep embedding for clustering analysis. ICML 2016.)

DEC 算法与上述两种方法相比,效果最好。研究人员发现,进一步训练 DEC 模型可以达到更高的性能(NMI 高达 87)。

查看英文原文:

https://www.analyticsvidhya.com/blog/2018/05/essentials-of-deep-learning-trudging-into-unsupervised-deep-learning/

如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!

登录查看更多
7

相关内容

专知会员服务
53+阅读 · 2020年7月4日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【干货书】高级应用深度学习,294页pdf
专知会员服务
148+阅读 · 2020年6月20日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
基于深度学习的表面缺陷检测方法综述
专知会员服务
92+阅读 · 2020年5月31日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
126+阅读 · 2020年3月15日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
深度学习的图像修复
AI研习社
21+阅读 · 2019年3月28日
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
深度学习基础之LSTM
全球人工智能
26+阅读 · 2017年12月18日
资源 | 一文读懂深度学习(附学习资源)
AI100
14+阅读 · 2017年11月30日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
干货|7步掌握基于Keras的深度学习!
全球人工智能
4+阅读 · 2017年11月14日
Continual Unsupervised Representation Learning
Arxiv
7+阅读 · 2019年10月31日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Image Captioning based on Deep Reinforcement Learning
Arxiv
15+阅读 · 2018年6月23日
Arxiv
7+阅读 · 2018年5月23日
VIP会员
相关VIP内容
专知会员服务
53+阅读 · 2020年7月4日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【干货书】高级应用深度学习,294页pdf
专知会员服务
148+阅读 · 2020年6月20日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
基于深度学习的表面缺陷检测方法综述
专知会员服务
92+阅读 · 2020年5月31日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
126+阅读 · 2020年3月15日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
相关资讯
深度学习的图像修复
AI研习社
21+阅读 · 2019年3月28日
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
深度学习基础之LSTM
全球人工智能
26+阅读 · 2017年12月18日
资源 | 一文读懂深度学习(附学习资源)
AI100
14+阅读 · 2017年11月30日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
干货|7步掌握基于Keras的深度学习!
全球人工智能
4+阅读 · 2017年11月14日
Top
微信扫码咨询专知VIP会员