一.全连接层、CNN、RNN三种网络结构的分析
- 对于全连接网络:理论上全连接网络可以处理所有的问题,但是对于有些问题,全连接网络的效率非常差,所以对于一些特定的问题要使用更加有效的网络结构。
- 对于图片这样的2维信息处理,毫无疑问CNN会更有优势。
- 对于有着明显的前后关系的序列数据,比如说随着时间变化的数据,当使用RNN对其进行处理的时候,也会有着巨大的优势。
1.CNN应用举例
现实生活中这样的数据和应用比比皆是:
-
说话时的语音处理,可以用序列模型进行语音识别
-
听的音乐,可以用序列模型进行音乐生成
-
我们的语言信息,可以用序列模型进行机器翻译、情感分析等等
-
还有感兴趣的金融市场波动,可以用序列模型进行预测
-
当然此外还有诸如DNA序列,视频动作识别等等
二.循环神经网络–RNN
1.首先来看看,为什么普通的全连接网络并不适用于序列数据处理。
- 第一,如果使用全连接网络,那么输入输出的长度就被固定了,而往往序列数据的输入和输出长度是变化的
- 在学习序列关系的时候,RNN可以分享学到的关系特征,节省参数,而全连接网络不行。这里有点像CNN在不同的区域共享参数一样。
2.来看看RNN到底是什么样子
首先假设输入是长度为t的序列x,(就比如说是一个句子x有t个单词)。
于是对于RNN单元,我们从左到右每次输入一个时序单位的数据 x t x_t xt,也就是一个单词。
那么RNN会对它进行一些运算,获得一个隐藏状态 s t s_t st( h t h_t ht),传往下一个时序,同时再根据 s t s_t st(短期记忆,会不断的更新(擦除和重写))计算出 o t o_t ot(这里要是经过一个线性处理的话就叫做 0 t 0_t 0t,要是不经过线性处理也可以直接作为输出,那样的话就直接是 s t s_t st了)。(对于Simple RNN,来说没有长期的记忆)
s t = f ( W s s s t − 1 + W s x x t + b s ) s_{t}=f \left(W_{ss} s_{t-1}+W_{sx} x_{t} + b_s\right) st=f(Wssst−1+Wsxxt+bs)
y ^ t = f ( W s y s t + b y ) \widehat{y}_{t}=f\left(W_{s y} s_{t}+b_{y}\right) y
t=f(Wsyst+by)
式子中w是权重矩阵,f是一个非线性激活函数。因此对于每一个时序,RNN都是输入当前时序的的 x t x_t xt,和来自之前时序的状态 s t − 1 s_{t-1} st−1, x t x_t xt可以理解为当前的信息,而 s t − 1 s_{t-1} st−1可以理解为对之前信息的总结。
循环网络之所以称之为循环,是因为实际上一个单层的RNN网络只有一个单元,每次输入一个时序的数据,总结信息然后再传给自己,进入下一个时序。
一般RNN的表示方式有两种,一种是像上图左端一样,一个单元加一个循环的符号,便于理解RNN的原理;还有一种是,把它展开,将不同时序的运算过程都表示出来,便于理解RNN的运算过程
3.RNN的不同的架构
为了处理有着不同输入输出组合的各类任务,RNN可以分为以下几种不同的架构。
以下图中所有的 a < ? > a^{<?>} a<?>均为 s ? s_? s?
- 一对一:
其实就是普通的神经网络。