- 引言
- 本文是学习刘忠雨老师所著的《深入浅出图神经网络》过程中的笔记和记录整理,最后会有参考文献标注对应章节和内容中可能出现的参考文献、博文出处。
目录
神经网络基础
机器学习分类
-
是否有标签
- 监督学习
- 训练数据中每个样本都有标签,通过标签可以指导模型进行学习,学到具有判别性的特征。
- 无监督学习
- 训练数据完全没有标签,通过算法从数据中发现一些数据之间的约束关系,比如数据之间的关联、距离关系等。典型的无监督算法如聚类。
- 半监督学习
- 介于监督学习和无监督学习之间的一种学习方式。它的训练数据既包含有标签数据,也包含无标签数据。假设标签数据和无标签数据都是从同一个分布采样而来,那无标签数据中含有一些数据分布相关的信息,可以作为标签数据之外的补充。这种情况事实上是很常见的。比如在互联网行业,每天都会产生大量的数据,这些数据部分可能携带标签,但更多的数据是不带标签的,如果靠人工去标记这些无标签数据,代价是相当大的,而半监督学习可以提供一些解决思路。
- 监督学习
-
算法的输出
- 分类问题
- 模型的输出值是离散值
- 回归问题
- 模型的输出值是连续值
- 分类问题
损失函数
- 这里只列出几个常用的损失函数
平方损失函数
L
(
y
,
f
(
x
:
θ
)
)
=
∑
i
=
1
N
(
y
i
−
f
(
x
i
:
θ
)
)
2
/
N
\begin{aligned} L(y,f(x:\theta))=\sum_{i=1}^N(y_i-f(x_i:\theta))^2/N \end{aligned}
L(y,f(x:θ))=i=1∑N(yi−f(xi:θ))2/N
其中
N
N
N 是样本数量,它衡量的是模型预测的结果与标签之间的平方差,常用于回归类问题。
交叉熵函数
L
(
y
,
f
(
x
)
)
=
H
(
p
,
q
)
=
−
∑
i
=
1
N
(
p
(
y
i
∣
x
i
)
l
o
g
[
q
(
y
i
^
∣
x
i
)
]
)
/
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}
L(y,f(x))=H(p,q)=−i=1∑N(p(yi∣xi)log[q(yi^∣xi)])/N
其中
p
,
q
p,q
p,q 分别表示数据标签的真实分布和模型预测给出的分布,
p
(
y
i
∣
x
i
)
p(y_i|x_i)
p(yi∣xi) 表示样本
x
i
x_i
xi 标签的真实分布。一般来说,样本
x
i
x_i
xi 只属于某个类别
c
k
c_k
ck,因此
p
(
y
i
=
c
k
∣
x
i
)
=
1
p(y_i = c_k | x_i) = 1
p(yi=ck∣xi)=1,在其他类别上概率为0.
q
(
y
i
^
=
c
k
∣
x
i
)
=
1
q(\hat{y_i} = c_k|x_i) = 1
q(yi^=ck∣xi)=1 表示给定样本
x
i
x_i
xi 模型预测在各个类别上的概率分布。如果样本
x
i
x_i
xi的标签为
c
k
c_k
ck,那么上式可以简化为
L
(
y
,
f
(
x
)
)
=
−
∑
i
=
1
N
(
l
o
g
[
q
(
y
i
^
∣
x
i
)
]
)
/
N
\begin{aligned} L(y,f(x)) = -\sum_{i=1}^N(log[q(\hat{y_i}|x_i)]) / N \end{aligned}
L(y,f(x))=−i=1∑N(log[q(yi^∣xi)])/N
可以看出在这种情况下,最小化交叉熵损失的本质就是最大化样本标签的似然概率。
激活函数
- 激活函数是神经网络中一个非常重要的概念。它的非线性是的神经网络几乎可以任意逼近任何非线性函数。如果不适用激活函数,无论神经网络有多少层,其每一层的输出都是上一层输入的线性组合,这样构成的神经网络仍然是一个线性模型,表达能力有限。
- 激活函数的一个基本要求是它们是连续可导的,可以允许在少数点上不可导
S型激活函数
- 特点:有界,并且输入的绝对值越大,对应的梯度就越小,越趋近于0
Sigmoid
σ ( x ) = 1 / ( 1 + e − x ) \begin{aligned} \sigma(x) = 1 / (1+e^{-x}) \end{aligned} σ(x)=1/(1+e−x)
Tanh
t a n h ( x ) = e x − e − x / ( e x + e − x ) \begin{aligned} tanh(x) = e^x-e^{-x} / (e^x +e^{-x}) \end{aligned} tanh(x)=ex−e−x/(ex+e−x)
- 上述几种激活函数的图像如下图所示:
ReLU及其变种
ReLU
- 线性整流函数(Rectified Linear Unit, ReLU)是目前深度学习模型中经常使用的激活函数。
- 定义
ReLU ( x ) = { x if x ⩾ 0 0 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(x)={x0 if x⩾0 if x<0 - ReLU对输入的处理:当输入为负时,全部置零,当输入为正时,保持不变,这个特性被称为单侧抑制。
- 在隐藏层中,单侧抑制会为隐藏层的输出带来一定的稀疏性。同时由于它在输入为正时,输出保持不变,梯度为1,可以缓解梯度消失的问题。
- 梯度
∇ x ReLU ( x ) = { 1 if x ⩾ 0 0 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. ∇xReLU(x)={10 if x⩾0 if x<0 - 单侧抑制在某些情况下可能会导致某个神经元死亡,原因是如果某个神经元输出始终为负,那么在反向传播时,梯度永远为0,导致无法有效更新。
LeakyReLU
-
在输入为负时,可以允许一定量的信息通过。
-
定义
LeakyReLU ( x ) = { x if x > 0 λ x if x ⩽ 0 \text { LeakyReLU }(x)=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \lambda x & \text { if } x \leqslant 0 \end{array}\right. LeakyReLU (x)={xλx if x>0 if x⩽0
其中, λ > 0 \lambda>0 λ>0是一个超参数,通常取值0.2。这样就可以避免ReLU出现神经元死亡的现象。 -
梯度
∇ x LeakyReLU ( x ) = { 1 if x > 0 λ if x ≤ 0 \nabla_{x} \text { LeakyReLU }(x)=\left\{\begin{array}{ll} 1 & \text { if } x>0 \\ \lambda & \text { if } x \leq 0 \end{array}\right. ∇x LeakyReLU (x)={1λ if x>0 if x≤0
PReLU
-
PReLU(Parametric ReLU)在LeakyReLU基础上更进一步,它将LeakyReLU中的超参数 λ \lambda λ改进为可训练的参数,并且每个神经元可以使用不同的参数。
-
定义
PReLU ( x ) = { x if x > 0 α x if x ≤ 0 \operatorname{PReLU}(x)=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \alpha x & \text { if } x \leq 0 \end{array}\right. PReLU(x)={xαx if x>0 if x≤0
ELU
- 不同于LeakyReLU和PreLU在输入为负时,进行线性压缩,指数线性单元(Exponential Linear Unit,ELU)在输入为负时,进行非线性变换。
- 定义
ELU ( x ) = { x if x ⩾ 0 α ( e x − 1 ) 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\} ELU(x)={xα(ex−1) if x⩾0 if x<0}
其中 α > 0 \alpha>0 α>0, α \alpha α是一个超参数,控制着输入为负时的饱和区。它具有调节激活值的均值为0的功能,可以加速神经网络的收敛。
- 上述几种激活函数的图像如下图所示:
优化困境
梯度消失
- 导致梯度消失的原因在于激活函数的饱和性,比如Sigmoid、Tanh等都会到来这种问题,它们在函数值趋近于上下边界时,梯度通常比较小,再与误差项相乘将会变得更小。
局部最优
鞍点
- 由于维度过高,深度神经网络模型常常存在很多鞍点。鞍点是值在该处梯度为0,但是它并不是最小值或最大值。当处于鞍点区域并且误差较大时,由于这部分区域梯度较小,模型收敛速度将受到极大影响,给人造成一种陷入局部最优的家乡。
参考文献
- 刘忠雨,李彦霖,周洋. 深入浅出图神经网络:GNN原理解析[M]. 北京:机械工业出版社,2020:17-38