GCN的邻接矩阵归一化为什么能解决梯度消失和梯度爆炸

1. 邻接矩阵归一化

在GCN中,我们常对邻接矩阵 A A A进行归一化处理,无论是随机游走归一化还是对称归一化,网上的文章都提到了同一点:
度大的节点在其特征表征中将具有较大的值,度小的节点将具有较小的值。这可能会导致梯度消失或梯度爆炸,也会影响随机梯度下降算法(随机梯度下降算法通常被用于训练这类网络,且对每个输入特征的规模(或值的范围)都很敏感)

1.1 随机游走归一化

简单起见,我们以随机游走归一化[1]为例:
图卷积的原始思想对应公式为:
H ( l + 1 ) = σ ( A H ( l ) W ( l ) ) H^{(l+1)}=\sigma(AH^{(l)}W^{(l)}) H(l+1)=σ(AH(l)W(l))
其中 l l l为网络层数,另 ( A H ) i = A i H = ∑ j A i j H j (AH)_i=A_iH=\sum_j A_{ij}H_j (AH)i=AiH=jAijHj,即图卷积是对邻居节点的特征加权求和。

但它存在两个问题:

  • 只考虑了邻居节点而忽略自己——为节点添加自连接,实现上用 A ~ = A + I \tilde A=A+I A~=A+I替代 A A A
  • 度大的节点在其特征表征中将具有较大的值,度小的节点将具有较小的值。这会导致数值不稳定,且有可能产生梯度消失或梯度爆炸——使用随机游走归一化,用 D ~ = D + I \tilde D = D+I D~=D+I替代D, D ~ − 1 A ~ \tilde D^{-1}\tilde A D~1A~替代 A ~ \tilde A A~,这里:
    ( D ~ − 1 A ~ H ) i = ( D ~ − 1 A ~ ) i H = ( ∑ k D ~ i k − 1 A ~ i ) H = ( D ~ i i − 1 A ~ i ) H = ( D ~ i i − 1 ) ∑ j A ~ i j H j = ∑ j 1 D ~ i i A ~ i j H j (\tilde D^{-1}\tilde AH)_i = (\tilde D^{-1}\tilde A)_iH =(\sum_k \tilde D^{-1}_{ik}\tilde A_i)H =(\tilde{D}_{ii}^{-1}{\tilde A_{i}})H =(\tilde{D}_{ii}^{-1})\sum_j{\tilde A_{ij}}H_j\\ =\sum_j\frac{1}{\tilde D_{ii}}\tilde A_{ij}H_j (D~1A~H)i=(D~1A~)iH=(kD~ik1A~i)H=(D~ii1A~i)H=(D~ii1)jA~ijHj=jD~ii1A~ijHj
    由此可知,随机游走归一化相当于实现了对邻居节点特征之和的求平均,由此解决了特征数值不稳定的问题,但这和梯度消失、梯度爆炸有什么关系呢

而在介绍反向传播、梯度消失和梯度爆炸的文章中则指出,梯度消失和梯度爆炸是由于激活函数 σ \sigma σ或权重 W W W过大或过小导致的。

那么究竟归一化是如何避免梯度消失和梯度爆炸的呢

要知道GCN的梯度消失和梯度爆炸如何避免,就要先了解GCN的反向传播:

2. GCN反向传播

2.1 随机梯度下降

随机梯度下降(SGD)[2]更新梯度方法如下:
θ t + 1 = θ t − α 1 K ∑ ( x , y ) ∈ δ t ∂ L ( y , f ( x , θ ) ) ∂ θ     ( 1 ) \theta_{t+1} = \theta_t - \alpha \frac{1}{K} \sum_{(x,y)\in \delta_t} \frac{\partial L(y,f(x,\theta))}{\partial\theta}\ \ \ (1) θt+1=θtαK1(x,y)δtθL(y,f(x,θ))   (1)
要更新权重 W W W,则要计算:
W t + 1 = W t − α 1 K ∑ ( x , y ) ∈ δ t ∂ L ( y , f ( x , w ) ) ∂ W W_{t+1}=W_t - \alpha\frac{1}{K} \sum_{(x,y)\in\delta_t}\frac{\partial{L(y,f(x,w))}}{\partial W} Wt+1=WtαK1(x,y)δtWL(y,f(x,w))
而其中关键是计算 ∂ L ∂ W \frac{\partial L}{\partial W} WL,而 ∂ L ∂ W = ∂ L ∂ z ∂ z ∂ W \frac{\partial L}{\partial W} = \frac{\partial L}{\partial z}\frac{\partial z}{\partial W} WL=zLWz( z z z是神经元的输出),将第一项 ∂ L ∂ z \frac{\partial L}{\partial z} zL定义为误差 δ \delta δ,那么就可以先求出误差,再求第二项 ∂ z ∂ W \frac{\partial z}{\partial W} Wz,再根据上式(1)更新参数。

