机器学习&&深度学习——循环神经网络RNN

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er

🌌上期文章:机器学习&&深度学习---语言模型和数据集

📚订阅专栏:机器学习&&深度学习

希望文章对你们有所帮助

循环神经网络RNN

引入

在之前介绍了n元语法模型,其中单词xt在时间步t的概率仅取决于前n-1个单词。对于时间步t-(n-1)之前的打你,若我们想将其可能产生的影响合并到xt上,需要增加n,模型参数的数量也会指数增长,因为词表V需要存储|V|n个数字,因此我们不如使用隐变量:
P ( x t ∣ x t − 1 , . . . , x 1 ) ≈ P ( x t ∣ h t − 1 ) P(x_t|x_{t-1},...,x_1)≈P(x_t|h_{t-1}) P(xt∣xt−1,...,x1)≈P(xt∣ht−1)

其中h表示隐藏变量,存储到时间步t-1的序列信息。
h t = f ( x t , h t − 1 ) h_t=f(x_t,h_{t-1}) ht=f(xt,ht−1)

值得注意的是,隐藏层和隐状态指的是两个截然不同的概念。如上所述,隐藏层是在从输入到输出的路径上(以观测角度来理解)的隐藏的层,而隐状态则是在给定步骤所做的任何事情(以技术角度来定义)的输入,并且这些状态只能通过先前时间步的数据来计算。

RNN是具有隐状态的神经网络

无隐状态的神经网络

对于只有单隐藏层的多层感知机,其隐藏层输出为:
H = φ ( X W x h + b h ) H=φ(XW_{xh}+b_h) H=φ(XWxh+bh)

将隐藏变量H用作输出层的输入,则其输出层为:
O = H W h q + b q O=HW_{hq}+b_q O=HWhq+bq

有隐状态的循环神经网络

有了隐状态后,情况就完全不同了。与多层感知机不同的是, 我们在这里保存了前一个时间步的隐藏变量:
H t − 1 H_{t-1} Ht−1

并引入了一个新的权重参数:
W h h W_{hh} Whh

用来描述如何在当前时间步中使用前一个时间步的隐藏变量。

而当前时间步隐藏变量由当前时间步的输入与前一个时间步的隐藏变量一起计算得出:
H t = φ ( X t W x h + H t − 1 W h h + b h ) H_t=φ(X_tW_{xh}+H_{t-1}W_{hh}+b_h) Ht=φ(XtWxh+Ht−1Whh+bh)

这些变量捕获并保留了序列直到其当前时间步的历史信息,就如当前时间步下神经网络的状态或记忆,因此这样的隐藏变量被称为隐状态。

由于隐状态使用的定义与前一个时间步中使用的定义相同,因此上式是循环的,基于上式的网络就称为循环神经网络RNN,执行上式的层就叫做循环层。

对于时间步t,输出层的输出类似于多层感知机:
O t = H t W h q + b q O_t=H_tW_{hq}+b_q Ot=HtWhq+bq

值得一提的是,即使在不同的时间步,循环神经网络也总是使用这些模型参数。因此,循环神经网络的参数开销不会随着时间步的增加而增加。

下面展示了RNN计算逻辑:

在任意时间步,隐状态的计算可以被视为:

1、拼接当前时间步t的输入和前一时间步t-1的隐状态

2、将拼接结果送入带有激活函数的全连接层,全连接层的输出是当前时间步t的隐状态

具有循环神经网络的字符级语言模型

设小批量大小为1,批量中的文本序列为"machine"。使用字符级语言模型,将文本次元化为字符而不是单词,如下图演示,使用当前的和先前的字符预测下一个字符:

在训练过程中,我们对每个时间步的输出层的输出进行softmax操作, 然后利用交叉熵损失计算模型输出和标签之间的误差。

在实践中,我们使用的批量大小是n>1,每个词元都由一个d维向量表示,因此,我们在时间步t的输入是一个n×d的矩阵。

困惑度

让我们讨论如何度量语言模型的质量,这将在后续部分中用于评估基于循环神经网络的模型。

我们可以通过一个序列中所有的n个词元的交叉熵损失的平均值来衡量:
1 n ∑ t = 1 n − l o g P ( x t ∣ x t − 1 , . . . , x 1 ) \frac{1}{n}\sum_{t=1}^n-logP(x_t|x_{t-1},...,x_1) n1t=1∑n−logP(xt∣xt−1,...,x1)

其中,P由语言模型给出,xt是在时间步t从该序列中观察到的实际词元。

而我们使用的是困惑度 ,是一个指数:
e x p ( − 1 n ∑ t = 1 n l o g P ( x t ∣ x t − 1 , . . . , x 1 ) ) exp(-\frac{1}{n}\sum_{t=1}^nlogP(x_t|x_{t-1},...,x_1)) exp(−n1t=1∑nlogP(xt∣xt−1,...,x1))

困惑度的最好的理解是"下一个词元的实际选择数的调和平均数"。

在接下来,我们将基于循环神经网络实现字符级语言模型,并使用困惑度来评估这样的模型。

小结

1、对隐状态使用循环计算的神经网络称为循环神经网络(RNN)

2、循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息

3、循环神经网络模型的参数数量不会随着时间步的增加而增加

4、我们可以使用循环神经网络创建字符级语言模型

5、我们可以使用困惑度来评价语言模型的质量

相关推荐
北京耐用通信6 分钟前
告别“牵一发而动全身”:耐达讯自动化Profibus PA分线器为石化流量计网络构筑安全屏障
人工智能·网络协议·安全·自动化·信息与通信
ziwu7 分钟前
海洋生物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·深度学习·图像识别
WWZZ202523 分钟前
快速上手大模型:深度学习12(目标检测、语义分割、序列模型)
深度学习·算法·目标检测·计算机视觉·机器人·大模型·具身智能
luoganttcc33 分钟前
RoboTron-Drive:自动驾驶领域的全能多模态大模型
人工智能·机器学习·自动驾驶
向阳逐梦1 小时前
DC-DC Buck 电路(降压转换器)全面解析
人工智能·算法
xcLeigh1 小时前
AI的提示词专栏:“Prompt Chaining”把多个 Prompt 串联成工作流
人工智能·ai·prompt·提示词·工作流
是店小二呀1 小时前
AI模型练好了却传不出去?这两个工具帮你破局
人工智能
galaxylove1 小时前
Gartner发布2025年人工智能和网络安全技术成熟度曲线:网络安全领域对AI的期望值达到顶峰
人工智能·安全·web安全
galaxylove1 小时前
Gartner发布CISO人工智能安全指南:将AI安全治理融入所有网络安全治理体系
人工智能·安全·web安全