最近我偶然发现了这篇文章,我很好奇使用循环神经网络(如上文所述的那些)与使用简单的马尔可夫链相比,结果会有什么不同。
我并不完全理解RNN中发生的线性代数运算,但似乎你只是在设计一种非常复杂的方法来创建一个统计模型,以预测下一个字母会是什么,基于之前的字母,而这在马尔可夫链中非常简单就能做到。
为什么RNN引人注目?是因为它们是一种更具普遍性的解决方案,还是有我没有理解的其他原因?
回答:
马尔可夫链假设了马尔可夫性质,它是“无记忆”的。下一个符号的概率是基于前k个符号计算的。在实践中,k被限制在较低的值(比如3-5),因为转移矩阵会呈指数增长。因此,由隐马尔可夫模型生成的句子非常不一致。
另一方面,RNN(例如使用LSTM单元)不受马尔可夫性质的限制。它们丰富的内部状态使它们能够跟踪长距离的依赖关系。
卡帕西的博客文章列出了由RNN逐字符生成的C源代码。该模型令人印象深刻地捕捉了诸如打开和关闭括号等依赖关系。