​AAAI 2023 | 利用脉冲神经网络扩展动态图表示学习

news2024/11/21 11:04:57

2a99c47b03ac23a241599a9648264c00.gif

©PaperWeekly 原创 · 作者 | 李金膛

单位 | 中山大学博士生

研究方向 | 可信图学习

2020 年国家双碳战略的确立与实施,绿色低碳已经成为全社会的重要议题,也是科技从业者的重要使命和责任。有文献指出,从 2012 年到 2018 年,用于深度学习的计算资源消耗增长了 30 万倍,高能耗的特点使得深度学习广受诟病。在深度学习算法在工业届的应用日益增多的今天,算法效率和可扩展性成为制约其更加广泛应用的一个关键因素,如何构建鲁棒、有效、低能耗的预测模型,是一个重要的研究方向。

本文基于第三代人工神经网络——脉冲神经网络,聚焦于动态图表示学习场景,提出一种绿色高效的动态图表示学习方法。

8efcc7c85b314aeda2ca789a7f7dbf4f.png

论文题目: 

Scaling Up Dynamic Graph Representation Learning via Spiking Neural Networks

论文链接:

https://arxiv.org/abs/2208.10364

代码链接:

https://github.com/EdisonLeeeee/SpikeNet

d79f19f663601d7062f4fbfdddc4a8e7.png

脉冲神经网络技术背景

随着深度学习技术的不断发展,模型算力得到了很大提升,但与此同时也面临着一个关键问题:神经网络涉及的计算成本和能耗究竟有多大?

如图 1 所示,根据马萨诸塞大学研究人员公布的最新研究 [1],训练一个常见的大型深度学习模型,该过程可排放超过 626,155 磅二氧化碳,相当于一辆普通汽车寿命周期碳排放量的 5 倍,一个普通人一生碳排放量的 57 倍。该研究结果揭示了目前 AI 领域面临的一个严峻问题:深度学习模型训练过程成本高昂,并且随着算力的提升,这一问题会日趋严重。

e4606f617bd3d06f5e7ccb2e863a390f.png

▲ 图1:二氧化碳排放量估计对比图[1]

尽管传统的人工神经网络在多项任务上取得了突破性的进展,但是能耗问题 却限制了其更加广泛的部署应用,为解决这一问题,脉冲神经网络(Spiking Neural Network,SNN)被提了出来。基于类脑计算框架下的 SNN 以脉冲神经元为基本计算单元,通过稀疏脉冲序列传递信息,被称为能耗更低的新一代绿色人工智能技术。

IF(Integrate-and-Fire)[2] 是一类经典的脉冲神经元模型,其假设脉冲神经元是一个理想的电容器,随着时间流逝逐渐累积电荷并且不存在任何泄露。因此,当施加在电容器上的电压越大,进入电容器的电荷就越多。这一关系可由公式 表示,其中 为电荷量, 为膜电压, 为电容常数。为描述神经元状态随时间变化情况,通过对时间进行微分,可以改写成如下的微分方程:

bb09f22afe604c7772bec4688b59d8c2.png

其中 为当前时刻 的输入电流。当膜电压积累的电荷超过阈值 时发射脉冲,并消耗神经元之前积累的电荷,电压下降至静息电位 ,神经元处于静息状态。然而,实际情况中,神经元并不是完美的电容器。相反,随着时间的推移,它们会慢慢地泄漏电流,将膜电压拉回到静息电位。

为了更好地模拟这一现象,研究人员提出了 LIF(Leaky Integrate-and-Fire)[3] 模型。LIF 通过额外引入一个衰减项,并将神经元的状态变化活动描述为电压输入和环境损耗的共同作用控制。

29d74da971507c3d0a9c845568279268.png

▲ 图2:LIF神经元的生物特性与电特性示意图

如图 2 所示,基于 LIF 模型的神经元可以看出是额外与一个电阻并联的电容器。因此,可以将上述的微分方程改写为:

55c726233805010577e6361942a83100.png

其中, 为当前膜电压输入。 是一个与神经元有关的超参数,用于控制膜电位衰减的速度。将上式微分方程作一阶展开,即可得到 LIF 神经元的膜电压更新公式:

d76658fd09c3779607cd37bc42d70974.png

91066a9d2a04dc83be5ba7596b839a58.png

方法介绍

