首页 > 其他分享 >《动手学深度学习 Pytorch版》 8.4 循环神经网络

《动手学深度学习 Pytorch版》 8.4 循环神经网络

时间:2023-10-10 22:46:28浏览次数:48  
标签:mathbb torch 8.4 boldsymbol 神经网络 times Pytorch 隐藏

8.4.1 无隐状态的神经网络

对于无隐藏装态的神经网络来说,给定一个小批量样本 \(\boldsymbol{X}\in\mathbb{R}^{n\times d}\),则隐藏层的输出 \(\boldsymbol{H}\in\mathbb{R}^{n\times h}\) 通过下式计算:

\[\boldsymbol{H}=\phi(\boldsymbol{XW}_{xh}+\boldsymbol{b}_h) \]

  • \(\phi\) 是隐藏层的激活函数
  • \(n\) 是批量大小
  • \(d\) 是输入维度
  • \(\boldsymbol{W}_{xh}\in\mathbb{R}^{d\times h}\) 是隐藏层权重
  • \(\boldsymbol{b}_h\in\mathbb{R}^{1\times h}\) 是偏置参数
  • \(h\) 是隐藏层数目。

接下来将隐藏变量 \(\boldsymbol{H}\) 作为输出层的输入:

\[\boldsymbol{O}=\boldsymbol{HW}_{hq}+\boldsymbol{b}_q \]

  • \(\boldsymbol{O}\in\mathbb{R}^{n\times q}\) 是输出变量
  • \(\boldsymbol{HW}_{hq}\in\mathbb{R}^{h\times q}\) 是权重参数
  • \(\boldsymbol{b}_q\in\mathbb{R}^{1\times q}\) 是输出层的偏置参数。

如果是分类问题,则可以用 \(softmax(\boldsymbol{O})\) 计算输出的概率分布,此处无需多言。

8.4.2 有隐状态的循环神经网络

引入隐状态后,情况就完全不同了。具体地说,当前时间步隐藏变量由当前时间步的输入与前一个时间步的隐藏变量一起计算得出:

\[\boldsymbol{H}_t=\phi(\boldsymbol{X}_t\boldsymbol{W}_{xh}+\boldsymbol{H}_{t-1}\boldsymbol{W}_{hh}+\boldsymbol{b}_h) \]

  • \(\boldsymbol{X}_t\in\mathbb{R}^{n\times d}\) 是时间步 \(t\) 的小批量输入
  • \(\boldsymbol{H}_t\in\mathbb{R}^{n\times h}\) 是时间步 \(t\) 的隐藏变量
  • \(\boldsymbol{H}_{t-1}\) 是前一个时间步的隐藏变量
  • \(\boldsymbol{W}_{hh}\in\mathbb{R}^{h\times h}\) 是权重参数

由于在当前时间步中,隐状态使用的定义与前一个时间步中使用的定义相同,因此此计算是循环的(recurrent)。于是基于循环计算的隐状态神经网络被命名为循环神经网络(recurrent neural network)。

对于时间步 \(t\),输出层的输出类似于多层感知机中的计算:

\[\boldsymbol{O}_t=\boldsymbol{H}_t\boldsymbol{W}_{hq}+\boldsymbol{b}_q \]

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

image

import torch
from d2l import torch as d2l
X, W_xh = torch.normal(0, 1, (3, 1)), torch.normal(0, 1, (1, 4))
H, W_hh = torch.normal(0, 1, (3, 4)), torch.normal(0, 1, (4, 4))
torch.matmul(X, W_xh) + torch.matmul(H, W_hh)
tensor([[-0.9743,  0.4619, -0.7949,  0.3287],
        [ 5.9413,  2.1961,  0.6053,  0.1704],
        [-1.0903, -0.2396, -1.0930, -0.8530]])
torch.matmul(torch.cat((X, H), 1), torch.cat((W_xh, W_hh), 0))
tensor([[-0.9743,  0.4619, -0.7949,  0.3287],
        [ 5.9413,  2.1961,  0.6053,  0.1704],
        [-1.0903, -0.2396, -1.0930, -0.8530]])

8.4.3 基于循环神经网络的字符级语言模型

以 “machine” 为例:

image

8.4.4 困惑度(Perplexity)

我们使用困惑度来评估模型。

一个更好的语言模型应该能让我们更准确地预测下一个词元,所以我们可以通过一个序列中所有的 \(n\) 个词元的 交叉熵损失的平均值 来衡量:

\[\frac{1}{n}\sum^n_{t=1}-\log{P(x_t|x_{t-1},\dots,x_1)} \]

由于历史原因,自然语言处理的科学家更喜欢使用困惑度(perplexity)的。简而言之,它是上式的指数:

\[\exp\left(-\frac{1}{n}\sum^n_{t=1}\log{P(x_t|x_{t-1},\dots,x_1)}\right) \]

