首页 > 其他分享 >【动手学深度学习_李沐】笔记:(七)循环神经⽹络

【动手学深度学习_李沐】笔记:(七)循环神经⽹络

时间:2024-01-14 20:12:38浏览次数:42  
标签:标记 梯度 模型 笔记 动手 循环 序列 李沐 xt

【七、循环神经⽹络】

1. 序列模型

  • 序列模型估计方法有自回归模型和隐变量自回归模型。在统计学中,前者(超出已知观测值的预测)称为外推(extrapolation),后者(在现有观测值之间进⾏估计)称为内插(interpolation)。内插和外推在难度上有很⼤差别,因此,在训练时要尊重数据的时间顺序,不要对未来数据进行训练。因果模型如向前推进的时间,估计正向通常比反向容易得多
  • 自回归模型(autoregressive models):自己执行回归,若观测序列xt−1, . . . , x1非必需,仅使⽤xt−1, . . . , xt−τ个观测,t > τ的参数量相同,从而能够训练⼀个深层⽹络
  • 隐变量自回归模型(latent autoregressive models):保留⼀些过去观测的 ht,除了预测 ht 之外还更新ˆxt,产⽣估计 xt 和 ˆxt = P(xt | ht) 的模型,且更新 ht = g(ht−1, xt−1),此时 ht 未被观测。离散对象仍然有效,但需⽤分类器而不是回归模型来估计P(xt | xt−1, . . . , x1)
  • 马尔可夫模型:在⾃回归模型中,只使⽤ xt−1, . . . , xt−τ 而不是 xt−1, . . . , x1 来估计 xt。只要这种近似准确,称为序列满⾜马尔可夫条件(Markov condition)。特别地,如果 τ=1,有⼀阶马尔可夫模型(first-order Markov model),P(x) 由下式给出:
    image

当 xt 只假设离散值时,模型特别好,因为动态规划可沿链精确计算,如计算:
image
imageimage

  • 对于直到 xt 的观测序列,在时间步⻓ ˆxt+k 处的预测输出 t + k 称为** k 步预测**。随着在时间上进⼀步预测,增加 k,误差会累积,预测的质量会下降

2. 文本预处理

  • ⽂本的常⻅预处理步骤:将⽂本作为字符串加载到内存中;将字符串拆分为标记(如单词和字符);建⽴词汇表,将拆分的标记映射到数字索引;将⽂本转换为数字索引序列
  • 标记的字符串类型不⽅便模型使⽤,因此构建字典/词表(Vocabulary)将字符串标记映射到从 0 开始的数字索引中。先统计训练集中所有⽂档中的唯⼀标记,即语料(corpus),然后根据每个唯⼀标记的出现频率分配数字索引。出现少的标记通常被移除以降低复杂性,语料库中不存在或已删除的任何标记都将映射到⼀个特殊的未知标记 “”。可选择添加保留令牌的列表,如 “” 表⽰填充;“” 表⽰序列开始;“” 表⽰序列结束

3. 语⾔模型和数据集

  • 语言模型(language model)是⾃然语⾔处理的关键,⽬标是估计序列的联合概率。出现频率低的词汇估计正确率低,可通过拉普拉斯平滑(Laplace smoothing)在所有计数中添加⼀个小常量,处理不常⻅的、结构复杂且频率不够词组。但需要存储所有计数,且难以调整到额外的上下⽂中,同时⻓序列出现少难以估计
    image
    image
    image
    image

  • 马尔可夫模型:序列分布满⾜⼀阶马尔可夫性质 P(xt+1 | xt, . . . , x1) =P(xt+1 | xt),阶数越高,依赖关系越长,因此可应⽤于序列建模的许多近似,涉及⼀个、两个和三个变量的概率公式称为单变量模型(unigram)、双变量模型(bigram)和三变量模型(trigram)
    image
    image
    image

  • 最常用的词称为 “停⽤词”(stop words),可以被过滤掉。单词符合⻬普夫定律(Zipf’s law),即第 i 个最常⽤单词的频率 ni 如下,α 是表征分布的指数,c 是常数
    image
    image

  • 单词序列也遵循齐普夫定律,n 元组的数量并不⼤,很多 n 元组出现少,因此拉普拉斯平滑不适合语言建模,需使用基于深度学习的模型。n 元语法通过截断相关性,为处理⻓序列提供⽅便的模型

  • 读取⻓序列的方法有随机采样和顺序分区。在随机采样中,每个样本在原始⻓序列上任意捕获⼦序列,迭代期间来⾃两个相邻随机小批量的⼦序列不⼀定在原始序列上相邻。语⾔建模⽬标是根据⽬前标记预测下⼀标记,因此标签是原始序列移位⼀个标记。顺序分区保证迭代过程中两个相邻小批量的⼦序列在原始序列上是相邻的,在对小批进⾏迭代时保留了拆分⼦序列的顺序


