0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解神经网络嵌入的概念

电子工程师 来源:工程师曾玲 2019-06-08 14:47 次阅读

深度学习的一个显著成功应用是嵌入,这是一种将离散变量表示为连续向量的方法。这项技术已经有了实际的应用,其中有在机器翻译中使用词嵌入和类别变量中使用实体嵌入。

近年来,神经网络在图像分割、自然语言处理、时间序列预测等方面的应用有了很大的发展。深度学习的一个显著成功应用是嵌入,这是一种将离散变量表示为连续向量的方法。这项技术已经有了实际的应用,其中有在机器翻译中使用词嵌入和类别变量中使用实体嵌。

在本文中,我将解释什么是神经网络嵌入,为什么要使用它们,以及如何学习它们。我们会在真正的问题的上下文中讨论这些概念:将Wikipedia上的所有图书表示为向量,并创建图书推荐系统。


Wikipedia上所有书的神经网络嵌入

嵌入

嵌入是一个从离散变量到连续数字向量的映射。在神经网络的上下文中,embeddings是低维的, 离散变量用学习到的连续向量表示。神经网络嵌入是有用的,因为它们可以减少类别变量的维数,并有意义地在转换空间中表示类别。

神经网络嵌入有3个主要目的:

① 在嵌入空间中查找最近的邻居。这些邻居可以用于根据用户兴趣或聚类类别提出建议。

② 作为监督任务的机器学习模型的输入。

③ 用于概念的可视化和类别之间的关系的可视化。

这意味着在图书项目中,使用神经网络嵌入,我们可以把维基百科上所有的37000篇图书文章,用一个具有50个数字的向量来表示每一篇文章。此外,由于嵌入式是学习的,在我们的学习问题上下文中更相似的书籍在嵌入式空间中更接近。

神经网络嵌入克服了用独热编码表示分类变量的两个局限性:

独热编码的局限性

独热编码类别变量的操作实际上是一个简单的嵌入,其中每个类别都映射到一个不同的向量。这个过程采用离散实体,并将每个观察结果映射到一个只有一个1的向量中。

独热编码技术有两个主要缺点:

① 对于高基数变量—那些具有许多类别的变量—转换之后向量的维数变得太大了。

② 这种映射是完全没有监督的:“相似”的类别在嵌入空间中并没有彼此放置得更靠近。

第一个问题很好理解:对于每个额外的类别(称为实体),我们必须向一个热编码向量添加另一个数字。如果我们在Wikipedia上有37000本书,那么表示这些书需要为每本书提供37000维的向量,这使得针对这种表示的任何机器学习模型的训练都是不可行的。

第二个问题同样是有局限的:独热编码不会将相似的实体彼此靠近的放在向量空间中。如果我们使用余弦距离来度量向量之间的相似性,那么经过独热编码后,实体之间的相似性为0。

这意味着,《战争与和平》和《安娜•卡列尼娜》(这两本书都是列夫•托尔斯泰(Leo Tolstoy)的经典著作)这样的实体彼此之间的距离,并不比《战争与和平》与《银河系漫游指南》之间的距离更近。

# One Hot Encoding Categoricals

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded = [[1, 0, 0],

[0, 1, 0],

[0, 0, 1]]

Similarity (dot product) between First and Second = 0

Similarity (dot product) between Second and Third = 0

Similarity (dot product) between First and Third = 0

考虑到这两个问题,表示类别变量的理想解决方案是需要更少的数字,而不是类别的数量,并且将类似的类别放在更靠近的位置。

# Idealized Representation of Embedding

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded_ideal = [[0.53, 0.85],

[0.60, 0.80],

[-0.78, -0.62]]

Similarity (dot product) between First and Second = 0.99

Similarity (dot product) between Second and Third = -0.94

Similarity (dot product) between First and Third = -0.97

为了更好地表示类别实体,我们可以使用嵌入神经网络和监督任务来学习嵌入。

学习嵌入

使用one-hot编码的主要问题是转换不依赖于任何监督。我们可以通过在有监督的任务中使用神经网络来学习嵌入,从而大大改进嵌入。嵌入形成参数—网络的权重—经过调整以最小化任务上的损失。得到的嵌入向量表示类别,其中相似的类别(相对于任务)彼此更接近。

例如,如果我们有一个包含50,000个单词的电影评论集合,我们可以使用一个训练好的嵌入式神经网络来预测评论是的情感,从而为每个单词学习100维的嵌入。词汇表中与正面评价相关的单词,如“brilliant”或“excellent”,将在嵌入空间中出现得更近,因为网络已经了解到它们都与正面评价相关。

