10 注意力机制
10.1 注意力提示
自主性的与非自主性的注意力提示解释了人类的注意力的方式,
查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚;
注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。下面是通过这两种注意力提示用神经网络来设计注意力机制的框架:
查询、键和值
10.2
注意力汇聚:Nadaraya-Watson 核回归
10.2.1 生成数据集
\[
y_i = 2\sin(x_i) + x_i^{0.8} + \epsilon
\tag{10.1}
\]
n_train = 50 # 训练样本数
x_train, _ = torch.sort(torch.rand(n_train) * 5) # 排序后的训练样本
def f(x):
return 2 * torch.sin(x) + x**0.8
y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,)) # 训练样本的输出
x_test = torch.arange(0, 5, 0.1) # 测试样本
y_trut ...
8 循环神经网络
8.1 序列模型
自回归模型AR:
自回归模型是时间序列模型的一种,它假设当前时间点的值是之前若干时间点值的线性组合。简单来说,AR模型根据过去的观察值来预测未来的值。
\[
\begin{aligned}
X_t &= c + \sum_{i=1}^{p} \phi_i X_{t-i} + \epsilon_t \\
\text{其中} & \\
X_t &\text{ 是时间序列在时间 } t \text{ 的值} \\
c &\text{ 是一个常数项} \\
\phi_i &\text{ 是自回归系数} \\
p &\text{ 是模型的阶数,即使用多少个过去的时间点来预测当前值} \\
\epsilon_t &\text{ 是误差项,通常假设为白噪声}
\end{aligned}
\tag{8.1}
\]
隐变量自回归模型LV-AR:
隐变量自回归模型是在自回归模型的基础上引入了隐变量。隐变量是指那些不能直接观察到,但可以通过其他观察变量间接推断出来的变量。LVAR模型的基本思想是,观察到的时间序列是由 ...
7 现代卷积神经网络
7.1 深度卷积神经网络(AlexNet)
从LeNet到AlexNet的变化如下图所示:
LeNet到AlexNet
AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
AlexNet使用ReLU而不是sigmoid作为其激活函数。
AlexNet的架构与LeNet相似,但使用了更多的卷积层和更多的参数来拟合大规模的ImageNet数据集。
Dropout、ReLU和预处理是提升计算机视觉任务性能的其他关键步骤。
import torch
from torch import nn
from d2l import torch as d2l
net = nn.Sequential(
# 这里使用一个11*11的更大窗口来捕捉对象。
# 同时,步幅为4,以减少输出的高度和宽度。
# 另外,输出通道的数目远大于LeNet
nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
...
6 卷积神经网络
卷积神经网络(convolutional neural
network,CNN)是一类强大的、为处理图像数据而设计的神经网络,利用相近像素之间的相互关联性,从图像数据中学习得到有效的模型。
6.1 从全连接层到卷积层
平移不变性:不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应。
局部性:神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系。
最终,可以聚合这些局部特征,以在整个图像级别进行预测。
图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。
局部性意味着计算相应的隐藏表示只需一小部分局部图像像素。
在图像处理中,卷积层通常比全连接层需要更少的参数,但依旧获得高效用的模型。
卷积神经网络(CNN)是一类特殊的神经网络,它可以包含多个卷积层。
多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征。
其实也就是说,卷积层是用来提取图像的局部特征,全连接层是用来整合这些局部特征:
卷积的本质是有效提取相邻像素间的相关特征。
6.2 图像卷积
输入\(n_h \t ...
5 深度学习计算
5.1 层和块
块(block)可以描述单个层、由多个层组成的组件或整个模型本身。
块由类(class)表示。
它的任何子类都必须定义一个将其输入转换为输出的前向传播函数,
并且必须存储任何必需的参数。 注意,有些块不需要任何参数。
最后,为了计算梯度,块必须具有反向传播函数。总体来说,应该具有以下内容:
将输入数据作为其前向传播函数的参数。
通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。
计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。
存储和访问前向传播计算所需的参数。
根据需要初始化模型参数。
import torch
import torch.nn as nn
import torch.nn.functional as F
""" 5.1.1 自定义块 """
class MLP(nn.Module):
# 用模型参数声明层。这里,我们声明两个全连接的层
def __init__(self):
# 调用MLP的父类Module的构造函数来执行必要的初始化。
...
深度学习
未读4 多层感知机
最简单的深度网络称为多层感知机。多层感知机由多层神经元组成,
每一层与它的上一层相连,从中接收输入;
同时每一层也与它的下一层相连,影响当前层的神经元。
4.1 多层感知机
多层感知机在输出层和输入层之间增加一个或多个全连接隐藏层,并通过激活函数转换隐藏层的输出。
4.1.1 隐藏层
4.1.1.1 线性模型的局限性
线性模型的一个主要局限性是它们只能表示输入和输出之间的简单关系。
如果我们想要模拟更复杂的非线性关系,就需要更复杂的模型。
4.1.1.2 在网络中加入隐藏层
我们可以通过在网络中加入一个或多个隐藏层来克服线性模型的限制,
使其能处理更普遍的函数关系类型。
要做到这一点,最简单的方法是将许多全连接层堆叠在一起。我们可以把前\(L-1\)层看作表示,把最后一层看作线性预测器。
这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。
多层感知机
这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。
输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。
因此,这个多层感知机中的层数为2 ...
3 线性神经网络
3.1 线性回归
回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。
3.1.1 随机梯度下降
梯度下降通过不断地在损失函数递减的方向上更新参数来降低误差。
\[
w \leftarrow w - \eta \frac{\partial(J)}{\partial(w)}
\tag{3.1}
\]
梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值)
关于模型参数的导数(在这里也可以称为梯度)。
但实际中的执行可能会非常慢:因为在每一次更新参数之前,我们必须遍历整个数据集。
因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本,
这种变体叫做小批量随机梯度下降。
在每次迭代中,我们首先随机抽样一个小批量\(B\), 它是由固定数量的训练样本组成的。
然后,我们计算小批量的平均损失关于模型参数的导数(也可以称为梯度)。
最后,我们将梯度乘以一个预先确定的正数\(\eta\),并从当前参数的值中减掉。
更具体的 \(B\)表示小批量中的样本数,也被称为批量大小(batch
size) \(\eta\)称为学习率(learni ...
深度学习
未读2 预备知识
2.1 数据操作
n 维数组,也称为张量(tensor)。
无论使用哪个深度学习框架,它的张量类都与Numpy的ndarray类似。
但深度学习框架又比Numpy的ndarray多一些重要功能:
GPU很好地支持加速计算,而NumPy仅支持CPU计算
张量类支持自动微分。
2.2 数据预处理
# 2.2.1 读取数据集
# 读取数据到CSV文件
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True) # 确保文件夹存在
data_file = os.path.join('..', 'data', 'house_tiny.csv') # 数据文件名
with open(data_file, 'w') as f: # 创建并写入一个CSV文件
f.write('NumRooms,Alley,Price\n') # 列名
f.write('NA,Pave,127500\n') # 每行表示一个数据样本
f.write('2,NA,106000\n')
f.wr ...
深度学习
未读基于动手学深度学习Pytorch版
1 引言
1.1 机器学习中的关键组件
可以用来学习的数据(data);
如何转换数据的模型(model);
⼀个目标函数(objective function),用来量化模型的有效性;
调整模型参数以优化目标函数的算法(algorithm)。
1.2 各种机器学习问题
1.2.1 监督学习
监督学习(supervised learning)擅长在“给定输入特征”的情况下预测标签。
每个“特征-标签”对都称为一个样本(example)。
有时,即使标签是未知的,样本也可以指代输入特征。
我们的目标是生成一个模型,能够将任何输入特征映射到标签(即预测)。
监督学习的学习过程一般可以分为三大步骤:
从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。这些输入和相应的标签一起构成了训练数据集;
选择有监督的学习算法,它将训练数据集作为输入,并输出一个“已完成学习的模型”;
将之前没有见过的样本特征放到这个“已完成学习的模型”中,使用模型的输出作为相应标签的预测。
具体如图1.1所示:
监督学习
1.2.1.1 回归
当标签取任意数值 ...
1. Package.appxmanifest
文件概述
Package.appxmanifest 文件是 Windows
应用程序的清单文件,包含有关应用程序的元数据和配置信息。它定义了应用程序的名称、版本、描述、图标、权限等信息。Package.appxmanifest
文件是 Windows 应用程序打包和部署的核心部分。
在VS2022中创建 WinUI3 项目时,Package.appxmanifest
文件会自动生成。可以在项目的根目录下找到该文件。 该文件是 XML
格式的,可以使用文本编辑器或 Visual Studio 的图形化界面进行编辑。
2. Package.appxmanifest
文件的结构
2.1 应用资产
显示名称:应用程序的名称,在 Windows 开始菜单和任务栏中显示。
入口点:指定应用启动时要执行的类或文件。默认为
$targetentrypoint$,通常在 WinUI 3 应用中指向 App.xaml.cs
文件中的 OnLaunched 方法。
默认语言:指定应用程序的默认语言。可以使用语言代码(如
en-US、zh-CN 等)来表示不同 ...


