5.深度学习模型的基础结构(Basic Structure)



本节大纲
  • 基础结构
    • 5.1 全连接层(Fully Connected Layer)
    • 5.2 循环结构(Recurrent Structure)
    • 5.3 卷积/池化层(Convolutional/Pooling Layer )


5.1 全连接层(Fully Connected Layer)

什么是全连接层?
  以下是第l-1和第l层,如图,a_i^l表示在第l层中的第i个神经元的输出,是一个scaler;我们把每一层中所有的神经元集合起来,即:a ^l表示在第l层中的所有神经元的输出,是一个vector;

  在神经网络的层与层之间有一个weight,我们表示为:w_{ij}^l,其中l表示这个权重连接了l-1层和l层,下标ij表示该权重连接了第l-1层的第j个神经元和第l层的第i个神经元。箭头的起始和终止位置是从右向左,具体原因是有深意的,我们接下来探讨。
  这个权重矩阵可以排列如下图所示:矩阵的高是l(第l层有l个神经元),宽是l-1(第l-1层有l-1个神经元)。

  如下图所示:是偏差bias。

  接下来,我们要算两个输出a_i^l a_j^{l - 1}之间的关系。在此之前,我们要计算激活函数的input:z_i^l,即在层 l的神经元i的激活函数的输入;z^l代表:在层 l的所有神经元的激活函数的输入。
  z_i^l与前一个layer的output的关系是这样子的:前一层所有的神经元与其权重相乘再加上bias就是:z_i^l = w_{i1}^la_1^{l - 1} + w_{i2}^la_2^{l - 1} + ... + b_i^l = \sum\limits_{j = 1}^{{N_{l - 1}}} {w_{ij}^la_j^{l - 1} + b_i^l}

  接下来,我们要计算z^l:我们先把每个z列出来,然后做一下整理,变成矩阵向量的形式。如下所示:


下图为推导的过程:

  接下来就是l层的神经元的输入输出的关系,即:a^l=\sigma(z^l) 这是把z^l里面的每一个元素放入激活函数,成为a^l

  最后把这些公式串上来,就得到:



5.2 循环结构(Recurrent Structure)

  过去有一种讲法,是说:Recurrent Structure就是给神经网络加上memory,使之有了记忆。我们今天不用这个讲法。
  所谓Recurrent Structure就是把同一个structure反复的应用。好处就是:就算输入是一个复杂的 sequence,我们需要的不同种类的(?flag?)并不会随着input sequence 的长度而改变。不管输入多少sequence, network需要的参数量永远都是一样的。

  以下这个资料作为参考:


  给定义函数f,这个函数有两个输入向量h,x,输出两个向量h’,y。RNN的精神就是这个函数要反复的被使用,即接下来的输入要经过同样的函数f,把上一个output作为下一个的input。需要注意的是:hh’ 有同样维度的向量。如此循环下去,可见,network需要的参数量永远都是一样的。

  为什么不用feedForward network,因为我们输入的sequence可能会比较长,这样的话feedForward network可能就会参数很多,容易导致过拟合。
  RNN在处理sequence方面比较好的是:可以需要较少的参数来解决问题,不容易造成过拟合,但是比较难train,但是你一旦在training data上获得比较好的结果,在testing data上的效果通常也不会差。
  当然,RNN当然可以是deep的。给定两个多个函数,f_1f_2……注意维度该一样的必须要一样。

  • Bidirectional RNN

  Bidirectional RNN(双向RNN)也没有什么差别。这个需要第三个function,如下图所示,f_3函数存在的目的是合并前两个函数的结果。至于f_1f_2不必一样,你可以随便设计。

  • Pyramidal RNN

  以下是Pyramidal RNN (金字塔型RNN)。我们有一个输入序列x_1,x_2,...,x_T,,非常长,第一层(图中的最底层)是Bidirectional RNN,如下图所示,这个是直接用sqe2sqe的语音识别。第一层是bi-rnn,第二层是将若干个第一层的输出(合起来)作为输出,也是bi-rnn,这样做的好处是可以把后面层的sequence缩短。后面都这样下去。这种结够比单纯的深度bi-rnn更容易训练。第二层block虽然需要处理若干第一层block的输出,但是这种法有利于做并行加速。RNN很难做并行,因为下一个节点必须得等第一个节点的输出才能进行,而pyramidal rnn里高层的block,串行变短了,每个block中虽然运算量较大,但是可以用并行运算加速。

  • naive RNN

