前馈网络存在的问题:
1、不可扩展:仅能对固定长度的输入进行处理,无法处理变长的序列数据。
2、无法“记忆”数据:每一次输入输出都是独立的,不相关联。这种情况在NLP里是不好用的,因为无法传递之前话语表达的含义,没办法对接下来的语义进行预测,也没办法结局距离依赖问题。
3、可扩展性差:CNN每个位置都有独立的参数,导致参数量随序列长度增加而增加
序列数据:
序列数据是按照时间顺序排列的数据,例如自然语言文本、音频信号、时间序列数据等。序列数据具有时间依赖关系和上下文信息,因此需要一种特殊的神经网络来处理这种类型的数据
循环神经网络(RNN)为什么能解决前馈网络中的问题:
1、引入反馈连接,可以保留上下文信息; 2、可以捕捉时间步的信息,建立序列的依赖关系 3、RNN将序列作为输入,元素之间是相关联的,CNN
的输入数据是离散的,处理依赖数据时的效果自然不如RNN.
卷积神经网络(CNN)与循环神经网络(RNN)的异同:
相同点:
1、都是深度学习中常用的神经网络模型,都能够进行特征提取和学习。
2、都可以通过堆叠多个层来增加网络的深度和表达能力。不同点:
1、CNN主要用于处理空间结构数据,例如图像数据,通过局部感知野和权值共享的方式有效提取图像特征。而RNN主要用于处理序列数据,通过循环连接捕捉序列的时间依赖关系
2、CNN中的操作是局部的,对于输入数据的不同位置采取相同的操作。而RNN的操作是逐步的,当前时间步的输出会成为下一个时间步的输入。
沿时间反向传播算法:
用来训练循环神经网络模型的一种算法。主要思想是:将RNN展开成多步的CNN,利用链式法则计算每一步的梯度,将梯度加起来,用于RNN参数的更新。他可以有效地处理时间依:赖关系,并在训练过程中捕捉到序列数据的长期依赖性。
seq2seq:
处理输入序列和输出序列之间的映射关系。它由两个主要的RNN组成,一个作为编码器,用于将输入序列转换为固定长度的向量表示,另一个作为解码器,用于将向量表示转换为输出序列。
个人猜想在文本翻译和ai对话当中就有运用这个模型,编码器将输入序列变成向量,捕捉语义,再通过解码器解码成目标序列,关键点在于训练过后的输入数据和输出数据之间的序列关系。
梯度消失、梯度爆炸:
由于链式法则的连乘操作,梯度可能会在网络的较浅层逐渐变小,导致网络 较浅层的参数无法得到有效更新,再训练也没效果。
梯度爆炸指的是梯度在反向传播过程中逐渐增大,导致网络参数的更新变得不稳定。当梯度值超过一定阈值时,会引起参数的大幅度变动