递归神经网络|深度学习(李宏毅)(十六)

简介: 递归神经网络|深度学习(李宏毅)(十六)

李宏毅老师深度学习系列2020


一、递归神经网络与循环神经网络


该部分以情感分析任务为例来说明递归神经网络(recursive neural network)和循环神经网络(recurrent neural network)的关系。


如下图所示,在使用RNN来搭建情感分析神经网络模型时,我们首先使用word embedding的方法来将获取句子的embedding序列,然后将序列中的每一个token的embedding输入到RNN中,最后将最后一个时间点的输出向量输入到一个分类器(可以是一个前馈网络)中来完成情感分类任务。而使用递归结构时需要事先确定文本序列的结构信息,然后按照文本的结构来按顺序将embedding向量输入到QIBN`ZXATZ09H6@HV8M)8NE.png中,QIBN`ZXATZ09H6@HV8M)8NE.png可以是一个神经网络,最终需要将最后一个QIBN`ZXATZ09H6@HV8M)8NE.png的输入输入到分类器~0$R@BGU@PXY[6)3L7XE)}9.png中获得情感分类的结果:

V_{B3~{O(66614KUXALOZZV.png

                                            情感分析


循环神经网络可以看做递归神经网络的特殊情况,递归神经网络需要事先定义序列内token的关系来决定输入的顺序,只要定义这个顺序和循环神经网络一样,递归神经网络就成了循环神经网络。


二、递归神经网络


该部分以一个具体的例子来说明递归神经网络的设计。


  1. 架构

]C1VZL~BO5AUGKCLEP`P7TP.png

                                                     递归神经网络

