当前位置:首页 > 行业动态 > 正文

循环神经网络在CS231N课程中是如何应用的?

CS231N课程中,循环神经网络(RNN)是一种能处理序列数据的神经网络。它通过隐藏状态在序列中传递信息,适用于自然语言处理等任务。

循环神经网络(Recurrent Neural Networks,RNN)是深度学习中用于处理序列数据的一类重要模型,以下将从多个方面详细介绍 RNN:

1、RNN 的基本结构

工作流程:每个 RNN 网络都有一个小的循环核心单元,它将传入的输入值 x 传递到 RNN 中,并在每次有新的输入时更新内部隐藏态,这个更新后的状态值会在下次读取输入时被反馈给模型,通常还希望 RNN 在每一次读取输入后都能产生一个输出。

循环函数:h_t=f_W(h_{t-1},x_t),每一步都使用同一个函数 f_w 和相同的权重 w,这些会随隐藏态的变化而改变,在每一个时间步,将当时的状态 h 输入到全连接层中进行决策。

2、RNN 的五种类型

Vanilla RNN:读取前一个隐藏态 h_{t-1} 和当前的输入 x_t,生成下一个隐藏态,其循环函数有两个权重,分别与前一个时间步状态 h 和此时间步的输入 x 进行相乘求和,然后使用 tanh 函数将结果缩放至 [-1,1] 范围。

One to Many:接收固定长的输入项,输出不定长的输出项。

循环神经网络在CS231N课程中是如何应用的?

Many to One:输入一串视频帧的序列,然后生成一个标签代表这个视频中发生了什么动作等。

Many to Many:如机器翻译任务,输入一串英文单词组成的序列,翻译成法语单词组成的序列。

Sequence to Sequence:会用来解决机器翻译之类的问题,输入一个不定长序列后输出一个不定长序列,可看作是 Many-to-one + One-to-many。

3、语言建模 Language Modeling

字符级语言模型例子:通过读取一些语言让神经网络学会生成自然语言,逐个生成字符 / 单词,假设有一个字符型的语言模型,网络读取一串字符序列,预测文本流的下一个字符,在训练阶段,设训练序列为 "hello",将字符序列作为输入项 x_t,因为单词由 h、e、l、o 这 4 个字母组成,所以用四维向量表示这 4 个字母,第一个 time step,神经网络收到输入 ‘h’,输出对组成单词的每个字母的预测,即接下来最有可能出现的字母,由于训练字母序列是 "hello",下一个正确字母应是 e,但模型可能预测错误,此时可使用 Softmax 损失函数度量预测结果的不满意程度,下一个 time step,输入第二个字母 e,重复上述过程,不断训练后模型将学习基于之前字符预测后续字符。

循环神经网络在CS231N课程中是如何应用的?

反向传播

Backpropagation through time:假设有一个序列,每个时间步生成 y 以及 loss,这就是沿时间的反向传播方法,但该方法在序列很长的情况下十分耗时,因为每次 loss 的计算、梯度计算和 BP 依赖于模型输入序列的长度,当输入序列很长时,BP 就十分耗时,模型很难收敛,并且占用非常大的内存。

Truncated Backpropagation through time:实际中采用一种近似方法,叫做沿时间的截断反向传播方法,将输入序列划分成若干个子序列(一般 100 个输入值划成一个子序列),然后对于每个子序列做一次前向传播并算出子序列的损失,再用这个损失做反向传播并对 W 做一次更新,相当于 mini batch 的作用。

4、RNN 应用

图像标注 Image Captioning:输入一幅图像,模型输出自然语言的图像语义信息。

循环神经网络在CS231N课程中是如何应用的?

视觉问答 Visual Question Answering:模型输入一个图像和一个用自然语言描述的问题,根据图像内容输出针对这一问题的回答,模型由 CNN 和 RNN 组成,CNN 将图像概括为一个向量,输入的问题概括为一个向量,将 CNN 向量和输入向量结合输入到 RNN 中来预测答案。

5、RNN 变种

多层递归神经网络 Multilayers RNN:之前的 RNN 只有一个隐藏态,而多层的 RNN 中有多个隐藏态,例如一个三层的 RNN,先将输入值输入到第一层网络产生第一层的隐藏态,再将此隐藏态输入到第二层网络获得第二层隐藏态,以此类推。

循环神经网络(RNN)以其独特的结构和强大的功能,在处理序列数据方面展现出了巨大的潜力,无论是在自然语言处理、图像识别还是其他领域,RNN 及其变种都发挥着重要的作用,并且随着技术的不断发展,其应用前景将更加广阔。