文本的各个词之间是有顺序的,而传统做法总是采用词袋模型忽略掉这些顺序。为了更好的挖掘和利用这个性质,人们渐渐倾向于采用递归神经网络(RNN)来描述它。RNN也不是什么新鲜事物,其实就是允许节点之间的连接有环的存在。不过就像我们之前说的,大数据、GPU、优化、深度学习在其它领域的突破等等又给它带来了新的活力。RNN做文本理解的大概思路是,按顺序处理一段话的每个单词,在它看到后面内容的时候,它的某些参数里还保留着对前面看到过的信息的“整合和抽象”。没错,它是有一定的记忆功能的,而且不需要人为告诉它应该记住什么,它会从训练数据中自然的进行学习,然后记忆在“环”里。可以想像,RNN的结构比普通神经网络复杂,而且优化过程更加困难,但目前已经有了BPTT、LSTM等很多解决方案,在这方面有着很多的相关工作,总体来看,结果让人觉得很有希望。 最近产生了深度图灵机(DeepTuring Machine)。它简单来说就是RNN加上一块专门用于记忆的部分。这是个更加一般化的计算模式,和图灵机计算能力等价。它的记忆体其实就是一个实数矩阵。呵呵,我们又一次见到了这种连续的紧凑向量或者矩阵的表达形式。它可以记录信息而且方便梯度传递,经常被研究人员拿来各种建模,是构建端到端的模型,进行统一优化的利器。
说了这么多,大家可能还是云里雾里。毕竟各种模型都有很多细节,而且还有很多的所谓“trick”,甚至深度学习也曾经因此而戏称为是一种“艺术”而不是“科学”。
所以下面列举几个工具包,并配上一点非常简单的说明,方便大家进行实战演练。
首先你最好要有个能支持cuda的GPU,否则纯CPU是很慢的,尤其是处理图像的问题。
Theano(基于Python), http://deeplearning.net/tutorial/系列教材就是基于Theano工具的。它的最大优点是支持自动符号求导,避免了初学者很害怕的BP推导,有很多扩展包,比如keras等,支持各类模型。其实列举这一个就够了。因为,如果仔细的话,你会在这个网站看到无数的深度学习相关工作链接,足够慢慢扩展到深度学习的所有前沿研究和工具了。
Torch (https://github.com/torch/torch7/wiki/Cheatsheet),基于lua编程语言(类matlab)。用的人非常多,因此很多常见