2.2 GCN的前向传播和反向传播

GCN前向传播为:
Z ( l + 1 ) = P H ( l ) W ( l ) ,   H ( l + 1 ) = σ ( Z ( l + 1 ) ) Z^{(l+1)} = PH^{(l)}W^{(l)},\ H^{(l+1)}=\sigma(Z^{(l+1)}) Z(l+1)=PH(l)W(l), H(l+1)=σ(Z(l+1))
其中 l l l为网络层数, P P P为归一化后的邻接矩阵 A A A,前馈计算每层输入 z ( l ) z^{(l)} z(l)和激活值 a ( l ) a^{(l)} a(l)直到最后一层,再计算每层误差 δ ( l ) \delta^{(l)} δ(l)
δ ( l ) = ∂ L ∂ Z = ∂ L ∂ H ( l ) ∂ H ( l ) ∂ Z ( l ) = ∂ L ∂ Z ( l + 1 ) ∂ Z ( l + 1 ) ∂ H ( l ) ∂ H ( l ) ∂ Z ( l )     ( 2 ) \delta^{(l)} = \frac{\partial{L}}{\partial{Z}} = \frac{\partial{L}}{\partial{H^{(l)}}}\frac{\partial{H^{(l)}}}{\partial{Z^{(l)}}} = \frac{\partial{L}}{\partial{Z^{(l+1)}}}\frac{\partial{Z^{(l+1)}}}{\partial{H^{(l)}}}\frac{\partial{H^{(l)}}}{\partial{Z^{(l)}}}\ \ \ (2) δ(l)=ZL=H(l)LZ(l)H(l)=Z(l+1)LH(l)Z(l+1)Z(l)H(l)   (2)
根据前向传播可推得误差传播公式:
δ ( l ) = δ ( l + 1 ) P T W ( l ) σ ′ ( Z ( l ) ) \delta^{(l)}=\delta^{(l+1)}P^TW^{(l)}\sigma^\prime(Z^{(l)}) δ(l)=δ(l+1)PTW(l)σ(Z(l))

得到误差传播公式后,还需要计算参数的导数 ∂ L ∂ W ( l ) = ∂ L ∂ Z ( l + 1 ) ∂ Z ( l + 1 ) ∂ W ( l ) = δ ( l + 1 ) ∂ Z ( l + 1 ) ∂ W ( l ) \frac{\partial{L}}{\partial{W^{(l)}}}=\frac{\partial{L}}{\partial{Z^{(l+1)}}}\frac{\partial{Z^{(l+1)}}}{\partial{W^{(l)}}}=\delta^{(l+1)}\frac{\partial{Z^{(l+1)}}}{\partial{W^{(l)}}} W(l)L=Z(l+1)LW(l)Z(l+1)=δ(l+1)W(l)Z(l+1),因此现在只需计算:
∂ Z ( l + 1 ) ∂ W ( l ) = ∂ ( P H ( l ) W ( l ) ) ∂ W ( l ) = ( P H ( l ) ) T     ( 3 ) \frac{\partial{Z^{(l+1)}}}{\partial{W^{(l)}}} = \frac{\partial {(PH^{(l)}}W^{(l)})}{\partial W^{(l)}} =(PH^{(l)})^T\ \ \ (3) W(l)Z(l+1)=W(l)(PH(l)W(l))=(PH(l))T   (3)
然后根据求得参数导数和式(1)更新参数即可,这就是GCN的反向传播过程。

由式(3)可知,每层的梯度计算都需要用到前一层的特征,因此特征数值不稳定就会导致梯度不稳定 随层数加深出现梯度消失和梯度爆炸,而归一化解决了特征数值不稳定的问题,从而解决了梯度消失和梯度爆炸问题。

[1] 深度学习:GCN(图卷积神经网络)理论学习总结
[2] GCN的反向传播推导

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinBalll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值