Advanced Learning Algorithms
第四周:神经网络(Neural Networks)——从直觉到实现
1. 神经网络直觉
- 灵感来源:生物神经元简化模型。
- 能力:自动学习复杂特征,解决非线性问题(如需求预测、图像识别)。
2. 神经网络模型
- **层 (Layer)**:输入层、隐藏层、输出层的堆叠。
- **前向传播 (Forward Propagation)**:逐层计算激活值,最终输出预测。
- 数学表达:
a[l] = g(W[l]·a[l-1] + b[l]),其中g为激活函数(如 Sigmoid)。 - 架构演变:单层 → 多隐藏层(深度网络),层数越多能学习越抽象的特征。
3. 两种实现方式
TensorFlow / Keras:
1
2
3
4
5
6model = Sequential([
Dense(units=25, activation='sigmoid'),
Dense(units=15, activation='sigmoid'),
Dense(units=1, activation='sigmoid')
])
model.predict(X)从零实现(NumPy):手动编写矩阵乘法与激活函数,加深对向量化理解。
向量化(可选):用矩阵运算替代显式 for 循环,利用并行计算加速。
项目应用提示:
- 遇到线性回归/逻辑回归误差依然很高时,尝试使用包含一两个隐藏层的神经网络。
- 先用 TensorFlow 快速搭建原型,再根据需要手动实现关键部分以加深调试能力。
第五周:神经网络训练与多分类
1. 模型训练细节
- 步骤:指定损失函数和优化器后,调用
model.fit(X, y, epochs=...)。 - 训练本质:通过反向传播与梯度下降不断更新权重和偏置。
2. 激活函数选择
- Sigmoid:输出 (0,1),只用于二分类输出层。
- ReLU:
max(0, z),计算快、缓解梯度消失,隐藏层默认首选。 - 线性激活:直接输出加权和,用于回归输出层。
- 为什么需要非线性:若无激活函数(或线性激活),多层网络仍等价于线性模型。
3. 多分类 (Multiclass Classification)
- Softmax 回归:输出层采用 Softmax,输出每个类别的概率,和为 1。
- 损失函数:稀疏分类交叉熵
SparseCategoricalCrossentropy。 - 代码改进:输出层设为
linear,损失函数加from_logits=True,提升数值稳定性。 - 多标签分类(可选):每个样本可属于多个类别,输出层用 Sigmoid 分别独立判断。
4. 高级优化与层类型
- Adam 优化器:自适应学习率,通常比梯度下降收敛更快、更稳定。
- 其他层类型:课程引入卷积层、全连接层等概念(后续课程会深入)。
5. 反向传播(可选)
- 利用链式法则逐层计算损失对各参数的梯度。
- 计算图帮助可视化梯度流动。
项目应用提示:
- 隐藏层统一用 ReLU;二分类输出层用 Sigmoid;多分类输出层用 Softmax;回归输出层用 线性。
- 训练时优先使用 Adam 优化器,通常无需手动细调学习率。
- 从二分类扩展到多分类,只需改输出层单元数和损失函数,其余结构可复用。
第六周:应用机器学习的实践建议
1. 模型评估与选择
- 数据集划分:训练集 / 交叉验证集 / 测试集(如 60%/20%/20%)。
- 诊断工具:
- 高偏差 (欠拟合):训练误差和验证误差都高,且接近。
- 高方差 (过拟合):训练误差很低,但验证误差远高于训练误差。
- 学习曲线:判断添加数据或增加复杂度是否有帮助。
- 基线:与人类表现或简单模型比较,判断是否有改善空间。
2. 偏差与方差的处理
- 高偏差:增加模型复杂度(更多层/节点)、增加特征、减小正则化 λ。
- 高方差:增加训练数据、减少特征、加大正则化 λ、使用数据增强。
- 神经网络特点:大型网络往往低偏差,只要正则化和数据足够,可以同时实现低方差。
3. 迭代开发流程
- 误差分析:抽查错误样本,找出错误模式(如漏检某个类别),指导下一步改进方向。
- 数据扩充:数据增强(图像旋转/裁剪)、合成数据、收集更多真实数据。
- 迁移学习:复用预训练模型(如在大规模图像上训练好的网络),仅针对特定任务微调最后几层,大幅节省数据和训练时间。
- 完整项目周期:
数据收集 → 模型训练 → 误差分析 → 改进数据/模型的循环。 - 公平与伦理:注意数据的偏见(如性别、种族)及其对模型预测产生的社会影响。
4. 倾斜数据集处理(可选)
- **精确率 (Precision)**:预测为正的样本中真正为正的比例。
- **召回率 (Recall)**:所有真正为正的样本中被成功预测的比例。
- 权衡:设定阈值调节 P/R,使用 F1 分数综合衡量。
- 适用场景:罕见病检测、欺诈识别等类别极不平衡的任务。
项目应用提示:
- 永远不要只盯着训练集上的准确率;认真检查验证集/测试集表现,绘制 学习曲线 诊断偏差与方差。
- 项目遇到瓶颈时,先做 误差分析(手工检查 100 个错误样本),能发现数据或标签的系统性问题。
- 数据量不足时,优先考虑 迁移学习 而非从头训练大模型。
- 面对极不平衡数据,用 精确率-召回率 评估而非简单准确率。
第七周:决策树与集成学习
1. 决策树模型
- 结构:由根节点、内部节点(判断条件)和叶节点(预测结果)构成。
- 学习过程:递归地选择最佳特征进行划分,使子节点更“纯”。
2. 划分标准
- 纯度:分类问题常用熵或基尼不纯度。
- 信息增益:划分前后的不确定性下降量,选择信息增益最大的特征进行分割。
- 处理方式:
- 分类特征:独热编码,在某个特征值上分裂。
- 连续特征:选择一个阈值,划分为两部分。
- 回归树(可选):预测连续值,依据划分后方差减小量来选择特征。
3. 树集成方法
- 随机森林:
- 对训练集进行有放回抽样(Bagging)生成多份数据。
- 每棵树随机选择一部分特征进行训练。
- 投票(分类)或平均(回归)得出最终结果。
- 降低过拟合,提高稳定性。
- XGBoost (Boosting):
- 串行训练树,每棵新树专注于纠正前面树的错误。
- 通常比随机森林性能更强,但调参更敏感。
- 选取准则:决策树/树集成适用于表格数据,解释性强;神经网络更适合图像/文本等非结构化数据。
项目应用提示:
- 面对表格数据(如客户信息表),XGBoost 或随机森林 经常是比神经网络更好的起点,训练快且无需特征缩放。
- 需要向非技术人员解释模型时,决策树 可提供直观的规则链。
- 如果单个决策树过拟合严重,尝试 随机森林;追求极致性能可用 XGBoost,并利用交叉验证调整树深度和学习率。
🔗 整体知识脉络(从线性基础到树与神经网络)
1 | [入门模型] |
🧭 综合项目应用检查清单
拿到一个新项目时,你可以按以下步骤结合所有已学知识:
问题定义与数据获取
- 明确是回归、二分类、多分类还是多标签?
- 收集数据,初步探索分布和标签比例。
基线建立 (W6)
- 建立一个简单模型(如线性模型或浅层决策树)作为性能基线。
- 评估该基线的偏差和方差。
快速试验
- 表格数据:先尝试 XGBoost / 随机森林 (W7),无需特征缩放,可快速得到较强基线。
- 图像/文本等复杂数据:使用神经网络 (W4),借助迁移学习 (W6)。
模型诊断与迭代 (W6)
- 画学习曲线,判断高偏差还是高方差。
- 高偏差 → 加深网络、增加层节点、尝试多项式特征。
- 高方差 → 收集更多数据、数据增强、增大正则化 λ、使用 Dropout(后续课程)。
- 执行误差分析,发现模型在哪些样本上犯错,针对性改进数据或特征。
性能评估
- 均衡数据集:准确率,结合验证/测试集。
- 倾斜数据集:精确率、召回率、F1 分数 (W6)。
- 多分类:关注各类别的 recall,避免类不平衡被忽略。
最终调优
- 使用学习率衰减或 Adam 优化器 (W5) 加速神经网络收敛。
- 对树模型进行交叉验证调参(树的深度、学习率、样本抽样比例)。
- 集成多个强模型(stacking)可能进一步提升。