RNN(Recurrent Neural Networks)
原理
图一:
图二:
全连接和卷积只关注的是数据输入到模型中得到输出,并不关注输入数据之间的序列问题。如我爱天安门和天安门爱我这是一个文字序列表达了不同的含义。Xt表示输入到神经元的输入序列。A表示同一神经元在不同时刻的状态,ht为最后输出。将图二展开就变成了图一,将序列X0输入经过运算神经元的状态变为A,h0作为这一个时刻的输出。下一个序列X1和上一时刻的状态A输入进来神状态变为A‘,h1为这一时刻的输出。依次输入序列得到输出。最总的输出ht包含了前面的所有序列的信息。RNN本质上就是一个感知机只有一个神经元,不过内部多了一个权重。感知机模型是f(x)=XW+b,输入和权重进行运算得到输出。RNN多了一个内部神经元的循环状态。
存在的问题
由于只有一个神经元,他对信息的存储容量是不够的,而且对之前时刻的输入全部接收没有经过取舍筛选,所以当序列过长的时候会出现遗忘问题(长期记忆问题,把之前的信息遗忘掉了)此外,对于一句话来说只能处理较短的序列问题。当另外还容易出现梯度问题。
RNN循环网络公式如下:
输出使用tanh函数作为激活函数。当训练的时候前向过程为ht*(ht-1)*(ht-2)…连乘容易出现梯度问题。ReLu作为激活函数容易出现梯度爆炸问题。
LSTM(Long Short Term)
针对RNN的长期依赖问题,提出了LSTM,经过改进后LSTM利用门来衡量序列之间的相关性。
图一:
图二:
图三:
图一为原始的RNN内部上一时刻的神经元状态A和这一时刻的序列输入计算通过tanh激活得到输出ht和这一时刻的神经元状态A。
图二为LSTM的结构,LSTM通过门结构来限制信息的流入情况。由于sigmoid的值域为0-1之间刚好可以用来控制信息流动的比例。所以门结构是通过sigmoid来激活的。LSTM有三个门结构分别为忘记门,更新门和输出门分别用来控制上一时刻信息的流入和这一时刻的信息以及最后输出的信息比例。
上图在LSTM中叫做传输带信息在传输带上进行流通。
门结构示意图:
忘记门:
更新门:
输出门:
在LSTM中一个结构就称为一个细胞(cell)下图为细胞的展开图
前向过程
GRU
忘记门和输出门都是控制的记忆部分,GRU是将LSTM的忘记门和输出门进行了合并。
前向过程:
使用rnn来进行验证码识别GitHub连接