《深入浅出图神经网络》读书笔记 1-2

《深入浅出图神经网络》读书笔记 1-2

  • 第1章 图的概述
  • 第2章 神经网络基础
    • 2.1 机器学习基本概念
    • 2.2 神经网络
    • 2.4 训练神经网络

第1章 图的概述

  1. 图神经网络(Graph Neural Networ, GNN)的发展历程:
年份 贡献 论文
2005 Marco Gori 首次提出图神经网络的概念,在此之前,处理图数据的方法是在数据的预处理阶段将图转换为一组向量 A new model for learning in graph neural networks
2009 Micheli A;Marco组 使用监督学习的方法来训练GNN,早期研究以迭代的方式,通过循环神经网络传播邻居信息,直到稳定的固定状态。计算量大 A contextual constructive approach; The graph neural network model
2013 Bruna 首次将卷积引入图神经网络,基于频域的图卷积网络模型 Spectral networks and locally connected networks on graphs
2016 Kipf 将频域图卷积的定义进行简化,使图卷积的操作能在空域进行,极大地提升了图卷积模型的计算效率 Semi-supervised classification with graph convolutional networks
  1. 图数据的相关任务
    – 节点层面:分类+回归。社交网络中用户标签的分类、恶意账户检测等。
    – 边层面:分类+预测(某两个节点之间是否有边)。推荐等。
    – 图层面:分类+表示+生成等。对药物分子的分类、酶的分类等。

第2章 神经网络基础

