循环神经网络

基础篇

  我们假设您有一个管家,他很擅长做苹果派、汉堡以及炸鸡这三样食物。管家制作食物的种类取决于天气,若是晴天,他会做苹果派;若是雨天,他会做汉堡。这样制作食物的规则很容易用神经网络来表示。 人人都能看懂的循环神经网络RNN   我们接下来用数学语言描述上述过程,利用一些向量表示食物,再用一些向量表示天气。
=[100]=[010]=[001]=[10]=[01]苹果派=left[begin{matrix}1\0\0end{matrix}right]汉堡=left[begin{matrix}0\1\0end{matrix}right]炸鸡=left[begin{matrix}0\0\1end{matrix}right]\晴天=left[begin{matrix}1\0end{matrix}right]雨天=left[begin{matrix}0\1end{matrix}right]
  我们可以利用图形描述这一过程
人人都能看懂的循环神经网络RNN
  这个神经网络其实是一个非常简单的矩阵,我们可以构建一个矩阵与天气向量相乘从而得到厨师要做的食物名称。不难发现天气与食物之间满足线性映射。具体映射过程如下:
人人都能看懂的循环神经网络RNN
  我们同样可以利用神经元之间的连接关系表示上述过程:
人人都能看懂的循环神经网络RNN

进阶篇

  假设现在管家做饭不依赖于天气,而是遵循一个顺序,比如第一天是苹果派、第二天是汉堡、第三天是炸鸡,接下来又是苹果派、汉堡、炸鸡……
人人都能看懂的循环神经网络RNN
  我们用循环神经网络表示上述过程:

人人都能看懂的循环神经网络RNN
  我们继续沿用上文中食物的向量表示,但此处我们将用新的矩阵来表示神经网络:
[001100010]left[begin{matrix}0 & 0 & 1\1 & 0 & 0\0 & 1 & 0end{matrix}right]
  具体的计算过程如下:
人人都能看懂的循环神经网络RNN
  不难发现,此处的神经网络依然是一个简单的线性映射,将苹果派映射到汉堡,将汉堡映射到炸鸡,将炸鸡映射到苹果派。我们接下来用神经元描述上述过程,其中我们只绘制权重为1的边,权重为0的边将被省略:
人人都能看懂的循环神经网络RNN

终极篇

  我们现在来考虑一种更为复杂的情况,管家依然只做3种食物:苹果派、汉堡、炸鸡,但是当天制作的食物与天气有关,若今天是晴天,那么管家会外出享受好天气,所以依然制作昨天的食物。若今天是雨天,管家将不会出门,所以按照顺序会制作新的食物。我们用图片表示如下:
人人都能看懂的循环神经网络RNN
  目前的神经网络工作方式如下:
人人都能看懂的循环神经网络RNN
  我们继续沿用食物以及天气的向量表示,现在我们的神经网络具有多层,所以需要通过多个矩阵进行表示。我们先来观察食物矩阵是如何工作的,不难发现上部分就是一个单位阵。我们这里以苹果派为例进行展示:
人人都能看懂的循环神经网络RNN
  我们接下来来看天气矩阵是如何工作的:
人人都能看懂的循环神经网络RNN
  我们接下来将食物矩阵和天气矩阵进行相加:
人人都能看懂的循环神经网络RNN
  具体的相加以及合并的过程如下图所示,例如我们昨天吃了苹果派,并且今天下雨,那今天该吃什么呢:
人人都能看懂的循环神经网络RNN
  不难发现,在合并的过程中会保留矩阵相加结果中最大的元素,并将其置为1,而对于其它元素都会被置0。我们接下来将用神经元描述上述过程,同样,我们只保留边权为1的边而将边权为0的边进行忽略:

人人都能看懂的循环神经网络RNN
  此处的网络结构如下图所示:
人人都能看懂的循环神经网络RNN

训练方式

  随机给矩阵中的每个元素赋予初始值,给定误差函数,使用梯度下降训练模型,确定每个参数的具体数值:
人人都能看懂的循环神经网络RNN

应用场合

1、股票预测
2、序列生成
3、文本生成
4、语音识别