以下是最简单的RNN。我们来看一下f的结构:将输入h,x分别乘上一个矩阵,再经过sigmoid函数得到h’,然后y是通过h’算出的,如下图所示:

  • LSTM

  现在流行的RNN是LSTM。对比naive RNN来看,输入不一样。在LSTM中,h^{t-1}c^{t-1}扮演着不同的角色;什么意思呢?c变化是很慢的,也就是说c^{t}c^{t-1}加了一些东西形成的;但是h变化是很快的。c变化较慢,可以记住时间比较久的信息。

  我们来看一下LSTM的架构。
  - 三个inputx^th^{t-1}c^{t-1}
  - 三个outputy^th^{t}c^{t}

  运算的时候,把x^th^{t-1}并在一起,变成一个较长的vector,然后乘上一个矩阵w,结果经过激活函数tanh,得到z,这个得到的结果跟x^th^{t-1}单独乘w的结果是一样的。同理,乘上四个不同的矩阵,得到四个不同的z,z^i,z^f,z^o,作为LSTM 的输入。

  至于c^{t-1},有什么作用呢?有时候可以把c^{t-1}h^{t-1}接在一起,这件事情叫做peephole。理论上此时vector变成三个输入的合并,变长了,那w也要变宽。但是实际上,对应到c的部分,这个橙色部分的矩阵变成diagonal(对角线)的(对角矩阵),简化运算,得到z。同理,可以得到z,z^i,z^f,z^o

  有了以上四个结果z,z^i,z^f,z^o后,接下来,我们要做的事情是:如图所示的运算:其中⊙是指element-wise的相乘(表示两个向量的对应元素相乘)。
  z_i是输入门,决定了z的哪些信息流入,z_f是遗忘门,决定c_{t-1}的哪些信息遗忘。

  如下所示:是由两个LSTM单元的连接方法,反复进行这个操作。

  • GRU

  如下图所示:除了LSTM之外,也许有取代LSTM趋势的单元叫做GRU,(Gated recurrent units )
  大架构来看,他和 naive RNN 很像,但是内部是很像LSTM 的:

  • x^th^{t-1}并在一起,然后乘上一个矩阵w,结果经过激活函数得到r(0-1之间),这个r叫做reset gate;
  • 然后再把x^th^{t-1}并在一起,然后乘上另外一个矩阵w,结果经过激活函数得到z(0-1之间),这个z叫做update gate;
  • 然后再把rh^{t-1}做element-wise的相乘,得到另外一个vector(图上没有画出来),这个vector跟 x^t并在一起,然后乘上另外一个矩阵w(图示中黄色箭头),得到h’
  • 接下来,我们把zh^{t-1}做element-wise的相乘;把1-zh’做element-wise的相乘;再把这两个加起来,得到h^{t}
  • h^{t}乘上一个矩阵,得到y^t

  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 ConnectivityParameter Sharing
  举个例子:如下图所示:1-5是前一层的output,1-4是后一层的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的k个神经元的输出变为一个输出,池化的方法有平均法、最大值法和L2法。

视频中还讨论的一个点是,我们该拿前一个layer的哪些output 进行池化呢,可以是同一个feature map出来的,也可以组合不同feature map出来的。

同一个feature map出来

组合不同feature(其实就是Maxout Network)的好处是:可以把长的不像的pattern,但是是同一类的东西归类在一起,举个例子来说,火车从前面和左边看是不一样的,不同的feature可以组合在一起。如下图所示,神经元1,2负责侦测手写体数字1,神经元3,4负责侦测手写体数字7。

这个时候我们就会有一个疑问,那么怎么知道是否侦测同样的pattern的呢
其实这个是这样子的:我们要反过来想这个问题,并不是因为他们能侦测到同一个pattern我们把他们group到一起,而是因为我们把他们group到一起,经过training后,他们会侦测同样的pattern。

不同feature map出来

接下来,我们来做一个总结:以下是用来做语音辨识的,结合了好几层的架构。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容