现有的动态图表示学习方法,以 TGAT [4] 和 EvolveGCN [5] 为例,主要通过将静态图场景上的图表示学习方法(GNN)与时序模型结合(如 RNN 类方法 LSTM、GRU 等)。尽管在建模动态图数据上取得了一定的效果,但是仍然不可避免地受到了计算效率的制约而无法扩展至更大规模数据场景下。

fa9709b9a9bf8b7f925c9af8d4eeb030.png

▲ 图3 现有GNN+RNN类方法的原理及缺陷

为解决动态图表示学习在大规模图数据场景下的效率问题,本文题出了 SpikeNet,一个基于 SNN 的可扩展动态图表示学习框架。

a76ab7eb5c57c838b59616dcd7a96b0a.png

▲ 图4:SpikeNet算法整体框架图

SpikeNet 整体框架如图 4 所示。SpikeNet 聚焦于离散时间图序列,对于每个时间戳的图快照,SpikeNet 首先采样节点的邻居子集并聚合邻居信息,然后使用 LIF 模型将邻域聚合得到的信号作为输入,通过 Integrate-and-Fire 机制来捕捉图结构的动态变化,并输出脉冲序列信号。最后,通过对每个时间步长得到的脉冲信号使用池化操作得到最终的节点表征,用于后续的下游任务(如节点分类)学习。

2.1 脉冲神经网络:更加绿色高效的RNN替代方法

本文探索了一个新的方向,即我们可以使用 SNNs(如 LIF)而不是 RNNs(如 LSTM 和 GRU)作为时序架构来捕捉图序列中的动态模式。相比于 RNNs 类模型,SNNs 参数量少(几乎无训练参数)、计算效率高(可以完全不涉及矩阵乘法),具有构建鲁棒、有效、低能耗的预测模型的巨大潜力。

回顾前文,LIF 的神经元行为是由一系列的事件来表征的,即 Integrate,Fire 和 Reset。对于每个时间戳,LIF 模型中的每个神经元根据其记忆的状态和当前输入更新膜电位,然后在膜电位达到阈值  时发射脉冲。发射脉冲之后,膜电位就会被重置到一个特定的值 ,然后重新开始下一轮的输入-发射-重置过程。每一层的神经元根据从上一层收到的输入信号经历这一过程。相应地,每个神经元都会为后续层产生一个脉冲序列作为输入。

然而,先前的工作通常对不同层的每个 LIF 神经元采用固定的发射阈值 ,从而潜在限制了其灵活性和表达能力。为了解决这个问题,本文首先提出了一个神经元阈值的自适应更新策略,能够根据当前阈值和接收的脉冲输入计算神经元的动态阈值变化:

26c79b53a92a08d8542472eef6c6b2ba.png

其中 和 是在用于调整发射阈值的衰减因子。 是输入 0-1 脉冲序列,代表一个神经元在 时间是否发射脉冲。根据上式,发射阈值 就可以根据神经元的动态变化进行适应性调整。最后,结合了自适应阈值调整策略的 LIF 模型可由如下的式子表示:

fd5076d91e9b48ccae1f157bea55d3c7.jpeg

其中 表示当神经元接收来自先前神经元的输入时模型的更新行为,本文采用了 LIF 模型的衰减式更新方式。在神经元输出中发射和产生脉冲的决定是根据Heaviside 阶跃函数 进行离散化的,其定义为:如果 ,否则为 。

bdaa7cb37263bcb040935520b4f6682d.png

▲ 图5 LIF模型更新过程

结合了神经元阈值动态更新策略后,LIF 模型的整个更新过程如图 5 所示。通过不断充电、放电以及动态重置调整,LIF 模型可以捕获动态时间信息并在每个时间段输出一定数量的脉冲。

为方便起见,本文将上述过程简化为 , 为接收输入 时的 LIF 模型。对于每个时间步 ,输入 是图神经网络聚合得到的邻域信息,而输出 是中间节点表征的脉冲序列。

2.2 动态邻居采样与邻居聚合

接下来,本文将介绍 SpikeNet 如何在每一层和时间步 中聚合邻域信息为 作为 LIF 模型的输入。对于每个时间戳输入的图结构快照,我们可以直接利用 GraphSAGE 论文 [6] 中提出的邻居采样方法,采样输入节点的 跳子图作为图神经网络模型的输入。然而,GraphSAGE 主要应用于静态图数据,如果直接将其采样方法应用于动态图数据场景容易忽略动态时间变化信息。因此,本文提出使用如下的采样方式:

1cb8cd100fc535e36e8b3c1222e0c637.png

▲ 图6 动态邻居采样示意图

