这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
对于一些新领域,或者是新兴的事物,往往大家都愿意花一些时间来了解他们,而且开始往往容易入手,但是经过一段时间的学习有时候因为各种原因,例如用不上、没进步或者遇到瓶颈都会慢慢退去热情而放弃。与机器学习摸爬滚打已经快 2 年,经历了几个阶段走到今天,开始的热情,过程的痛苦和绝望,今天的坚持。希望不但分享机器学习中的技术,重在分享学习过程。
语言模型
循环神经网络主要应用领域就是时序问题。其中自然语言处理领域(NLP)可以看成循环神经网络的最佳实践。那么说到自然语言处理,就不能不提到语言模型。有关语言模型在之前已经详细给大家介绍过了,这里只是我们简单地回顾一下。
我们在写或读文章都是与时间相关,从第一个词到第 T 个词是从左到右或者从上到下读文章,看似是空间上的问题,其实是与时间相关,是一个时序上的问题。
我们就是要学到一个模型,这个模型会给正确句子的很大的概率,有些词经常出现在一起,也就是他们共同出现的概率比较大,可以通过在语料库通过统计方法拿到这个概率。
- 计算在文章出现机器出现次数
- 计算文章同时出现机器和学习的次数
这个数学上是可以解释通的,但是在计算却难以实现,难以计算主要原因是对于一句话出现概率我们需要如下联合概率,从下面公式可想而知计算量有多大。
循环神经网络
为此人们因此引入马尔可夫链,有关马尔可夫链在循环神经网络出现之前,一个活跃在自然语言处理的模型,马尔可夫假设比较朴素,也就是当前 t 时刻的词只有前一个时刻 t-1 时刻有关而与之前词无关。其实听起来也比较合理,大多数情况当前状态与他前一刻状态关系比较紧密,例如出租车当前位置是与上一个时刻位置密切相关。
语言模型可以想象对下一个词,给定词序列然后预测下一个词出现概率。如果是马尔可夫链,是根据上一词来预测下一个词,而且循环神经网络是将之前问题解决了
到现在给出语言模型基本任务和最基本实现方式,对于全连接神经网络或者卷积神经网络。在时序上每一次输入都是孤立,输入对应着神经网络的一个输出。一切都是发生在 t 时刻,神经网络对输入的处理并不会借鉴之前的信息。
首先看一个简单的循环神经网络如,由输入层、一个隐藏层和一个输出层组成,请注意上图下面网络结果,对于这张图看似简单,不过循环神经网络的巧妙之处就是指向本身的线,也就是这条线将没时刻输入信息可以传递到像一个时刻,大家可以想象这里有一个记忆但愿但愿单元,每次输入信息经过处理除了用于输出还会更新记忆单元(也可以理解一个状态),每一次输出都不仅依赖输入的数据还会借鉴存储单元的数据。主要给神经网络添加了一个记忆单元。
很多人都会容易将循环神经网络认为是其展开的形式,之所以用展开的形式仅仅是帮助大家理解而显示为 unfold
x 是一个向量,表示输入层的值,下标便于在时序上区分不同时刻的 x。s 是一个向量,表示隐藏层的值,可以理解循环神经网络用于在时序上传递信息的状态。
U 是输入层到隐藏层的权重矩阵,o也是一个向量,表示输出层的值,V 是隐藏层到输出层的权重矩阵。
那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
好了今天有点晚了,就介绍到这里明天继续介绍循环神经网络,会说到损失函数的设计,以及循环神经网络中存在问题,这是因为这些问题才提出 LSTM 和 GRU。
- 这里会有逻辑元件具有记忆功能,可以记忆系统状态
可以用较小参数可以表达出概率在时序上关系,在这个模型中我们是重复使用权重参数