什么是循环神经网络RNN?
在识别图像时,输入的每张图片都是孤立的,认出这张图片是苹果,并不会对认出下一张图片是梨造成影响。
但对于语言来说,顺序是十分重要的,[我吃苹果]和[苹果吃我],词语顺序的改变表达了完全不同的意义,顺序也提供了一定的信息,比如[吃]后面,大概率是代表食物的名词。
为了捕捉数据的这种关联,人们找到了RNN,一个高度重视序列信息的网络,序列就是数据的前后关系。
RNN的基础仍然是神经网络,只不过它多了一个小盒子,用来记录数据输入时网络的状态,在下一次输入数据时,网络必须要考虑小盒子中保存的信息,随着数据的一次次输入,存储的信息也在不断更新,盒子中的信息被称为隐状态。
和开始举出的例子一样,RNN最常见的领域就是自然语言处理,机器翻译是寻找相同的意义序列在不同语言中的表达,诗歌生成是基于一个主题,按照一定的规则输出有逻辑的词语序列,改变两端的数据类型,输入图片输出句子,就是看图说话,语音同样可以看做声音信号按时间顺序组成的序列,语音识别和语音生成同样在RNN的能力范围内,股票价格也可以看做一个受时间影响的序列,很多量化交易模型的建立,就是基于这样的认知。
不过RNN仍有不可忽视的缺陷,数据输入的越早,在隐状态中占据的影响越小,也就是说一个句子如果很长,RNN就会忘记开始时说了什么,于是就有了RNN的改良版,LSTM长短时记忆模型。
什么是长短时记忆网络LSTM?
RNN具有一定的记忆能力,不幸的是它只能保留短期记忆,在各类任务上表现并不好,那该怎么办?
人们将目光投向了自己,人类的记忆是有取舍的,我们不会记住每时每刻发生的所有事,会有选择的留下[重要的],丢掉[不重要的],参考这种记忆机制,人们改造了小盒子,并找到了”门”这种机制。
门是用来决定信息如何保留的小开关,它的数值在0到1之间,1是完全保留,0是完全舍弃,新的小盒子上还有三个门,其中遗忘门决定了小盒子里要保留多少原有信息,也就是丢掉哪些不重要的记忆,输入门决定当前网络信息有多少要被保留到小盒子里,也就是记住哪些新东西,输出门决定了多大程度地输出小盒子中的信息,经过改造的小盒子,既能通过输入门对当前网络的状态有所了解,又能利用遗忘门留下过往的重要信息,这就是LSTM,长短时记忆模型。
通过改变小盒子的结构,LSTM还有很多变体如MGU,SRU,不过最受欢迎的还是门控循环单元GRU,GRU只有两个门,更新门是输入门合入遗忘门的结合体,决定丢弃哪些旧信息,添加哪些新信息,重置门决定写入多少上一时刻网络的状态,用来捕捉短期记忆,结构更简洁,计算更高效,效果又与LSTM不相上下,GRU正变得越来越流行。
什么是Transformer?
处理机器翻译任务时,用什么模型比较好?RNN是个不错的选择,单词的先后顺序会影响句子的意义,擅长捕捉序列关系的它非常合适,但是对于翻译来说,句子间的单词数量并非是一一对应的,受限于结构,RNN只能实现N to N,1 to N或者 N to 1,对于这种N to M的问题很是头疼(?why?)
那该怎么办,人们找到了Seq2Seq,一个拥有编码器(Encoder)和解码器(Decoder)的模型,Encoder和Decoder依然是RNN网络,不过这次先由Encoder提取原始句子的意义,再由Decoder将意义转换成对应的语言,依靠意义这一[中介],Seq2Seq成功解决了两端单词数不对等的状况,
新的问题又出现了,意义单元能够存储的信息是有限的,如果一个句子太长,翻译精度就会随之下降,于是人们找到了Attention,注意力机制,在Seq2Seq的基础结构上,生成每个单词时,都有意识地从原始句子提取生成该单词最重要的信息,成功拜托了输入序列的长度限制。
接下来的问题是,这样的计算方式太慢了,RNN需要逐个看过句子中的单词,才能给出输出,既然Attention这么好用,人们就进一步找到了Self-Attention,自注意机制,先提取每个单词的意义,再依据生成顺序选取所需要的信息,这样的结构不止支持并行计算,效率更高,也很接近人类的翻译方式,效果好到没话说。
到这里,模型以及脱离了最初的RNN,成为了一个完全基于自注意力机制的拥有Encoder和Decoder的结构,这就是Transformer,不止是机器翻译,Transformer横扫自然语言处理领域。