本文是 深度学习有多深? 学了究竟有几分? (十三) 的续篇。
循环神经网络 (RNN) 的本质,是可以处理一个长度变化的序列的输出和输入 (多对多)。广义的看,如果传统的前馈神经网络做的事,是对一个函数的优化 (比如图像识别)。那么循环神经网络做的事,则是对一个程序的优化,应用空间宽阔得多。
长短期记忆 (LSTM) 的架构,使有用的历史信息,可以保留下来,很久以后仍然可以读取。
一个有趣的应用,是把大量文字作为输入培训 RNN, 让它掌握语言的规律,自己也可以写文章了。
斯坦福大学的计算机博士 Andrej Kapathy 在他的博客中写道:"有时我的模型的简单程度,和高质量的输出相比,反差如此之大,远远超越我的预期".
Kapathy 使用了一种所谓的 "字母为基础的语言模型" (Character Based Language Model) 来训练 RNN. 简而言之,就是通过不断阅读大量文字,让 RNN 自己可以较为准确地估计下面一个字母出现的几率。当概率模型培训得慢慢成熟以后,RNN 就可以自己逐渐写出流畅通顺的文字。
(上图为 Kapathy 的神经网络的计算示范图)
Kapathy 用托尔斯泰的小说 "战争与和平" 来训练 RNN. 每训练一百个回合以后,他让 RNN 输出一段自己创作的文字,检查其学习效果。
100 回合: tyntd-iafhatawiaoihrdemot lytdws e ,tfti, astai f ogoh机器知道要空格,有时要逗号,但是其它都是乱码
500 回合: we counter. He stutn co des. His stanted out one ofler that现在知道大小写,可以正确拼写一些短单词.
1200 回合: he repeated by her door. "But I would be done and quarts, feeling, then, son is people...."可以使用复杂的标点符号,较长的单词也可以拼写
2000 回合: "Why do what that day," replied Natasha, and wishing to himself the fact the princess, Princess Mary was easier,可以正确拼写更复杂的语句。
从程序的演化过程看,机器模型先领悟了单词之间的空格的结构,然后慢慢认识了更多单词,由短到长。标点符号的规则也慢慢掌握。一些有更多长期相关性的语句结构,慢慢地,也被机器掌握。
整个过程的最核心优点是,没有人实现告诉程序,具体的语法是什么,标点符号的规则是什么。一切都是直接用原始数据训练,时间长了,机器自己就慢慢发现单词,空格,引号和括号等等的规则。
自学习,这就是人工智能,让人神往的重要原因。
2016 年五月,来自谷歌的 AI 实验室报道,研究者用两千八百六十五部英文言情小说培训机器,让机器学习言情小说的叙事和用词风格。