2.1 机器学习基本概念

  1. 常见分类
    – 训练数据是否有标签。监督学习、半监督学习和无监督学习。
    – 算法输出的形式。分类问题(模型的输出值为离散)和回归问题(模型的输出值为连续)。

  2. 机器学习流程
    示例:对商品进行分类。假设只有一批商品的图片数据,分为羽绒服、毛呢大衣、连衣裙和卫衣等。建立一个模型,使用这批商品的图片数据训练模型,得到一个可以对未知的图片进行分类预测的模型。主要步骤如下:
    – 提取商品图片的特征。例如衣服的颜色、风格等。这些特征可以是人为定义的,也可以使用算法自动提取。后者的典型方法是深度学习。
    – 建立模型。传统的模型有:逻辑回归和随机森林等。深度学习:多层感知器和卷积网络等。模型可以看作是一个复杂的函数 y = f ( X ; W ) y=f(X;W) y=f(X;W),目的是建立输入到标签 y y y之间的映射,其中 X X X是前面定义的特征 W W W是 模型的参数
    – 确定损失函数和进行优化求解。损失函数用来衡量模型输出与标签之间的差异程度,当预测结果与标签差异偏大时,损失函数值较大,反之则小。基于损失函数给出的值,通过优化方法调整模型以不断减少损失值。

    – 集合 X = { ( x i , y i ) ∣ i = 1 , 2 , . . . , N } X=\{(x_i,y_i)| i=1,2,...,N\} X={(xi,yi)i=1,2,...,N},每一个样本 x i x_i xi 都有对应的标签 y i y_i yi,其中 x i ∈ R d x_i \in R^d xiRd y i ∈ Y = { 0 , 1 , . . . , K } y_i \in Y = \{0,1,...,K\} yiY={0,1,...,K}。模型为 f : R d → R k f: R^d \rightarrow R^k f:RdRk。经过 f f f 映射,输出在每个类别上的概率分布 P ( Y ∣ x i ) = f ( x i ; θ ) P(Y|x_i)=f(x_i;\theta) P(Yxi)=f(xi;θ),取概率最大的类别作为结果,即 y i ∗ = arg max ⁡ ( P ( Y ∣ x i ) ) y_i^* = \argmax(P(Y|x_i)) yi=argmax(P(Yxi))
    – 损失函数(loss function),用来估量模型的预测值 y ∗ y^* y 与真实值 y y y 的差异程度,非负实值函数,通常用 L ( y , f ( x ; θ ) ) L(y,f(x;\theta)) L(y,f(x;θ)) 表示。
    θ ∗ = arg min ⁡ [ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ Φ ( θ ) ] \theta^* = \argmin \left[ \dfrac{1}{N} \sum_{i=1}^N L(y_i,f(x_i;\theta)) + \lambda \Phi (\theta) \right] θ=argmin[N1i=1NL(yi,f(xi;θ))+λΦ(θ)]
    均值表示经验风险函数,$ \Phi$ 是正则化项(regularizer)或者惩罚项(penalty term)
    常见的损失函数:
    平方损失函数 L ( y , f ( x ; θ ) ) = 1 N ∑ i = 1 N ( y i − f ( x i ; θ ) ) L(y,f(x;\theta))=\dfrac{1}{N}\sum_{i=1}^N(y_i-f(x_i;\theta)) L(y,f(x;θ))=N1i=1N(yif(xi;θ))
    交叉熵损失(cross entropy)常用于分类问题中,衡量数据标签的真实分布与分类模型预测的概 率分布之间的差异程度。离散形式: L ( y , f ( x ) ) = H ( p , q ) = − 1 N ∑ i = 1 N p ( y i ∣ x i ) log ⁡ [ q ( y i ^ ∣ x i ) ] L(y,f(x))=H(p,q)=-\dfrac{1}{N}\sum_{i=1}^Np(y_i|x_i)\log[q(\hat{y_i}|x_i)] L(y,f(x))=H(p,q)=N1i=1Np(yixi)log[q(yi^xi)]
    p p p q q q分别表示数据标签的真实分布和模型预测给出的分布。

    过拟合:一个模型能完美地拟合训练数据,能完全正确地预测所有训练的样本,但是在新样本预测的表现却糟糕
    欠拟合:模型“竭尽全力”也无法在训练样本上取得令人满意的结果。

  3. 梯度下降算法
    多元函数 f ( x ) f(\mathbf{x}) f(x) x \mathbf{x} x处泰勒展开,有
    f ( x + Δ x ) = f ( x ) + f ′ ( x ) ⊤ Δ x + o ( Δ x ) f(\mathbf{x}+\Delta\mathbf{x})=f(\mathbf{x})+f'(\mathbf{x})^\top\Delta\mathbf{x} + o(\Delta\mathbf{x}) f(x+Δx)=f(x)+f(x)Δx+o(Δx)
    忽略高阶项,要使 f ( x + Δ x ) < f ( x ) f(\mathbf{x}+\Delta\mathbf{x}) < f(\mathbf{x}) f(x+Δx)<f(x),需要 f ′ ( x ) ⊤ Δ x < 0 f'(\mathbf{x})^\top\Delta \mathbf{x} <0 f(x)Δx<0。而 f ′ ( x ) ⊤ Δ x = ∣ ∣ f ′ ( x ) ⊤ ∣ ∣ ⋅ ∣ ∣ Δ x ∣ ∣ ⋅ cos ⁡ θ f'(\mathbf{x})^\top\Delta \mathbf{x}=||f'(\mathbf{x})^\top||\cdot||\Delta \mathbf{x}||\cdot\cos\theta f(x)Δx=f(x)Δxcosθ
    Δ x = − α f ′ ( x ) \Delta \mathbf{x}=-\alpha f'(\mathbf{x}) Δx=αf(x),可保证更新后的 x \mathbf{x} x使得函数值减少。这里 α \alpha α是一个超参数,用于调整每次更新的步长,称为学习率。
    小批量随机梯度下降

2.2 神经网络

输入信号 x 0 , x 1 , . . . , x m x_0,x_1,...,x_m x0,x1,...,xm
线性组合 z i = ∑ j = 1 m w i j x j z_i = \sum_{j=1}^m w_{ij}x_j zi=j=1mwijxj
非线性激活函数 a i = σ ( z i + b ) a_i = \sigma(z_i+b) ai=σ(zi+b) b b b为偏置

2.4 训练神经网络

运行过程分为3步:
前向传播:给定输入和参数,逐层向前进行计算,最后输出预测结果
后向传播:基于前向传播得到的预测结果,使用损失函数得到损失值, ∂ L ∂ W \dfrac{\partial L}{\partial W} WL
参数更新: W : = W − α ∂ L ∂ W W:=W-\alpha\dfrac{\partial L}{\partial W} W:=WαWL