通常Q74{1ZMS]WV@`_RUC{FFKKD.png不会是两个输入向量的简单相加,因为获取两个词结合起来的意思可能需要比较复杂的函数来拟合,举例来说:


Case1:

 not:neutral

 good:positive

 not good:negative

Case2:

 好棒:positive

 棒:positive

 好棒棒:negative


通过上面的例子可以想象两个词向量的简单相加是不能表达其结合起来的意义的,因此Q74{1ZMS]WV@`_RUC{FFKKD.png通常是一个神经网络。在下面两图中,我们使用蓝色来代表positive的意思,橙色来代表negative的意思。两张图分别表达了“not”要将跟其结合的词的意义转向(reverse),而“very”要将跟其结合的词的意义加强(emphasize),因此Q74{1ZMS]WV@`_RUC{FFKKD.png需要是一个复杂的神经网络:


E1H$8IO@WHFW4`~RKHC~[_5.png

                               not

T1)DS$HZCHKHO9M8Y4%QIOH.png

                           very

训练这个网络的整个过程如下,将所有词按照文法结构输入给Q74{1ZMS]WV@`_RUC{FFKKD.png,最终将Q74{1ZMS]WV@`_RUC{FFKKD.png的输入输入到分类器ZEI@R@H{JCAQK`HR{_1A86F.png中最终得到类别的分布,然后再将这个分布跟标签取loss然后更新网络的参数:


H6_]19G%K5`UT%N$IT7$~ZY.png

过程


  1. 网络Q74{1ZMS]WV@`_RUC{FFKKD.png的设计

前面说过,Q74{1ZMS]WV@`_RUC{FFKKD.png不能是两个输入向量的简单相加,下图这种Q74{1ZMS]WV@`_RUC{FFKKD.png的设计方式会使得输入向量ZOTTVKUE%(]H%TMQT4(_SP0.pngG{81F]~Q5CW]EB[5P7X}K(K.png由很少的交互,最终Q74{1ZMS]WV@`_RUC{FFKKD.png输出的Q$W5}2%ANOGJDFL@%0SD%RW.png的每一维度都只是ZOTTVKUE%(]H%TMQT4(_SP0.pngG{81F]~Q5CW]EB[5P7X}K(K.png的简单相加,因此Q74{1ZMS]WV@`_RUC{FFKKD.png仍需要更复杂的设计:


[I%)VATX909Z3VOZZ[VSTJN.png

                                         f的结构


  • Recursive Neural Tensor Network

下面介绍的这种Q74{1ZMS]WV@`_RUC{FFKKD.png的设计中包含了Tensor Network的结构,因此叫做Recursive Neural Tensor Network。下图展示了这种Q74{1ZMS]WV@`_RUC{FFKKD.png的具体设计:

8DNDC~7UEE97[PL~V``KZ6X.png

                                        Recursive Neural Tensor Network


我们定义(Q_5OZ@6)ZR%J3F9OSBOR(9.pngE3Z8L[@$%YZ~`UOUF3[AYLO.png拼接起来的向量为QB3L_VPS88250UENOM77Y4A.png,图中方框内的部分会得到一个标量(SH_7AJO{%18JI9K_%YPR3X.png,这样(Q_5OZ@6)ZR%J3F9OSBOR(9.pngE3Z8L[@$%YZ~`UOUF3[AYLO.png就因为有了更多的相乘的关系而有了更强的交互。这里使用了多个方框中的结构是为了能够得到一个向量与加号右边的部分相加。需要注意多个方框内的@6A7DEM3Q_CF)_Q_}((TZ(L.png是不同的。


  • Matrix-Vector Recursive Network


Matrix-Vector Recursive Network这种设计虽然在效果上不如上述方法,但其设计思想值得学习一下。这种方法做的主要的假设是一个词的embedding的一部分代表这个词的意义,另一部分代表这个词如何去影响别的词:


C1MVV@A7C0Z0K(5}MY(VUVR.png

                    假设


每个输入的词的一部分代表其含义,另一部分代表其如何影响别的词,我们将这一部分排列成一个矩阵。当两个词(以“not”和“good”为例)同时输入到函数Q74{1ZMS]WV@`_RUC{FFKKD.png中时,每个词的代表含义的向量将和另一个词的代表影响的矩阵相乘得到两个向量,然后将这两个向量拼接起来再乘以一个权重矩阵L%MW3Q243MJ(G@)OUPX[68D.png得到新的含义向量;每个词的影响矩阵会拼接到一起然后乘以一个一个权重矩阵)V2_BN960O{{GN_@D3H7)LF.png得到新的影响矩阵,然后将含义向量和影响矩阵排列成新的向量在通过激活函数就是Q74{1ZMS]WV@`_RUC{FFKKD.png的输出。该过程如下图所示:


N`}XKZG2$1Q87$XZ~A@I[JR.png

                             Matrix-Vector Recursive Network


可以推测,像“not”这样的中性词,其含义向量可能为`4ESG0FEOZDFL1(]EDFMQ(4.png,而其会将与之结合的词的意义反转,所以其影响矩阵可能为对角元素为(6M157UVBKD2}B1QFX70)J4.png的对角矩阵;而“good”对与之结合的词没有太大影响,其影响矩阵可能是单位矩阵。


  • Tree LSTM


L_06_)Z@5OB4$F~PWMPKEV1.png

                                                  LSTM


Tree LSTM也就是使用LSTM来充当递归神经网络的Q74{1ZMS]WV@`_RUC{FFKKD.png


770]Z({G[8FT6%A43ZEQYUT.png

                       Recursive Neural Network


这里的LSTM输入两个向量,每个向量都包含`59OS_I@ZKQB2CB[PU~CK)I.png3E42(D0NJCQXB89B4(5I){C.png,然后输出另一个`59OS_I@ZKQB2CB[PU~CK)I.png3E42(D0NJCQXB89B4(5I){C.png


`HZTV`L{(HL36`~)O`0RRTN.png

                                   Tree LSTM


三、应用


如果输入的序列有明显的结构层次(比如数学公式),那么使用递归神经网络会有比较好的效果,对于一般的文本递归神经网络的提升并不大,这是因为定义的文本结构也不一定是正确的。


除了应用在情感分析上,递归神经网络也有一些别的应用,比如评估句子相似度(sentence relatedness)。具体的做法是将两个句子输入到递归神经网络中得到其输出,然后将输出输入到一个别的神经网络中得到评估的结果:


ORZ@[KR6WD[_CB7R)W@X8FX.png

                      sentence relatedness


得到的效果如下,每句话前面的数字代表打分:


25`H_4N4AH([5ZTVGN[05PG.png

                            效果


上述例子的论文链接:https://arxiv.org/abs/1503.00075

相关文章
|
22天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
229 55
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
167 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
19天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
58 31
|
26天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
29天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
77 3
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。