第 1 课上机练习手册
主题
AI 基础回顾:从感知机、特征工程到神经网络训练直觉
平台
实验目标
本次上机不是为了“调出最高分”,而是为了建立三种直觉:
- 数据长什么样,决定了问题有多难。
- 特征工程可以显著降低模型复杂度。
- 深度、宽度、正则、噪声、学习率、激活函数都会影响训练过程与泛化效果。
一、实验安排总览
Part A:熟悉环境(5 分钟)
- 打开 TensorFlow Playground。
- 观察界面中的输入特征、隐藏层、激活函数、学习率、正则、噪声、训练 / 测试损失。
- 随意拖动几个参数,理解:
- 左侧是数据与特征设置
- 中间是网络结构
- 右侧是训练过程与分类边界
本阶段重点:
二、分类任务实验(约 30 分钟)
任务 1:线性可分任务(左下角,5 分钟)
目标
完成左下角最简单的线性分割任务,并尝试用最少的神经元实现分类。
建议步骤
- 选择左下角线性可分数据。
- 只保留原始输入特征
x1、x2。
- 从最简单模型开始:
- 不加隐藏层,或只保留一个最小隐藏结构
- 观察是否已经可以完成分类
- 尝试继续删减网络,直到找到最小可行模型。
预期现象
本阶段重点理解
- 线性可分问题不需要复杂网络。
- 模型越复杂不一定越好,先从最简单模型开始是一个重要习惯。
- 如果边界本来就是直线,硬用复杂网络只是“过度设计”。
任务 2:四象限任务(右上角,8 分钟)
目标
先用原始特征做,再加入组合特征,比较模型复杂度的变化。
建议步骤
- 选择右上角“四象限”分类任务。
- 先只使用
x1、x2,观察:
- 然后加入乘积特征
x1*x2。
- 重新尝试最简单模型,比较变化。
预期现象
- 如果加入
x1*x2 这个特征,一个神经元就可以完成任务。
本阶段重点理解
- 这个任务不是“网络不够强”,而是“表示方式不合适”。
- 好特征可以把复杂问题重新变简单。
- 特征工程本质上是在帮助模型更容易表达数据规律。
任务 3:靶心任务(左上角,8 分钟)
目标
观察“原始空间中不线性可分”的任务,如何通过特征变换重新变简单。
建议步骤
- 选择左上角“靶心式”分类任务。
- 先只用
x1、x2,尝试训练,观察模型需要多复杂。
- 然后尝试加入平方类特征,例如
x1^2、x2^2。
- 比较加入新特征前后:
- 网络复杂度是否下降
- 决策边界是否更自然
- 训练速度是否更快
预期现象
- 如果用平方特征,一个神经元就可以更容易完成这个任务。
本阶段重点理解
- 很多“复杂边界”只是在线性坐标系里看起来复杂。
- 合适的特征变换可以把非线性问题映射到更容易处理的空间。
- 这正是经典机器学习中特征工程的重要性。
小结 1:从前三个任务得到什么结论(2 分钟)
请每位同学用一句话总结:
- 对数据分布的理解,比盲目加大网络更重要。
- 特征工程可以直接改变问题难度。
- 神经元越多,不代表越“懂数据”。
任务 4:调高噪声,观察泛化与正则(5 分钟)
目标
体会噪声、过拟合、训练损失与测试损失之间的关系,并观察正则化的作用。
建议步骤
- 任选前面一个任务,先训练到效果较好。
- 逐步提高数据中的 noise。
- 观察:
- 训练 loss 如何变化
- 测试 loss 如何变化
- 决策边界是否开始变得扭曲
- 在此基础上加入正则化(regularization),再观察边界与测试效果变化。
本阶段重点理解
- 训练 loss 低,不代表测试效果一定好。
- 噪声越大,模型越容易记住偶然模式。
- 正则化的目标不是“让训练更轻松”,而是限制模型过度拟合训练数据。
- 边界更平滑,通常意味着模型抓住了更稳定的规律。
任务 5:银河任务(最复杂任务,约 10 分钟)
目标
在最复杂的数据分布上,比较深度、宽度、正则和训练超参数的影响。
建议步骤
- 选择银河状任务。
- 先从一个较小网络开始,记录效果。
- 分别尝试:
- 更宽的网络
- 更深的网络
- 加正则
- 调学习率
- 更换激活函数
- 重点观察:
- 收敛速度
- 边界形状
- 训练 / 测试 loss 的差异
重点比较
- 深度 vs 宽度
- 加正则前 vs 加正则后
- 学习率变化
- 激活函数变化
本阶段重点理解
- 复杂任务通常不能只靠“多堆神经元”解决。
- 模型结构和训练策略要与数据复杂度匹配。
- 如果边界非常锯齿、非常碎,往往是在记忆噪声而不是学到本质。
- 更光滑、更稳定、测试表现更好的边界,通常泛化能力更强。
三、回归任务实验(约 30 分钟)
目标
从分类切换到回归,理解:
- 任务形式变了,但训练逻辑没有变
- 模型仍然是在拟合数据规律
- 过简单会欠拟合,过复杂会过拟合
建议步骤
步骤 1:切换到回归模式
- 切换 Playground 中的回归任务。
- 先观察数据点和目标曲线的关系。
重点理解:
步骤 2:从简单模型开始
重点理解:
- 模型太简单时,即使训练很久,也学不到足够复杂的规律。
步骤 3:逐步增大模型复杂度
- 增加神经元数
- 增加隐藏层
- 比较拟合效果和训练稳定性
重点理解:
- 更复杂的模型表达能力更强
- 但复杂度上升后,也更容易过拟合
步骤 4:观察噪声与泛化
- 提高噪声水平
- 观察训练集拟合曲线和测试表现
- 比较加正则前后的变化
重点理解:
- 回归任务同样会过拟合
- 模型若开始追逐噪声点,测试表现通常会下降
步骤 5:调学习率与激活函数
- 改大学习率,观察是否震荡
- 改小学习率,观察是否过慢
- 更换激活函数,观察收敛差异
重点理解:
- 训练是否顺利,不只取决于模型结构,也取决于优化过程。
四、建议学生记录的观察结果
建议每位同学至少记录下面几项:
- 哪个任务最容易,为什么?
- 哪个任务最依赖特征工程,为什么?
- 什么时候“加大模型”有帮助,什么时候没帮助?
- 噪声变大后,训练 loss 和测试 loss 分别发生了什么?
- 正则化带来了什么变化?
- 学习率过大、过小时各自出现了什么现象?
- 你观察到的“最好边界”长什么样?为什么你认为它更好?
五、实验报告建议问题
可以要求学生围绕下面几个问题写简短总结:
1. 为什么前三个分类任务都说明“理解数据比盲目堆模型更重要”?
2. 特征工程在四象限任务和靶心任务里分别起到了什么作用?
3. 为什么更平滑的边界通常意味着更好的泛化能力?
4. 你如何理解“训练好”与“泛化好”不是一回事?
5. 深度、宽度、正则、学习率、激活函数,各自主要影响训练的哪个方面?
六、教师提示语
上机时可以反复提醒学生:
- 先从最简单模型开始。
- 每次只改一个变量,否则看不出因果关系。
- 不要只看训练效果,要一起看测试效果。
- 不要只看数值,也要看决策边界的形状。
- 如果边界越来越碎,先怀疑是不是在过拟合。
- 如果加入一个好特征后模型突然变简单,这是最值得记录的时刻。
七、本次实验的核心结论
- 机器学习的第一步不是调参,而是理解数据。
- 特征工程可以显著改变任务难度。
- 模型复杂度需要和问题复杂度匹配。
- 训练 loss、测试 loss 和边界形状要结合起来看。
- 正则化、学习率、激活函数都会显著影响训练过程与泛化效果。
- “边界光滑、规律稳定、测试表现更好”的模型,通常更接近数据的本质结构。