码迷,mamicode.com
首页 > 其他好文 > 详细

UFLDL深度学习教程翻译之自我学习

时间:2016-08-18 23:31:11      阅读:433      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

       假设我们有足够强大的学习算法,得到较好结果的其中一种最靠谱的方法是给算法提供更多的数据。这验证了在机器学习的那句格言:“有时候获胜的不是谁有最好的算法,而是谁有最多的数据。”

       也许有人总能得到有标记的数据,但这么做成本很高。特别地,研究人员已经采用极致的工具例如AMT(亚马逊土耳其机器人)来得到大量训练集。尽管拥有大量的人们人工标记的数据相比拥有大量的研究人员的工程性质的特征已经迈进了一步,但还能做的更好。特别地,自我学习以及无监督特征学习的方法是说,如果我们让我们的算法从无标记的数据学习,那么我们就可以容易地从大量的数据中获得和学习特征。即使一个无标记样本给出的信息量比一个有标记样本少,如果我们能得到成吨的前者——例如,通过从网上下载到随机的无标记的图片/音频/文档——还有如果我们的算法可以有效地挖掘无标记数据(的特征),那么我们可以比大量工程手段的和手工标记的方法得到更好的结果。

       在自我学习和无监督特征学习中,我们会给算法提供大量的无标记数据,用它们来学习输入的好的特征表示。如果我们想完成一项特定的分类任务,那么我们将采用这个特征表示以及任何(也许少量)我们为该分类任务准备的标记数据,并在这些数据上采用监督学习方法解决分类问题。

       这个思想在以下问题可能有最强大的作用:我们有大量的无标记数据,以及少量的有标记数据。然而,它们通常给出好结果,即使我们只有标记数据(这种情况下我们通常用有标记数据执行特征学习,但忽略标记)。

二、学习特征

       我们已经知道自动编码器如何用于从无标记数据中学习特征。具体而言,假如我们有一个无标记的训练集{xu(1),xu(2),….xu(mu)},有mu个无标记样本。(下标u代表无标记。)然后我们在这些数据上训练稀疏自动编码器(也许有适当的白化或其它预处理过程):

技术分享

       训练了模型参数 W(1),b(1),W(2),b(2)后,对任何新输入x,我们可以计算隐藏层激活值a的相应向量。正如我们之前看到的,这通常比原始的输入x得到更好的输入的表示。我们也可以通过计算特征/激活值a来可视化这个算法,正如下面的神经网络:

技术分享

       这正是我们之前说的稀疏自编码器,我们去掉了最后一层。

       现在我们假设有一个有标记的训练集技术分享  ,有ml个样本。(下标l代表有标记。)我们现在可以寻找输入的更好的表示方法。特别来讲,不是用xl(1)表示第一个训练样本,而是将xl(1)作为我们自动编码器的输入,并得到激活值al(1)的相应向量。为了表示这个样本,我们可以用al(1)代替原来的特征向量。或者,我们可以将两个特征向量连接在一起,得到表示(xl(1),al(1))。

       这样,我们的训练集变成了技术分享 (如果我们使用替代的表示方法,用al(i)表示第i个训练样本),或者技术分享 (如果我们使用连接的表示方法)。在实践中,连接的表示方法通常运行地更好,但考虑到内存和计算的表示,我们也有时候使用替代的表示方法。

       最后,我们可以训练有监督的学习算法例如SVM、逻辑斯特回归等等,来得到预测y值的函数。给出测试样本xtest,我们可以执行相同的过程:把它输入自动编码器得到atest。然后,将atest或者(xtest,atest)输入训练好的分类器得到预测值。

三、预处理数据的时候

       在我们学习无标签数据{xu(1),xu(2),….xu(mu)}的特征学习阶段,我们可能已经计算不同的预处理参数。例如,我们会计算数据的平均值并减去这个平均值执行平均值标准化,或者使用PCA计算矩阵U用UTx表示数据(或者使用PCA白化或ZCA白化)。如果是这种情况,那么将这些预处理参数保存起来非常重要,以便在有标记的训练集和测试集上使用相同的参数,来确保我们总是以同样的方式变换数据(指预处理)并输入自动编码器。特别地,如果我们使用无标记数据和PCA计算了一个矩阵U,那么我将保持相同的矩阵U去预处理有标记的样本和测试数据。我们不应该在使用有标记数据的时候重新估计一个不同的矩阵U(或者平均值标准化的平均值),因为这会引起截然不同的预处理变换,使得自动编码器的输入分布与实际训练的时候非常不同。

四、无监督特征学习的术语

       有两种常见的无监督特征学习设定,取决于你有什么类型的无标记数据。更一般和强大的设定是自我学习设定,它并不认为你的无标记数据xu必须和你的有标记数据xl是一样的分布。更限制性的设定是无标记数据必须和有标记数据来自同一个分布,有时候称为半监督学习设定。这个区别最好能通过一个例子解释,就是接下来我们介绍的。

       假设你的目标是一个计算机视觉任务,你想要将小车和摩托车的图像区分开来;那么,你训练集中的每个有标记样本是小车或者摩托车的图像。我们从哪可以得到大量无标记的数据呢?最简单的方法是得到一些随机的图片集,也许从因特网下载。然后我们可以在这个大的图片集中训练自动编码器,并得到有用的特征。由于这里无标记数据与有标记数据是来自不同的分布,(即,可能有些图像包含小车和摩托车,但不是每一张下载的图像都是小车或摩托车),我们称之为自我学习。

       相反,如果我们碰巧有大量的无标记图像,而且不是小车就是摩托车,不过数据都没有标记的时候(所以你不知道哪些是小车哪些是摩托车),那么我们可以用这些形式的数据学习特征。这个设定——每个无标记样本和每个有标记样本来自同种分布——有时候称为半监督设定。特别地,我们经常没有这些无标记数据(你在哪可以得到不是小车就是摩托车,只是没有标记的图像的数据库呢?),因此从无标记数据中学习特征的内容中,自我学习的设定更广泛应用。

UFLDL深度学习教程翻译之自我学习

标签:

原文地址:http://blog.csdn.net/hunterlew/article/details/52245005

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!