循环神经网络背后的直觉
现在我们看看循环神经网络如何做这样的预测。像其他神经网络一样,第一步是训练机器。我们先一句一句地训练,比如训练的第一句就是“我是上海人,会讲上海话”。一开始训练机器时,给机器一个“我”字,机器会乱预测,比如预测出下个字是介词“但”,可“我但”没意义。机器和训练样本一比知道自己错了,就去调黑盒子上的旋钮,一直调到机器会在“我”后面预测出“是”来。训练就是这样给机器读大量的各种各样的句子,当机器读了很多以“我”开始的句子时,就会发现“我”后面一定是动词,特别是关系动词或能愿动词,像“我是”“我要”。但“我”后面可以有很多动词,“我想”“我吃”“我喝”,到底选哪个呢?这就需要更前面的信息了。所以循环神经网络要存储前面的信息。当机器读了很多“我是上海人,会讲上海话”“我是河南人,会讲河南话”这类的句子后,就会慢慢发现规律,这时候你让它填“我是广东人,会讲_____ 话”的空时,它就把我是“什么”人那个“什么”给填进去了。
这时候你会问,这好像不用这么复杂的神经网络吧,只要统计每个词后面出现的词的概率,然后预测哪个概率最高不就得了?过去的确是这么做的,但效果不好,像我们前面举的例子,“我”后面的可能性太多了。那你会接着说:“我们也统计前面更多的字不就得了?”那我问你,统计前面多少个字呢?要不要把词组和短句也作为一个单位来统计?但词组和短句多得数不清,你怎么教会机器认识哪些是词组?你会发现越深究问题就越多,而且问题变得无穷复杂,以至于都不知道该提取哪些特征。而神经网络可以自动找到那些人类找不到的或者根本没意识到的前后信息之间的相关性。就像我们之前讲到卷积神经网络不仅能找到人脸的五官特征,还能找到人平时不注意的其他特征如两眼间距等。
有兴趣的读者可以看附录2里面关于循环神经网络的技术介绍。从附录2里可以看出由于循环神经网络里有反馈回路,整个网络更是一个高度非线性、无法解析表达的网络。循环网络萃取出的数据在时间上的相关性更是人类无法感受和理解的暗知识。因为人脑非常不善于存储很长一段时间的信息。
本书评论