序列模型
文本预处理
- 序列模型的核心其实就是去预测
带时间序列的任务场景
- 神经网络可以解决大部分问题;因为其能够学习到很多线性的和非线性的知识
- 时间序列任务场景:一、语音识别; 二、生成一段音乐; 三、情感分析;四、**轨迹预测(**网格与网格之间是有联系的;只有将它们联系起来才能成为一条轨迹)
- 时间序列:特点;前后关联强,“前因后果”(后面产生的结果,依赖前面产生的结果)
标准神经网络建模的弊端
弊端~ 针对位置较强
- 输入和输出数据在不同的例子中可能有不同的长度
- 一个像这样单纯的神经网络结构,它并不共享从文本的不同位置学到的特征
- 参数量巨大(1、输入网络的特征,往往是one hot; 2、输入的网络特征是一段序列)
- 没有办法体现出时序上的“前因后果”的联系
总结:标准神经网络不适合处理带时间序列的网络场景(标准神经网络不适合处理带时间序列的网络场景)
RNN循环神经网络
网络结构
- 解释:是一种串联结构;很直观的解释就是:后面的状态会受到前面状态的影响;将前后关联起来了【后面的状态会受到前面状态的影响】
- 单独一个单元(关于输出;如果是多分类问题:接一个softmax即可)
- 结构很多种:多输入多输出等
- 解释:单元想象为人脑:a(t-1)【其综合了以前所有的连续过来的状态,不单单是一个状态(递推的过程)】时刻是你上一时刻的状态;a(t)时刻是你现在的状态;softmax可以想象成发生一些事情将你的想法落实成真正的行动(结果)
特点
- 串联结构,体现出“前因后果”,后面结果的生成,要参考前面的信息
- 所有特征共享同一套参数(每一个时间点下,对应的参数都是同一套参数;如所有的W)体现:面对不同的输入,能学到不同的相应的结果;极大减少了训练参数量;输入和输出数据在不同的例子中可以有不同的长度
前向传播
- RNN 的前向传播过程可以看做是对一个序列中每一个时间步骤的输入进行计算,同时将上一个时间步骤的隐藏状态作为输入传递到当前时间步骤中。这样就可以通过记忆前面的信息来影响当前的输出。在每个时间步骤中,都会对当前的输入和上一个时间步骤的状态进行线性加权求和,并通过激活函数进行非线性变换,以产生当前时间步骤的输出和新的隐藏状态(产生当前时间步骤的输出和新的隐藏状态)。这个隐藏状态也会作为下一个时间步骤的输入来参与计算。
- 总之,循环神经网络的前向传播是指将一个序列中每一个时间步骤的输入和上一个时间步骤的隐藏状态作为输入,通过线性变换和激活函数计算当前时间步骤的输出和新的隐藏状态
- 在RNN中,激活函数的作用是将输入信号进行非线性变换,从而使得网络可以学习更加复杂的特征和模式。由于循环神经网络在每个时间步都会传递前一时刻的状态,因此激活函数还能够帮助网络捕捉先前时刻的信息,并将其传递到当前时刻,从而帮助网络记忆之前的状态。【帮助网络记忆之前的状态】
损失函数
- 损失函数(Loss function)是用来衡量模型预测的输出值和实际目标值之间差异的函数。【衡量模型预测的输出值和实际目标值之间差异的函数】
- 在机器学习中,训练模型的主要目标是最小化损失函数,以使其能够更准确地预测未知数据的目标值。
- 对于一个给定的训练样本,损失函数通常由两个部分组成:一个是预测值与真实值之间的误差部分,另一个是正则化项。误差部分通常是一个平方误差或者交叉熵等衡量预测值和真实值之间距离的指标,而正则化项则可以用来控制模型的复杂度,避免过拟合。
- 常见的损失函数包括均方误差(Mean Squared Error, MSE)、二分类交叉熵(Binary Cross-Entropy)、多分类交叉熵(Categorical Cross-Entropy)等。选择哪种损失函数取决于具体的任务和模型特性。
- 需要注意的是,损失函数只是模型优化的一部分,通常需要结合优化算法来最小化损失函数,如梯度下降(Gradient Descent)等。
损失函数
- 单个时间步的损失函数(可自定义的;二分类任务)
- 整个序列的损失函数(相加)
困惑度
- 在自然语言处理中;困惑度是一种评估语言模型好坏的指标;用来衡量一个语言模型预测下一个词时的不确定性;
- 在RNN中;困惑度指的是给定一个序列后,模型预测每个位置上的词的概率分布的累积交叉熵的平均值的指数
- 具体地说,在训练循环神经网络时,我们会将训练数据按照时间步进行划分,并通过前向传播计算损失函数,然后通过反向传播更新参数。此时,我们可以使用困惑度来评估模型的优劣,即越小表示模型对序列的预测能力越好。
- 举例:
## 反向传播
反向传播算法主要用于模型的训练和参数优化。具体来说,它的作用包括以下几个方面: - 反向传播中计算误差和梯度来用于模型的训练和参数优化;
- 计算误差:通过比较网络的预测输出和真实标签,计算出每个时间步的输出误差。这些误差可以告诉我们模型在哪些方面表现不好,从而指导我们如何对模型进行优化。
- 反向传播误差:将误差信号从输出层传递到输入层,以便计算参数的梯度。具体地,我们会根据链式法则,将每个时间步的误差传递回前一个时间步,直到最终传递到网络的输入层。
- 计算梯度:根据误差信号和中间变量,计算每个参数的梯度。这些梯度可以告诉我们,如果微调参数,可以使模型更好地拟合数据。(里面有很多的求导工作)
- 更新参数:根据梯度和学习率,更新每个参数的值。这样可以使模型更加准确地预测未知数据,同时避免过拟合等问题。
总结:总的来说,RNN 反向传播的作用是通过计算误差并更新参数,提高模型对时间序列数据的预测能力。反向传播算法是一种非常重要的优化方法,在神经网络和机器学习中得到了广泛应用,对于提高模型的性能至关重要。
- 反向传播具体怎么做还需要参考我们使用的是哪个损失函数
- 具体求导实现
- tanh函数(取值是从-1到1之间)
缺点
- 只有了解了它的缺点,才知道后面的GRU和LSTM是如何来对它进行改进的
- 当序列太长的时候;容易导致【梯度消失】;参数更新只能捕获到局部依赖关系;没办法再捕捉到序列之间的【长期】关联或者依赖关系
- 举例:(对单个时间点求取梯度)
参考
- ChatGPt
- RNN大白话视屏讲解及公式推导