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

CS231n课程中,循环神经网络(RNN)是如何被深入探讨的?

循环神经网络(RNN)是一种处理序列数据的深度学习模型,具有记忆功能,适用于自然语言处理和时间序列分析等任务。

循环神经网络(Recurrent Neural Networks,RNN)是一种用于处理序列数据的深度学习模型,在自然语言处理、时间序列分析等领域有着广泛应用,以下是关于CS231n课程中RNN的详细内容:

循环神经网络(RNN)的基本结构

每个RNN网络都有一个小的循环核心单元,它将传入输入值$x_t$,把$x_t$传到RNN中,RNN中有一个内部隐藏态(internal hidden state),这个内部隐藏态在每次RNN有新的输入时都会被更新,这个更新后的状态值会在下次读取输入时被反馈给模型,通常我们还希望RNN在每一次读取输入后都能产生一个输出。

RNN的五种类型

依据输入或者输出的尺寸是否可变,RNN可分为以下五种情况:

1、Vanilla RNN:读取前一个隐藏态$h_{t-1}$和当前的输入$x_t$,生成下一个隐藏态。

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

3、Many to One:输入不定长序列,输出固定长序列。

CS231n课程中,循环神经网络(RNN)是如何被深入探讨的?

4、Many to Many:输入不定长序列,输出不定长序列。

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

语言建模Language Modeling

通过读取一些语言从而让神经网络学会生成自然语言,我们让模型逐个生成字符/单词,假设有一个字符型的语言模型,网络读取一串字符序列,然后去预测这个文本流的下一个字符是什么,在本例中,词典为[h,e,l,o],该模型对输入序列进行训练,最后进行预测。

RNN的反向传播

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

CS231n课程中,循环神经网络(RNN)是如何被深入探讨的?

在实际中,采用一种近似方法,叫做沿时间的截断反向传播方法,将输入序列划分成若干个子序列(一般100个输入值划成一个子序列),然后对于每个子序列,做一次前向传播(会保留上一个子序列输出的隐藏态),算出子序列的损失,然后用这个损失做反向传播,并对$W$做一次更新。

RNN的应用

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

2、视觉问答Visual Question Answering:模型的输入为一个图像和一个用自然语言描述的问题,模型根据图像内容输出针对这一问题的回答。

RNN变种

1、多层递归神经网络Multilayers RNN:之前的RNN都只有1个隐藏态,而多层的RNN中有多个隐藏态。

2、LSTM(Long Short-Term Memory):LSTM是一种特殊的RNN架构,能够解决梯度消失等问题,同时保留了长时序列的相关性。

CS231n课程中,循环神经网络(RNN)是如何被深入探讨的?

相关FAQs解答

Q1:为什么示例中不是输出一个得分最高的字母?

A1:由于得到的是基于字母的概率分布图,不是直接取概率最高的字符输出,而是基于softmax输出的概率分布进行采样,高概率的字符更容易被采样并输出,低概率的字符也有几率被输出,从而使模型输出结果多样。

Q2:在测试阶段是否能输入一个softmax向量而不是一个one-hot向量?

A2:首先这会与训练阶段所使用的数据不同,让训练好的模型去做与训练阶段不同的任务模型会产生偏差,通常会输出一些无用的信息,当词典中含有大量信息时,想输出多个单词时,softmax向量在计算时间上会比较长,所以一般用稀疏向量处理one-hot向量。

小编有话说

RNN作为处理序列数据的强大工具,其灵活性和广泛的应用场景使其成为深度学习领域的重要组成部分,RNN也面临着梯度消失和梯度爆炸等挑战,需要通过LSTM等改进模型来解决这些问题,在学习和应用RNN时,理解其基本结构和工作原理是关键,同时也要关注其在实际应用中的表现和优化策略。