Week6:深度神经网络训练技巧与Keras进阶实战专题
摘要本周继续学习李宏毅《机器学习》课程主要学习深度网络的训练调优方法与深度学习框架进阶实战。课程系统介绍了神经网络训练中常见的欠拟合、过拟合问题讲解了正则化、参数初始化、学习率调整、早停等常用优化策略。同时结合 Keras 与 TensorFlow 完成实战实验通过对照测试验证不同正则化方式、优化器、网络结构对模型效果的影响并借助规则类任务案例加深理解神经网络的拟合特性进一步完善了模型训练与调参的整体知识体系。1 深度神经网络训练调优技巧1.1 欠拟合与过拟合的判定方式在进行模型调优前需要先准确区分欠拟合与过拟合这两种常见训练问题主要通过训练集和验证集的准确率、损失变化趋势来判断。欠拟合表现为训练集和验证集的准确率都偏低说明模型拟合能力不足没能学到数据的真实特征一般可以通过加深网络、增加神经元数量、更换激活函数、适当增加训练轮数来改善。而过拟合则是模型在训练集上效果极好但验证集准确率不升反降、损失不断升高代表模型过度记忆了训练样本泛化能力变差通常可以通过扩充数据集、降低模型复杂度、引入正则化等方式缓解。1.2 扩充训练数据集缓解过拟合最直接有效的方式就是增加标注训练样本让模型学习到更多数据分布避免模型死记训练集特征。在图像任务中还可以采用数据增强方式无需新增原始标注样本通过裁剪、翻转、平移、旋转、缩放等方式对现有样本做变换生成新的训练数据间接扩充数据集规模有效抑制过拟合。1.3 正则化约束方案正则化的核心原理是在原始损失函数基础上新增参数惩罚项约束权重参数不要出现过大取值降低模型复杂程度以此缓解过拟合。L1、L2正则化L2 正则化最为常用会对所有权重参数做平方求和并乘以惩罚系数加到损失中让权重整体趋向偏小实现参数衰减L1 正则化会对权重绝对值求和做惩罚更容易让部分权重收敛到 0实现特征稀疏筛选。Dropout正则训练阶段会按照设定概率随机临时丢弃部分神经元让每次迭代训练的网络结构都存在差异避免神经元之间过度依赖防止模型记住训练集特征注意测试阶段需要关闭 Dropout所有神经元全部参与前向计算不需要做随机丢弃操作。1.4 早停策略Early Stopping训练过程中实时监控验证集损失或者验证集准确率当验证集性能连续多轮不再提升甚至开始下降时提前终止模型训练并且保存验证集效果最优时的模型参数避免继续迭代造成过拟合。早停是工程中最简单高效的正则化方式通常会搭配耐心值参数避免因单轮随机波动提前终止训练。1.5 权重参数初始化策略如果所有权重初始化为相同数值网络各神经元会完成相同计算无法学习到差异化特征模型训练难以收敛。标准初始化方式为小范围随机初始化常用高斯随机初始化、Xavier 初始化、He 初始化Xavier 初始化适配 Sigmoid、Tanh 类激活函数保证每一层输入输出方差稳定He 初始化专门适配 ReLU 系列激活函数有效避免深层网络激活值饱和、梯度消失问题。1.6 学习率与优化器选择固定学习率存在局限性学习率过大会造成训练震荡不收敛学习率过小收敛速度过慢。可以采用学习率衰减策略随着训练轮数增加逐步降低学习率训练初期用较大学习率快速收敛训练后期用小学习率精细收敛。课程介绍了多种优化器SGD 随机梯度下降、带动量 Momentum 的 SGD、RMSprop、Adam 自适应优化器Adam 结合动量与自适应学习率优势是工程中使用最广泛的优化器。2 Keras 进阶实战训练技巧对照实验2.1 实验设置依旧基于 MNIST 手写数字识别数据集搭建全连接神经网络设置多组对照实验分别验证 Dropout、L2 正则化、不同优化器、网络神经元数量对模型泛化能力、训练收敛速度的影响通过对比测试集最终准确率、训练验证损失曲线直观分析各类调优手段的作用。2.2 多组对照实验过程基线对照组基础多层全连接网络不添加任何正则化选用 SGD 优化器作为基准模型观察过拟合现象正则化实验组分别添加 L2 权重正则、Dropout 层对比基线模型的验证集曲线变化两类方式均可以有效延后、抑制过拟合测试集泛化准确率有所提升优化器对照组固定网络结构分别使用 SGD、Momentum、RMSprop、Adam 优化器训练Adam 优化器收敛速度最快最终泛化效果最优网络复杂度对照组调整隐藏层神经元数量神经元过少出现欠拟合神经元过多极易发生过拟合需要在拟合能力与模型复杂度之间寻找平衡点。2.3 实验结论正则化、Dropout、早停三类方式都可以有效抑制过拟合提升模型在陌生测试集上的准确率Adam 自适应优化器可以省去大量学习率调参工作收敛速度与训练稳定性优于传统 SGD 类优化器网络复杂度需要和数据集规模匹配小数据集不宜使用参数量过大的深层宽网络否则极易出现严重过拟合。3 TensorFlow 基础实战FizzBuzz 任务3.1 FizzBuzz 任务介绍FizzBuzz 属于经典的规则类编程任务输入一个正整数若能同时被 3 和 5 整除输出 FizzBuzz仅能被 3 整除输出 Fizz仅能被 5 整除输出 Buzz其余情况直接输出原始数字。传统方式可以通过条件判断实现本次任务尝试用神经网络学习该隐藏规则验证网络对离散规则类数据的拟合能力。3.2 数据预处理特征编码将十进制数字转换为二进制编码作为神经网络输入特征把规则类问题转化为分类任务标签编码将四类输出结果Fizz、Buzz、FizzBuzz、原数字做独热编码搭建多分类神经网络划分训练集、测试集选取一定区间内的数字作为训练样本其余数字作为测试样本验证网络是否学习到数字整除的隐藏规则。3.3 模型搭建与训练测试使用 TensorFlow 搭建多层全连接神经网络输入为二进制编码特征隐藏层搭配 ReLU 激活函数输出层使用 Softmax 激活实现四分类选用交叉熵损失、Adam 优化器完成模型训练。训练结束后在测试集上验证预测准确率观察神经网络能否自主学习到整除的数学规则理解神经网络可以拟合各类显式、隐式的非线性规则也为后续结构化、规则类数据任务提供了深度学习解决思路。4 本周拓展思考正则化、Dropout、早停、数据增强四类方案的核心作用都是降低模型复杂度只是实现方式不同工程中经常组合使用进一步抑制过拟合权重初始化不能简单全部置零不同激活函数需要匹配对应的初始化策略否则会出现神经元同质化、梯度消失、训练无法收敛等问题优化器本质是梯度下降的改进策略自适应优化器可以大幅降低调参成本但不能完全依赖 Adam部分场景下精细调参后的 SGD 泛化效果更优FizzBuzz 案例说明神经网络不需要人工总结规则仅依靠数据就可以自主学习隐藏规律这也是深度学习端到端建模的核心优势。总结本周课程主要学习了神经网络的训练调优方法并结合框架完成实战练习。我先掌握了欠拟合与过拟合的判断标准系统了解了数据增强、正则化、Dropout、早停、参数初始化、学习率与优化器等常用调优方式清楚了不同方法的作用和适用场景。之后利用 Keras 基于 MNIST 数据集做多组对比实验直观看出正则化、优化器、网络结构对模型训练效果的影响学会根据实验结果调整网络参数。最后通过 FizzBuzz 案例上手 TensorFlow 基础操作理解了神经网络能够自主学习数据隐藏规则。