动手学深度学习
阅读《动手学深度学习》时的笔记
预备知识
tensor.shape
沿每个轴的长度
tensor.numel()
元素个数
tensor.reshape(a,b)
用-1来自动计算剩下的维度
@是矩阵乘法,*是矩阵元素相乘
广播机制:行向量与列向量相加时行向量复制行,列向量复制列。
X[:] = X + Y和X += Y不会分配新内存
X.numpy()
将tensor转ndarray
torch.tensor(X)
将ndarray转tensor
a.item()
大小为1的张量转标量
范数
用于表征向量的大小。
线性神经网络
线性回归
解析解
小批量随机梯度下降(minibatch stochastic gradient descent)
随机抽样一固定样本数量的小批量
softmax回归
解决分类问题,one-hot编码
为了使输出的概率维持在0~1之间,需要对输出做校准(calibration),即通过softmax函数。
为加速计算,往往对小批量数据采用矢量化的操作。如果用
实际使用中,由于
多层感知机(Multilayer Perceptron, MLP)
多层感知机是最简单的深度网络。
直接地在线性神经网络中添加层并不能使我们的模型表达更复杂的结构,它依然会退化为线性模型。所以,在仿射变换之后,还需要对每个隐藏单元应用非线性的激活函数
通常,为了更高效的内存在硬件中的分配和寻址,层的宽度选择2的若干次幂。
常见的激活函数
修正线性单元(Rectified linear unit,ReLU)
导数为
导数为
模型选择、欠拟合和过拟合
用于对抗过拟合的技术称为正则化(regularization)
容易引起过拟合的原因:
- 可调整参数数量过多
- 参数的取值范围较大
- 训练样本数量较少
数据集处理
K折交叉验证
当训练数据稀缺时,将原始训练数据分成K个不重叠的子集,然后执行K次模型训练和验证,每次在K-1个子集上进行训练,并在剩余一个子集上进行验证,最后通过对K次实验的结果取平均来估计训练和验证误差。
正则化技术
范数与权重衰减
权重衰减(weight
decay)是最广泛使用的正则化技术之一,通常也被称为
为保证权重向量比较小,常用方法是将范数作为惩罚项加入到损失函数中。
对于一个样本,有
暂退法
向每一层添加无偏的噪声。
每个中间活性值h以暂退概率p由随机变量h'替换,即