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

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

李宏毅老师深度学习系列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

相关文章
|
7月前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
352 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
5月前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
129 8
|
6月前
|
机器学习/深度学习 数据采集 算法
基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真
本项目基于Matlab2022a实现MQAM调制类型识别,使用MobileNet深度学习网络。完整程序运行效果无水印,核心代码含详细中文注释和操作视频。MQAM调制在无线通信中至关重要,MobileNet以其轻量化、高效性适合资源受限环境。通过数据预处理、网络训练与优化,确保高识别准确率并降低计算复杂度,为频谱监测、信号解调等提供支持。
|
6月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
364 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
6月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
7月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
523 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
8月前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
244 18
|
26天前
|
机器学习/深度学习 算法 机器人
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
152 15
|
29天前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
27天前
|
机器学习/深度学习 数据采集 边缘计算
【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)
【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)
102 15

热门文章

最新文章