【学习日记】《深入浅出:图神经网络》:第四天---表示学习

表示学习

表示,通俗的理解就是特征。
表示学习是指可以自动的从数据中去学习“有用”的特征,并可以直接用于后续的具体任务的方法。

1. 表示学习

1.1 表示学习的意义

机器学习算法的性能严重依赖于特征,因此在传统机器学习中,大部分的工作都在于数据的处理和转换上,以期得到好的特征使得机器学习算法更有效。
这样的特征工程是十分费力的,因为这种方法没有能力从数据中去获得有用的知识,而特征工程的目的则是将人的先验知识转化为可以被机器学习算法识别的特征以弥补其自身的缺点。
表示学习的价值就在于自动的从数据中得到有判别性的特征,从而减少机器学习算法对特征工程的依赖,进而更快更好的将机器学习应用到更多的领域。
一个好的表示需要尽可能的描述一些高层次的抽象特征,以便后续的模型可以高效的利用这个特征,减少后续模型的压力,否则,以原始数据或者偏低层次的特征作为后续模型的输入,对后续模型来说运行起来就会非常困难。

1.2 离散表示和分布式表示

在机器学习中,对一个对象的表示有两种常见的方式。
最简单且不需要学习的方式是独热向量编码(one-hot),它将研究的对象表示为向量,这个向量只在某个维度上值是1,其余全是0,即:有多少种类型,这个向量的长度就有多长。
举个例子,假设我们有N个汉字,那么想要表示这N个汉字,就需要NxN大小的矩阵才能覆盖。在NLP中,词袋模型就是以此为基础构建的。
而分布式表示则不同,它是通过某种方式得到一个低维稠密的向量来表示研究对象的,最经典的例子就是颜色。比如使用RGB方式表示粉色和浅粉色分别是(255,182,193)和(255,192,203)。而如果用one-hot来表示颜色,对于256级的RGB来说,总共有约1678万中色彩(256256256=16777216),那么one-hot就需要16777216维,其中只有某个位置上的值为1,数据是非常高维且稀疏的。
使用分布式表示一方面可以解决数据稀疏问题,另一方面,它能保留一些语义信息(在one-hot中,所有对象的向量两两正交,那么它们两两之间的相似度为0),比如粉色和浅粉色之间的余弦相似度为99.97%,而与黑色【RGB为(0,0,0)】的相似度为0,这与我们的认知是一致的,也就是说分布式表示可以包含语意的特征,这也是分布式表示在很多领域都有应用的原因。

1.3 端到端学习是一种强大的表示学习方法

深度学习的模型不同于传统的机器学习模型,比如对于图像分类任务来说,传统的机器学习需要人工提取一些描述性的特征,比如SIFT特征,然后使用分类器进行图像类别的判断,模型性能的好坏很大程度上取决于所提取的特征的好坏。
而卷积神经网络可以解决这个问题,他以原始图像作为输入,而不是特征工程得到的特征,输出直接是预测的类别,这种学习方式称为端到端学习(end-to-end learning)。
深度学习模型的另一个优势是能够学习到数据的层次化表达,这也是一个好的表示需要具备的性质。**(比如不同深度的层提取到不同层次的特征,低层的卷积主要提取低层次的特征,高层的卷积主要提取抽象的、与任务相关的特征)**层与层之间不断堆叠,每一层都是可训练的。低层次的特征更加通用,而高层次的特征则与具体的任务相关,迁移学习正式基于这点来实现的。
····························································分割线····························································

表示学习的任务通常是学习这样一个映射:
在这里插入图片描述
即:将输入映射到一个稠密的低维向量空间中。

····························································分割线····························································

2. 基于重构损失的方法—自编码器

深度学习的优势在于自动学习特征,卷积神经网络利用图像标签进行监督,可以学习到有判别性的特征以对图像进行分类,他将表示学习与任务学习结合起来,是一种有监督学习
自编码器也是一种表示学习模型,但它不是利用标签信息进行监督,而是以输入数据为参考,是一种无监督的学习模型,可以用于数据降维特征提取

2.1 自编码器

自编码器是基于深度学习模型进行表示学习的典型方法,它的思路非常简单,就是将输入映射到某个特征空间,再从这个特征空间映射回输入空间进行重构
它由编码器和解码器组成,编码器用于从输入数据提取特征,解码器用于基于提取特征重构输入数据。在训练完成后,使用编码器进行特征提取。
这种编码-解码的思想在很多深度学习模型中都有体现。
最简单的自编码器由3层组成:1个输入层,1个隐藏层,1个输出层,其中从输入层到隐藏层的输出部分称为编码器,从隐藏层输出到输出层的部分称为解码器。
给定x∈R^ n,假设从输入层到隐藏层的变换矩阵为W_enc∈R^(dxn),d为隐藏层的神经元数目,编码后的特征为h∈R ^d。
解码器将编码特征h映射回输入空间,得到重构的输入x ̃,假设从隐藏层到输出层的编码矩阵为W_enc∈R^(nxd),则有:
在这里插入图片描述
自编码器不需要额外的标签信息进行监督学习,它是通过不断最小化输入和输出之间的重构误差进行训练的,基于损失函数。通过反向传播计算梯度,利用梯度下降算法不断优化参数W_enc、W_dec、b_enc、b_dec,损失函数如下:

在这里插入图片描述
自编码器的结构不局限于只有一个隐藏层的全连接网络,一般来说,编码器和解码器可以是更复杂的模型,分别用f和g表示,损失函数如下:其中N为样本数量。
在这里插入图片描述
我们希望通过训练编码器得到数据中的一些有用特征,最常用的一种方法是通过限定h的维度比x的维度小,即d

2.2 正则自编码器
放宽上述对编码器的限制,允许编码器的维度大于或者等于输入的维度,即d≥n,这种编码器称为过完备自编码器。如果对过完备自编码器不作任何限制,那么可能不会学到任何有用信息,而仅仅是将输入复制到输出。因此,我们需要对模型进行一些正则化的约束。

  1. 去噪自编码器
    不同于原始的自编码器,去噪自编码器的改进在于在原始输入的基础上加人了一些噪声作为编码器的输入,解码器需要重构出不加噪声的原始输入x。通过这种方法,使编码器不能简单的学习一个恒等变换,而必须从加噪的数据中提取有用的信息用于恢复原始数据。
    具体的做法是随机将输入x的一部分值置0,这样就得到了加了噪声的输入x_δ作为编码器的输入,解码器需要重构出不带噪声的数据x,因此损失函数为:
    在这里插入图片描述

  2. 稀疏自编码器
    即在损失函数上加上正则化项L_sparse:
    在这里插入图片描述
    之后损失函数变为:
    在这里插入图片描述
    其中 λ是调节重构项和稀疏正则项的权重。

2.3 变分自编码器
变分自编码器本质上是生成新的样本数据,它与传统的自编码器有很大的不同。
这篇博客讲的非常好,贴起来:
变分自编码器:原来是这么回事

3. 基于对比损失的方法—Word2vec

常用于自然语言处理,此处稍作了解即可。

你可能感兴趣的:(学习笔记)