目录
1. 模型选择
1.1 训练误差 vs. 泛化误差
1.2 验证数据集 vs. 测试数据集
1.3 K-折交叉验证
1.4 总结
2. 过拟合与欠拟合(核心知识)
2.1 过拟合 vs. 欠拟合
2.2 模型容量
2.3 估计模型容量
2.4 VC维 衡量模型容量
2.5 数据复杂度
3. 代码样例 (过拟合 vs. 欠拟合)
1. 模型选择
1.1 训练误差 vs. 泛化误差
1.2 验证数据集 vs. 测试数据集
- 验证数据集 (validation dataset) 不参加训练,用来调参 (调整模型结构),能够反映超参数的好坏
- 测试数据集 (test dataset) 只能使用一次,不能用来调超参数
李沐老师:
- 拿测试集来调参(当验证集使用)发论文,是很严重的事情
- 验证数据集相当于模拟考试
- 测试数据集相当于期末考试
李沐老师:
- 咱教材里的test dataset并不是真正的测试数据集,本质上是验证数据集
- 真正的测试集是新的数据集,甚至标号都未知
1.3 K-折交叉验证
- 这里的例子是把数据集分成三块,训练三个epoch,迭代三次(跑三遍数据)
- 每次拿一块出来作为验证集,最后拿到三个验证精度(或者误差)
- 把这三个精度做平均,便能得到K-则交叉验证的误差
- (例子里的方法又叫“留一法”)
- K=5 指的是迭代5次(跑5遍数据)
- K值的设定,需要权衡数据集的大小,数据集特别大,K可以设为2或3
- (K值设定得越大,越贵)
- K-折交叉验证是最常用的验证所设超参数效果的方法
1.4 总结
2. 过拟合与欠拟合(核心知识)
2.1 过拟合 vs. 欠拟合
模型容量:
- 低:比如简单线性模型
- 高:比如多层感知机
数据:
- 简单:如第三章简单线性回归的人工合成数据集
- 适中:如Fashion-MNIST
- 复杂:如ImageNet
2.2 模型容量
李沐老师:
- 过拟合不一定是坏事,为了把泛化误差往下降,不得不承受一定程度的过拟合
- 首先是模型容量要足够(模型足够大)(伴随一定的过拟合)
- 其次才是通过(缩减容量、正则化-权重衰退、早停等方法)调整模型容量,缩小误差
- (这是整个深度学习的核心)
2.3 估计模型容量
智谱AI:
1. d - 数据维度:
- 通常指的是输入数据的维度。在处理特征向量时,如果每个数据样本是一个向量,那么 d 就是该向量的长度
- 例如,如果每个样本是一个包含100个特征的数据点,那么 d = 100
- 在图像处理中,如果图像被展平成一个一维向量,d 代表这个向量的长度,这通常是图像的 高度 * 宽度 * 颜色通道数
2. m - 中间变量维度:
- m 经常用来表示神经网络中间层的大小,即隐藏层的神经元数量
- 神经元:在神经网络中,无论是隐藏层还是输出层,层的“单元”数通常就是指该层中神经元的数量
3. k - 输出结果维度:
- 通常指的是输出层的维度,即分类任务中的类别数量
- 在多类分类问题中,如果模型需要预测10个不同的类别,那么 k = 10
2.4 VC维 衡量模型容量
二维输入:
- 例如简单线性模
- 线性模型试图找到一条直线来分割数据
- 寻找一个输入和一个输出之间的关系
三维输入:
- 例如XOR
- XOR试图找到两条直线来分割数据
- 寻找两个输入和一个输出之间的异或关系
李沐老师:
- VC维只是理论拓展,能够一定程度解释模型
- VC维很少用到深度学习上
2.5 数据复杂度
李沐老师:
- 相比模型复杂度,数据复杂度更不好衡量啦!
- 判断复杂与否,更多的是靠 (调参) 经验,靠比较 (不同数据集) 的出来的
- 自动机器学习(AutoML包含自动调参)还在路上