时间卷积网络(TCN) 总结:时序模型不再是递归网络(RNN) 的天下,但作为信息粗暴提取的一种方法,请不要神话CNN !

深度学习似乎进入了“泛模型”阶段,同一个问题可以用不同深度学习结构解决,但是没有人可以证明哪个模型一定最好 — David 9

最近读到文章说“TCN(时间卷积网络)将取代RNN成为NLP预测领域王者”。一方面David 9 想为RNN抱不平,请大家别过于迷信CNN,毕竟只是一种特征提取方法,不必神话它(想想当年有人认为SVM可以解决所有建模问题)。

另一方面,可以感受到深度学习进入了“泛模型”的阶段。模型的结构创新没有衰退的趋势,而这些创新不出意料很快会被其他模型超越。这些“超越”都是实验与经验上的“超越“,没有SVM这样扎实的理论。

回顾历史可以发现,广义的计算机”模型“一直在”向上”做更灵活的事情

ML时代那些机器学习”模型“(SVM,随机森林)一般只做最后的分类、聚类或回归;现在深度学习时代“模型”(以CNN、RNN为主)把特征提取的工作也一并做掉了。可以预见,未来物联网IOT发展到一定阶段,我们需要更复杂“模型”去自动收集数据,具体是什么形式的“模型”我们可以拭目以待。

言归正传,今天David 9 要把TCN(时间卷积网络,CMU的研究总结)这个“坑”给填了。其实TCN只是一维卷积变形之后在时序问题上变得适用(以前David 9也讲过一维卷积):

来自论文:An Empirical Evaluation of Generic Convolutional and Recurrent Networks
for Sequence Modeling

仔细观察就可以发现,TCN的卷积和普通1D卷积最大的不同就是用了扩张卷积(dilated convolutions),越到上层,卷积窗口越大,而卷积窗口中的“空孔”越多

上式是扩展卷积操作的式子,其中d是扩展系数(即评价“空孔”的多少)。 继续阅读时间卷积网络(TCN) 总结:时序模型不再是递归网络(RNN) 的天下,但作为信息粗暴提取的一种方法,请不要神话CNN !

用Keras实现简单一维卷积 ,亲测可用一维卷积实例,及Kaggle竞赛代码解读

记得我们之前讲过1D卷积在自然语言处理中的应用:

一维卷积在语义理解中的应用,莫斯科物理技术学院(MIPT)开源聊天机器人DeepPavlov解析及代码

但是读者中对如何应用一维卷积呼声太高,David 9 有必要再用一篇幅来讲1D卷积实战。这次我们拿kaggle上叶子分类预测问题做例子,讲解1D卷积网络如何实现。

我的数据集来自:https://www.kaggle.com/alexanderlazarev/simple-keras-1d-cnn-features-split/data

如果懒得去原链接下载,可以直接戳下面链接:

   train.csv     test.csv   

train.csv 是训练集数据,test.csv 是验证数据集。 这个数据集是叶子leaf 品种的分类问题,有三个通道, 每个通道64个比特位,一个通道代表边界特征,一个通道代表形状特征,最后一个通道代表材质特征。(这些特征都是kaggle已经帮你提取了)。输出是叶子特征标签的预测。

下面废话少说,直接上代码及详细注释(亲测可用): 继续阅读用Keras实现简单一维卷积 ,亲测可用一维卷积实例,及Kaggle竞赛代码解读

你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

所有高级的创造,似乎都有一些“搜索”和“拼凑”的“智能” — David 9

模型自动设计已经不是新鲜事(H2O 的AutoML谷歌的CLOUD AUTOML)。但是,高效的神经网络自动设计还是一个较有挑战性的课题(单纯用CV选模型太耗时间) 。谷歌大脑的这篇新论文就提供了一种高效的搜索方法,称之为:Efficient Neural Architecture Search(ENAS)

对于老版本强化学习的NAS,需要21天搜索出的cnn模型,ENAS只需要3小时就可以搜索出相同准确率的模型:

例子:对于CIFAR-10数据集ENAS搜索出的具有4.23%错误率的模型,只需要3小时左右。 来自:https://arxiv.org/pdf/1802.03268.pdf

作者把这样的效率提高归功于候选子模型的参数共享上(相似子模型可以模仿迁移学习使用已有的权重,而不需要从头训练)。

为简单起见,我们先从生成四个计算节点的RNN循环神经网络进行解释:

来自:https://arxiv.org/pdf/1802.03268.pdf

即使是只有四个计算节点的RNN,也有多种有向无环图(DAG)的生成可能,如上左图,红色的箭头生成的RNN才是我们在右图中看到RNN。 继续阅读你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

David 9的循环神经网络(RNN)入门帖:向量到序列,序列到序列,双向RNN,马尔科夫化

rnn似乎更擅长信息的保存和更新,而cnn似乎更擅长精确的特征提取;rnn输入输出尺寸灵活,而cnn尺寸相对刻板。— David 9

聊到循环神经网络RNN,我们第一反应可能是:时间序列 (time sequence)。

确实,RNN擅长时间相关的应用(自然语言,视频识别,音频分析)。但为什么CNN不容易处理时间序列而RNN可以? 为什么我们之前说过RNN有一定的记忆能力?

数学上,如果我们想要预测一个单词x 的后一个单词y,我们需要3个主要元素(输入单词xx上下文状态h1;通过xh1输出下一个单词的函数比如softmax):

来自:http://suriyadeepan.github.io/2017-01-07-unfolding-rnn/

数学计算如下:

htan(W1x+b1)

tan(W2h1+b2)

softma(o)

上面是一个很简单的有向无环图(DAG), 继续阅读David 9的循环神经网络(RNN)入门帖:向量到序列,序列到序列,双向RNN,马尔科夫化

当RNN神经网络遇上NER(命名实体识别):双向LSTM,条件随机场(CRF),层叠Stack LSTM, 字母嵌入

命名实体识别 (NER)语义理解中的一个重要课题。NER就像自然语言领域的“目标检测”。找到文档D 中的名词实体还不够,许多情况下,我们需要了解这个名词是表示地点(location)人名(Person)还是组织(Organization),等等:

来自:https://www.slideshare.net/bperz/15-sdmpolyglot-ner

上图是NER输出一个句子后标记名词的示例。

在神经网络出现之前,几乎所有NER半监督或者非监督的方法,都要依靠手工的单词特征或者外部的监督库(如gazetteer)达到最好的识别效果。

手工的单词特征可以方便提炼出类似前缀,后缀,词根,如:

-ance, —ancy 表示:行为,性质,状态/ distance距离,currency流通
-ant,ent 表示:人,…的/ assistant助手,excellent优秀的
ary 表示:地点,人,事物/ library图书馆,military军事

可以知道-ant结尾的单词很可能是指,而-ary结尾更可能指的地点

外部的监督库(如gazetteer),把一些同种类的实体聚合在一起做成一个库,可以帮助识别同一个意思的实体,如:

auntie其实和aunt一个意思:姨妈

Mikey其实是Mike的昵称,都是人名

今天所讲的这篇卡内基梅隆大学的论文,用RNN神经网络的相关技术避开使用这些人工特征,并能达到与之相当的准确率。

为了获取上述的前缀,后缀,词根等相关特征,文章对每个单词的每个字母训练一个双向LSTM,把双向LSTM的输出作为单词的特殊embedding,和预训练eStack LSTM的算法识别命名实体,感兴趣可以继续阅读原论文。mbedding合成最后的词嵌入(final embedding):

上图是对单词Mars(火星)构建字母级别的双向LSTM,并合并到预训练的单词embedding (来自:https://arxiv.org/pdf/1603.01360.pdf )

双向LSTM可以捕捉字母拼写的一些规律(前缀,后缀,词根), 预训练的embedding可以捕捉全局上单词间的相似度。两者结合我们得到了更好的词嵌入(embedding)。 继续阅读当RNN神经网络遇上NER(命名实体识别):双向LSTM,条件随机场(CRF),层叠Stack LSTM, 字母嵌入

当变分推断(variational inference)遇上神经网络,贝叶斯深度学习以及Pytorch开源代码

如果人脑在执行任务时有特定模式,那么神经网络在增强学习中也应该有特定模式,而不是杂乱无章地更新 — David 9

我们在之前的文章中讨论过,Evolution Strategy遗传算法等传统算法都可以在深度增强学习中发挥作用。其实,人们早就在神经网络中植入各种传统机器学习的方法(包括L2正则法等等)。

在2015年google的论文中就提到结合变分推断(variational inference)启发式更新神经网络的内部参数:

来自:https://arxiv.org/pdf/1505.05424.pdf

其性能效果堪比dropout方法,并且在增强学习中有较好表现。

那么,贝叶斯深度学习或者说变分推断(variational inference)如何应用在神经网络呢?

理论上,对于一般的深度神经网络,Loss如下:

θ 是神经网络的内部参数集。xi, yi 即样本集中的一个样本。上式只是让训练损失最小。

即,要找到一个最好的 θ* ,让  Ln(θ) 最小。 继续阅读当变分推断(variational inference)遇上神经网络,贝叶斯深度学习以及Pytorch开源代码