首页 > 其他分享 >西瓜书与d2l笔记

西瓜书与d2l笔记

时间:2024-06-04 20:44:53浏览次数:18  
标签:vocab 西瓜 笔记 学习 num d2l model 注意力

西瓜书

强化学习任务通常用马尔可夫决策过程 (Markov Decision Process,简称 MDP)来描述
机器只能通过选择要执行的动作来影响环境,也只能通过观察转移后的状态和返回的奖赏来感知环境

机器要做的是通过在环境中不断地尝试而学得一个"策略" (policy) π,根据这个策略,在状态x下就能得知要执行的动作 α=π(x)

在强化学习任务中,学习的目的就是要找到能使长期累积奖赏最大化的策略

偏差 度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;
方差 度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;
噪声 则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度
偏差一方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的.
给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小.

 

d2l

点积(dot product)x⊤y
torch.dot(x,y) 得到个标量
torch.mm(x,y)
两个张量加减乘除,是两张量元素之间的运算,其中乘法跟点积不一样,乘法做完元素相乘后不用相加,而点积又和矩阵乘法不一样,点积结果是个标量

dim指定了某个轴,比如列,就对各列做运算,行不变

x = torch.arange(4, requires_grad=True) 向量的每个元素都会有个额外的空间
requires_grad=False就冻结参数了,也就是在执行backward时没有存偏导值的空间,step时也不会改参数param了

加detach就分离为新变量,不加就当做复合函数

当标签取任意数值时,我们称之为回归问题,此时的目标是生成一个模型,使它的预测非常接近实际标签值.回归是训练一个回归函数来输出一个数值;
分类是训练一个分类器来输出预测的类别。分类问题的常见损失函数被称为交叉熵

softmax回归做分类,每个类别有自己的w,x依次到每个列表里计算,输出概率去比较
softmax函数能够将未规范化的预测变换为非负数并且总和为1

用于对抗过拟合的技术称为正则化(regularization)——
权重衰减,只需将L2的平方惩罚添加到原始目标函数中
以dropout的概率丢弃张量输入X中的元素

在机器学习中,我们通常在评估几个候选模型后选择最终的模型。这个过程叫做模型选择。有时,需要进行比较的模型在本质上是完全不同的(比如,决策树与线性模型)。又有时,我们需要比较不同的超参数设置下的同一类模型。

当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。这个问题的一个流行的解
决方案是采用K折交叉验证。这里,原始训练数据被分成K个不重叠的子集。然后执行K次模型训练和验证,
每次在K − 1个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,
通过对K次实验的结果取平均来估计训练和验证误差。
这就不用训练集了

要么是梯度爆炸(gradient exploding)问题:参数更新过大,破坏了模型的稳定收敛;
要么是梯度消失(gradient vanishing)问题:参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。

对于单个张量,我们可以直接调用load和save函数分别读写它们。

深度学习框架提供了内置函数来保存和加载整个网络。需要注意的一个重要细节是,这将保存模型的参数而不是保存整个模型
torch.save(net.state_dict(), 'mlp.params')
clone = MLP()
clone.load_state_dict(torch.load('mlp.params'))
clone.eval()

1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层
应该对相同的图像区域具有相似的反应,即为“平移不变性”。
2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔
较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

输出的卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。

这个二维卷积层使用四维输入和输出格式(批量大小、通道、高度、宽度),

批量规范化应用于单个可选层(也可以应用到所有层),其原理如下:在每次训练迭代中,我们首先规范化输入,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。接下来,我们应用比例系数和比例偏移。正是由于这个基于批量统计的标准化,才有了批量规范化的名称。

批量规范化和其他层之间的一个关键区别是,由于批量规范化在完整的小批量上运行,因此我们不能像以前在引入其他层时那样忽略批量大小。我们在下面讨论这两种情况:全连接层和卷积层,他们的批量规范化实现略有不同。

简言之,如果说卷积神经网络可以有效地处理空间信息,那么本章的循环神经网络(recurrent neural network,RNN)则可以更好地处理序列信息。循环神经网络通过引入状态变量存储过去的信息和当前的输入,从而可以确定当前的输出。

门控循环单元与普通的循环神经网络之间的关键区别在于:前者支持隐状态的门控。这意味着模型有专门的机制来确定应该何时更新隐状态,以及应该何时重置隐状态。这些机制是可学习的,并且能够解决了上面列出的问题。
num_inputs = vocab_size
gru_layer = nn.GRU(num_inputs, num_hiddens)
model = d2l.RNNModel(gru_layer, len(vocab))
model = model.to(device)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)


num_inputs = vocab_size
lstm_layer = nn.LSTM(num_inputs, num_hiddens)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)


下面的深度网络,就多了个层数
import torch
from torch import nn
from d2l import torch as d2l
batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps) --这里
vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = d2l.try_gpu()
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)
num_epochs, lr = 500, 2
d2l.train_ch8(model, train_iter, vocab, lr*1.0, num_epochs, device)


注意力机制通过注意力汇聚将查询(自主性提示)和键(非自主性提示)结合在一起,实现对值(感官输入)的选择倾向

在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依赖关系)。因此,允许注意力机制组合使用查询、键和值的不同 子空间表示(representation subspaces)可能是有益的。

