深度学习基础
人工智能、机器学习、深度学习之间的关系
人工智能(Artificial Intelligence):计算机科学的一个分支。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
机器学习(Machine Learning):一种实现人工智能的方法。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
深度学习(Deep Learning):一种实现机器学习的技术。深度学习是机器学习领域中一个新的研究方向,学习样本数据的内在规律和表示层次。它的最终目标是让机器能够像人一样具有分析学习能力, 能够识别文字、图像和声音等数据。
神经元模型
y
=
f
(
∑
i
=
1
n
w
i
x
i
+
b
)
y = f(\sum_{i=1}^{n} w_ix_i+b)
y=f(i=1∑nwixi+b)
其训练的过程就是不断更新权重
w
w
w和偏置
b
b
b的过程,直到找到稳定的
w
w
w和
b
b
b使得模型的整体误差最小。
前馈神经网络(FNN)
前馈神经网络(全连接神经网络、多层感知机)
- 各神经元分别属于不同的层,层内无连接。
- 相邻两层之间的神经元全部两两连接。
- 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
全连接前向传播
相邻两层之间的关系:
每一层权重 ( W ) (W) (W)的矩阵形式:
前向传播过程:
向量表达形式:
损失函数:
J
=
1
2
∑
i
=
1
n
L
(
y
i
−
a
j
L
)
2
J=\frac{1}{2} \sum\limits_{i=1}^{n_L}(y_i-a_j^L)^2
J=21i=1∑nL(yi−ajL)2
全连接反向传播(BP)
更新权重:
w
j
i
l
←
w
j
i
l
−
α
∂
J
∂
w
j
i
l
w_{ji}^l\leftarrow w_{ji}^l-\alpha\frac{\partial J}{\partial w_{ji}^l}
wjil←wjil−α∂wjil∂J
定义
δ
i
l
\delta_i^l
δil:
计算
δ
i
l
\delta_i^l
δil和
∂
J
∂
w
j
i
l
\frac{\partial J}{\partial w_{ji}^l}
∂wjil∂J的关系:
∂
J
∂
w
j
i
l
=
∂
J
∂
z
j
l
+
1
⋅
∂
z
j
l
+
1
∂
w
j
i
l
=
δ
j
l
+
1
⋅
a
i
l
\frac{\partial J}{\partial w_{ji}^l} = \frac{\partial J}{\partial z_j^{l+1}}\cdot \frac{\partial z_j^{l+1}}{\partial w_{ji}^l}=\delta_j^{l+1}\cdot a_i^l
∂wjil∂J=∂zjl+1∂J⋅∂wjil∂zjl+1=δjl+1⋅ail
计算
δ
i
l
\delta_{i}^l
δil和
δ
j
l
+
1
\delta_j^{l+1}
δjl+1的关系:
计算
δ
i
L
\delta_i^L
δiL
δ
i
L
=
∂
J
∂
z
i
L
=
(
a
i
L
−
y
i
L
)
⋅
∂
a
j
L
∂
z
i
L
=
(
a
i
L
−
y
i
L
)
⋅
f
′
(
z
i
l
)
\delta_i^L = \frac{\partial J}{\partial z_i^L} = (a_i^L-y_i^L)\cdot \frac{\partial a_j^L}{\partial z_i^L} = (a_i^L-y_i^L)\cdot f^{'}(z_i^l)
δiL=∂ziL∂J=(aiL−yiL)⋅∂ziL∂ajL=(aiL−yiL)⋅f′(zil)
综合:
∂
J
∂
w
j
i
l
=
δ
j
l
+
1
⋅
a
i
l
\textcolor{red}{\frac{\partial J}{\partial w_{ji}^l} = \delta_j^{l+1}\cdot a_i^l}
∂wjil∂J=δjl+1⋅ail
δ i l = f ′ ( z i l ) ⋅ ( ∑ j = 1 n l + 1 δ j l + 1 ⋅ w j i l ) \textcolor{red}{\delta_i^l = f^{'}(z_i^l)\cdot (\sum \limits_{j=1}^{n_{l+1}}\delta_j^{l+1}\cdot w_{ji}^l )} δil=f′(zil)⋅(j=1∑nl+1δjl+1⋅wjil)
δ i L = f ′ ( z i l ) ⋅ ( a i L − y i L ) \textcolor{red}{\delta_i^L = f^{'}(z_i^l)\cdot(a_i^L-y_i^L)} δiL=f′(zil)⋅(aiL−yiL)
卷积神经网络
三大特点
局部感知
全连接神经网络的连接大大多于局部连接,这就意味着参数数目更多,采用局部连接这样可以有效降低参数数目。
权值共享(Convolution:卷积)
- 卷积层的每一个卷积滤波器重复的作用于整个感受野中,每一个卷积滤波器共享相同的参数。
- 对图像进行特征提取时不用考虑局部特征的位置。
- 使要学习的卷积神经网络模型参数数量大大降低。
下采样(Pooling:池化)
- 当输入经过卷积层时,得到的 feature map (特征图)还是比较大,可以通过池化层来对每一个 feature map 进行降维操作,输出的深度还是不变的,依然为 feature map 的个数。
- Max Pooling(最大值池化):取“池化视野”矩阵中的最大值。能最好的保留纹理特征。
- Mean Pooling(平均值池化):取“池化视野”矩阵中的平均值。能很好的保留背景,但容易使图片模糊。
卷积层
作用
- 提取图像的特征,根据目标函数提取出想要的特征。卷积操作被广泛应用与图像处理领域,不同卷积核可以提取不同的特征,例如边沿、线性、角等特征。在深层卷积神经网络中,通过卷积操作可以提取出图像低级到复杂的特征。
- “局部感知,参数共享”的特点大大降低了网络参数,保证了网络的稀疏性,防止过拟合。之所以可以“参数共享” ,是因为样本存在局部相关的特性。
运算过程
输出形状
假设输入形状是 n h × n w n_h \times n_w nh×nw,卷积核窗口的形状是 k h × k w k_h×k_w kh×kw,那么输出形状将会是: ( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h-k_h+1)\times(n_w-k_w+1) (nh−kh+1)×(nw−kw+1)
特征图和感受野
二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。影响元素 x 的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做 x 的感受野(receptive field)。以上图为例, 输入中阴影部分的四个元素是输出中阴影部分元素的感受野。
padding
在进行卷积运算时,输入矩阵的边缘会比矩阵内部的元素计算次数少,且输出矩阵的大小会在卷积运算中相比较于输入的尺寸变小。因此,可在输入矩阵的四周补零,称为 padding。
一般来说,如果在高的两侧一共填充
p
h
p_h
ph行,在宽的两侧一共填充
p
w
p_w
pw列,那么输出形状将会是:
(
n
h
−
k
h
+
p
h
+
1
)
×
(
n
w
−
k
w
+
p
w
+
1
)
\textcolor{red}{(n_h-k_h+p_h+1)\times(n_w-k_w+p_w+1)}
(nh−kh+ph+1)×(nw−kw+pw+1)
步幅(stride)
一般来说,当高上步幅为
s
h
s_h
sh,宽上步幅为
s
w
s_w
sw时,输出形状为:
⌊
(
n
h
−
k
h
+
p
h
+
s
h
)
/
s
h
⌋
×
⌊
(
n
w
−
k
w
+
p
w
+
s
w
)
/
s
w
⌋
\textcolor{red}{\lfloor (n_h-k_h+p_h+s_h)/s_h\rfloor \times \lfloor (n_w-k_w+p_w+s_w)/s_w\rfloor}
⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋
多输入通道
前面例子中用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是h和w(像素),那么它可以表示为一 个3 × \times ×h × \times ×w的多维数组。将大小为3的这一维称为通道(channel)维。 当输入数据含多个通道时,一般需要构造一个输入通道数与输入数据的通道数相同的卷积核,从而能够与含多通道的输入数据做卷积运算。
池化层
作用
- 通常会在卷积层之间周期性插入一个池化层, 其作用是逐渐降低数据体的空间尺寸, 这样就能够减少网络中参数的数量, 减少计算资源耗费, 同时也能够有效地控制过拟合。
- invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)。特征不变性,也就是在图像处理中经常提到的特征的尺度不变性。图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
- 保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力。
最大池化层和平均池化层
最大池化层特点:能很好的保留纹理特征
平均池化层特点:能很好的保留背景,但容易使得图片变模糊
归一化层
以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理虽然对输入数据进行了归一化处理,但是输入数据经过 f ( w ∗ a + b ) f(w*a+b) f(w∗a+b) 这样的线性乘加操作以及非线性处理之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。 如上左图是没有经过任何处理的输入数据,曲线是sigmoid函数,如果数据在梯度很小的区域,那么学习率就会很慢甚至陷入长时间的停滞。减均值除方差后,数据就被移到中心区域如上右图所示,对于大多数激活函数而言,这个区域的梯度都是最大的或者是有梯度的(比如ReLU),这可以看做是一种对抗梯度消失的有效手段。 对于一层如此,如果对于每一层数据都那么做的话,数据的分布总是在随着变化敏感的区域,相当于不用考虑数据分布变化了,这样训练起来更有效率。
卷积的作用
LeNet-5
**输入层:**N个32*32的训练样本
C1层:
输入图片大小:32*32
卷积窗大小:5*5
卷积窗种类: 6
输出特征图数量:6
输出特征图大小:28*28
神经元数量: (28*28)*6
连接数:(28*28*5*5*6)+(28*28*6)
可训练参数:5*5*6+6
S2层:
输入图片大小: 28*28
卷积窗大小:2*2
卷积窗种类: 6
输出下采样图数量:6
输出下采样图大小:(28/2)*(28/2)=14*14
神经元数量:(14*14)*6
连接数:2*2*14*14*6+14*14*6
可训练参数:2*2*6+6
C3层:
输入图片大小:14*14
卷积窗大小:5*5
卷积窗种类:16
输出特征图数量:16
输出特征图大小:10*10
神经元数量:(10*10)*16
连接数:10*10*1516=151600
可训练参数:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+(5*5*6+1)=1516
C3层是一个卷积层16核卷积,注意C3并不是与S2全连接而是部分连接。第一列 表示C3层的第0个feature map只有S2层的第0、1和2这三个feature maps相连接……
S4层:
输入图片大小: 10*10
卷积窗大小: 2*2
卷积窗种类: 16
输出下采样图数量: 16
输出下采样图大小: 5*5
神经元数量:(5*5)*16
C5层:
输入图片大小: 5*5
卷积窗大小:5*5
卷积窗种类: 120
输出特征图数量:120
输出特征图大小:1*1
神经元数量: (1*120)
F6 层 :
输入图片大小 : 1*1
卷积窗大小 : 1*1
卷积窗种类 : 84
输出特征图数量 : 1
输出特征图大小 : 84
神经元数量 : 84
OUTPUT层 :
输入图片大小 :1*84
输出特征图数量 :1*10
CNN的反向传播
要套用FNN的反向传播算法到CNN,有几个问题需要解决:
- 池化层没有激活函数,这个问题倒比较好解决,可以令池化层的激活函数为σ(z)=z,即激活后就 是自己本身。这样池化层激活函数的导数为1。
- 池化层在前向传播的时候,对输入尺寸进行了改变,那么现在需要向前反向推导 δ l − 1 \delta^{l-1} δl−1,这个推导 方法和FNN完全不同。
- 卷积层是通过张量卷积,或者说若干个矩阵卷积求和而得的当前层的输出,这和FNN很不相同, FNN的全连接层是直接进行矩阵乘法得到当前层的输出。这样在卷积层反向传播的时候,上一层的 δ l − 1 \delta^{l-1} δl−1递推 计算方法肯定有所不同。
- 对于卷积层,由于 W W W使用的运算是卷积,那么从 δ l \delta^{l} δl 推导出该层的所有卷积核的 W W W, b b b的方式也不同。
在研究过程中,需要注意的是,由于卷积层可以有多个卷积核,各个卷积核的处理方法是完全相同且独立的,为了简化算法公式的复杂度,下面提到卷积核都是卷积层中若干卷积核中的一个。
已知池化层的 δ l \delta^{l} δl ,推导上一隐藏层的 δ l − 1 \delta^{l-1} δl−1
在前向传播算法时,池化层一般会用Max Pooling或者Average Pooling对输入进行池化,池化的区域大小已知。现在反过来,要从缩小后的误差
δ
l
\delta^{l}
δl ,还原前一次较大区域对应的误差。
在反向传播时,首先会把
δ
l
\delta^{l}
δl的所有子矩阵矩阵大小还原成池化之前的大小,如果是Max Pooling,则把
δ
l
\delta^{l}
δl的所有子矩阵的各个池化局域的值放在之前做前向传播算法得到最大值的位置。如果是Average,则把
δ
l
\delta^{l}
δl的所有子矩阵的各个池化局域的值取平均后放在还原后的子矩阵位置。这个过程一般叫做upsample。
循环神经网络
门控RNN
对于一个输入序列,我们希望它能够在一段时间内保留信息,并且在使用之后能够遗忘这些信息,从零开始积累新的信息。而门控RNN正是自动而不是手动决定何时应该积累信息、何时应该遗忘信息的。
长短期记忆(LSTM)
遗忘门 forget gate
输入门 input gate
输入门决定要在细胞状态中存储什么信息。
输入门的Sigmoid层决定了将更新哪些值。
tanh层创建候选向量
C
~
t
\tilde C_t
C~t,该向量将会被加到细胞的状态中。
结合这两个向量来创建更新值。
更新记忆 cell state
将上一个状态值
C
t
−
1
C_{t-1}
Ct−1乘以
f
t
f_t
ft,以此表达希望忘记的部分。
将得到的值加上
i
t
∗
C
~
t
i_t * \tilde Ct
it∗C~t,这个得到的是新的细胞状态值。
输出门 output gate
门控循环单元GRU
更新门 update gate
像渗漏单元一样达到线型门控的目的。以选择隐藏状态或未隐藏状态。
复位门 reset gate
可以决定当前隐藏层中有多少信息可以保留下来,增加了更多的非线性效应。决定忽略以前的隐藏状态。
双向循环神经网络
在Forward层从0时刻到i时刻正向计算一遍,得到并保存每个时刻向前隐含层的输出;
在Backward层从i时刻到0时刻反向计算一遍,得到并保存每个时刻向后隐含层的输出;
最后在每个时刻结合Forward层和Backward层的相应时刻输出的结果得到最终的输出。
深度学习进阶
深度生成模型
深度生成模型
利用深层神经网络可以近似任意函数的能力来建模一个复杂的分布 p r ( x ) p_r(x) pr(x) 。假设一个随机向量z服从一个简单的分布 p ( z ) p(z) p(z) , z ∈ Z \mathcal{Z} Z (如标准正态分布),我们使用一个深层神经网络g: Z \mathcal{Z} Z → χ \chi χ,并使得 g ( z ) g(z) g(z)服从 p r ( x ) p_r(x) pr(x) 。
自编码器
自编码器是神经网络的一种,经过训练后能尝试将输入复制到输出。
搭建自编码器需要三步:
- 编码器 Encoder
- 解码器 Decoder
- 设定损失函数 Loss function
变分自编码器VAE
用“取值的概率分布”代替原先的单值来描述对特征的观察的模型。
是一种深度生成模型,其思想是利用神经网络来分别建模两个复杂的条件概率密度函数。
生成模型的难题就是判断生成分布与真实分布的相似度,因为我们只知道两者的采样 结果,不知道它们的分布表达式。
迁移学习
目标
将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中。
主要思想
从相关领域中迁移标注数据或者知识结构、完成或改进目标领域或任务的学习效果。
迁移学习的价值
- 复用现有知识域数据,已有的大量工作不至于完全丢弃。
- 不需要再去花费巨大代价去重新采集和标定庞大的新数据集,也有可能数据根本无法获取。
- 对于快速出现的新领域,能够快速迁移和应用,体现时效性优势。
- 用于情感分类,图像分类,命名实体识别,WiFi信号定位,自动化设计,中文到英文翻译等问题。
深度学习应用
深度学习在计算机视觉中的应用
目标检测的核心问题
(1)分类问题:即图片(或某个区域)中的图像属于哪个类别。
(2)定位问题:目标可能出现在图像的任何位置。
(3)大小问题:目标有各种不同的大小。
(4)形状问题:目标可能有各种不同的形状。
基于深度学习的目标检测算法
Two stage
先进行区域生成,该区域称之为region proposal(简称RP,一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。
任务流程:特征提取 -->生成RP–>分类/定位回归。
常见tow stage目标检测算法有:R-CNN、SPP-Net、 Fast R-CNN、Faster R-CNN和R-FCN等。
One stage
不用RP,直接在网络中提取特征来预测物体分类和位置。
任务流程:特征提取–>分类/定位回归。
常见的one stage目标检测算法有:OverFeat、YOLOv1、 YOLOv2、YOLOv3、SSD和RetinaNet等。
候选区域生成-----选择性搜索
选择搜索算法的主要思想:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。
- step0:生成区域集 R
- step1:计算区域集 R 里每个相邻区域的相似度 S = { s 1 , s 2 , … } S=\{s1,\ s2,\ …\} S={s1, s2, …}
- step2:找出相似度最高的两个区域,将其合并为新集,添加进 R
- step3:从S中移除所有与step2中有关的子集
- step4:计算新集与所有子集的相似度
- step5:跳至step2,直至S为空
交并比IoU
交并比为目标检测中一个重要的概念,来进行预测框(ground truth)与标注框的重合率来对检测的正确率进行比较。
J ( A , B ) = ∣ A ⋂ B ∣ ∣ A ⋃ B ∣ J(\mathcal{A},\mathcal{B})=\frac{|\mathcal{A} \bigcap \mathcal{B}|}{|\mathcal{A} \bigcup \mathcal{B}|} J(A,B)=∣A⋃B∣∣A⋂B∣
非极大值抑制(Non Maximum Suppression)
1)选取一个类别中得分最大的框A(如图: 0.98)
2)分别计算得分最大框A与其他框(B,C,D……) 的IOU,若IOU大于一定阈值,则删掉该框B (或C),最后Rose脸上只有一个框
3)采用2)中的方法处理Jack脸上的框
4)最终图片中的所有目标都只有一个框。
目标检测模型-----R-CNN
- 预训练模型。选择一个预训练 (pre-trained)神经网络(如AlexNet、VGG)。
- 重新训练全连接层。使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。
- 提取 proposals 并计算CNN特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足 CNN 输入要求(因为全连接层的限制),然后将feature map保存到本地磁盘。
- 训练SVM。利用feature map 训练SVM来对目标和背景进行分类(每个类一个二进制SVM)
- 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器
缺陷:
- 重复计算,每个region proposal,都需要经过一个AlexNet特征提取,为所有的RoI(region of interest)提取特征大约花费47秒,占用空间
- selective search方法生成region proposal,对一帧图像,需要花费2秒
- 三个模块(提取、分类、回归)是分别训练的,并且在训练时候,对于存储空间消耗较大
简而言之
- 给定一张输入图片,从图片中提取 2000 个类别独立的候选区域,一般通过选择性搜索完成。
- 对于每个区域利用 CNN 抽取一个固定长度的特征向量。
- 再对每个区域利用 SVM 进行目标分类。
目标检测模型-----Fast R-CNN
- 使用selective search生成region proposal,大约2000个左右区域候选框
- (joint training)缩放图片的scale得到图片金字塔,FP得到conv5的特征金字塔
- (joint training)对于每个scale的每个ROI,求取映射关系,在conv5中剪裁出对应的patch。并用一个单层的SSP layer来统一到一样的尺度(对于AlexNet是6*6)
- (joint training)继续经过两个全连接得到特征,这特征又分别共享到两个新的全连接,连接上两个优化目标。第 一个优化目标是分类,使用softmax,第二个优化目标是bbox regression,使用了一个平滑的L1-loss
- 测试时需要加上NMS(非极大值抑制)处理:利用窗口得分分别对每一类物体进行非极大值抑制提出重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口
缺陷:
- 依旧采用selective search提取region proposal(耗时2~3秒,特征提取耗时0.32秒)
- 无法满足实时应用,没有真正实现端到端训练测试
- 利用了GPU,但是region proposal方法是在CPU上实现的
目标检测模型-----Faster R-CNN
将特征抽取、region proposal提取, bbox regression,分类都整合到了一个网络中,使得综合性能有较大提高, 在检测速度方面尤为明显。
- Conv Layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的卷积/激活/池化层提取图像的特征,形成一个特征图,用于后续的RPN层和全连接层。
- Region Proposal Networks(RPN)。RPN网络用于生成候 选区域,该层通过softmax判断锚点(anchors)属于前景还是背景,在利用bounding box regression(包围边框回 归)获得精确的候选区域。
- RoI Pooling。该层收集输入的特征图和候选区域,综合这些信息提取候选区特征图(proposal feature maps),送入后续全连接层判定目标的类别。
- Classification。利用取候选区特征图计算所属类别,并再次使用边框回归算法获得边框最终的精确位置。
目标检测模型-----YOLO
深度学习在自然语言处理中的应用
自然语言处理(NLP)
自然语言处理是人类语言的机器处理,旨在教授机器如何处理和理解人类的语言,从而在人与机器之间建立一个简单的沟通渠道。
- 自然语言是一种有机且自然发展而来的书面和口头交流形式。
- 处理意味着使用计算机分析和理解输入数据。
深度学习在自然语言处理领域的应用
- 自动文摘
- 文本分类
- 自动问答
- 机器翻译
NLP
自然语言处理研究实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理技术发展经历了基于规则的方法、基于统计学习的方法和基于深度学习的方法三个阶段。自然语言处理由浅入深的四个层面分别是形式、语义、推理和语用,当前正处于由语义向推理的发展阶段。
图神经网络
欧式空间与非欧式空间数据
欧式空间
- 处理固定输入维度数据 、局部输入数据必须有序
- 语音 、图像 、视频 (规则结构 )
非欧式空间
- 局部输入维度可变
- 局部输入排列无序
为什么要研究图神经网络?
卷积神经网络(CNN)无法处理Non Euclidean Structure (非欧式结构) 的数据, 在Non Euclidean Structure的数据上无法保持平移不变性。
通俗理解就是在拓扑图中每个顶点的相邻顶点数目都有可能不同, 那么当然无法使用一个同样尺寸的卷积核来进行卷积运算。
我们希望在这样的数据结构(拓扑图)上有效地提取空间特征来进行机器学习,所以图神经网络(GNN)成为了研究的重点。