练习

(1)如果我们使用循环神经网络来预测文本序列中的下一个字符,那么任意输出所需的维度是多少?

啥叫“任意输出”?输出应该和输入是一个形状。


(2)为什么循环神经网络可以基于文本序列中所有先前的词元,在某个时间步表示当前词元的条件概率?

因为每个时间步的输入都有上一个时间步的输出。


(3)如果基于一个长序列进行反向传播,梯度会发生什么状况?

更容易出现梯度消失或者梯度爆炸。


(4)与本节中描述的语言模型相关的问题有哪些?

略。

标签:mathbb,torch,8.4,boldsymbol,神经网络,times,Pytorch,隐藏
From: https://www.cnblogs.com/AncilunKiang/p/17755940.html

相关文章

  • BP神经网络
    一、感知器(机)上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3…),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。为了简化模型,我们约定每种输入只有两种可能:1或0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出......
  • 搭建Pytorch2.1+CUDA12.1+Anaconda+Pycharm深度学习环境
    环境:  Win1122H2需要的安装包:Anaconda3-2021.05-Windows-x86_64.exe  Python3.11.(pytorch2.0目前推荐的Python版本为3.8-3.11)pycharm-professional-2021.2.1.exeCUDA12.1与CUDNNV8.9.5pytorch2.1选择性安装OpenCV库一、安装CUDA12.1与C......
  • 《动手学深度学习 Pytorch版》 8.3 语言模型和数据集
    8.3.1学习语言模型依靠在8.1节中对序列模型的分析,可以在单词级别对文本数据进行词元化。基本概率规则如下:\[P(x_1,x_2,\dots,x_T)=\prod^T_{t=1}P(x_t|x_1,\dots,x_{t-1})\]例如,包含了四个单词的一个文本序列的概率是:\[P(deep,learning,is,fun)=P(deep)P(learning|deep)P(i......
  • pytorch(8-2) 文本语言处理 拆分成字符统计词频并从高到底分配ID
    https://zh.d2l.ai/chapter_recurrent-neural-networks/language-models-and-dataset.html  importcollectionsimportrefromd2limporttorchasd2l#@saved2l.DATA_HUB['time_machine']=(d2l.DATA_URL+'timemachine.txt',......
  • 安装pytorch报错,没解决
    environmentvariables:CIO_TEST=CLASS_PATH=.:/exe/jdk/jdk1.8.0_341/lib/dt.jar:/exe/jdk/jdk1.8.0_341/lib/tools.jar:/exe/jdk/jdk1.8.0_341/jre/libCONDA_DEFAULT_ENV=test1CONDA_EXE=/exe/conda/yes/bin/condaCONDA_PREFIX=/exe/conda/yes/envs/test1CONDA_PROMP......
  • 【Pytorch】小土堆笔记(未完成)
    transforms在训练的过程中,神经网络模型接收的数据类型是Tensor,而不是PIL对象,因此我们还需要对数据进行预处理操作,比如图像格式的转换。同时我们可以对图片进行一系列图像变换与增强操作,例如裁切边框、调整图像比例和大小、标准化等,以便模型能够更好地学习到数据的特征。这些......
  • 《动手学深度学习 Pytorch版》 8.2 文本预处理
    importcollectionsimportrefromd2limporttorchasd2l解析文本的常见预处理步骤:将文本作为字符串加载到内存中。将字符串拆分为词元(如单词和字符)。建立一个词表,将拆分的词元映射到数字索引。将文本转换为数字索引序列,方便模型操作。8.2.1读取数据集本文......
  • windows下安装conda和安装GPU版本的tensorflow和pytorch
    windows下安装conda和安装GPU版本的tensorflow和pytorch驱动下载查看自己电脑的独立显卡型号如:NVIDIAGeForceRTX3060在查看自己电脑是否已经安装了显卡驱动,如果显卡可用,那么就是安装了驱动;否则就要到NVIDIA官网下载驱动NVIDIA驱动程序下载找到自己对应型号的显卡驱动下载......
  • 《动手学深度学习 Pytorch版》 8.1 序列模型
    到目前为止,我们遇到的数据主要是表格数据和图像数据,并且所有样本都是独立同分布的。然而,大多数的数据并非如此。比如语句中的单词、视频中的帧以及音频信号,都是有顺序的。简言之,如果说卷积神经网络可以有效地处理空间信息,那么本章的循环神经网络(recurrentneuralnetwork,RNN)则可......
  • pytorch(8-1) 循环神经网络 序列模型
    https://zh.d2l.ai/chapter_recurrent-neural-networks/sequence.html     #%matplotlibinlineimporttorchfromtorchimportnnfromd2limporttorchasd2lfromAPI_Drawimport*T=1000#总共产生1000个点#time[0,1...,999]time=torch.arange(......