哈喽,大家好。在上一篇文章中我们简单了解了下卷积神经网络的基本介绍和基本的结构原理。一些小伙伴们给我提出了很多的指正。谢谢各位。话不多说,今天让我们来了解下什么是循环神经网络RNN。
在这篇文章中,我们会聊一聊语言分析,序列化数据中穿梭自如的循环神经网络。那么首先第一个问题,RNN是干什么的呢?他和普通的神经网络有什么不同呢?我们接下来会一一进行探讨。首先我们来想一下乔布斯,现在给你一张乔布斯的照片,不出意外,你应该会脱口而出他的名字,因为你很有可能就正在使用他的一款产品。那么现在先抛开这些产品,先来想一想史蒂芬乔布斯的这个名字,再把它逆序念出来,斯布乔.芬蒂史。有点难吧。这就说明对于预测顺序排列是多么重要,我们可以按照一定的排列顺序来预测接下来可能会出现的字。但是打字顺序我们就很难去分析我们在说什么了。我们现在再想象下现在有一组序列数据Date0,Date1,Date2,Date3,在预测result0的时候我们会基于Date0进行分析,同样在预测其他数据的时候,我们也会根据原有的单组数据进行分析,这样,每一次使用的神经网络都是NN,现在在假设Date0,Date1,Date2,Date3这些数据都是具有关联的顺序的,就好比你在厨房做菜酱料A一定会比调料B早下锅,不然就会串味了。所以普通的网络结构NN并不能让这些数据之间产生关联。那么我们应该怎么样让数据之间的关联让NN也可以加以分析呢?
现在先让我们想想人类是怎么样去分析各种事物是怎样关联的吧。最基本的方式呢就是记住这些事物。那么我们就让神经网络也具有记住这种事物的能力。在分析Data0的时候,我们把分析结果存入NN记忆(Ram),在分析Data1的时候,NN会产生新的记忆,但是问题来了,新的记忆和老的记忆并没有什么关联。我们就简单的把老的记忆调用过来一起分析,如果要分析更多的数据,NN就会把更多的数据都累计起来一起分析,我们再重复一下刚才的流程,不过这次要加一下一些数学的东西。现在的NN变成了我们现在的RNN,每次RNN循环完成后都会产生一个对于当前状况的一个描述,我们把这个结果叫做S(t),记为s在t时刻产生的数据,然后这个RNN开始分析在t+1的时候的数据,这时候RNN也会产生s(t+1)的结果,不过这时候做的Y(t+1)其实是由s(t)和s(t+1)共同得到的,最后我们所说的RNN可以表示成下图所示的那个样子。
RNN的结构形式远不仅仅只有这一种,他的结构形式很自由。比如用于分类的问题,比如一个人说了一句话,这句话里所包含的感情色彩是消极的还是积极地,那么我们就可以用只在最后输出判断结果的RNN,又或者这是可以用于图片描述的RNN,我们只需要一个接口来接受输入的图片,然后生成对于图片描述的一段话,或者是语言翻译的RNN,给他一句中文,让他翻译成英文。有了这样不同形式的RNN,RNN的功能就越发的强大,现在看已经有很多的有趣的RNN应用。比如现在说让RNN描述照片,让RNN来写学术论文,让RNN来写程序脚本,让RNN来作曲。对于我们一般人来说,这是很难分辨出这是人写的还是机器写的,最后,放上一个连接,让我们来欣赏下RNN做出的音乐吧。
http://web.mit.edu/felixsun/www/neural-music.html