f5dc01614956c6d5796f08e4df97293a.png

其中, 为图采样器,可以为 GraphSAGE 论文所提的均匀采样器或者随机游走采样器。 表示在 时刻新增的子图结构,且 。上述采样步骤结合了每个时间步的宏观演化信息(macro-dynamics)微观动态信息(micro-dynamics)来学习节点表征。直观地说,微观动态信息捕捉到了节点表征的细粒度结构和时间属性,而宏观演化信息则从全局角度探索动态图的演化模式。

接着,可以根据采样的邻居子图进行节点表征更新:

91fe9f6b1dd19f432213a1bb57164589.png

▲ 图7 消息聚合示意图

dd36202b1446fadfb10e883ddff406b0.png

7a8c84c8549bdfec7341a27dd7bffaca.png

每一层得到的脉冲序列都会输入 LIF 模型 ,进行神经元充放电更新,从而得到节点的隐藏层表征(脉冲序列)。最后,采用对每个时间步得到的脉冲序列进行池化操作得到最终的输出:

c3a6fb33cbfc9375f58024ca9829c02e.png

这里的池化函数可以有很多选择,例如 Mean, Sum, 或者采用更加高级的如 Attention 注意力机制。本文仅简单采用了一层全连接网络得到最终的输出:

cdb0682a0924b635f88643451026e12f.png

即为节点 的表征,可用于后续的节点分类或链路预测任务。

2.3 Masked Summation运算机制

6a21ceaec625294d5575bfb4e13a38b0.png

▲ 图8 Masked Summation运算示意图

脉冲神经网络的一大优势是使用离散脉冲而不是实值进行消息传递,这一特性使得我们可以更进一步地优化其计算方式。如图 8 所示,在消息聚合阶段,我们可以将矩阵乘法简化为 Masked Summation 运算,一种简单的索引求和的计算方式,从而避免了复杂的矩阵运算。

2.4 替代梯度训练

相较于人工神经网络的广泛使用,脉冲神经网络受限于难以训练的问题无法大规模进行应用。这是由于生成二值脉冲序列的阶跃函数  不可导性,导致无法采用梯度下降方法直接进行训练。梯度下降方法的广泛使用造就了人工神经网络的大流行,相反,至今鲜有能够有效训练脉冲神经网络的方法。

406a7721f65208ed2bbdc6e110bf81ed.png

▲ 图9 替代梯度训练过程前向传播与反向传播示意图

尽管无法直接使用梯度下降优化脉冲神经网络,研究人员也提出了各种有效的训练方式,其中使用较为广泛的是替代梯度训练方法。本文即采用替代梯度训练方法对 SpikeNet 进行优化训练。具体优化方式如图 9 所示:

前向传播时,模型仍然采用阶跃函数 得到输出的脉冲序列;

反向传播时,采用阶跃函数 的一个平滑替代函数进行梯度计算求导。 的平滑替代函数有很多,本文简单起见采用了如平滑化的 sigmoid 函数,定义为 ,其导数为:

64c5065becd5d53003c759b591110093.png

其中, 为平滑因子,用于控制 sigmoid 函数的平滑程度。 越大,越接近于 函数,但容易在函数两端出现梯度消失或梯度爆炸现象。

3431a2702747b8e8867e607859eff3e9.png

实验结果

实验在三个大规模动态图数据集上进行,任务为动态图节点分类,评价指标为Macro-F1 & Micro-F1。

a2f948335facbbffcc026f9a4217b7c6.png

▲ 表1 与常用动态图表示学习算法在三个数据集上的节点分类准确率比较

从表 1 可以看出,尽管 SpikeNet 使用了离散脉冲序列作为层与层之间的消息传递载体,其分类准确率仍然优于大部分基于实值输入的对比方法。

b661e75c9e938e1ecfc77d0f9f1b8013.png

▲ 图10 不同方法(a)参数量和(b)训练时间对比

图 10 关于参数量与训练时间的比较也说明了 SpikeNet 的优越性。借助于脉冲神经网络使用离散脉冲传递的特征,SpikeNet 展示了构建鲁棒、有效、低能耗的预测模型的巨大潜力。

7e3a8644e0df34239a65a1d44929718b.png

▲ 图11 动态阈值调整策越相关参数实验

图11关于参数 和 说明了本文提出的动态阈值调整策的有效性。当 和 ,SpikeNet 取得了最优的表现。

fe3608fe5f20b041c6a2a39702b7a9a9.png

