本节大纲
- 基础结构
- 5.1 全连接层(Fully Connected Layer)
- 5.2 循环结构(Recurrent Structure)
- 5.3 卷积/池化层(Convolutional/Pooling Layer )
5.1 全连接层(Fully Connected Layer)
什么是全连接层?
以下是第和第层,如图,表示在第层中的第个神经元的输出,是一个scaler;我们把每一层中所有的神经元集合起来,即:表示在第层中的所有神经元的输出,是一个vector;
在神经网络的层与层之间有一个weight,我们表示为:,其中表示这个权重连接了层和层,下标表示该权重连接了第层的第个神经元和第层的第个神经元。箭头的起始和终止位置是从右向左,具体原因是有深意的,我们接下来探讨。
这个权重矩阵可以排列如下图所示:矩阵的高是(第层有个神经元),宽是(第层有个神经元)。
如下图所示:是偏差bias。
接下来,我们要算两个输出 之间的关系。在此之前,我们要计算激活函数的input:,即在层 的神经元的激活函数的输入;代表:在层 的所有神经元的激活函数的输入。
与前一个layer的output的关系是这样子的:前一层所有的神经元与其权重相乘再加上bias就是:
接下来,我们要计算:我们先把每个列出来,然后做一下整理,变成矩阵向量的形式。如下所示:
下图为推导的过程:
接下来就是层的神经元的输入输出的关系,即: 这是把里面的每一个元素放入激活函数,成为
最后把这些公式串上来,就得到:
5.2 循环结构(Recurrent Structure)
过去有一种讲法,是说:Recurrent Structure就是给神经网络加上memory,使之有了记忆。我们今天不用这个讲法。
所谓Recurrent Structure就是把同一个structure反复的应用。好处就是:就算输入是一个复杂的 sequence,我们需要的不同种类的(?flag?)并不会随着input sequence 的长度而改变。不管输入多少sequence, network需要的参数量永远都是一样的。
以下这个资料作为参考:
给定义函数,这个函数有两个输入向量,输出两个向量。RNN的精神就是这个函数要反复的被使用,即接下来的输入要经过同样的函数,把上一个output作为下一个的input。需要注意的是: 和 有同样维度的向量。如此循环下去,可见,network需要的参数量永远都是一样的。
为什么不用feedForward network,因为我们输入的sequence可能会比较长,这样的话feedForward network可能就会参数很多,容易导致过拟合。
RNN在处理sequence方面比较好的是:可以需要较少的参数来解决问题,不容易造成过拟合,但是比较难train,但是你一旦在training data上获得比较好的结果,在testing data上的效果通常也不会差。
当然,RNN当然可以是deep的。给定两个多个函数,,……注意维度该一样的必须要一样。
-
Bidirectional RNN
Bidirectional RNN(双向RNN)也没有什么差别。这个需要第三个function,如下图所示,函数存在的目的是合并前两个函数的结果。至于和不必一样,你可以随便设计。
-
Pyramidal RNN
以下是Pyramidal RNN (金字塔型RNN)。我们有一个输入序列,非常长,第一层(图中的最底层)是Bidirectional RNN,如下图所示,这个是直接用sqe2sqe的语音识别。第一层是bi-rnn,第二层是将若干个第一层的输出(合起来)作为输出,也是bi-rnn,这样做的好处是可以把后面层的sequence缩短。后面都这样下去。这种结够比单纯的深度bi-rnn更容易训练。第二层block虽然需要处理若干第一层block的输出,但是这种法有利于做并行加速。RNN很难做并行,因为下一个节点必须得等第一个节点的输出才能进行,而pyramidal rnn里高层的block,串行变短了,每个block中虽然运算量较大,但是可以用并行运算加速。
-
naive RNN
以下是最简单的RNN。我们来看一下的结构:将输入分别乘上一个矩阵,再经过sigmoid函数得到,然后是通过算出的,如下图所示:
-
LSTM
现在流行的RNN是LSTM。对比naive RNN来看,输入不一样。在LSTM中,,扮演着不同的角色;什么意思呢?变化是很慢的,也就是说是加了一些东西形成的;但是变化是很快的。变化较慢,可以记住时间比较久的信息。
我们来看一下LSTM的架构。
- 三个input:,,
- 三个output:,,
运算的时候,把,并在一起,变成一个较长的vector,然后乘上一个矩阵,结果经过激活函数,得到,这个得到的结果跟,单独乘的结果是一样的。同理,乘上四个不同的矩阵,得到四个不同的,作为LSTM 的输入。
至于,有什么作用呢?有时候可以把和接在一起,这件事情叫做。理论上此时vector变成三个输入的合并,变长了,那也要变宽。但是实际上,对应到的部分,这个橙色部分的矩阵变成diagonal(对角线)的(对角矩阵),简化运算,得到。同理,可以得到
有了以上四个结果后,接下来,我们要做的事情是:如图所示的运算:其中⊙是指element-wise的相乘(表示两个向量的对应元素相乘)。
是输入门,决定了的哪些信息流入,是遗忘门,决定的哪些信息遗忘。
如下所示:是由两个LSTM单元的连接方法,反复进行这个操作。
-
GRU
如下图所示:除了LSTM之外,也许有取代LSTM趋势的单元叫做,(Gated recurrent units )
大架构来看,他和 naive RNN 很像,但是内部是很像LSTM 的:
- 把,并在一起,然后乘上一个矩阵,结果经过激活函数得到(0-1之间),这个叫做reset gate;
- 然后再把,并在一起,然后乘上另外一个矩阵,结果经过激活函数得到(0-1之间),这个叫做update gate;
- 然后再把,做element-wise的相乘,得到另外一个vector(图上没有画出来),这个vector跟 并在一起,然后乘上另外一个矩阵(图示中黄色箭头),得到
- 接下来,我们把,做element-wise的相乘;把,做element-wise的相乘;再把这两个加起来,得到
- 乘上一个矩阵,得到
GRU的好处就是:少了一个门,运算量少,避免过拟合。
(如下图所示:粗的箭头表示一个matrix,左边有四个matrix,GRU只有三个)
-
Examle Task
简化版的语音识别任务,每一段声音识别成一个因素即可,多分类问题。
使用单项RNN有一个有效的trick是 Target Delay
在原始声音信号(frame)右端补若干个零(图中是3个),在识别时标签向后延后若干位开始做识别。
以上任务在若干种方法的实验效果
纵轴是分类正确率,横轴Window size是(如果是MLP)是指:如果input是一排frame(每个frame的声音信号可能只有0.01秒),每次判断时将前后若干frame拼接起来作为一个比较长的vector去判断中间一个frame的标签是什么。图中MLP方法的Window size为10时效果最好。
横轴target delay是(如果是RNN或LSTM)是指label往右shift几个frame。
上面这个图的横轴是训练的轮数,从图中可以看出LSTM的训练速度比RNN更快
下面这个图是LSTM的各种架构跑的结果。论文名字叫LSTM 漫游。尝试了各种各样的LSTM架构和参数。
横轴是错误率,纵轴是训练时间。不同的颜色代表不同的LSTM架构,相同的颜色不同的点代表同样的架构,不同的参数。
后面三个MUT1、MUT2、MUT3使用基因算法去寻找最佳的RNN结构,使用LSTM和GRU的结构为初始基因,使用不同的组合去找。
-
Stack RNN
还有一个比较经典的RNN结构,普通的RNN受输入长度的限制。输入过长时,内存或显存放不下。而下面这个结构Stack RNN输入可以无限长,它是将输入每N个取出来放到一个function里,输出需要放入stack存储的information(下图绿色的方块),同时输出push、pop、nothing操作。具体详见论文吧。
5.3 卷积/池化层(Convolutional/Pooling Layer )
卷积/池化层的设计目的也是为了简化我们的神经网络。所需的参数量比全连接层要少。
5.3.1 卷积层
卷积层有2个特性:Sparse Connectivity、Parameter Sharing
举个例子:如下图所示:是前一层的output,是后一层的output;
如果是全连接层,后一层的output会考虑前一层所有的output。
如果是卷积层,第一个特性是Sparse Connectivity,每一个神经元只连接部分前一层的输出:
第二个特性是Parameter Sharing,具有不同感受野(receptive fields)的神经元可以使用相同的参数集,远比全连接层更少的参数:
将神经元1和3视为“过滤器1”(内核1);【filter又叫做kernel】同理,将神经元2和4视为“过滤器2”(内核2);如下图所示,filter的大小是3;滑动的步长是2。
如下面的图中,我们定义了两个feature map,红橙黄连线上的参数是共享的,蓝绿连线上的参数是共享的。
接下来举一些例子。教科书有六类,分别为:输入是1、2、3维,然后每一种状况分别分为单通道和多通道;
下面,我们来看看1维输入和单通道的情况~
比如声音信号和股票价值波动即为1维输入和单通道的情况。
下面,我们来看看1维输入和多通道的情况~
比如输入是一个文档,多通道是指在一个dimension上的时间点,我们并不是用一个值value去描述,而使用一个向量去描述,这个向量的每一个dimension就代表了不同的channel。eg:每一个词汇( 比如like)可以用word embeding或者one hot encoding 去描述。
滑动窗口在整个向量上滑动。
下一个例子,我们来看看2维输入和单通道的情况:
以下是padding,如果没有做padding的话,做卷积的时候会少考虑一些边缘的地方,所以image会越做越小,因此可以做zero padding。
上面是卷积的概念,在卷积神经网络中,还有一个重要的概念是池化:Pooling,即将前一个layer的个神经元的输出变为一个输出,池化的方法有平均法、最大值法和L2法。
视频中还讨论的一个点是,我们该拿前一个layer的哪些output 进行池化呢,可以是同一个feature map出来的,也可以组合不同feature map出来的。
组合不同feature(其实就是Maxout Network)的好处是:可以把长的不像的pattern,但是是同一类的东西归类在一起,举个例子来说,火车从前面和左边看是不一样的,不同的feature可以组合在一起。如下图所示,神经元1,2负责侦测手写体数字1,神经元3,4负责侦测手写体数字7。
这个时候我们就会有一个疑问,那么怎么知道是否侦测同样的pattern的呢?
其实这个是这样子的:我们要反过来想这个问题,并不是因为他们能侦测到同一个pattern我们把他们group到一起,而是因为我们把他们group到一起,经过training后,他们会侦测同样的pattern。
接下来,我们来做一个总结:以下是用来做语音辨识的,结合了好几层的架构。
3/10: TAs will teach TensorFlow
TensorFlow for regression
TensorFlow for word vector
word vector: https://www.youtube.com/watch?v=X7PH3NuYW0Q
TensorFlow for CNN
If you want to learn Theano
http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/Theano%20DNN.ecm.mp4/index.html
http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/Theano%20RNN.ecm.mp4/index.html