4. 循环神经⽹络

  • 循环神经⽹络(Recurrent neural networks,RNNs)是指对隐藏状态使⽤循环计算的网络,可捕获直到当前时间步序列的历史信息,参数数量不会随着时间步的增加而增加。若在时间步 t 有小批量输⼊Xt∈Rn×d,权重参数Wxh∈Rd×h,小批量序列样本 n,时间步 t 的隐藏变量 Ht∈Rn×h,前⼀个时间步的隐藏变量 Ht−1,对应权重参数 Whh∈Rh×h,偏置 bh∈R1×h,“循环层”(recurrent layers)如下:
    image

  • 对于时间步长 t,输出层权重 Whq∈Rh×q 和偏置 bq∈R1×q,则输出层的计算:
    image

  • 将当前时间步 t 的输⼊ Xt 和前⼀时间步 t-1 的隐藏状态 Ht−1 连结,将连结结果送⼊带有激活函数 ϕ 的全连接层
    image

  • 使用循环神经⽹络创建字符级语言模型(character-level language model):基于当前字符和先前字符预测下⼀个字符。在训练过程中,对每个时间步⻓输出层的输出进⾏ softmax 操作,然后利用交叉熵损失计算模型输出和标签之间的误差
    image

  • 度量语言模型质量:通过序列中所有 n 个标记的平均交叉熵损失衡量(公式一),由于历史原因,更常用困惑度(perplexity)衡量(公式二)
    image
    image


5. 循环神经⽹络的从零开始实现

  • 独热编码(One-Hot Encoding):将每个标记表⽰为更具表现⼒的特征向量。假设词表中不同的标记数为 N(len(vocab)),索引范围 0~(N -1)。若标记索引是整数 i,创建⼀个⻓度为 N 的全 0 向量,将 i 处元素置 1,则此向量是原始标记的⼀个独热向量

  • 梯度裁剪可缓解梯度爆炸,可在更新模型参数之前使用,通过将梯度 g 投影给定半径的球(如θ)来裁剪梯度 g。梯度范数永远不会超过 θ,更新后的梯度与 g 的原始⽅向对⻬。梯度裁剪不能应对梯度消失
    image

  • 顺序分区在处理任何⼀个小批量之前先分离梯度,使隐藏状态的梯度计算限制在⼀个小批量的时间步内,减少计算量;随机抽样需为每个迭代周期重新初始化隐藏状态,因为每个样本都是在⼀个随机位置抽样

  • ⼀个简单的循环神经⽹络语⾔模型包括输入编码、循环神经网络模型和输出生成

  • 预热期允许模型在进⾏任何预测之前进⾏⾃我更新,可获得⽐初始值更好的隐藏状态

6. 通过时间反向传播

(1)循环神经⽹络的梯度分析:
image
imageimage
image
image
image
image
image
image

  • 通过时间反向传播:为了⾼效计算,在通过时间反向传播期间缓存中间值
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image

  • 为了计算⽅便和数值稳定,需要截断,如规则截断和随机截断

  • 矩阵的高次方可能导致特征值发散或消失,这以梯度爆炸或梯度消失的形式表现出来

标签:标记,梯度,模型,笔记,动手,循环,序列,李沐,xt
From: https://www.cnblogs.com/haifengyuhui/p/17964121

