循环神经网络RNN
对于多个输入,传统的 神经网络 只能进行单独处理,即前一个输入和后一个输入是完全没有关系的。但实操中,某些任务需要能够关联处理序列的信息,即前面的输入和后面的输入是有关系的。比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列; 又比如,当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。
核心思想
RNN的核心思想是引入一个循环结构,使得当前时刻的输出不仅取决于当前时刻的输入,还取决于之前时刻的输出。这种循环结构可以看作是一种记忆,使得模型可以“记住”之前的信息并在当前时刻进行处理。
模型结构
一个简单的循环神经网如图,由输入层、一个隐藏层和一个输出层组成:
- 输入层:用于接收输入数据。输入数据通常是一个序列,例如一个句子中的单词序列。
- 在输入层中,每个时刻的输入都可以是一个向量X,例如t时刻是输入是Xt。
- 隐藏层:隐藏层是RNN模型的核心,它包括一个或多个循环单元。在隐藏层中,每个时刻的输入不仅包括当前时刻的输入,还包括上一个时刻的输出。
- S为一个向量,代表隐藏层的值,U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵。
- 隐藏层的值St不仅仅取决于当前这次的输入Xt,还取决于上一次隐藏层的值St-1。(权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重)。
- 效果:这种循环结构使得模型可以处理任意长度的序列数据,并且可以在处理序列时共享权重参数(即每个时间步的权重参数是相同的。也就是说,无论是在序列的哪个时间步,RNN的循环层中的权重参数都是相同的),使得模型的训练和预测效率更高。
3.输出层:输出层是RNN模型的最后一层,用于输出模型的预测结果。
- 在输出层中,每个时刻的输出都可以是一个向量O,表示当前时刻的预测结果,例如t时刻是输出是Ot。
基于上述模型结构,可以按时间线展开,分别关注t-1、t、t+1时刻的输入、输出、隐藏层,可以更形象地理解:St的值不仅仅取决于Xt,还取决于St-1
用公式表示如下: