theme | _class | paginate | backgroundColor | marp |
---|---|---|---|---|
gaia |
lead |
true |
true |
第2讲: 深度学习基础 I
- 理解“世界”
-
如何理解世界: 通过外延观察=>自动构建内涵
-
内涵: 一个概念的内涵是指它的“内容”或“定义”,即该概念所包含的性质、特征或条件
- “人”: 有理性、社会性和自我意识的生物
-
外延: 一个概念的外延是指它所指代的所有对象的集合,或者说它所涵盖的实际事物的范围
- “人”: 是所有的人类个体,如亚里士多德、牛顿、爱因斯坦
如何理解世界: 通过外延观察=>自动构建内涵
- 理解世界的过程
- 设定任务目标
- 收集外延: 数据集
- 构建内涵: 学习特征
- 表示学习(representation learning)
结构
- 前n-1层(堆叠)
- 输入: 特征表示
- 输出: 特征表示
- 第n层
- 输入: 特征表示
- 输出: 任务目标
-
$x$ 和$y$: 特征表示-
$x$ : 当前层输入/前一层输出 -
$y$ : 当前层输出/后一层输入
-
-
$W,b$ : 当前层参数- 表示空间的变换
- 矩阵乘法 (Matrix multiplication)
- @
- torch.matmul, tensor.matmul
- 元素乘法 (element-wise multiplication)
- *
- torch.mul, tensor.mul
矩阵乘
y = x@w
y = x.matmul(w)
y = torch.matmul(x, w)
元素乘
y = x*w
y = x.mul(w)
y = torch.mul(x, w)
线性层 (torch.nn.Linear):
-
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
- in_features: size of each input sample
- out_features: size of each output sample
-
PyTorch中的输入/输出: 都是tensor
- input:
$(∗,H_{in})$ - output:
$(∗,H_{out})$
- input:
self.in_features = in_features
self.out_features = out_features
self.weight = Parameter(torch.empty((out_features, in_features), **factory_kwargs))
- weight: W
- 规约了输入输出的尺寸
def forward(self, input: Tensor) -> Tensor:
return F.linear(input, self.weight, self.bias)
- 计算方法forward: 定义输入到输出的计算过程
- nn.Linear的forward: 实现$y=xW^T+b$
Torch docs中的官方示例
m = nn.Linear(20, 30)
input = torch.randn(128, 20)
output = m(input)
print(output.size())
m1 = nn.Linear(20, 30)
m2 = nn.Linear(30, 40)
x = torch.randn(128, 20)
y1 = m1(x)
y2 = m2(y1)
- 基于nn.Linear实现以下函数组合
-
$y_1 = xW_1^T+b$ 且$y_2 = y_1W_2^T+b$
-
x = torch.randn(128, 4096, 30, 20)
y = m1(x)
y = m2(y)
- 线性层(Linear layer), 卷积层(Convolutional layer), 池化层(Pooling layer), 各类正则化(XNorm layer)
- 自定义layer
- Attention layer, Decoder Layer, ...
传统卷积:信号系统中考虑之前时刻的信号经过一些过程后对现在时刻系统输出的影响。
互相关 (cross-correlation):深度学习领域的“卷积”,考虑两个函数之间基于空间位置的相关性
互相关函数$S$,
曾经的面试问题: 卷积计算输出的数值越大,表示什么含义?
-
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
- input shape:
$(N, C_{in}, H_{in}, W_{in})$ - output shape:
$(N, C_{out}, H_{out}, W_{out})$
- input shape:
-
编码时刻
- 模型结构(包括模型参数)
- 编码,构建模型
- 静态: 模型结构定义 (init function)
- 动态: 模型推理过程实现 (forward function)
- 编码,构建模型
- 数据集
- Dataset和DataLoader
- 优化器/训练算法
- Loss function,以及优化目标
无比经典的LeNet系列
Channel: 通道/过滤器(卷积核)
- dataset
- 组织数据集
- 数据集关键要素
- 路径(path), 大小(size), 如何读取单个样本
- dataloader
- 规定数据集的读取方式
- 优化器
- 优化目标: Loss function
- 优化算法: 梯度下降(GD)
- 随机梯度下降(SGD), ADAM
- 算法
- train部分
- test部分
使用MNIST/CIFAR-10/fashionMNIST数据集,训练图像分类模型