循环神经网络 - 扩展到图结构之递归神经网络
本文我们来学习递归神经网络(Recursive Neural Network,RecNN),其是循环神经网络在有向无循环图上的扩展 。
递归神经网络是一类专门设计来处理具有层次结构或树形结构的数据的神经网络模型。它与更常见的循环神经网络(Recurrent Neural Network, RNN)在处理数据的方式上有所不同。
递归神经网络的一般结构为树状的层次结构:

上图所示的递归神经网络具体可以写为:

其中 𝜎(⋅) 表示非线性激活函数,𝑾 和 𝒃 是可学习的参数.同样,输出层 𝑦 可以为 一个分类器,比如:

当递归神经网络的结构退化为线性序列结构时,递归神经网络就等价于简单循环网络。
下面将从原理、结构以及具体案例三个方面来解释这一模型,同时说明它与简单循环网络的联系和区别。
1. 递归神经网络的基本原理
-
数据结构导向
递归神经网络主要用于处理树形结构的数据,例如语句的句法解析树、情感分析中短语的结构、或抽象语法树等。它假设输入数据天然地构成一个分层的结构,每个节点代表了一个局部单元(如单词或短语),而非简单地按照时间顺序排列。 -
递归组合操作
在递归神经网络中,模型会对树的每个内部节点进行递归计算。具体来说,对树中每个非叶子节点,其向量表示通常通过对其子节点表示进行组合来获得。数学上可以表示为:
其中,hp 表示父节点的表示;hc1,hc2,…,hck 分别表示该父节点的各个子节点表示;矩阵 W 和偏置 b 是该递归组合操作的共享参数;ff 是非线性激活函数。整个树中,这一相同的组合函数被递归地应用,每次都是利用相同的参数来获得更高层次的抽象。
-
参数共享
与循环神经网络类似,递归神经网络在整个树结构中对所有组合操作使用相同的一组参数。这种参数共享使得模型不仅能减少需要学习的参数量,还能捕捉数据结构中普遍存在的规则和规律。
2. 与简单循环网络的联系和区别
联系
-
核心思想相似
无论是递归神经网络还是循环神经网络,都利用了“重复应用相同函数”的思想。两者都通过不断组合前面的信息来构建更复杂的表示,并且都采用参数共享的方式,从而简化模型学习问题。 -
参数共享机制
二者在各自的结构中都使用了相同的参数对多次重复的操作进行计算,只不过递归神经网络是在树的不同层次上递归应用,而循环神经网络则是在时间步骤上反复应用同一操作。
区别
-
数据结构不同
-
递归神经网络(RecNN):针对树形或层次结构数据,适用于解析具有自然层次结构的问题,如自然语言中的句法树、情感分析的短语递归组合、图像场景分割中的层次关系等。
-
循环神经网络(RNN):针对一维序列数据,例如时间序列、语音、文本、视频帧等,利用前一个时间步的隐藏状态来预测当前或未来的状态。
-
-
信息组合方式
在递归神经网络中,一个节点的表示通常同时依赖多个子节点的信息(如左右子节点或多个分支),而在简单循环神经网络中,当前状态通常仅依赖于当前输入和前一个时间步的隐藏状态,形成一条链式信息流。 -
应用场景
-
递归神经网络常用于需要理解数据内部结构层次(比如理解一个句子的整体语义)的任务。
-
循环神经网络更适合需要处理连续时间依赖信息(如语言生成或时间序列预测)的任务。
-
3. 具体案例
例子:自然语言处理中的句法分析
假设我们有一句话“这个电影非常精彩”,可以将其句子转化成一棵句法树,树中每个叶子节点是单词,而非叶子节点代表短语。
-
递归神经网络的应用:
-
叶子节点:各单词首先通过词嵌入获得对应的向量表示;
-
组合操作:然后使用相同的递归网络组合这些单词向量,首先合并构成短语,例如将“这个电影”组合成一个短语表示,再将“非常”和“精彩”组合,然后将这两个短语的表示再递归组合成整个句子的表示;
-
这种自底向上的组合能够有效捕捉句子内部语法和语义的层次关系,生成一个整体句子表示供后续任务(如情感分类或机器翻译)使用。
-
相较之下,若采用简单的循环神经网络处理同样的句子,信息会沿着时间序列顺序传递,主要依赖上一时刻的隐藏状态,未必能充分利用句子结构中的层次信息。
4. 参数学习
递归神经网络(Recursive Neural Network, RecNN)的参数学习本质上也是基于梯度下降的优化过程,不过由于其特殊的树形(或更一般的递归)结构,其误差传播方式需要“沿树”进行,即“结构反向传播”(Backpropagation Through Structure, BPTS)。
(1)前向传播和表示组合
在递归神经网络中,每个内部节点的表示是通过对其子节点表示进行组合来获得的。例如,对于一个二叉树结构,一个父节点的向量表示可写作:

