原文链接:https://developers.google.com/machine-learning/crash-course/embeddings/

嵌套是一种相对低维的空间,可以将高维矢量映射到这种低维空间里。
通过使用嵌套,可以让在大型输入(比如代表字词的稀疏矢量)上进行机器学习变得更加容易。
在理想情况下,嵌套可以将语义上相似的不同输入映射到嵌套空间里的邻近处,以此来捕获输入的语义。
一个模型学习到的嵌套,也可以被其他模型重用。

1- 协同过滤的目的

协同过滤是一项可以预测用户兴趣(根据很多其他用户的兴趣)的任务。

以影片推荐的任务为例,首先要确定哪些影片是相似的。
可以通过将影片嵌套到低维空间(使得相似的影片彼此邻近)来实现这个目标。
也就是说,将这些影片映射到一个嵌套空间,其中的每个字词都由一组二维坐标来表示。
通常情况下,在学习 d 维嵌套时,每部影片都由 d个实值数字表示,其中每个数字都分别表示在一个维度中的坐标。

可以为每个维度指定了名称。
在学习嵌套时,每个维度的学习跟它们的名字无关。
通常,每个此类维度都称为一个潜在维度,因为它代表的特征没有明确显示在数据中,而是要根据数据推断得出。
最终,真正有意义的是嵌套空间中各个影片之间的距离,而不是单个影片在任意指定维度上的坐标。

2- 分类输入数据

继续以影片推荐的任务为例,分类数据可以是某用户观看过的一组影片,某文档中使用的一系列单词,或某人从事的职业。
如果要构建一个影片推荐模型,可以为每部可能的影片分别分配一个唯一的 ID,然后通过用户已观看影片的稀疏张量来表示每位用户。
由此可知,分类数据是指用于表示一组有限选项中的一个或多个离散项的输入特征,通常使用稀疏张量(一种含有极少非零元素的张量)来表示。
为了能够在机器学习系统中使用这类表示法,需要将每个稀疏矢量表示为数字矢量,从而使语义上相似的项(影片或字词)在矢量空间中具有相似的距离。

如何将字词表示为数字矢量呢?

  • - 独热编码(one-hot encoding,只有一个索引具有非零值)
  • - 词袋”(bag of words) 表示法:使用一个包含各个单词在大块文本中出现次数的向量

不过,无论如何确定非零值,若将节点与字词一一对应,得到的输入矢量就会比较稀疏 - 即:矢量很大,但非零值相对较少。

稀疏表示法存在多项问题可能会致使模型很难高效地学习。

网络的对应权重数目过大
巨型输入矢量意味着神经网络的对应权重数目会极其庞大,会进一步引发以下问题:

  • 数据量:模型中的权重越多,高效训练所需的数据就越多。
  • 计算量:权重越多,训练和使用模型所需的计算就越多。这很容易就会超出硬件的能力范围。

矢量之间缺乏有意义的联系

3- 转换到低维度空间

通过使用嵌套(将高维度数据映射到低维度空间)可以解决上述稀疏输入数据的核心问题,
也就是将大型稀疏矢量映射到一个保留语义关系的低维空间。
即便是小型多维空间,也能自由地将语义上相似的项归到一起,并将相异项分开。   
借助这种多维空间(嵌套),机器学习系统能够检测出对学习任务可能有帮助的模式:

  • 收缩网络:以更小的嵌套空间来更快速地训练系统。实用嵌套的量级大致有数百个维度。
  • 嵌套充当查询表
  • 嵌套查询充当矩阵乘法

4- 获取嵌套

可以通过多种方式来获取嵌套:
标准降维技术

目前有很多在低维空间捕获高维空间重要结构的数学技术。
理论上,这些技术都可以用来创建用于机器学习系统的嵌套。
例如,主成分分析 (PCA) 已用于创建字词嵌套。
在给定一组实例的情况下,例如字词矢量包,PCA 会尝试查找高度相关且可以合并的维度。

Word2vec

Word2vec 是 Google 为了训练字词嵌套而研发的一种算法。
Word2vec 基于分布假设,将语义上相似的字词映射到在几何图形上邻近的嵌套矢量。
分布假设指出经常具有相同相邻字词的字词往往在语义上相似。
Word2Vec 通过训练神经网络来区分实际共同出现的多组字词与随机出现在一起的字词,从而充分利用此类上下文信息。
字词的向量表示法-word2vec模型:https://www.tensorflow.org/tutorials/word2vec/index.html

将嵌套训练为大型模型的一部分

也可以将嵌套作为目标任务的神经网络的一部分进行学习。
通过这个方法,可以为自己的特定系统量身定制嵌套,不过耗费的时间可能要比单独训练嵌套的时间长。

5- 练习

xxx

6- 关键词

输入层 (input layer)
神经网络中的第一层(接收输入数据的层)。

独热编码 (one-hot encoding)
一种稀疏向量,其中:
一个元素设为 1。
所有其他元素均设为 0。
独热编码常用于表示拥有有限个可能值的字符串或标识符。
例如,假设某个指定的植物学数据集记录了 15000 个不同的物种,其中每个物种都用独一无二的字符串标识符来表示。
在特征工程过程中,您可能需要将这些字符串标识符编码为独热向量,向量的大小为 15000。