给定样本 ( x , y ) (x,y) (x,y),前向传播得到输出 y ^ \hat{y} y^,对应的损失值为 L ( y , y ^ ) L(y,\hat{y}) L(y,y^)。根据链式法则,有 ∂ L ( y , y ^ ) ∂ W ( l ) = ∂ z ( l ) ∂ W ( l ) ∂ L ( y , y ^ ) ∂ z ( l ) \dfrac{\partial L(y,\hat{y})}{\partial W^{(l)}}=\dfrac{\partial z^{(l)}}{\partial W^{(l)}}\dfrac{\partial L(y,\hat{y})}{\partial z^{(l)}} W(l)L(y,y^)=W(l)z(l)z(l)L(y,y^)
定义 δ ( l ) = ∂ L ( y , y ^ ) ∂ z ( l ) \delta^{(l)}=\dfrac{\partial L(y,\hat{y})}{\partial z^{(l)}} δ(l)=z(l)L(y,y^) 为误差项,衡量的是 z ( l ) z^{(l)} z(l)对损失值的影响。 δ ( l ) = ∂ L ( y , y ^ ) ∂ z ( l ) = ∂ a ( l ) ) ∂ z ( l ) ∂ z ( l + 1 ) ∂ a ( l ) ∂ L ( y , y ^ ) ∂ z ( l + 1 ) = σ ′ ( z ( l ) ) W ( l + 1 ) δ ( l + 1 ) \delta^{(l)}=\dfrac{\partial L(y,\hat{y})}{\partial z^{(l)}}=\dfrac{\partial a^{(l)})}{\partial z^{(l)}}\dfrac{\partial z^{(l+1)}}{\partial a^{(l)}}\dfrac{\partial L(y,\hat{y})}{\partial z^{(l+1)}}=\sigma'(z^{(l)}) W^{(l+1)}\delta^{(l+1)} δ(l)=z(l)L(y,y^)=z(l)a(l))a(l)z(l+1)z(l+1)L(y,y^)=σ(z(l))W(l+1)δ(l+1)
z ( l + 1 ) = W ( l + 1 ) a ( l ) + b ( l ) z^{(l+1)}=W^{(l+1)}a^{(l)}+b^{(l)} z(l+1)=W(l+1)a(l)+b(l) a ( l ) = σ ( z ( l ) ) a^{(l)}=\sigma(z^{(l)}) a(l)=σ(z(l))可得上式。由上式可知,第 l l l层的误差与第 l + 1 l+1 l+1层的误差有关,就是反向传播的来源。
综上,有 ∂ L ( y , y ^ ) ∂ W ( l ) = ∂ z ( l ) ∂ W ( l ) ∂ L ( y , y ^ ) ∂ z ( l ) \dfrac{\partial L(y,\hat{y})}{\partial W^{(l)}}=\dfrac{\partial z^{(l)}}{\partial W^{(l)}}\dfrac{\partial L(y,\hat{y})}{\partial z^{(l)}} W(l)L(y,y^)=W(l)z(l)z(l)L(y,y^)
(该书有误)

梯度消失的原因:第 l l l层的误差是通过第 l + 1 l+1 l+1层的误差与两层之间权重的加权,再乘以激活函数的导数得到的。若使用激活函数sigmoid σ ( x ) = 1 1 + e − x \sigma(x)=\dfrac{1}{1+e^{-x}} σ(x)=1+ex1,导数为 σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x)=\sigma(x)(1-\sigma(x)) σ(x)=σ(x)(1σ(x))。因为 σ ( x ) ∈ ( 0 , 1 ) \sigma(x) \in (0,1) σ(x)(0,1),导数最大值为0.25.当层数增加时,最后一层的误差将在前面的层中快速衰减,导致靠近输入层的梯度值非常小,参数几乎无法进行有效的更新。

你可能感兴趣的:(图神经网络,神经网络)