其中:
-
h_{left} 和 h_{right} 是左右子节点的表示,
-
W 是组合权重矩阵,
-
b 是偏置,
-
f 是非线性激活函数(如 tanh 或 ReLU)。
这一过程会递归地向上计算,直到生成根节点或最终任务所需的整体表示。
(2)损失函数定义
通常,在某个高层(例如根节点)会得到一个整体表示,然后根据该表示完成某项任务(如分类、情感分析等)。这时我们会定义一个损失函数,如交叉熵(对于分类任务)来衡量预测输出与真实标签之间的差距。

(3) 反向传播——结构反向传播(BPTS)
由于递归神经网络的前向计算在树的不同节点上共享同一组参数(例如组合矩阵 W 和偏置 b),在反向传播阶段需要沿着整棵树“展开”来计算梯度,这个过程称为结构反向传播:
-
梯度从根节点开始计算
根据损失函数对根节点输出的偏导数开始,利用链式法则把误差逐层传递到各个子节点。由于每个父节点的输出依赖于它的所有子节点,梯度计算时需要对这些依赖关系进行累加。 -
参数的梯度累加
由于所有节点都使用了相同的参数(例如 W),在整棵树上每次组合操作对参数的贡献都会被计算出来,然后将所有这些梯度累加,得到该参数的总梯度。 -
利用梯度下降更新参数
更新方式与其他深度学习模型类似,例如使用标准的随机梯度下降(SGD)或者自适应方法如 Adam 更新参数:
(4)举个具体例子
假设我们用于情感分析的递归神经网络,其任务是根据一个句子的语法解析树判断情绪。
-
前向传播:
-
每个叶节点(单词)通过词嵌入转换为向量表示。
-
按照树结构,底层的短语节点利用公式
递归计算,从而得到整个句子的表示。
-
-
损失计算:
-
将句子表示输入一个分类层(例如全连接层 + softmax),输出情绪类别概率。
-
利用交叉熵损失计算误差。
-
-
反向传播:
-
损失从句子表示(根节点)反向传播到各个短语节点,再到叶节点。
-
每次梯度计算都使用链式法则,累加到共享参数 W 和 b 上。
-
-
参数更新:
-
使用梯度下降优化算法更新 W 和 b,使得整个树的节点表示逐渐能够更好地反映正确的情绪信息。
-
递归神经网络利用结构反向传播(BPTS)来更新在树形结构中共享的参数,通过在树上从根到叶逐层反传梯度,结合链式法则累积来自各路径的梯度,最终使用优化算法更新参数,从而实现模型在如句法解析、情感分类等任务上的有效学习。这一过程与传统神经网络的反向传播类似,但其梯度传播必须适应数据的树状结构,使得参数能够捕捉到数据中固有的层次关系。
5.结语:
递归神经网络通过将输入数据视为树或层次结构,使用相同的组合函数递归地将子结构信息合成更高层次的表示,非常适合处理具有内在层次结构的问题,如句法解析和情感分析。它与简单循环网络共享“信息传递”与“参数共享”的基本思想,但处理的数据结构和信息组合方式有所不同。理解递归神经网络,可以联想到在一棵树上自下而上地整合各个“叶子”节点的信息,逐步构建出整个树的综合表示。
相关文章:
循环神经网络 - 扩展到图结构之递归神经网络
本文我们来学习递归神经网络(Recursive Neural Network,RecNN),其是循环神经网络在有向无循环图上的扩展 。 递归神经网络是一类专门设计来处理具有层次结构或树形结构的数据的神经网络模型。它与更常见的循环神经网络(Recurrent Neural Net…...
【Kubernetes基础--Pod深入理解】--查阅笔记2
深入理解Pod 为什么要有个Pod1. 容器协作与资源共享2. 简化调度和资源管理3. 设计模式支持 Pod 基本用法Pod 容器共享 VolumePod 的配置管理ConfigMap 概述创建 ConfigMap 资源对象在 Pod 中使用 ConfigMap使用 ConfigMap 的限制条件 为什么要有个Pod Pod 的引入并非技术冗余&…...
【euclid】10.3 2D变换模块(transform2d.rs)bytemuck trait
这段代码是一个 Rust 的 unsafe trait 实现,用于标记 Transform2D 类型在特定条件下可以安全地被视为由全零字节组成的有效实例。让我们详细解释每个部分: 代码分解: #[cfg(feature "bytemuck")] unsafe impl<T: Zeroable, S…...
Maven超级详细安装部署
1.到底什么是Maven?搞清楚这个 Maven 是一个项目管理工具,主要用于 Java 项目的构建、依赖管理和文档生成。 它基于项目对象模型(POM),通过 pom.xml 文件定义项目的配置。 (简单说破:就是工程…...
C# + Python混合开发实战:优势互补构建高效应用
文章目录 前言🥏一、典型应用场景1. 桌面应用智能化2. 服务端性能优化3. 自动化运维工具 二、四大技术实现方案方案1:进程调用(推荐指数:★★★★☆)方案2:嵌入Python解释器(推荐指数࿱…...
云服务模式全知道:IaaS、PaaS、SaaS与DaaS深度解析
云服务模式详解:IaaS、PaaS、SaaS与DaaS 在当今数字化快速发展的时代,云计算已经成为企业和开发者不可或缺的一部分。它提供了灵活的资源和服务,使得用户可以根据自己的需求选择最合适的解决方案。本文将详细介绍四种主要的云服务模式&#…...
电机控制-隆博戈观测器(Luenberger state observer)
本文围绕基于无传感器控制策略的状态观测器展开,介绍其在电机领域的应用、原理、性能表现及无传感器驱动的优劣: 应用场景:适用于燃油泵、风扇等大量固定转速和低成本应用场景。工作原理:状态观测器利用完整的电机微分模型&#…...
RK3506+net9+VS2022跨平台调试C#程序
下载GetVsDbg.sh ,这脚本会下载一个压缩包,然后解压缩,设置x权限等等。但是目标板子连不上,就想办法获取到下载路径,修改这个脚本,显示这个下载链接后,复制一下,用电脑下下来 修改好…...
【16】数据结构之基于树的排序算法篇章
目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想:从待排序的序列中选出最大值或最小值,交换该元素与待排序序列的头部元素,对剩下的元…...
华熙生物亮相消博会,这次又带来了什么样的变化?
首先,从展示层面来看,华熙生物在消博会上构建科技桥梁,展台主视觉展示糖生物学发展历程与自身发展交织历程,这象征着中国生物科技企业从产业突围到定义全球标准的蜕变。这一展示不仅提升了华熙生物的品牌形象,更向外界…...
python自动化浏览器标签页的切换
#获取全部标签页的句柄返回句柄的列表 handleswebdriver.window_handles#获取全部标签页的句柄返回句柄的列表 print(len(handles)) 切换标签页 handleswebdriver.window_handles webdriver.switch_to.window(handles[index])#切换到第几个标签页就写几 关闭标签页 关闭标…...
大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机
摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5,该产品集成地瓜机器人 RDK X5 开发者套件,深度整合双方在硬件研发与智能计算领域的技术优势,实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...
Redis 数据类型全解析:从基础到实战应用
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis 作为高性能的键值对存储系统,其丰富的数据类型是实现复杂业务逻辑的核心优势。本文将深入解析 Redis 六大核心数据类型及扩展类型ÿ…...
第一天 unity3D 引擎入门
一、为什么选择Unity进行3D开发? Unity作为全球使用最广泛的游戏引擎,在2022年的开发者调查中占据了62%的市场份额。它不仅支持3D/2D游戏开发,更在VR/AR、工业仿真、影视动画等领域大放异彩。对于初学者而言,Unity的独特优势在于…...
【初阶数据结构】——算法复杂度
一、前言 1、数据结构是什么? 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结构, 如&…...
MySQL:存储函数和存储过程
系列文章目录 1.MySQL编程基础 2.程序控制流语句 3.存储过程 4.游标 5.嵌入式SQL 文章目录 系列文章目录前言一、程序控制流语句:二、存储函数: 1.存储函数的特点:2.存储函数的定义:3.调用存储函数 三、存储过程:…...
常见的 API 设计风格
在软件开发中,常见的 API 设计风格主要有以下几种,每种风格适用于不同的场景和需求: 1. RESTful API (主流) 特点: 基于 HTTP 协议,使用标准方法(GET/POST/PUT/DELETE)资源导向(UR…...
Google-A2A协议全面解析:一文掌握Agent-to-Agent协议的核心与应用
前言: 在当今人工智能技术飞速发展的时代,智能体(Agent)已悄然融入我们生活的各个角落。无论是个人智能助手,还是企业的自动化工具,各类AI代理的应用愈发广泛。但目前这些智能体之间大多处于孤立状态&…...
Linux-服务器添加审计日志功能
#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…...
基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)
👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… 💫签名:面朝大海,春暖花开! 基于机器视觉的多孔零件边缘缺陷检测(源码C、ope…...
汇川PLC通信
汇川PLC通信协议及读写 引言 汇川PLC(Programmable Logic Controller,可编程逻辑控制器)广泛应用于工业自动化领域。汇川PLC支持多种通信协议,包括Modbus、Ethernet/IP、PPI等。本文将详细介绍汇川PLC的通信协议,并通…...
如何使用AI辅助开发CSS3 - 通义灵码功能全解析
一、引言 CSS3 作为最新的 CSS 标准,引入了众多新特性,如弹性布局、网格布局等,极大地丰富了网页样式的设计能力。然而,CSS3 的样式规则繁多,记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中,…...
MySQL入门:数据表的创建
今天我们来介绍一下除HTML外的另一种语言:MySQL语言; MySQL:即一种用于管理和处理关系数据库的标准语言。要用于执行查询、更新、管理数据库中的数据以及定义和操作数据库结构。 接下来我会逐一介绍它的作用以及其中数据表,数据…...
数据库的基本原则
数据库的核心原则 原子性与持久性:原子性(Atomicity)确保一个事务中的所有操作要么全部完成,要么完全不执行,不会出现部分完成的情况。持久性(Durability)则保证一旦事务提交成功,即…...
Rust 中的Relaxed 内存指令重排演示:X=0 Y=0 是怎么出现的?
🔥 Rust 中的内存重排演示:X0 && Y0 是怎么出现的? 在并发编程中,我们经常会听说“内存重排(Memory Reordering)”这个术语,但它似乎总是只出现在理论或者别人口中的幻觉里。本文将通过…...
C++进程间通信开发实战:高效解决项目中的IPC问题
C进程间通信开发实战:高效解决项目中的IPC问题 在复杂的软件项目中,进程间通信(Inter-Process Communication, IPC)是实现模块化、提高系统性能与可靠性的关键技术之一。C作为一门高性能的编程语言,广泛应用于需要高效…...
FPGA-DDS技术的波形发生器
1.实验目的 1.1掌握直接数字频率合成(DDS)的基本原理及其实现方法。 1.2在DE2-115 FPGA开发板上设计一个可调频率的正弦波和方波发生器,频率范围10Hz~5MHz,最小分辨率小于1kHz。 1.3使用Quartus II进行仿真,并通过S…...
C#实现通过MQTT Broker——EMQX发布订阅消息及其认证、授权的安全配置操作
一、准备内容 MQTT的构成、使用场景、工作原理介绍-CSDN博客文章浏览阅读656次,点赞7次,收藏12次。MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中…...
考研单词笔记 2025.04.15
addition n添加,增加,加法 additional a附加的,额外的 in addition 另外;除此之外;加之 augment v增加,增强,提高 explode v急剧增长,爆炸,爆发,迸发 gr…...
【双指针】三数之和(medium)
三数之和(medium) 题⽬描述:解法(排序双指针):算法思路:C 算法代码:Java 算法代码:注:数组转列表 题⽬链接:15. 三数之和 题⽬描述: …...
