概述:
这篇文章的感觉是用剪枝的思想来学习神经元(通道)之间的连线。
算法:
将channel作为node,edge对应weight
首先将边分为:
划分的依据是edge的权重|weight|的大小,取前k大为实边
在前向传播的时候将信息只在实边上流通,如图:
v点的输入信息表示为:
u点的信息即可表示为:
f函数是激活函数、batchnorm、conv的组合
在反向传播的时候,让梯度通过实边并对边进行更新,对于虚边,梯度会留向虚边,但是不会穿过虚边进行传播,如图:
在反向传播时对edge的权重weight进行更新,梯度信息-Δ是loss下降最快方向,让-Δ和Zu点乘,当Zu和-Δ方向一致时,更新最大,选择这条边也意味着loss下降最快:
当|Wuv|比实边里的边的绝对值大的时候,可以交换进实边集合。
更新的过程如图:
文章还提到了Dynamic Neural Graphs,和上面的static neural graphs的区别就是 传播的时候是按时间版本传播:
给出一个时间序列,对v这样的更新为:
这样的好处就是可以在图中引入循环,如图:
作者在实验中验证了 Dynamic Neural Graphs的效果要更好。