为此,与其只使用单独一个注意力汇聚,我们可以用独立学习得到的h组不同的 线性投影(linear projections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。最后,将这h个注意力汇聚的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力(multihead attention)(Vaswani et al., 2017)。对于h个注意力汇聚输出,每一个注意力汇聚都被称作一个头(head)。图10.5.1 展示了使用全连接层来实现可学习的线性变换的多头注意力。

一般来说,当查询和键是不同长度的矢量时,可以使用加性注意力作为评分函数

尽管批量规范化在计算机视觉中被广泛应用,但在自然语言处理任务中(输入通常是变长序列)批量规范化通常不如层规范化的效果好

在掩蔽多头解码器自注意力层(第一个子层)中,查询、键和值都来自上一个解码器层的输出。
关于序列到序列模型(sequence‐to‐sequence model),在训练阶段,其输出序列的所有位置(时间步)的词元都是已知的;然而,在预测阶段,其输出序列的词元是逐个生成的。因此,在任何解码器时间步中,只有生成的词元才能用于解码器的自注意力计算中。为了在解码器中保留自回归的属性,其掩蔽自注意力设定了参数dec_valid_lens,以便任何查询都只会与解码器中所有已经生成词元的位置(即直到该查询位置为止)进行注意力计算。


冻结
def get_net(devices):
finetune_net = nn.Sequential()
finetune_net.features = torchvision.models.resnet34(pretrained=True)
# 定义一个新的输出网络,共有120个输出类别
finetune_net.output_new = nn.Sequential(nn.Linear(1000, 256),
nn.ReLU(),
nn.Linear(256, 120))
# 将模型参数分配给用于计算的CPU或GPU
finetune_net = finetune_net.to(devices[0])
# 冻结参数
for param in finetune_net.features.parameters():
param.requires_grad = False
return finetune_net

标签:vocab,西瓜,笔记,学习,num,d2l,model,注意力
From: https://www.cnblogs.com/zhaot1993/p/18231659

相关文章

  • 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programmin
    系列文章目录操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)----操作系统介绍与接口示例操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)----xv6初探与实验一(Lab:Xv6and......
  • Linux学习笔记6 进程角度看内存泄露
    一,从进程角度看堆区内存申请与释放问题1,c语言中的内存泄漏内存溢出:申请内存时,没用足够的内存可以使用。 内存泄露:严格来说,只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏                宽泛的讲,实际情况中很多时候一些不太好的实践......
  • 数据结构学习笔记-简单选择排序
    简单选择排序的算法设计与分析问题描述:设计并分析简单选择排序【算法设计思想】迭代选择:算法通过循环遍历数组,进行size次迭代。最小值选择:在每次迭代(i)中,算法致力于找到未排序子数组(arr[i]到arr[size-1])内最小元素的索引。这个最小元素将被选出来进行交换。交......
  • 05-Excel基础操作-学习笔记
    使用分列工具整理数据导出的数据是文本文件即以.txt结尾的文件,放入Excel中,是一种常见的操作。具体操作打开文本格式的数据,Ctrl+A全选——Ctrl+C复制——新建excel表格——点击A1单元格(注意,这里不要双击)——Ctrl+V粘贴——选中A列——数据选项卡——分列——勾选“分隔符号(D)”......
  • 网络技术零基础小白入门课程-深信服内部课程 笔记
    02-家庭组网介绍:Q:交换机比路由器速度更快,为什么还比路由器便宜?A:交换机工作在数据链路层,而路由器工作在网络层,因此路由器软件逻辑、硬件成本更高。 03-衡量网络性能的指标Q:在线用户、并发连接用户的概念一样吗?A:不一样,在线用户是已经访问网站的,并发连接数则是与网站进......
  • 英语学习笔记31——Where‘s Sally?
    Where’sSally?Sally在哪?词汇Vocabularygarden/ˈɡɑːrdn/n.花园,院子(属于私人)区别:parkn.公园(公共的)例句:我的花园非常大。Mygardenisverybig.搭配:YellowStonePark黄石公园under/ˈʌndər/prep.在……下面(介词)tree/triː/n.树复数:tree......
  • 《现代操作系统》第4章读书笔记
    《现代操作系统》第4章读书笔记就像操作系统提取处理器的概念来建立进程的抽象,以及提取物理存储器的概念来建立进程地址空间的抽象那样,我们可以用一个新的抽象——文件来解决这些问题。进程、地址空间和文件,这些抽象概念均是操作系统中最重要的概念。文件是对磁盘的建模,而非对RA......
  • Elixir学习笔记——第一章
    本指南将向您介绍Elixir基础知识-语言语法、如何定义模块、语言中的常见数据结构等。本章将重点介绍如何确保安装了Elixir,以及您可以成功运行Elixir的交互式Shell(称为IEx)。安装如果您尚未安装Elixir,请访问我们的安装页面。完成后,您可以运行elixir--version以获......
  • WQS二分 学习笔记
    问题引入前置问题:把长度为\(n\)的正整数序列分为若干段,一段代价为这段和的平方加一个常数\(c\),求最小代价。设\(f_i\)表示考虑前\(i\)个数且最后一段结尾为\(i\)的代价,答案为\(f_n\),\(f_i=\max_{j=0}^{i-1}\{f_j+(s_i-s_j)^2+c\}\),可以斜率优化,时间复杂度\(O(n)\)......
  • 学习笔记482—手把手教你如何用mac访问win10共享文件
    这个方法巨简单,只需要两台电脑都用同一个网络,我的两台电脑都是连接wifi使用的,跟着图文一步步来操作哦操作步骤:......