0%

循环神经网络RNN

循环神经网络RNN(Recurrent neural network

1. 为什么需要RNN?

普通的神经网络智能单独的去处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好地处理序列的信息,即前面的输入和后面的输入是有关系的。

从网络结构上看,循环神经网络会记忆之前的信息。即:循环神经网络的隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。

循环神经网络对于每一个时刻的输入结合当前模型的状态给出一个输出。循环神经网络可以看做同一个神经网络被无限复制的结果,处于优化考虑,显示生活中无法做到真正的无限循环

2. RNN结构

如下为循环神经网络按时间展开后的结构

img

**循环神经网络在每一个时刻会有一个输入 XiX_i,然后根据循环神经网络当前的状态 AiA_i 提供一个输出 hih_i而循环神经网络当前的状态 AiA_i 是根据上一时刻的状态 Ai1A_{i-1} 和当前的输入 XiX_i 共同决定的。**从神经网络的结构特征考科一看出它最擅长解决的问题是时间序列相关的。循环神经网络也是处理这类问题时最自然的神经网络结构。对于一个序列数据,可以将这个序列上不同时刻的数据依次传入循环神经网络的输入层,而输出可以是对序列中下一个时刻的预测,也可以是对当前时刻心系的处理结果(比如语音识别结果)。循环神经网络要求每一时刻都有一个输入,但是不一定每个时刻都需要所有输出

循环神经网络中的参数在不同时刻是共享

为了将当前时刻的状态转换成最终的输出循环神经网络需要另一个完成此过程同时刻用于输出的全连接神经网络中的参数也是一致的。

**循环神经网络的总损失:**所有时刻(或部分时刻)上损失函数的综合

循环神经网络可以更好地利用传统神经网络结构所不能建模的信息,但同时,带来更大的技术挑战——**长期依赖(Long-term dependencies)**问题

3. 长短时记忆网络(Long Short Term Memory,LSTM)

解决长期以来、有用信息的间隔有大有小、长短不一的问题。

LSTM是一种拥有三个“门”结构的特殊网络结构

LSTM靠一些“门”的结构让信息有选择性地影响神经网络中每个时刻的状态。“门”结构就是一个使用sigmoid神经网络一个按位做乘法结合在一起的操作。

叫做“门”是因为使用sigmoid作为激活函数的全连接神经网络层会输出一个0到1之间的数值,描述当前输入有多少信息量可以通过这个结构。这个结构的功能类似于一扇门,当门打开时(sigmoid神经网络层输出为1),全部信息都可以通过;当门关上时(sigmoid神经网络层输出为0),任何信息无法通过

img

“遗忘门”和“输入门”至关重要。通过“遗忘门”和“输出门”,LSTM结构可以更加有效的决定哪些信息应该被遗忘,哪些信息应该被保留

遗忘门的作用:让循环神经网络“忘记”之前没有用的信息。遗忘门会根据当前的输入 XtX_t、商议时刻的状态 Ct1C_{t-1} 、上一时刻的输出 Ht1H_{t-1} 共同决定哪一部分记忆需要被遗忘

输入门:在循环神经网络“忘记”了部分之间的状态后,它还需要从当前的输入补充最新的记忆,这个过程需要“输入门”完成。输入门根据 XtX_tCt1C_{t-1}Ht1H_{t-1} 决定哪些部分将进入当前时刻 CtC_t

输出门:LSTM结构在计算得到新的状态 CtC_t 后需要产生当前时刻的输出,这个过程是由“输出门”完成。输出门根据最新的状态 CtC_t 、上一时刻的输出 Ht1H_{t-1} 和当前的输入 XtX_t 来决定该时刻的输出 HtH_t

4. 双向循环神经网络(BiDirection RNN)

在经典的循环神经网络中,状态的传输是从前往后单向传的,然而有些问题中,当前时刻的输出不仅和之前的状态有关,也与之后的状态有关,这就需要使用双向循环神经网络解决这个问题。

双向循环神经网络是由两个单项循环神经网络上下叠加在一起组成的,输出由这两个循环神经网络的状态共同决定

在每一个时刻t,输入会同时提供给这两个方向相反的循环神经网络,而输出则是由两个单项循环神经网络共同决定的

img

5. 深层循环神经网络(deep RNN)

为了增强模型的表达能力,可以**将每一时刻上的循环体重复多次。**深层循环神经网络在每一时刻上将循环体结构复制了多次。每一层循环体中参数是一致的,而不同层中的参数可以不同。

img

6. 循环神经网络的Dropout

通过dropout可以让军妓神经网络更加健壮。类似,在循环神经网络中使用dropout也有同样的功能。

如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。Dropout可以有效的缓解过拟合的发生,在一定程度上达到正则化的效果。

Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一般的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少隐层节点间的相互作用,隐层节点相互作用是指某些隐层节点依赖其他隐层节点才能发挥作用。

Dropout通俗讲,即:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型的泛化性更强,因为它不会太依赖某些局部的特征,类似卷积神经网络只在全连接层使用dropout循环神经网络一般只在不同层循环结构之间使用dropout,不在同一层循环结构之间使用。即,从时刻 t - 1传递到时刻t,循环神经网络不会进行状态的dropout;而在同一时刻t中,不同层循环体之间会使用dropout

img