相关文章

  • 【动手学深度学习_李沐】笔记:(六)现代卷积神经⽹络
    【六、现代卷积神经⽹络】1.深度卷积神经⽹络(AlexNet)在2012年以前,神经⽹络往往被其他机器学习⽅法超越,如支持向量机(supportvectormachines)。而AlexNet在2012年ImageNet挑战赛中取得了轰动⼀时的成绩,在⽹络的最底层,模型学习到了⼀些类似于传统滤波器的特征抽取器。论......
  • 【动手学深度学习_李沐】笔记:(五)卷积神经⽹络(convolutional neural network,CNN)
    【五、卷积神经网络】笔记1.从全连接层到卷积特点(沃尔多检测器):①平移不变性:不管出现在图像中的哪个位置,神经⽹络的底层应对相同图像区域做出类似的响应,因此能够以相同的⽅式处理局部图像②局部性:神经⽹络的底层只探索输⼊图像的局部区域,这些局部特征可以融会贯通,在整个......
  • 搜索学习笔记+杂题 (基础二 dfs/bfs的拓展)
    搜索杂题:博客中讲述的题的题单:戳我二、dfs/bfs的各种变式1、深搜深搜以指数级的时间复杂度闻名,稍不注意时间就会爆炸,所以一般会用到剪枝的技巧(这个技巧基本上是因题而异,需要平时的刷题与积累)。深搜同样也是一种可变性极高的算法(其实都可以不叫做一种算法,深搜已经是一种做题的......
  • 【动手学深度学习_李沐】笔记:(四)深度学习计算
    【四、深度学习计算】笔记1.层和块速度极快的GPU可能要等到CPU运⾏Python代码后才能运⾏另⼀个作业,提⾼Python速度的最好⽅法是完全避免使⽤Python。Gluon允许混合式编程(hybridization),Python解释器在第⼀次调⽤块时执⾏它,Gluon运⾏时记录正在发⽣的事情,以及下⼀次......
  • 【动手学深度学习_李沐】笔记:(三)多层感知机
    【三、多层感知机】笔记1.多层感知机:合并隐藏层:通过合并⼀个或多个隐藏层来克服线性模型的限制多层感知机(multilayerperceptron):MLP,在输出层和输⼊层之间增加⼀个或多个全连接的隐藏层,并通过激活函数转换隐藏层的输出。最简单是将许多全连接层堆叠,每⼀层都输出到上⾯的层,......
  • 学习进度笔记
    在本次安卓开发中,我已经完成了以下任务:创建项目:我使用AndroidStudio创建了一个新的安卓项目,并选择了最新的API级别。设计用户界面:我使用XML文件定义了应用程序的用户界面。我添加了几个布局和视图组件,如TextView、Button和ImageView,并使用约束布局对它们进行了适当的排列。......
  • 1/14 学习进度笔记
    PythonOnSpark的执行流程分布式代码执行的重要特征?代码在集群上运行,是被分布式运行的。在Spark中,非任务处理部分由Driver执行(非RDD代码)任务处理部分是由Executor执行(RDD代码)Executor的数量可以很多,所以任务的计算是分布式在运行的。Pyspark的架构体系?PythonOnSpark......
  • 【论文阅读笔记】【OCR-End2End】 TextFormer: A Query-based End-to-End Text Spotte
    TextFormerarXiv:2306.03377读论文思考的问题论文试图解决什么问题?写作背景是什么?问题:如何设计一种更好的query-based的方法来同时实现端到端的场景文本检测能否利用弱监督数据(只有文本)进一步增强端到端模型的文本识别能力?背景:目前的端到端场景文本检测识别......
  • 2024.1.14-每日进度笔记
    今天,我主要尝试了对之前的几个python脚本进行整合,使得可以输入图片路径,题目,总分进行评价 参考:百度文心一言的回复 #-*-coding:utf-8-*-importosimportsysimporterniebotfromPILimportImagefrompaddleocrimportPaddleOCR,draw_ocrdefbaidu_paddleocr......
  • 在笔记本电脑上跑清华chatglm大语言模型
    环境:windows10以上系统,安装Linux子系统下载这个文件,双击,安装:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msisudosed-i's/deb.debian.org/mirrors.ustc.edu.cn/g'/etc/apt/sources.listsudodpkg-reconfigurelocalessudoaptupdatesudoa......