▲ 图12:SpikeNet在不同时间段的平均脉冲发射频率

此外,受益于内在的神经元动力模式及基于脉冲的消息通信范式,脉冲神经网络可以很容易地应用于一些专门的神经形态硬件加速训练和推理,如 Intel Loihi [7]。脉冲发射频率是衡量脉冲神经网络效率一个重要属性,因为能量消耗与脉冲的数量成正比。

图 12 可视化了不同时间段中 SpikeNet 的平均脉冲发射频率,可以看到,在初始的时间步长内,SpikeNet 的脉冲发射频率较低,而随着时间的推移,频率之间增大,说明了不同数据集中,图结构信息随着图演化逐渐增大。从整体来看,SpikeNet 在所有时间步的平均脉冲发射频率为 20%-30% 左右,这说明 SpikeNet 的中间节点表示是非常稀疏的(只有 20%-30% 的元素是非零的)。

换句话说,我们只需要大约20%-30%的内存来存储中间节点的表示。 此外,由  SpikeNet 学习的嵌入向量的每个维度仅由 1 位编码(二进制脉冲),与实值嵌入向量不同,后者至少由 32 位编码。因此,二值化的节点表征也可以大大减少内存和时间成本

12efe09ca121bcc4d313366cd051b6da.png

总结

本文先介绍了脉冲神经网络的技术背景,并提出使用脉冲神经网络替代 RNN 作为动态图表征学习中的时序模型。通过算法创新提出 SpikeNet,以 LIF 模型结合动态阈值策略作为时序模型,使用动态邻居采样与邻居聚合捕获动态图结构信息,最后利用替代梯度训练方法解决脉冲神经网络难以训练的问题。实验结果表明,SpikeNet 以较低的时间与空间开销获得了更高的预测准确率,展示了构建鲁棒、有效、低能耗的预测模型的巨大潜力。

outside_default.png

参考文献

outside_default.png

[1] Strubell E, Ganesh A, McCallum A. Energy and policy considerations for deep learning in NLP[J]. arXiv preprint arXiv:1906.02243, 2019.

[2] Salinas E, Sejnowski T J. Integrate-and-fire neurons driven by correlated stochastic input[J]. Neural computation, 2002, 14(9): 2111-2155.

[3] Gerstner W, Kistler W M, Naud R, et al. Neuronal dynamics: From single neurons to networks and models of cognition[M]. Cambridge University Press, 2014.

[4] Xu D, Ruan C, Korpeoglu E, et al. Inductive representation learning on temporal graphs[J]. arXiv preprint arXiv:2002.07962, 2020.

[5] Pareja A, Domeniconi G, Chen J, et al. Evolvegcn: Evolving graph convolutional networks for dynamic graphs[C]. Proceedings of the AAAI Conference on Artificial Intelligence. 2020, 34(04): 5363-5370.

[6] Hamilton W, Ying Z, Leskovec J. Inductive representation learning on large graphs[J]. Advances in neural information processing systems, 2017, 30.

[7] Davies M, Srinivasa N, Lin T H, et al. Loihi: A neuromorphic manycore processor with on-chip learning[J]. Ieee Micro, 2018, 38(1): 82-99.

更多阅读

a3d0e2b8f79392b3dc66f8d2e3210fd6.png

3c156d994e9abd4e7a1fc12607457375.png

68e7078d51e1b2f266243ab2873b7f87.png

54c8f3fadb31fdb1b5ee9c92dd343834.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

c79a46d584f2b9d62564d2d6d22e63ce.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

49d4ca64c9e4d0a296b0f247925fdfe8.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CountDownLatch与CyclicBarrier原理剖析

1.CountDownLatch 1.1 什么是CountDownLatch CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之…

分布式算法 - Snowflake算法

Snowflake,雪花算法是由Twitter开源的分布式ID生成算法,以划分命名空间的方式将 64-bit位分割成多个部分,每个部分代表不同的含义。这种就是将64位划分为不同的段,每段代表不同的涵义,基本就是时间戳、机器ID和序列数。…

注意力机制详解系列(二):通道注意力机制

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐: 目前在写CV方向专栏,更新不限于目标检测、…

锁屏面试题百日百刷-Hive篇(三)

锁屏面试题百日百刷,每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn/#/introductionPage。已收录了每日更新的面试题的所有内容,还包含特色的解锁屏幕复习面试题、每日编程题目邮…

函数库Rollup构建优化