详解神经网络嵌入的概念

电影句子中的词嵌入

在上面给出的书的例子中,我们的监督任务可以是“确定一本书是否是列夫·托尔斯泰写的”,由此产生的嵌入将使托尔斯泰写的书彼此更接近。解决如何创建监督任务来生成相关表示的问题是嵌入过程中最困难的部分。

实现

在Wikipedia book项目中,监督学习任务被设置为预测一本书的文章中是否出现了指向Wikipedia页面的给定链接。我们提供成对的(书名、链接)训练示例,其中混合了正样本对和负样本对。这种设置基于这样的假设,即链接到类似Wikipedia页面的书籍彼此相似。因此,由此产生的嵌入应该将类似的书籍更紧密地放置在向量空间中。

我使用的网络有两个平行的嵌入层,分别映射书和wikilink,用来区分50维向量,还有一个点积层,将嵌入的内容组合成一个数字,用于预测。嵌入是网络的参数或权重,在训练过程中进行调整,以最小化监督任务的损失。

在Keras代码中,这看起来像这样(如果你不完全理解代码,不要担心,直接跳到图像):

# Both inputs are 1-dimensional

book = Input(name = 'book', shape = [1])

link = Input(name = 'link', shape = [1])

# Embedding the book (shape will be (None, 1, 50))

book_embedding = Embedding(name = 'book_embedding',

input_dim = len(book_index),

output_dim = embedding_size)(book)

# Embedding the link (shape will be (None, 1, 50))

link_embedding = Embedding(name = 'link_embedding',

input_dim = len(link_index),

output_dim = embedding_size)(link)

# Merge the layers with a dot product along the second axis (shape will be (None, 1, 1))

merged = Dot(name = 'dot_product', normalize = True, axes = 2)([book_embedding, link_embedding])

# Reshape to be a single number (shape will be (None, 1))

merged = Reshape(target_shape = [1])(merged)

# Output neuron

out = Dense(1, activation = 'sigmoid')(merged)

model = Model(inputs = [book, link], outputs = out)

# Minimize binary cross entropy

