训练迭代
深度学习开发中的的迭代循环
- 整体架构决策:开发模型的第一步是确定系统的整体架构,包括选择学习模型、确定使用的数据以及选择超参数等。
- 模型实现与训练:基于上述决策,实现并训练一个模型。但初次训练的模型通常难以达到预期效果。
- 诊断分析:查看算法的偏差和方差(在 “误差分析” 中讲解)。通过诊断获得的见解,有助于决定进一步的操作。
- 改进决策与迭代:根据诊断结果,可以做出诸如增大神经网络规模、调整正则化参数、增加或减少数据、增减特征等决策。然后依据新的决策再次进入迭代循环,多次重复(注意:这里就是开发模型中时间差别的原因之一)此过程,直至模型达到期望的性能。
例子:构建电子邮件垃圾分类器
- 问题背景与目标:分类器旨在识别垃圾邮件和非垃圾邮件。
- 训练方法:采用监督学习算法,输入特征X为电子邮件的特征,输出标签Y为1(表示垃圾邮件)或0(表示非垃圾邮件),这属于文本分类应用。
- 特征构建方法:
- 选取英语或其他词典中排名前10000的单词来定义特征。对于给定的邮件,根据单词是否出现将相应特征设置为0或1。例如对于某封邮件,单词 “A” 未出现则对应特征为0,“andrew” 出现则对应特征为1等,以此构建10000个特征。
- 另一种方法是让特征值不仅为0或1,还可以是单词在邮件中出现的次数。如 “buy” 出现两次,可将其特征值设为2,不过设为0或1也是可行的考虑方式。
- 模型训练与改进:基于构建的特征训练分类算法(如逻辑回归模型或神经网络)来预测邮件是否为垃圾邮件。若初始训练的模型效果不理想,可以考虑以下改进方向:
- 收集更多数据:例如通过大规模蜜罐项目产生大量假电子邮件地址(好坑-_-!),吸引骗子发送垃圾邮件,从而获取更多的垃圾邮件数据。
- 开发基于电子邮件路由的复杂特征:电子邮件路由指邮件到达收件人所经过的计算机服务顺序,邮件的相关信息记录了其经过的不同服务和网络。通过分析邮件路径,可辅助判断其是否为垃圾邮件。
- 从邮件正文中提取复杂特征:比如将 “discount” 和 “折现” 视为同一个词;检测邮件中的拼写错误或故意拼写错误(如 “Watchers”“medicine”“mortgage” 等),这些都有助于判断邮件是否为垃圾邮件。
决策依据与重要性
面对众多改进模型和数据的想法,需要判断哪些更有效或者说更有用吧。因为选择正确的方向能显著加速项目进展,例如若算法存在高偏差问题,花费数月进行蜜罐项目收集数据可能并非最有效的方向;而若存在高方差问题,收集更多数据则可能有很大帮助。在机器学习开发的循环过程中,不同的诊断方法能为选择改进模型、数据或架构的方向提供指导。
误差分析
在帮助运行诊断以及选择改进学习模型的下一步尝试方法时,偏差和方差是最重要的概念,而误差分析则排在第二位。
误差分析的过程
- 以构建电子邮件垃圾分类器为例,假设交叉验证示例数量
个,算法错误分类了其中100个。误差分析过程就是手动查看这100个错误分类的示例,深入探究算法出错的原因(python的基本功来了 - 工具开发0-0)。
- 具体操作是从交叉验证集中找出算法错误分类的例子,并尝试将它们按照共同的主题、属性或特征进行分组。
- 例如,在邮件分类中,可能发现很多错误分类的邮件是药品销售人员推销药品的邮件,那就仔细检查这些例子并统计数量(如统计出有21封是药品推销邮件);若怀疑故意拼写错误影响分类,也检查并统计有故意拼写错误的错误分类例子数量(如在100封邮件中找到3封);还可以查看邮件路由信息(发现7封邮件路由不正常),或者发现有18封邮件试图窃取密码或进行钓鱼攻击等。
- 此外,垃圾邮件有时会在图像中写入信息而非在邮件正文中,这使得学习算法难以判断;也可能存在嵌入图像的邮件等情况。
- 通过这样的分析,可以得出某些类型的错误(如制药垃圾邮件、试图窃取密码或钓鱼邮件)是较大的问题,而故意拼写错误虽然是问题但相对较小。比如即使构建专门查找故意拼写错误的算法,也只能解决100个错误示例中的3个,净影响较小,所以在安排工作优先级时可能不会优先考虑这一点。
误差分析的注意事项
- 这些分类类别可以重叠,并非相互排斥。例如,一封邮件可能既是药品推销邮件,又有不寻常的路由,或者既存在故意拼写错误又试图进行钓鱼攻击,即一封邮件可以被划分到多个类别中。
- 当交叉验证集较大时(如5000个交叉验证例子,算法错误分类了1000个),可能没有时间手动查看所有错误分类的示例。此时通常会随机抽取大约100个或几百个样本的子集进行查看,因为这样的数量在合理时间内可以浏览,并且希望通过查看这些样本能获得足够的统计数据,了解最常见的错误类型,从而确定最值得关注的方向。
误差分析的作用
通过误差分析,如果发现很多错误是关于药品垃圾邮件的,可能会得到一些改进思路。比如决定收集更多与药品垃圾邮件相关的数据,让学习算法更好地识别这类邮件;或者创建与药品特定名称或制药产品特定名称相关的新特征,以帮助提高识别垃圾邮件的能力。同样,对于检测钓鱼邮件相关的算法,也可以进行特定更改,如查看电子邮件中的url,编写特殊功能来识别链接到可疑url的情况,或者获取更多钓鱼邮件的数据来改进算法。总之,误差分析通过手动检查算法错误分类的例子,能为尝试改进算法提供灵感,同时也能判断某些类型的错误是否罕见,是否值得花费大量时间去修复。
误差分析的局限性及意义
误差分析更易于处理人类擅长判断的问题,比如对于邮件,人类可以判断其是否正常以及算法出错的原因。但对于一些人类也不擅长预测的问题(如预测人们在网站上会点击什么),误差分析会更加困难。然而,当将误差分析应用于能够解决的问题时,它有助于将注意力集中在更有希望尝试的方向上,避免几个月的无效工作。