本节涉及的内容源码可在vue-pro-components c7 分支[1]找到,欢迎 star 支持!前言本文是基于ViteAntDesignVue打造业务组件库[2] 专栏第 8 篇文章【函数库Rollup构建优化】,在上一篇文章的基础上,聊聊在使用 Rollup 构建函数库的过…

【从零开始制作 bt 下载器】一、了解 torrent 文件

【从零开始制作 bt 下载器】一、了解 torrent 文件写作背景了解 torrent 文件认识 bencodepython 解析 torrent 文件解密 torrent 文件结尾写作背景 最先开始是朋友向我诉说使用某雷下载结果显示因为版权无法下载,找其他的下载器有次数限制,于是来询问我…

Redis学习笔记(二)Redis基础(基于5.0.5版本)

一、Redis定位与特性 Redis是一个速度非常快的非关系数据库(non-relational database),用 Key-Value 的形式来存储数据。数据主要存储在内存中,所以Redis的速度非常快,另外Redis也可以将内存中的数据持久化到硬盘上。…

[SSD综述 1.3] SSD及固态存储技术半个世纪发展史

在我们今天看来,SSD已不再是个新鲜事物。这多亏了存储行业的前辈们却摸爬滚打了将近半个世纪,才有了SSD的繁荣, 可惜很多前辈都没有机会看到。所有重大的技术革新都是这样,需要长期的技术积累,一代一代的工程师们默默的…

华为OD机试用Python实现 -【狼羊过河 or 羊、狼、农夫过河】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲狼羊过河 or 羊、狼、农夫过河题目描述输入描述输出描述说明示例一输入输出说明Python 代码实现代码实现思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址…

学到贫血之-贫血模型和充血模型

学习自:设计模式之美 1 基于贫血模型的传统开发模式 // ControllerVO(View Object) public class UserController {private UserService userService; //通过构造函数或者IOC框架注入public UserVo getUserById(Long userId) {UserBo userBo userService.getUser…

【华为OD机试模拟题】用 C++ 实现 - 相对开音节(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明相对开音节题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…

【云原生】搭建k8s高可用集群—20230225

文章目录多master(高可用)介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…

《痞子衡嵌入式半月刊》 第 72 期

痞子衡嵌入式半月刊: 第 72 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue&#xff0c…

【华为OD机试模拟题】用 C++ 实现 - 求解连续数列+和最大子矩阵(2023.Q1 双倍快乐)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明求解连续数列题目输入输出描述示例一输入输出Code和最大子矩阵题目输入输出示例一输入输出说明

CMU15-445 Project.0总结

在线测试 本地测试 Project #0 - C Primer 以下是Project #0的网址,2022FALL的Project #0本质上是实现一棵字典树,关于字典树的相关内容可以参考C实现字典树。 在本题中,为了存储对应着字符串的任意类型值,题目设计了一个Tri…

CV——day79 读论文:基于小目标检测的扩展特征金字塔网络

Extended Feature Pyramid Network for Small Object DetectionI. INTRODUCTIONII. RELATED WORKA. 深层物体探测器B. 跨尺度特征C. 目标检测中的超分辨率III. OUR APPROACHA. 扩展特征金字塔网络B. 特征纹理传输C. 交叉分辨蒸馏IV. EXPERIMENTSA. Experimental Settings1&…

SEATA是什么?它的四种分布式事务模式

一、SEATA是什么? Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 在继续学习使用SEATA之前,对s…

电子科技大学数据库与软件工程实验五

适用于网工和物联网专业 期末考试会考 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1. 权限管理 2. 数据库备份 3. 生成 AWR 报告 五、实验结论及思考题 六、总结及心得体会 七、对本实验过程及方法、手段的改进建议 一、实验目的 1、掌握…

工作九年的机器人讲师收入如何

如下都是个人情况,供各位朋友参考,仅为个人情况,只代表我个人。为何写这样一篇博客:看了最近的热点我在一所普普通通的不知名高校工作了九年。如果问及我存款……我实在是非常非常惭愧的。真实数值如下(组合贷&#xf…

【数据库】第八章 数据库编程

第八章 数据库编程 8.1 嵌入式SQL&#xff08;C语言版&#xff09; 被嵌入的语言&#xff08;java ,C)等被称为宿主语言&#xff0c;简称主语言 当主语言 为 C 语言的时候 ​ 语法格式为 EXEC SQL <SQL语句>当主语言为java的时候 格式为 #SQL {<SQL语句>}以下讲解…