Datawhale X 李宏毅苹果书 AI夏令营 task3
要成功地使用深度学习技术,仅仅知道存在哪些算法和解释他们为何有效的原理是不够的。
一个优秀的机器学习实践者还需要知道如何针对具体应用挑选一个合适的算法以及如何监控,并根据实验反馈改进机器学习系统。在机器学习系统的日常开发中,实践者需要决定是否收集更多的数据、增加或减少模型容量、添加或删除正则化项、改进模型的优化、改进模型的近似推断或调试模型的软件实现。尝试这些操作都需要大量时间,因此确定正确做法,而不盲目猜测尤为重要的。
在实践中,正确使用一个普通算法通常比草率地使用一个不清楚的算法效果更好。
建议参考以下几个实践设计流程:
确定目标——使用什么样的误差度量,并为此误差度量指定目标值。这些目标和误差度量取决于该应用旨在解决的问题。
尽快建立一个端到端的工作流程,包括估计合适的性能度量。
搭建系统,并确定性能瓶颈。检查哪个部分的性能差于预期,以及是否是因为过拟合、欠拟合,或者数据或软件缺陷造成的。
根据具体观察反复地进行增量式的改动,如收集新数据、调整超参数或改进算法。
性能度量
默认的基准模型
具有衰减学习率以及动量的SGD是优化算法一个合理的选择
另一个非常合理的选择是Adam算法。批标准化对优化性能有着显著的影响,特别是对卷积网络和具有sigmoid非线性函数的网络而言。
除非训练集包含数千万以及更多的样本,否则项目应该在一开始就包含一些温和的正则化。
决定是否收集更多数据
收集更多的数据往往比改进学习算法有用得多。
一般过拟合时倾向于收集数据
建议在对数尺度上考虑训练集的大小,例如在后续的试验中倍增样本数目
选择超参数
手动调整超参数
手动搜索超参数的主要目标是调整模型的有效容量以匹配任务的复杂性。
有效容量受限于三个因素:模型的表示容量、学习算法成功最小化训练模型代价函数的能力以及代价函数和训练过程正则化模型的程度。
学习率可能是最重要的超参数。
超参数 容量何时增加 原因 注意事项
隐藏单元数量 增加 增加隐藏单元数量会增加模型的表示能力 几乎模型每个操作所需的时间和内存代价都会随隐藏单元数量的增加而增加
学习率 调至最优 不正确的学习速率,不管是太高还是太低都会由于优化失败而导致低有效容量的模型
卷积核宽度 增加 增加卷积核宽度会增加模型的参数数量 较宽的卷积核导致较窄的输出尺寸,除非使用隐式零填充减少此影响,否则会降低模型容量。较宽的卷积核需要更多的内存存储参数,并会增加运行时间,但较窄的输出会降低内存代价。
隐式零填充 增加 在卷积之前隐式添加零能保持较大尺寸的表示 大多数操作的时间和内存代价会增加。
权重衰减系数 降低 降低权重衰减系数使得模型参数可以自由地变大。
Dropout比率 降低 较少地丢弃单元可以更多地让单元彼此协力来适应训练集。
实践中能够确保学习有效的暴力方法就是不断提高模型容量和训练集的大小,直到解决问题
自动超参数优化算法
网格搜索
在超参数是数值(有序)的情况下,每个列表的最小和最大的元素可以基于先前相似实验的经验保守地挑选出来,以确保最优解非常可能在所选范围内。通常,网格搜索大约会在 对数尺度(logarithmic scale)下挑选合适的值
通常重复迭代进行网格搜索时,效果会最好。
随机搜索
相比于网格搜索,随机搜索能够更快地减小验证集误差(就每个模型运行的试验数而言)。
随机搜索能比网格搜索更快地找到良好超参数的原因是,没有浪费的实验,不像网格搜索有时会对一个超参数的两个不同值(给定其他超参数值不变)给出相同结果。
基于模型的超参数优化
大部分基于模型的超参数搜索算法,都是使用贝叶斯回归模型来估计每个超参数的验证集误差期望和该期望的不确定性。
调试策略
在大多数情况下,我们不能提前知道算法的行为。
另一个难点是,大部分机器学习模型有多个自适应的部分。
一些重要的调试检测如下所列:
可视化计算中模型的行为
可视化最严重的错误
根据训练和测试误差检测软件
拟合极小的数据集
比较反向传播导数和数值导数
监控激活函数值和梯度的直方图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人