跟李沐学AI:循环神经网络RNN

循环神经网络

循环神经网络 (recurrent neural networks,RNNs) 是具有隐状态的神经网络。RNN 具有隐状态(hidden state)的原因在于它需要一种机制来存储之前输入的信息,以便于处理当前输入时能够考虑之前的上下文。基于上节提到的潜变量自回归模型:。其中隐状态 (hidden state), 也称为隐藏变量 (hidden variable), 它存储了到时间步t−1的序列信息。通常,我们可以基于当前输入和先前隐状态来计算时间步t处的任何时间的隐状态:。在每一个时间步t,RNN 接收一个输入xt​以及来自上一时间步的隐状态ht−1,并根据这两个信息计算出当前时间步的隐状态ht。隐状态可以看作网络对于之前所有输入的记忆表示,它包含了从序列开始到当前时间步所有信息的摘要。

循环神经网络的输出决定,

其中:ht是当前时间步t的隐状态,xt是当前时间步的输入,Wxh和Whh分别是从输入到隐状态和从隐状态到隐状态的权重矩阵,b是偏置项,f(⋅)是激活函数,例如tanh或ReLU等。

困惑度

困惑度(Perplexity, PP)用来衡量模型预测单词的能力,它反映了模型对未知数据的"困惑"程度。通常情况下,困惑度越低,说明模型对数据的拟合程度越好。困惑度计算公式如下:

在最好的情况下,模型总是完美地估计标签词元的概率为1。 在这种情况下,模型的困惑度为1。

在最坏的情况下,模型总是预测标签词元的概率为0。 在这种情况下,困惑度是正无穷大。

梯度裁剪

在循环神经网络(RNNs)中,梯度裁剪是一种常用于缓解梯度消失或梯度爆炸问题的技术。

在RNN中,梯度消失的问题尤为显著,因为它们的权重需要通过时间进行反向传播。在每一时间步中,梯度是通过链式法则计算的,这意味着当前时间步的梯度是由前一时间步的梯度乘以前一时间步的权重矩阵得到的。如果这个权重矩阵的特征值小于1,那么经过多次相乘之后,梯度就会逐渐减小至接近零。当这种情况发生时,网络就很难调整其权重来学习远距离的时间依赖性。这就是梯度消失。与梯度消失相反,梯度爆炸发生在梯度增长得非常快以至于变得过大,这可能导致权重参数的剧烈更新,使得模型难以收敛。

梯度裁剪的目的是通过限制梯度的大小来解决这些问题。具体来说,当计算出的梯度超过某个预定义的阈值时,可以按比例缩小梯度的值,使得它们不会过于庞大,从而避免梯度爆炸。这个过程可以通过两种常见的方式来实现:

基于范数的裁剪

设定一个阈值C(通常是超参数),如果梯度的L2范数大于C,则将整个梯度向量按比例缩放,使得其范数不超过C。这样可以保证梯度保持在一个合理的范围内。

基于元素的裁剪

这种方法直接检查梯度向量中的每个元素,如果发现某个元素的绝对值超过了预设的最大值,则 将该元素裁剪到最大值或最小值。

相关推荐
冬奇Lab4 小时前
Workflow 系列(03):状态管理——持久化、幂等性与版本绑定
人工智能·工作流引擎
冬奇Lab5 小时前
每日一个开源项目(第146篇):openpilot - 开源自动驾驶辅助系统,曾在 Consumer Reports 评测中超过特斯拉 Autopilot
人工智能·开源·自动驾驶
吴佳浩6 小时前
AI 工程师知识地图:模型格式、框架、部署工具一次讲明白
人工智能·aigc·ai编程
IT_陈寒6 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
码农胖大海7 小时前
AI额度不够用的解决方案
人工智能
后端小肥肠7 小时前
小红书虚拟商品怎么做?我先用 Skill 跑通了壁纸品类
人工智能·aigc·agent
feiyu_gao7 小时前
从零搭建个人 AI 工作台:一个管理者的 3 个月实验
人工智能·aigc·团队管理
Lihua奏8 小时前
从单核到多核:CPU为什么不能再只靠提频变快
深度学习
程序员cxuan8 小时前
一句话,让你用上 GPT-5.6
人工智能·后端·程序员