5.评估模型表现
用历史日志数据评估模型质量是最节省的方式(用live流量数据做评估很重要却也很贵[30])
因为不同度量以不同方式反应模型变化,我们发现用多数可能的表现度量能很好地评估模型变化。我们计算AucLoss(也就是说,1-AUC,AUC是ROC曲线度量下的标准area),LogLoss,方差。为了一致性,我们定义的度量满足越小越好的要求。
5.1Progressive 验证
我们通常使用Progressive验证有时候也被叫做线上loss而不是对held out数据集做交叉验证。因为给学习效率计算梯度需要九三一个预测,我们可以便宜地把那些预测穿起来做接下去的分析,每小时聚合一次。我们也通过计算在数据集上的小块比如按国家,查询,主题,构架分的故障。
online loss能很好地代表我们提供查询服务的准确性,因为它只度量在我们训练之前最近的数据——准确地分析了当模型用到服务查询中的情形。Online Loss也有相当不错统计比held-out的数据集,因为我们使用我们所有的数据做训练和测试。这点非常重要因为很小的进展能对大型的需要大量可信观测数据带来有价值的影响。
绝对的度量值通常带有误导性。尽管预测是很完美的,LogLoss和其他度量依据问题的难度变化。(也就是贝叶斯风险)。如果点击率接近0.5,最好的能达到的LogLoss在点击率接近0.2的时候要高得多。这点很重要因为点击了随着国家,搜索变化,因此平均化了这个课题在一天中的变化。
我们因此总是关注相对的变化,通常被表示成基于一个baseline的模型。据我们的经验,相对的改变随着时间相对更稳定。我们也关注从同样数据计算出来的不同度量,比如,一个模型上一段时间内loss度量和另一个模型在另外一段时间内的loss度量是不可比的。
5.2通过可视化更深入的理解
在大规模学习中可能遇到的一个陷阱是聚合的表现度量会隐藏子块数据的特定效果。这使得不光光使用聚合的数据是必要的,需要针对一个块的数据做统计。
因为有太多细分有意义数据的方式,我们需要可视化的总结数据很有必要。我们开发出了一个高维的交互可视化工具叫做GridViz来允许复杂的数据理解。
图2中展示了一组按照查询主题的两个模型同一个base模型比较的结果。度量值用有色块表示,行相关模型名职,列相关数据块。Column的宽度表示分块的重要性,也可以被设置成去反应展示的数量或者点击的数量。
因为可能会有数百的分块,我们设计的交互的模块让用户自定义他们的分块。
6.可信度估计
需要平衡已经知道很好的和数据很少不知道好不好的,因为那也有可能好。
他们不用置信区间,因为和他们的应用不适用。
而且置信计算需要耗费比估计少和便宜。
他们用了一个启发性算法算不确定性得分。
比较大的n_i的特征有更小的学习效率,因为我们相信我们得到的洗漱值是比价准确的。logloss是logistic的loss。如果我们假设特征向量是正则化的那么|x_{t,i}|<=1,我们可以bound这个改变在log-odds预测,原因在我们可以观测一个单个的训练样本(x,y)。
为简单期间考虑\lambda_1=\lambda_2=0,所以FTRL_Proximal和OGD等价。
\[令n_{t,i}=\beta+\sum_{s=1}^{t}{g_{t,i}}^2,再利用FTRL_Proximal的w迭代公式得到:\]
\[\begin{alignat}{1}|x\cdot w_t -x \cdot w_{t+1}|&=\sum_{i:|x_i|>0}{}\eta_{t,i}|g_{t,i}|\\&\leq \sum_{i:|x_i|>0}{}\frac{x_{t,i}}{\sqrt{n_{t,i}}}=\alpha \eta \cdot x \equiv u(x)\end{alignat}\]
这里\eta是学习效率矩阵。我们定义不确定性得分是上界u(x),像计算内积那样做。
实验结果:他们首先训练了一个ground truth模型;没用真实的点击标签,把ground truth模型的CTR当做真的CTR.
他们的不确定性得分和另外的一些expensive的估计方式可相匹敌的。(和一个用了32个模型的引导程序估计相比较的)
7.预测校准
准确和良好校准的预测不光在竞价中是必要的,同时允许了一个宽松的在机器学习机制之外的对整体系统进行一些优化设计。
在不同数据集上观测到,预测得出不同的CTR被叫做系统偏见来自很多地方,比如不准确的模型假设,学习算法的不足,或者隐藏特征在训练或者服务时间不允许。
为强调这点我们用一个校准层去匹配预测的CTR和观测到的CTR.
我们在一个数据块上做校准,如果我们预测到了p,实际观测到的CTR在p附近。我们通过利用纠正函数\tau_d(p)来提升校准,d表示数据块中的一个元素。如果校准的预测能在很大范围内的数据块上起作用,我们就达到目的了。
对\tao进行简单的建模方法比如:
\[\tau(p)=\gamma p^k\]
我们可以利用Possion回归在聚合数据上得到\gamma 和\tau.
更一般的方法是用piecewise分段的线性或者常数纠正方程来处理复杂形状的偏见曲线。仅有的限制是映射方程\tau是需要isotonic单调增加。我们能通过isotonic回归发现这样的映射,通过计算加权的最小二乘法,来拟合输入数据符合那些限制。[27,23]这种分段线性方法相比合理的基准方法显著的减少了预测阶段的不管是范围高端还是范围低端的偏见。
没有很强的假设支撑,校准没什么价值,天然的系统回馈循环不会带来校准有理论保证的影响力的。
8.自动的特征管理
大型机器学习很重要的一个方面是管理很大量的装入,包含所有的配置,开发这,代码,计算资源,来组成一个机器学习系统。一个装入要在诸多团队,建模特定领域的问题都需要日常开支。一个典型的有趣的例子就是机器学习特征空间的管理。
我们可以把特征空间刻画成一个contextual和semantic的信号的能被转换成实值特征来学习的集合。(上下文的语义学的)
在一个大型的装载中,许多开发者在信号开发过程中asynchronously是异步工作的.一个信号可能有很多随着配置变更,提升,和本地实施而产生的版本。一个工程团队或许是在消耗信号如果他们没有直接开发的话。信号或许在多个分开的学习平台上被消耗应用于不同的问题。(比如,预测搜索广告vs预测展示广告)为处理用例的组合增长,我们使用了一个元数据索引来管理数千的信号输入和数百的模型调用交互带来的消耗。
有索引的信号接受手动和自动多层面考虑,比如depreaction,特定平台的可使用性,特定领域的可使用性等等。新模型,活动模型通过一个自动的消息系统进行审核。不同的学习平台使用共同的信号消耗报告接口到中心索引。当一个信号被弃用(比如新版本可用了)我们就迅速的为所有用户一致化信号和进行替代。当一个信号的版本提升了,用户会被通知到去使用新版本。
新信号可以通过自动测试和写白名单的方式来审核。白名单可以被用来保证生产系统的纠正也可以用于学习系统的自动特征选择。不在需要的旧信号会被自动的标记用来做代码删除,以及其他相关的数据。
有效的信号消耗管理保证了更多的学习在一开始就是正确的。这样就减少了减少了浪费和重复的工程努力,节省了很多工程时间。在运行学习算法之前为了正确性验证配置消除了不可用模型,可能的资源浪费这样的情况。
9.失败的实验
最后一部分,我们简单的报告一些不会带来显著回报的探索方向。
9.1Aggressive Feature Hashing
近几年有很多围绕特征hashing化来减少大型学习系统的RAM。值得一提,[31]报告了一个用哈希技巧组织一个特征空间使得学习dfweg///////
他们用了这种方法但是发现他们不能。这种方法没有令他们得到节省,他们更喜欢用interpretable的可判断的,可分析的特征向量来代替。
9.2 Dropout
他们尝试了随机丢弃的技术[17]。主要思想是从输入样本向量中以概率p随机丢弃特征,通过概率因子(1-p)缩放结果的权重来对这个做补偿。这被看做一种在可能的特征子集上仿真打包的正则化。
我们试过从0.1到0.5的丢弃率,每个伴随学习率设定,包括改变通过数据的数量。在所有情况下,我们发现丢弃训练不会对预测的准确性或者一般化能力,提供好处,通常只会提供损害。【This is obviious,jinmei said】
我们+++///
9.3特征打包
另一个我们有投入的和dropout一起的训练变量是特征打包,在k个训练模型在k个overlapping的子集上的特征空间上训练。
最后的结果取每个模型预测结果做平均,这中方法在数据挖掘社区被广泛的使用,最值得一提的是决策树[9],提供了一种权衡偏差的方法。我们对这个感兴趣还因为它提供了可能的将来平行化训练的有用方法。然而,我们发现特征打包实际上轻轻地降低了预测的质量,根据打包scheme,AcuLoss在0.1%~0.6%之间。
9.4特征向量正规化
我们的模型中每事件的非零特征变的特别厉害,导致含有不同量级的特征抽样。我们担心这样的变化可能回减缓收敛速度并且影响预测的准确性。我们探索了几个例子通过训练x/|x|,目标就是减少数量及交叉的样本向量中方差。尽管一些早期的结果显示一些小的精确性的增加但是我们不能把这些搬运到整体的positive 度量中。实际上我们的实验看起来有些detrimental是有害的,可能是因为和per-coordinate 学习效率和正则化的交叉的缘故。
【完】