model.compile(optimizer = 'Adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

虽然在有监督的机器学习任务中,目标通常是训练一个模型对新数据进行预测,但在这个嵌入模型中,预测只是达到目的的一种手段。我们想要的是嵌入权值,将书籍和链接表示为连续向量。

嵌入本身并不那么有趣,它们只是数字的向量:

详解神经网络嵌入的概念

来自书籍推荐嵌入模型的示例嵌入

然而,嵌入可以用于前面列出的3个目的,对于这个项目,我们主要感兴趣的是推荐基于最近邻的书籍。为了计算相似性,我们取一本书进行查询,找到它的向量与其他所有图书向量的点积。(如果我们的嵌入是标准化的,那么这个点积就是向量之间的cos距离,范围从-1(最不相似)到+1(最相似)。我们也可以用欧氏距离来度量相似性。

这是我建立的图书嵌入模型的输出:

Books closest to War and Peace.

Book: War and Peace Similarity: 1.0

Book: Anna Karenina Similarity: 0.79

Book: The Master and Margarita Similarity: 0.77

Book: Doctor Zhivago (novel) Similarity: 0.76

Book: Dead Souls Similarity: 0.75

(向量与自身的余弦相似度必须为1.0)。经过降维(见下图),可以得到如下图:

详解神经网络嵌入的概念

书的嵌入以及最近的邻居

我们可以清楚地看到学习嵌入的价值!现在,维基百科上每一本书都有一个50个数字的向量表示,相似的书彼此之间距离更近。

嵌入可视化

嵌入的最酷的部分之一是,它们可以用来可视化概念,例如“小说”或“非小说”之间的关系。这需要进一步的降维技术来将维度降为2或3。最常用的约简方法本身就是一种嵌入方法:t分布随机邻接嵌入(TSNE)。

我们可以把维基百科上所有书籍的37000个原始维度,用神经网络嵌入将它们映射到50个维度,然后用TSNE将它们映射到2个维度。结果如下:

详解神经网络嵌入的概念

在Wikipedia上的所有37000本书的嵌入

(TSNE是一种流形学习技术,这意味着它试图将高维数据映射到低维流形,创建一个试图维护数据内部局部结构的嵌入。它几乎只用于可视化,因为输出是随机的,不支持转换新数据。一个正在兴起的替代方案是统一流形近似和投影,UMAP,它更快,并且支持将新数据转换到嵌入空间中)。

这本身并不是很有用,但是一旦我们开始根据不同的书的特点给它上色,它就会变得很有洞察力。

用流派对嵌入上色

我们可以清楚地看到属于同一类型的书籍的分组。这并不完美,但仍然令人印象深刻的是,我们可以用两个数字来表示维基百科上的所有书籍,这两个数字仍然能够捕捉到不同类型之间的差异。

书的例子(即将发表的完整文章)展示了神经网络嵌入的价值:我们有一个类别对象的向量表示,它是低维的,并且在嵌入空间中将相似的实体彼此放置得更近。

交互式可视化

静态图的问题是,我们不能真正地研究数据并研究变量之间的分组或关系。为了解决这个问题,TensorFlow开发了projector,这是一个在线应用程序,可以让我们可视化并与嵌入进行交互。我将很快发布一篇关于如何使用这个工具的文章,但是现在,结果如下:

使用projector交互式探索书籍嵌入

结论

神经网络嵌入是学习离散数据作为连续向量的低维表示。这些嵌入克服了传统编码方法的限制,可以用于查找最近的邻居、输入到另一个模型和可视化。

虽然很多深度学习的概念都是在学术术语中讨论的,但是神经网络嵌入既直观又相对容易实现。我坚信任何人都可以学习深度学习并使用Keras这样的库构建深度学习解决方案。嵌入是处理离散变量的有效工具,是深度学习的一个有用应用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4562

    浏览量

    98646
  • 深度学习
    +关注

    关注

    73

    文章

    5224

    浏览量

    119866
收藏 人收藏

    评论

    相关推荐

    神经网络教程(李亚非)

      第1章 概述  1.1 人工神经网络研究与发展  1.2 生物神经元  1.3 人工神经网络的构成  第2章人工神经网络基本模型  2.1 MP模型  2.2 感知器模型  2.3
    发表于 03-20 11:32

    神经网络简介

    神经网络简介
    发表于 08-05 21:01

    神经网络基本介绍

    神经网络基本介绍
    发表于 01-04 13:41

    卷积神经网络入门资料

    卷积神经网络入门详解
    发表于 02-12 13:58

    【PYNQ-Z2试用体验】神经网络基础知识

    前言前面我们通过notebook,完成了在PYNQ-Z2开发板上编写并运行python程序。我们的最终目的是基于神经网络,完成手写的数字识别。在这之前,有必要讲一下神经网络的基本概念和工作原理。何为
    发表于 03-03 22:10

    全连接神经网络和卷积神经网络有什么区别

    全连接神经网络和卷积神经网络的区别
    发表于 06-06 14:21

    卷积神经网络如何使用

    卷积神经网络(CNN)究竟是什么,鉴于神经网络在工程上经历了曲折的历史,您为什么还会在意它呢? 对于这些非常中肯的问题,我们似乎可以给出相对简明的答案。
    发表于 07-17 07:21

    【案例分享】ART神经网络与SOM神经网络

    今天学习了两个神经网络,分别是自适应谐振(ART)神经网络与自组织映射(SOM)神经网络。整体感觉不是很难,只不过一些最基础的概念容易理解不清。首先ART
    发表于 07-21 04:30

    怎么设计ARM与神经网络处理器的通信方案?

    人工神经网络在很多领域得到了很好的应用,尤其是具有分布存储、并行处理、自学习、自组织以及非线性映射等特点的网络应用更加广泛。嵌入式便携设备也越来越多地得到应用,多数是基于ARM内核及现场可编程门阵列
    发表于 09-20 06:15

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测
    发表于 07-12 08:02

    基于BP神经网络的PID控制

    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP
    发表于 09-07 07:43

    嵌入式中的人工神经网络的相关资料分享

    人工神经网络在AI中具有举足轻重的地位,除了找到最好的神经网络模型和训练数据集之外,人工神经网络的另一个挑战是如何在嵌入式设备上实现它,同时优化性能和功率效率。 使用云计算并不总是一个
    发表于 11-09 08:06

    轻量化神经网络的相关资料下载

    原文链接:【嵌入式AI部署&基础网络篇】轻量化神经网络精述--MobileNet V1-3、ShuffleNet V1-2、NasNet深度神经网络模型被广泛应用在图像分类、物体检测等
    发表于 12-14 07:35

    卷积神经网络一维卷积的处理过程

    以前的神经网络几乎都是部署在云端(服务器上),设备端采集到数据通过网络发送给服务器做inference(推理),结果再通过网络返回给设备端。如今越来越多的神经网络部署在
    发表于 12-23 06:16

    概念到结构、算法解析卷积神经网络

    本文是对卷积神经网络的基础进行介绍,主要内容包含卷积神经网络概念、卷积神经网络结构、卷积神经网络求解、卷积
    发表于 12-05 11:32 7次下载