status
Published
slug
dive-into-deep-learning-2
type
Post
category
Technology
date
Apr 15, 2022
tags
深度学习
pytorch
summary
《动手学深度学习笔记》第二章的学习笔记
基础概念
线性模型(线性回归)
回归用于预测多少的问题
偏置项(偏移量、截距)
在线性模型中,偏置是指当所有特征都取值为0时,预测值应该为多少。
- 如果没有偏置项,模型的表达能力将受到限制
损失函数
损失函数(loss function)能够量化目标的实际
值与预测值之间的差距。
- 非负数
- 常用平方误差函数,为了避免误差计算在n个样本的损失均值
梯度下降
通过不断地在损失函数递减的方向上更新参数来降低误差。
梯度下降最简单的用法:
- 计算损失函数(数据集中所有样本的损失均值) 关于模型参数的导数(在这里也可以称为梯度)。
问题:每一次更新参数之前,必须遍历整个数据集
⇒ 随机梯度下降:
- 在每次需要计算更新的时候随机抽取一小批样本
线性回归恰好是一个在整个域中只有一个最小值的学习问题。 但是对于像深度神经网络这样复杂的模型来说,损失平面上通常包含多个最小值。 深度学习实践者很少会去花费大力气寻找这样一组参数,使得在训练集
上的损失达到最小。 事实上,更难做到的是找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失, 这一挑战被称为泛化(generalization)。
在机器学习中,我们通常不太关心恢复真正的参数,而更关心如何高度准确预测参数。 幸运的是,即使是在复杂的优化问题上,随机梯度下降通常也能找到非常好的解。 其中一个原因是,在深度网络中存在许多参数组合能够实现高度精确的预测。
解析解
线性回归的解可以用一个公式简单地表达出来, 这类解叫作解析解(analytical solution)
公式
- L2范数
- 矩阵求导
- 向量的内积
Softmax回归
Softmax回归用于分类问题
尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型(linear model)
独热编码(one-hot encoding)
用于表示分类数据的向量,类别对应分量设置为1,其余为0
softmax回归的输出层也是全连接层:每个输出都取决于输入
分类精度
分类精度即正确预测数量与总预测数量之比
校准(calibration)
softmax函数将未规范化的预测变换为非负并且总和为1,同时要求模型保持可导。
交叉熵损失(cross-entropy loss)
softmax的导数
导数是我们softmax模型分配的概率与实际发生的情况(由独热标签向量表示)之间的差异。
softmax的范围
上溢:若 的大小过大,可能会超过数据类型能允许的最大数值,形成上溢
⇒ 在计算softmax时减去
⇒ 存在下溢的可能
下溢:的值为较大负数,精度有限,导致的值接近零,可能会导致的值为-inf。
⇒ 将softmax和交叉熵结合在一起(用softmax的结果作为交叉熵的输入),可以避免反向传播过程中可能会困扰我们的数值稳定性问题。
信息论
信息论(information theory)涉及编码、解码、发送以及尽可能简洁地处理信息或数据。
熵(entropy)
信息论的核心思想是量化数据中的信息内容。 在信息论中,该数值被称为分布的熵(entropy)
信息论的基本定理之一指出,为了对从分布中随机抽取的数据进行编码, 我们至少需要“纳特(nat)”对其进行编码
信息量
用来量化人们在预测事件时的惊异程度,是观察时赋予的主观概率。
- 熵是当分配的概率真正匹配数据生成过程时的信息量的期望。
交叉熵
可以把交叉熵想象为“主观概率为的观察者在看到根据概率生成的数据时的预期惊异”
交叉熵从到:
- 交叉熵最小化时
交叉熵的分类目标
- 最大化观测数据的似然;
- 最小化传达标签所需的惊异
技巧
矢量化加速
矢量化(矩阵化)使数学表达上更简洁,同时运行的更快。
同时处理整个小批量的样本,可以使用numpy实现,计算不是对数组对象进行而是同时对数组的每个元素进行
with torch.no_grad()
with torch.no_grad的作用
在该模块下,所有计算得出的tensor的requires_grad都自动设置为False。
当requires_grad设置为False时,反向传播时就不会自动求导了,因此大大节约了显存或者说内存,简单来说是移除计算图
框架的使用
使用深度学习框架的API可以简化代码,且框架具有一定普适性