【图神经网络】神经网络基础

  • 引言
    • 本文是学习刘忠雨老师所著的《深入浅出图神经网络》过程中的笔记和记录整理,最后会有参考文献标注对应章节和内容中可能出现的参考文献、博文出处。

神经网络基础

机器学习分类

  • 是否有标签

    • 监督学习
      • 训练数据中每个样本都有标签,通过标签可以指导模型进行学习,学到具有判别性的特征。
    • 无监督学习
      • 训练数据完全没有标签,通过算法从数据中发现一些数据之间的约束关系,比如数据之间的关联、距离关系等。典型的无监督算法如聚类。
    • 半监督学习
      • 介于监督学习和无监督学习之间的一种学习方式。它的训练数据既包含有标签数据,也包含无标签数据。假设标签数据和无标签数据都是从同一个分布采样而来,那无标签数据中含有一些数据分布相关的信息,可以作为标签数据之外的补充。这种情况事实上是很常见的。比如在互联网行业,每天都会产生大量的数据,这些数据部分可能携带标签,但更多的数据是不带标签的,如果靠人工去标记这些无标签数据,代价是相当大的,而半监督学习可以提供一些解决思路。
  • 算法的输出

    • 分类问题
      • 模型的输出值是离散值
    • 回归问题
      • 模型的输出值是连续值

损失函数

  • 这里只列出几个常用的损失函数

平方损失函数

L(y,f(x:θ))=i=1N(yif(xi:θ))2/N \begin{aligned} L(y,f(x:\theta))=\sum_{i=1}^N(y_i-f(x_i:\theta))^2/N \end{aligned}
    其中 NN 是样本数量,它衡量的是模型预测的结果与标签之间的平方差,常用于回归类问题。

交叉熵函数

L(y,f(x))=H(p,q)=i=1N(p(yixi)log[q(yi^xi)])/N \begin{aligned} L(y,f(x)) = H(p,q) = -\sum_{i=1}^N(p(y_i|x_i)log[q(\hat{y_i}|x_i)]) / N \end{aligned}
    其中 p,qp,q 分别表示数据标签的真实分布和模型预测给出的分布, p(yixi)p(y_i|x_i) 表示样本 xix_i 标签的真实分布。一般来说,样本 xix_i 只属于某个类别 ckc_k,因此 p(yi=ckxi)=1p(y_i = c_k | x_i) = 1,在其他类别上概率为0. q(yi^=ckxi)=1q(\hat{y_i} = c_k|x_i) = 1 表示给定样本 xix_i 模型预测在各个类别上的概率分布。如果样本 xix_i的标签为 ckc_k,那么上式可以简化为
L(y,f(x))=i=1N(log[q(yi^xi)])/N \begin{aligned} L(y,f(x)) = -\sum_{i=1}^N(log[q(\hat{y_i}|x_i)]) / N \end{aligned}
    可以看出在这种情况下,最小化交叉熵损失的本质就是最大化样本标签的似然概率。

**函数

  • **函数是神经网络中一个非常重要的概念。它的非线性是的神经网络几乎可以任意逼近任何非线性函数。如果不适用**函数,无论神经网络有多少层,其每一层的输出都是上一层输入的线性组合,这样构成的神经网络仍然是一个线性模型,表达能力有限。
  • **函数的一个基本要求是它们是连续可导的,可以允许在少数点上不可导

S型**函数

  • 特点:有界,并且输入的绝对值越大,对应的梯度就越小,越趋近于0

Sigmoid

σ(x)=1/(1+ex) \begin{aligned} \sigma(x) = 1 / (1+e^{-x}) \end{aligned}

Tanh

tanh(x)=exex/(ex+ex) \begin{aligned} tanh(x) = e^x-e^{-x} / (e^x +e^{-x}) \end{aligned}

  • 上述几种**函数的图像如下图所示:
    【图神经网络】神经网络基础

ReLU及其变种

ReLU

  • 线性整流函数(Rectified Linear Unit, ReLU)是目前深度学习模型中经常使用的**函数。
  • 定义
    ReLU(x)={x if x00 if x<0 \begin{aligned} \operatorname {ReLU}(x)=\left\{\begin{array}{ll} x & \text { if } x \geqslant 0 \\ 0 & \text { if } x<0 \end{array} \right. \end{aligned}
  • ReLU对输入的处理:当输入为负时,全部置零,当输入为正时,保持不变,这个特性被称为单侧抑制
  • 在隐藏层中,单侧抑制会为隐藏层的输出带来一定的稀疏性。同时由于它在输入为正时,输出保持不变,梯度为1,可以缓解梯度消失的问题。
  • 梯度
    xReLU(x)={1 if x00 if x<0\nabla_{x} \operatorname{ReLU}(x)=\left\{\begin{array}{ll} 1 & \text { if } x \geqslant 0 \\ 0 & \text { if } x<0 \end{array}\right.
  • 单侧抑制在某些情况下可能会导致某个神经元死亡,原因是如果某个神经元输出始终为负,那么在反向传播时,梯度永远为0,导致无法有效更新。

LeakyReLU

  • 在输入为负时,可以允许一定量的信息通过。

  • 定义
     LeakyReLU (x)={x if x>0λx if x0\text { LeakyReLU }(x)=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \lambda x & \text { if } x \leqslant 0 \end{array}\right.
        其中,λ>0\lambda>0是一个超参数,通常取值0.2。这样就可以避免ReLU出现神经元死亡的现象。

  • 梯度
    x LeakyReLU (x)={1 if x>0λ if x0\nabla_{x} \text { LeakyReLU }(x)=\left\{\begin{array}{ll} 1 & \text { if } x>0 \\ \lambda & \text { if } x \leq 0 \end{array}\right.

PReLU

  • PReLU(Parametric ReLU)在LeakyReLU基础上更进一步,它将LeakyReLU中的超参数λ\lambda改进为可训练的参数,并且每个神经元可以使用不同的参数。

  • 定义
    PReLU(x)={x if x>0αx if x0\operatorname{PReLU}(x)=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \alpha x & \text { if } x \leq 0 \end{array}\right.

ELU

  • 不同于LeakyReLU和PreLU在输入为负时,进行线性压缩,指数线性单元(Exponential Linear Unit,ELU)在输入为负时,进行非线性变换。
  • 定义
    ELU(x)={x if x0α(ex1) if x<0}\operatorname{ELU}(x)=\left\{\begin{array}{ll} x & \text { if } x \geqslant 0 \\ \alpha\left(e^{x}-1\right) & \text { if } x<0 \end{array}\right\}

    其中α>0\alpha>0α\alpha是一个超参数,控制着输入为负时的饱和区。它具有调节**值的均值为0的功能,可以加速神经网络的收敛。

  • 上述几种**函数的图像如下图所示:
    【图神经网络】神经网络基础

优化困境

梯度消失

  • 导致梯度消失的原因在于**函数的饱和性,比如Sigmoid、Tanh等都会到来这种问题,它们在函数值趋近于上下边界时,梯度通常比较小,再与误差项相乘将会变得更小。

局部最优

鞍点

  • 由于维度过高,深度神经网络模型常常存在很多鞍点。鞍点是值在该处梯度为0,但是它并不是最小值或最大值。当处于鞍点区域并且误差较大时,由于这部分区域梯度较小,模型收敛速度将受到极大影响,给人造成一种陷入局部最优的家乡。

参考文献

  1. 刘忠雨,李彦霖,周洋. 深入浅出图神经网络:GNN原理解析[M]. 北京:机械工业出版社,2020:17-38