知否?知否?一文看懂深度文本分类之DPCNN原理与代码

Shortcut connections with pre-activation

但是!如果问题真的这么简单的话,深度学习就一下子少了超级多的难点了。

(1) 初始化CNN的时,往往各层权重都初始化为很小的值,这导致了最开始的网络中,后续几乎每层的输入都是接近0,这时的网络输出没有意义;

(2) 小权重阻碍了梯度的传播, 使得网络的初始训练阶段往往要迭代好久才能启动;

(3)  就算网络启动完成,由于深度网络中仿射矩阵(每两层间的连接边)近似连乘,训练过程中网络也非常容易发生梯度爆炸或弥散问题。

当然,上述这几点问题本质就是梯度弥散问题。那么如何解决深度CNN网络的梯度弥散问题呢?当然是膜一下何恺明大神,然后把ResNet的精华拿来用啦!  ResNet中提出的shortcut-connection/ skip-connection/ residual-connection(残差连接)就是一种非常简单、合理、有效的解决方案。

类似地, 为了使深度网络的训练成为可能,作者为了恒等映射,所以使用加法进行shortcut connections ,即 z+f(z) ,其中 f 用的是两层的等长卷积。这样就可以极大的缓解了梯度消失问题。

另外,作者也使用了  pre-activation ,这个最初在何凯明的“Identity Mappings in Deep Residual Networks上提及,有兴趣的大家可以看看这个的原理。直观上,这种“线性”简化了深度网络的训练,类似于LSTM中constant error carousels的作用。而且实验证明  pre-activation优于post-activation。

整体来说,巧妙的结构设计,使得这个模型 不需要为了维度匹配问题而担忧。

Region embedding

同时DPCNN的底层貌似保持了跟TextCNN一样的结构,这里作者 将TextCNN的包含多尺寸卷积滤波器的卷积层的卷积结果称之为Region embedding ,意思就是对一个文本区域/片段(比如3gram)进行一组卷积操作后生成的embedding。

另外,作者为了进一步提高性能,还使用了 tv-embedding (two-views embedding)进一步提高DPCNN的accuracy