机器学习入门17 - 嵌套 (Embedding)
原文链接: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)的更多相关文章
- 机器学习入门 - Google机器学习速成课程 - 笔记汇总
机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...
- [转]MNIST机器学习入门
MNIST机器学习入门 转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html?plg_ ...
- Azure机器学习入门(三)创建Azure机器学习实验
在此动手实践中,我们将在Azure机器学习Studio中一步步地开发预测分析模型,首先我们从UCI机器学习库的链接下载普查收入数据集的样本并开始动手实践: http://archive.ics.uci ...
- web安全之机器学习入门——3.1 KNN/k近邻
目录 sklearn.neighbors.NearestNeighbors 参数/方法 基础用法 用于监督学习 检测异常操作(一) 检测异常操作(二) 检测rootkit 检测webshell skl ...
- tensorfllow MNIST机器学习入门
MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...
- Andrew Ng机器学习课程17(2)
Andrew Ng机器学习课程17(2) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了利用value iteration和policy i ...
- Andrew Ng机器学习课程17(1)
Andrew Ng机器学习课程17(1) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了强化学习与监督学习的设定上的区别,以及强化学习的框架 ...
- 【机器学习】机器学习入门08 - 聚类与聚类算法K-Means
时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了.短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数 ...
- 机器学习入门:K-近邻算法
机器学习入门:K-近邻算法 先来一个简单的例子,我们如何来区分动作类电影与爱情类电影呢?动作片中存在很多的打斗镜头,爱情片中可能更多的是亲吻镜头,所以我们姑且通过这两种镜头的数量来预测这部电影的主题. ...
随机推荐
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- ASP.NET Core快速入门学习笔记(第1章:介绍与引入)
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:环境安装 下载地址:https://dotnet.m ...
- 自己动手写Redis客户端- Redis协议(1)
网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 . 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾. 请求 Redis 服务器接受命令以及命 ...
- 禁止Centos7系统yum自动下载更新
安装Centos7后,系统自动更新状态默认为开启,若禁止系统自动更新需要手动关闭. 1.进入yum目录 [root@localhost ~]$ cd /etc/yum 2.编辑yum-cron.co ...
- git使用命令讲解
1.创建版本库 ①选择一个合适的地方,创建一个空目录 mkdir learngit cd learngit ②通过git init命令把这个目录变成Git可以管理的仓库: git init Git ...
- css实现图片等比例缩放
<div class="box"> <img src="01.jpg"/> </div> .box{ } //只要给图片设置 ...
- 在NSMutableArray中添加空元素:NSNull类的使用
有时需要将一些表示“空”的对象添加到array中.NSNull类正是基于这样的目的产生的.用NSNull表示一个占位符时,语句表达如下: [array addObject:[NSNull null]] ...
- 奖品列表组件【仿swiper】
最近lz在做项目的一些优化,发现我的项目里有个奖品列表的功能:我们之前是引入swiper这个库去做的:swiper库的滑动效果确实比较好看,但是js文件以及css文件相对是比较大的:考虑到这个小小的需 ...
- 教你如何用勾勾街快速生成一个苹果IOS APP
现在苹果手机上的各种各样的APP,想不想也有一款属于自己的专属APP?很简单,用勾勾街可以在3分钟内快速制作一款,快来看看! 工具平台: 勾勾街 (www.gogojie.com ) 操作方法: 1. ...
- MyBatis3系列__04CRUD以及参数处理
本文将会简单介绍一下MyBatis的CRUD以及结合源码讲解一下MyBatis对参数的处理. 作为一个ORM框架,最基本的使用也就是CRUD了,MyBatis提供了两种方法:xml配置文件和动态注解. ...