循环神经网络(RNN)
RNN的的基础单元是一个循环单元,前部序列的信息经处理后,作为输入信息传递到后部序列
x为输入向量,y为输出向量,a为上一隐藏层的a与x通过激活函数得到的值,简言之,每一层神经元是通过输入x和上层得到的权重的a共同得到后续的结果
上述公式中,为隐藏层的激活函数,为常数,为权重,由此得到a与y。
…
…
…
依次往后,可以得到
RNN常见的结构
多对多结构(常用于机器翻译)、多对一结构(常用与情感分析)、一对一结构、一对多结构(音乐生成)
双向循环神经网络
双向循环神经网络通过反向更新的隐藏层来利用方向时间信息
通常用来对序列抽取特征、填空,而不是预测未来
简言之,双向循环神经网络有两个隐藏层,一个用来输出给后面的神经元,一个反向输出给上一个神经元。
长短期记忆网络LSTM
参考文章:人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)
RNN是想把所有信息都记住,不管是有用的信息还是没用的信息
LSTM则设计了一个记忆细胞,具备选择性记忆的功能,可以选择记忆重要信息,过滤噪声信息,减轻记忆负担,避免长期依赖问题。
如下图为LSTM结构
LSTM–遗忘门
遗忘门就是遗忘对当前状态来说没有用的信息,决定我们还需不需要记住前面状态的信息,即当前时刻的记忆状态有多少来自于前面的记忆。接受ht-1和xt通过Sigmoid 激活函数生成了ft。输出值ft均介于0和1之间,1表示"完全接受这个",0表示"完全忽略这个"
Ct-1是上一层的记忆细胞, 给与LSTM选择记忆功能,使得LSTM有能力选择每个时间步里面记忆的内容。
LSTM–输入门
输入门就是对当前输入ht-1和xt进行处理,来确定在当前状态哪些信息需要保存。
第一步,通过Sigmoid激活函数来决定什么值需要更新,即产生了it
第二步,通过tanh激活函数创建了一个新的候选值向量,会被加入到状态中。
LSTM–细胞状态更新
对记忆细胞的更新,忘记不想要的信息,然后在加上根据我们决定更新每个状态的程度进行变化。
LSTM–输出门
最后我们要确定输出值,第一步,我们将信息输入到一个sigmoid激活函数来确定细胞状态的哪一部分将被输出。第二步,将第一步输出的信息ot与我们的Ct通过一个tanh激活函数最终得到我们确定输出的信息。