赞
踩
这篇文章回顾了将深层神经网络应用于自然语言处理(NLP)的一些非常显著的结果。
在这样做的过程中,我希望能给出易理解的一个有希望的答案,来解释为什么深神经网络能够起作用。我认为这是一个非常优雅的视角。
单隐层神经网络
具有隐层的神经网络具有普遍性:给定足够的隐单元,它可以逼近任意函数。这是一个经常引用的——甚至更频繁地被误解和应用——定理。
确实如此,本质上是因为隐藏层可以用作查找表。
为了简单起见,让我们考虑一个感知器网络。感知器是一个非常简单的神经元,当它超过某个阈值试就会发出信号,如果没有达到这个阈值就不会发出信号。感知器网络获得二进制(0和1)输入并给出二进制输出。
请注意,可能的输入数量有限。对于每一个可能的输入,我们可以在隐层中构造一个神经元来激发输入,并且只在那个特定的输入上。然后,我们可以使用该神经元和输出神经元之间的连接来控制特定情况下的输出。
因此,一个隐层神经网络确实是通用的。但这并没有什么特别令人印象深刻或令人兴奋的地方。说您的模型可以做与查找表相同的事情并不是非常有力的论据。这只是意味着你的模型并不是不可能完成任务的。
通用性意味着一个网络可以适应你给它的任何训练数据。这并不意味着它将以合理的方式插值到新的数据点。
不是的,通用性并不能解释为什么神经网络如此有效。真正的原因似乎是一些更微妙的…。为了理解它,我们首先需要了解一些具体的结果。
词嵌入
我想从一个特别有趣的深度学习研究开始:单词嵌入。在我个人看来,尽管它们最初是由Bengio等人在十多年前提出的,但目前仍是深度学习中最令人兴奋的研究领域之一。除此之外,我认为它们获得直觉关于为什么深度学习如此有效是最好的地方之一。
一个字嵌入 W:words→ℝn W : w o r d s → R n W: \mathrm{words} \to \mathbb{R}^n 是一种将某些语言中的单词映射到高维向量(可能是200-500维)的参数化函数。例如,我们可能会发现:
W(‘‘cat")=(0.2, -0.4, 0.7, …) W ( ‘ ‘ cat " ) = ( 0.2 , - 0.4 , 0.7 , . . . ) W(``\text{cat}\!") = (0.2,~ \text{-}0.4,~ 0.7,~ …)
W(‘‘mat")=(0.0, 0.6, -0.1, …) W ( ‘ ‘ mat " ) = ( 0.0 , 0.6 , - 0.1 , . . . ) W(``\text{mat}\!") = (0.0,~ 0.6,~ \text{-}0.1,~ …)
(通常,函数是一个查找表,由一个矩阵 θ θ \theta参数化,每一个单词都有一行: Wθ(wn)=θn W θ ( w n ) = θ n W_\theta(w_n) = \theta_n)
W W W 被初始化为每个单词都有随机向量。它学习拥有意义的向量来执行某些任务。
例如,我们可以训练一个网络的一个任务是预测一个5-gram(五个单词的序列)是否是“有效的”。我们可以很容易地从维基百科得到很多5-grams(例如:”cat sat on the mat”),然后用一个随机单词(例如:“cat sat song the mat”)换掉其中的一半,因为这几乎肯定会使我们的5-gram变得毫无意义。
我们训练的模型将运行每一个在5-gram的单词通过WWW去得到一个表示它的向量,并将这些向量输入另外一个名为 R R R的“模块”,该模型试图预测5-gram是“有效的”还是“中断的”。那么,我们想:
R(W(‘‘cat"), W(‘‘sat"), W(‘‘on"), W(‘‘the"), W(‘‘mat"))=1R(W(‘‘cat"), W(‘‘sat"), W(‘‘on"), W(‘‘the"), W(‘‘mat"))=1R(W(``\text{cat}\!“),~ W(``\text{sat}\!”),~ W(``\text{on}\!“),~ W(``\text{the}\!”),~ W(``\text{mat}\!")) = 1
R(W(‘‘cat"), W(‘‘sat"), W(‘‘song"), W(‘‘the"), W(‘‘mat"))=0 R ( W ( ‘ ‘ cat " ) , W ( ‘ ‘ sat " ) , W ( ‘ ‘ song " ) , W ( ‘ ‘ the " ) , W ( ‘ ‘ mat " ) ) = 0 R(W(``\text{cat}\!“),~ W(``\text{sat}\!”),~ W(``\text{song}\!“),~ W(``\text{the}\!”),~ W(``\text{mat}\!")) = 0
为了准确地预测这些值,网络需要学习 W W W和RRR良好的参数。
现在,这个任务不是很有趣。也许这对发现文本或者其他东西中的语法错误很有帮助。但最有趣的是 W W W
(事实上,对我们来说,整个任务的重点是学习WWW。我们本可以做几个其他的任务——另一个常见的任务是预测句子的下一个单词。但我们并不在乎。在本节的其余部分中,我们将讨论许多单词嵌入结果,而不会区分不同的方法。)
我们可以做的一件事是用t-SNE可视化它们,这是一种用于可视化高维数据的复杂技术,可以让我们对单词嵌入空间有个直观的感觉。
t-SNE可视化词嵌入。左边:数字区域;右边:工作区域。From Turian et al. (2010), see complete image.
这种文字的“地图”对我们来说有很多直观的意义。相似的词是相近的。另一种方法是查看哪个单词在嵌入中与给定的单词最接近。再说一遍,这些词往往很相似。
What words have embeddings closest to a given word? From Collobert et al. (2011)
对于一个网络来说,让具有相似含义的词具有相似的向量似乎是很自然的。如果你用一个词换一个同义词(eg. “a few people sing well” -> “a couple people sing well”),句子的有效性就不会改变。然而,从天真的角度来看,输入句已经发生了很大的变化,如果 W W W 把同义词(例如”few”和”couple”)精密地联系在一起,那么从RRR的角度来看,变化不大。
这是非常强大的。5-grams的数量可能是巨大的,我们有相对较少的数据点去试图学习。相似的词放在一起使我们可能把一个句子概括为一类相似的句子。这不仅意味着将一个单词转换为同义词,还意味着在类似的类型中将一个单词转换为一个单词(例如,”the wall is blue” -> “the wall is red”)。此外,我们还可以更改多个单词(例如. “the wall is blue” -> “the ceiling is red”)。这对单词数量的影响是指数级的。
所以,很明显,这对 W W W来说是一件非常有用的事情。但它是如何学会这样做的呢?似乎在很多情况下,它看到像 “the wall is blue” 这样的句子,并且在看到 “the wall is red”这样的句子之前就知道它是有效的。因此,将”red” 向 “blue”移动一点会对网络表现更好。
我们仍然需要看到每一个词被使用的例子,但类比允许我们将其推广到新的单词组合。你看过所有你以前理解的单词,但你没有看过你以前理解的所有句子。神经网络也是如此。
单词嵌入显示了一个更显著的特性:单词之间的类比似乎被编码在单词之间的差异向量中。例如,似乎存在一个恒定的male-female 差异向量:
W(‘‘woman")−W(‘‘man") ≃ W(‘‘aunt")−W(‘‘uncle")W(‘‘woman")−W(‘‘man") ≃ W(‘‘aunt")−W(‘‘uncle")W(``\text{woman}\!“) - W(``\text{man}\!”) \simeq W(``\text{aunt}\!“) - W(``\text{uncle}\!”)
W(‘‘woman")−W(‘‘man") ≃ W(‘‘queen")−W(‘‘king") W ( ‘ ‘ woman " ) − W ( ‘ ‘ man " ) ≃ W ( ‘ ‘ queen " ) − W ( ‘ ‘ king " ) W(``\text{woman}\!“) - W(``\text{man}\!”) \simeq W(``\text{queen}\!“) - W(``\text{king}\!”)
这似乎并不太令人惊讶。毕竟,性别代词意味着转换一个单词会使句子在语法上不正确。你写道,“she is the aunt”,但“he is the uncle。”类似地,“he is the King”,但“she is the Queen”。如果有人看到“she is the uncle”,最有可能的解释是语法错误。如果有一半的时间是随机转换的话,很有可能发生在这里。
“当然!” 事后我们说:“嵌入这个词将学会以一致的方式编码性别。事实上,可能有一个性别层面。单数和复数也是一样的。很容易找到这些琐碎的关系!”
然而,事实证明,更复杂的关系也是用这种方式编码的。简直是奇迹!
Relationship pairs in a word embedding. From Mikolov et al. (2013b).
认识到 W W W的所有这些性质都是副作用是很重要的。我们并没有试图把相似的词放在一起。我们没有尝试不同的向量进行编码。我们所要做的只是执行一个简单的任务,比如预测一个句子是否有效。这些属性或多或少地出现在优化过程中。
这似乎是神经网络的一大优势:它们学会了更好的自动表示数据的方法。反过来,很好地表示数据似乎是许多机器学习问题成功的关键。词嵌入只是学习表示法的一个特别引人注目的例子。
共享表示
单词嵌入的属性当然是有趣的,但是我们能用它们做一些有用的事情吗?除了预测一些愚蠢的事情,比如5-gram是否“有效”?
我们学习单词嵌入是为了更好地完成一个简单的任务,但是根据我们在单词嵌入中观察到的良好特性,您可能会怀疑它们在NLP任务中通常是有用的。事实上,像这样的单词表示是非常重要的:
近年来,在许多NLP系统的成功中,使用word表示已经成为一种关键的“秘制”,包括命名实体识别、词性标记、解析和语义角色标记。(Luong et al. (2013))
这种通用策略——学习任务A的良好表现,然后将其用于任务B——是深度学习工具箱中的主要技巧之一。根据细节的不同,它有不同的名称:预训练、迁移学习和多任务学习。这种方法最大的优点之一是它允许从多种数据中学习表示。
WWW and F F F learn to perform task A. Later, GGG can learn to perform B B B based on WWW.
有一个对应的技巧。我们不需要学习一种方法来表示一种数据并使用它来执行多种任务,我们可以学习一种方法,将多种数据映射到一个单一的表示中!
其中一个很好的例子是在Socher等人(2013a)中制作的双语单词嵌入。我们可以学习在一个单独的共享空间中嵌入两个不同语言的单词。在这种情况下,我们学习在相同的空间中嵌入英语和普通话单词。
我们训练两个单词的嵌入, Wen W e n W_{en} 和 Wzh W z h W_{zh} 的方式类似于我们上面所做的。然而,我们知道某些英语单词和汉语单词有着相似的意思。因此,我们优化了一个附加属性:我们知道的接近翻译的单词应该在一起。
当然,我们注意到我们所知道的词有着相似的意思,最后会紧密结合在一起。因为我们对它进行了优化,所以这并不奇怪。更有趣的是,我们并不知道的单词是最后的翻译。
鉴于我们以前使用词嵌入的经验,这可能并不令人感到意外。单词嵌入将相似的单词拉到一起,所以如果我们知道一个英文和中文单词意味着相似的东西彼此接近,那么它们的同义词也将彼此靠近。我们也知道,像性别差异这样的事物往往最终会以恒定的差异向量来表示。似乎强迫这些不同的向量在英文和中文的嵌入中都是相同的。这样做的结果是,如果我们知道两个男性版本的词语相互转化,我们也应该让女性的词汇相互转化。
直觉上,感觉有点像两种语言有一个相似的“形状”,通过强迫它们在不同的点排列,它们重叠,而其他的点被拉到正确的位置。
t-SNE visualization of the bilingual word embedding. Green is Chinese, Yellow is English. (Socher et al. (2013a))
在双语词语嵌入中,我们学习了两种非常相似类型数据的共享表示。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-bAEdf4vu-1711096321134)]
[外链图片转存中…(img-l3nfAtMa-1711096321135)]
[外链图片转存中…(img-Bq4WyFmL-1711096321135)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。