机器学习中的模型解释
本节将对model interpretation的一些方法进行总结
什么是model interpretation
模型可解释性将帮助更深入了解问题、数据和模型可能失败的原因,在一些出现差错会带来重大损失的应用场景中,例如涉及生命安全等,往往更加注重模型的可解释性,会为了提高可解释性而牺牲一部分性能。
模型解释将注重以下几个问题:
- 哪些特征在模型看到是最重要的?
- 关于某一条记录的预测,每一个特征是如何影响到最终的预测结果的?
- 从大量的记录整体来考虑,每一个特征如何影响模型的预测的?
从范围上将分为全局解释(Global Interpretation)和局部解释(Local Interpretation)
全局解释
全局解释是基于整个数据集的解释或者说基于模型层面的解释,常用的方法有:
- 数据降维可视化方法,例如PCA、t-SNE等;
- 偏相关图:PDP(Partial Dependence Plots);
- 特征重要性;
- 全局代理(决策树)模型;
- 全局Shapley值。
局部解释
局部解释是针对单个实例或数据子集中自变量和因变量条件交互的解释,局部解释可进一步扩展:敏感性分析(Sensitivity Analysis)研究特征值变化所引起预测结果变化的可信度,常用方法有:
- 个体条件期望图:ICE(Independent Conditional Expectation);
- 局部代理(决策树)模型;
- LIME:Local Interpretable Model-Agnostic Explanations,模型无关的局部解释;
- 局部Shapley值。
特性
- 分类:建模前数据的可解释性、建模阶段模型可解释性、运行阶段结果可解释性。
- 范围:全局解释性、局部解释性、模型透明度、模型公平性、模型可靠性。
- 评估:内在还是事后?模型特定或模型不可知?本地还是全局?
- 特性:准确性、保真性、可用性、可靠性,鲁棒性、通用性等。
- 人性化解释:人类能够理解决策原因的程度,人们可以持续预测模型结果的程度标示。
参考
机器学习中的模型优化
本节将对model optimization的一些方法进行总结
什么是model optimization
对于深度学习中的一些模型,例如CNN,往往存在较多的参数,事实上我们可以针对这些参数进行优化,你可以使用网格搜索获得超参数的最优值,但往往需要大量的硬件计算时间。
网格搜索是一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。对于每个超参数,使用者选择一个较小的有限集去探索。然后,这些超参数笛卡尔乘积得到若干组超参数。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。
方法
学习率
大的学习率能够让模型学得更快,在一定程度上能让参数跳过某些局部值,但也容易引起模型的不稳定,容易过拟合等等;小的学习率可以让模型学习得更稳定,学习到一个较好的可行解,但也容易陷入局部值而不能跳出,且训练相对较慢。
当前最主流的神经网络学习方法是基于梯度下降的算法,如sgd,adma等。梯度下降方法中,学习率是个比较重要的超参数,其控制着每次更新参数变化量的大小,不同的模型结构,不同的训练阶段,甚至不同的参数层,都可以通过调整学习率来获得更好的表现。
在神经网络的训练中,有两个重要的概念,一个是损失函数,一个是优化函数,简单来说损失函数是评价指标,优化函数是网络的优化策略。
为了更高效的优化网络结构(损失函数最小),我们需要最恰当的优化函数来优化网络,常用的优化函数有 SGD、BGD、MBGD、Momentum、NAG、Adagrad、Adadelta,RMSprop、Adam,还有比较新的Lookahead,RAdam。
SGD、BGD、MBGD 三个算法都是使用梯度下降算法对网络权重进行更新,只是每次更新使用的样本数量不同。( SGD属于离线学习,BGD、MBGD属于在线学习)
Momentum和NAG算法是根据局部历史梯度对当前梯度进行平滑。
Adagrad,Adadelta,RMSprop算法都是自适应学习率的优化算法,对于不同参数使用不同的自适应学习率;Adagrad使用梯度平方和、Adadelta,RMSprop使用梯度一阶指数平滑(一阶指数平均,局部加权历史梯度)解决了Adagrad后期梯度非常小的问题;RMSprop是Adadelta的一种特殊形式。
Adam算法吸收了Momentum和RMSprop算法的优点,同时改进了梯度计算方式和学习率,本质上是带有动量项的RMSprop。
对抗训练
对抗训练是提高神经网络鲁棒性的利器,减少了随机干扰对模型结果的影响,其思想是,在训练过程中,通过对输入进行扰动,而使神经网络适应这种改变,从而提高对对抗样本的鲁棒性。(如FGM、PDG等)
参数平滑
通常训练神经网络都是使用梯度下降之类的方法训练至收敛,不过因为一些随机因素(随机初始化、随机训练样本、不确定的学习率等等)甚至是梯度下降本身的因素,这样的模型参数经常会有较大的随机性,所以一些研究人员通过参数平滑的方式,来降低模型参数的随机性,以及提高模型的泛化能力。(如EMA滑动平均,降低了参数的随机性,从而提高了模型准确性;SWA随机权重衰减,类似与集成模型的思想,将多个模型参数合并一起,从而提高模型的泛化能力)
正则化
过拟合一直是模型训练中的一大难题,正则化就是针对处理过拟合的一些手段。狭义的正则化主要是对模型做约束,如L1/L2正则,dropout等等;广义的正则化则是一切能让模型降低测试误差的方法,如数据增广、调整loss、early_stop甚至是调整模型结构。从这个角度看,大部分内容,都可以认为是正则化手段。
word mixup
word mixup可以认为是一种数据增广的方式,这种方法可以大量构造虚拟样本,其思路是随机抽取两个样本,将两个样本的word embedding按比例混合作为新的样本,新样本的标签也是这两个样本的标签按比例的集合。
dropout
dropout是常用的正则化手段之一,其主要思想是随机丢弃一些计算单元或通道,从而让各个计算单元或通道都能学到有效的信息,其思想也类似于bagging,减少了模型的方差。
early stop
随着模型的不断训练,可能导致模型在训练数据集上过拟合,从而降低在测试集上的表现,如下图所示,随着训练次数的增加,测试误差先变小后变大。所以一个有效的early stop策略,可以提高模型的泛化能力。
后处理
阈值优化
数据准备好了,模型也训练完成,模型的输出结果到最终的结果还要一个转换。对于通常的分类任务,可能直接使用0.5作为阈值分类就好,但对于具体任务而言,不同的阈值可能对最终结果有不少的影响。
自知识蒸馏
自知识蒸馏在很多任务上也能提高模型的的效果,因为其相对于原始的硬标签提供的信息,可以额外提供各个类别之间关系的信息。比如分类任务中,原始标签只会对某个样本标记为第一类/第二类,但自知识蒸馏可以把某个样本标记为80%的第一类20%的第二类,这样就提供了更多的标签之间的信息。