稀疏特征 (sparse feature)
一种特征向量,其中的大多数值都为 0 或为空。
例如,某个向量包含一个为 1 的值和一百万个为 0 的值,则该向量就属于稀疏向量。
再举一个例子,搜索查询中的单词也可能属于稀疏特征 - 在某种指定语言中有很多可能的单词,但在某个指定的查询中仅包含其中几个。
与密集特征相对。

嵌套 (embeddings)
一种分类特征,以连续值特征表示。
通常,嵌套是指将高维度向量映射到低维度的空间。
例如,您可以采用以下两种方式之一来表示英文句子中的单词:

1- 表示成包含百万个元素(高维度)的稀疏向量,其中所有元素都是整数。
向量中的每个单元格都表示一个单独的英文单词,单元格中的值表示相应单词在句子中出现的次数。
由于单个英文句子包含的单词不太可能超过 50 个,因此向量中几乎每个单元格都包含 0。
少数非 0 的单元格中将包含一个非常小的整数(通常为 1),该整数表示相应单词在句子中出现的次数。

2- 表示成包含数百个元素(低维度)的密集向量,其中每个元素都存储一个介于 0 到 1 之间的浮点值。这就是一种嵌套。

在 TensorFlow 中,会按反向传播损失训练嵌套,和训练神经网络中的任何其他参数一样。

机器学习入门17 - 嵌套 (Embedding)的更多相关文章

  1. 机器学习入门 - Google机器学习速成课程 - 笔记汇总

    机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...

  2. [转]MNIST机器学习入门

    MNIST机器学习入门 转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html?plg_ ...

  3. Azure机器学习入门(三)创建Azure机器学习实验

    在此动手实践中,我们将在Azure机器学习Studio中一步步地开发预测分析模型,首先我们从UCI机器学习库的链接下载普查收入数据集的样本并开始动手实践: http://archive.ics.uci ...

  4. web安全之机器学习入门——3.1 KNN/k近邻

    目录 sklearn.neighbors.NearestNeighbors 参数/方法 基础用法 用于监督学习 检测异常操作(一) 检测异常操作(二) 检测rootkit 检测webshell skl ...

  5. tensorfllow MNIST机器学习入门

    MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...

  6. Andrew Ng机器学习课程17(2)

    Andrew Ng机器学习课程17(2) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了利用value iteration和policy i ...

  7. Andrew Ng机器学习课程17(1)

    Andrew Ng机器学习课程17(1) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了强化学习与监督学习的设定上的区别,以及强化学习的框架 ...

  8. 【机器学习】机器学习入门08 - 聚类与聚类算法K-Means

    时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了.短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数 ...

  9. 机器学习入门:K-近邻算法

    机器学习入门:K-近邻算法 先来一个简单的例子,我们如何来区分动作类电影与爱情类电影呢?动作片中存在很多的打斗镜头,爱情片中可能更多的是亲吻镜头,所以我们姑且通过这两种镜头的数量来预测这部电影的主题. ...

随机推荐

  1. python集合操作

    一:python官方文档 https://docs.python.org/3.6/library/stdtypes.html#set-types-set-frozenset 二:集合概念 集合是无序的 ...

  2. js变量污染引起的诡异bug

    js方法是这样的: //保存提货券JSON数据到隐藏字段 saveVoucherListInfoToHiddenFiled: function () { //保存绑定商品信息 var voucherL ...

  3. javascript中的浅拷贝ShallowCopy与深拷贝DeepCopy

    拷贝,在js中,分为浅拷贝和深拷贝.这两者是如何区分的呢?又是如何实现的呢? 深浅拷贝的区分 首先说下,在js中,分为基础数据类型和复杂数据类型, 基础数据类型:Undefined.Null.Bool ...

  4. 一起学爬虫——如何爬取通过ajax加载数据的网站

    目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...

  5. SpringCloud入门

    一. 什么是 SpringCloud           什么是 SpringCloud:是一个服务治理平台,提供了一些服务框架.包含了:服务注册与发现.配置中心.消息中心 .负载均衡.数据监控等等. ...

  6. [linux]CentOS安装pre-built Nginx

    官方文档:https://nginx.org/en/linux_packages.html Nginx安装分为软件包安装和pre-built安装.这里使用的pre-built安装,不用自己编译. 设置 ...

  7. 05解决flask循环引用的问题

    1, 什么是循环引用问题?为什么会导致循环引用? 1.1先讲是什么? 主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它. 1.2再讲为什么? 主文件为 ...

  8. PHP通过get方法获得form表单数据方法总结

    下面给大家带来具体的代码示例: 1.form表单代码示例(表单get提交)   1 2 3 4 5 6 7 8 9 10 11 12 13 14 <head>   <meta cha ...

  9. JavaScript遍历对象4种方法和遍历数组的3种方式 代码

    //遍历对象 4种方法 //Object.keys(obj).forEach() console.log("keys...遍历</br>") var obj1 = { ...

  10. maven build时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

    [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ ...