从前馈到反馈:解析循环神经⽹络(RNN)及其tricks
原创
⼣⼩瑶
2017-08-20⼣⼩瑶的卖萌屋
好像已经有两周没有更新啦。最后这⼏天都不敢打开订阅号后台了,怕⼀打开发现掉了⼏百个粉丝的话就难过死了
T_T。然⽽⼩⼣发现你们并没有离开,感动的差点哭出来,都感觉再不认真写⼀篇⽂章就太对不起⼤家的等待啦。
⽽这两周,经历的事情蛮多的。为了凑下⼀季的房租,接了个私活,要死要活的做完了QAQ。⽽且还发现了⼀个特
别好的学习平台,闭关修炼了⼀周,改天跟你们分享⼀下〜下⾯开始正⽂啦,不要太激动哦。
为什么需要反馈?
在上⼀篇《前馈⽹络与卷积⽹络》中,⼩⼣讲解了前馈⽹络中的战⽃机——卷积神经⽹络(CNN)更关注局部特征
的提取,⽐如在句⼦级情感分类的任务中,往往找出句⼦中可以表现情感的情感词就能完成这个句⼦的情感极性分
类,⽽情感词之前的词并不会对决策结果起到多⼤的影响。还是习惯性的举出栗⼦ :
⽐如 “⼣⼩瑶 今天 不开⼼ 了。”
为了判断这个句⼦的情感极性,只需要让分类器能识别出“不开⼼”是个负极性的词,其他词是偏中性词就可以了。
⽽“不开⼼”前⾯的中性词是“今天”还是“有时”,对“不开⼼”的情感极性并不会有多⼤的影响,也不会对整个句⼦的情感
极性有多⼤影响。因此,当我们把该句⼦中的各个词条依次输⼊给模型去分类时,并不需要去“瞻前顾后”,因此使⽤
⼀个关注局部的前馈神经⽹络往往表现更佳。⽽从最近三四年的论⽂来看,在句⼦级情感分类问题上,也确实是卷
积⽹络⽐递归⽹络和循环⽹络更容易引领state-of-arts。
然⽽,还有⼀些任务的labels之间会有很强的相关性,⽐如命名实体识别(NER)任务,我们想要识别出⽂本中的地
址时:
“据报道,在 2016年,有 ⼀只 可爱的 ⼩狗狗 在 北京市 海淀区 番茄猫咪 ⼩区 失踪。” (什么⻤栗⼦)
这句话中的地址是“北京市 海淀区 番茄 猫咪 ⼩区”,因此我们的⽬标是给这⼏个词条贴上“这是地址”的标签,给其他
词条贴上“这不是地址”的标签。
显然,如果⽤CNN去做的话,很容易把“番茄”识别成⾮地址词,毕竟想要识别出来它的话,就要同时考虑“海淀
区”“猫咪”“⼩区”这三个相邻的上下⽂词条,也就是说CNN的卷积滤波器的⻓度要最少达到4才有较⼤的可能性正确标
注这个句⼦的labels。⽽对更⻓的地址,那代价就更⼤了,总不能⽆限增⻓滤波器的⻓度呐。所以⼀个更靠谱的办法
是让模型在当前位置的输出再反馈给模型,来帮助模型做下⼀位置的决策!
这样的有反馈单元的模型在做当前位置的决策的时候,会同时考虑前⾯所有位置/时间点的情况(直接考虑上⼀时间点,
⼜由于上⼀时间点也考虑了上上时间点,因此间接考虑了上⼀时间点前⾯所有的时间点),因此有反馈单元的模型在判断“番茄”是不
是地址时,它通过前⾯积累的 “据报道,在2016年,有 ⼀只 可爱的 ⼩狗狗 在 北京市 海淀区” 发现下⼀个词 “番茄”
是⾮地址词的概率并不⼤(因为训练集中很少会出现主语+“在”+地址1+地址2+⾮地址名词+...的情况,倒是经常出现
主语+“在”+地址1+地址2+地址3+...的情况),从⽽可以完成正确决策。
相⽐之下,在卷积⽹络中,由于它视野有限,不瞻前顾后,所以它更可能觉得“地址+⾮地址名词”⾮常正常,因为⽐