TensorFlow Lattice (TFL)

TensorFlow Lattice 是一个用于实现灵活、可控且可解释的基于格(lattice)模型的库。该库使您能够通过常识性或策略驱动的形状约束将领域知识注入到学习过程中。这是通过一系列可以满足单调性(monotonicity)、凸性(convexity)和成对信任(pairwise trust)等约束的 Keras 层来实现的。该库还提供了易于设置的预制模型

概念

本节内容是 《单调校准插值查找表》(Monotonic Calibrated Interpolated Look-Up Tables)(JMLR 2016)中描述的简化版本。

格(Lattices)

是一种插值查找表,可以近似表示数据中任意的输入-输出关系。它在输入空间上覆盖一个规则网格,并学习网格顶点处的输出值。对于测试点 \(x\),\(f(x)\) 由包围 \(x\) 的格值进行线性插值得到。

上面的简单示例是一个具有 2 个输入特征和 4 个参数的函数:\(\theta=[0, 0.2, 0.4, 1]\),它们是函数在输入空间角落的值;函数的其余部分由这些参数插值得到。

函数 \(f(x)\) 可以捕捉特征之间的非线性交互。您可以将格参数想象成设置在规则网格地面上的杆子高度,而生成的函数就像紧紧拉在四根杆子上的布料。

对于具有 \(D\) 个特征且每个维度有 2 个顶点的规则格,将有 \(2^D\) 个参数。为了拟合更灵活的函数,您可以沿着每个维度指定具有更多顶点的细粒度格。格回归函数是连续且分段无限可微的。

Calibration

假设上述示例格代表通过以下特征计算出的学习到的用户对当地咖啡店的满意度

  • 咖啡价格,范围为 0 到 20 美元
  • 距离用户的距离,范围为 0 到 30 公里

我们希望模型学习用户对当地咖啡店建议的满意度。TensorFlow Lattice 模型可以使用分段线性函数(通过 tfl.layers.PWLCalibration)来校准和标准化输入特征,使其处于格可接受的范围内:在上面的格示例中为 0.0 到 1.0。以下展示了具有 10 个关键点的此类校准函数的示例:

通常使用特征的分位数作为输入关键点是一个好主意。TensorFlow Lattice 的预制模型可以自动将输入关键点设置为特征分位数。

对于分类特征,TensorFlow Lattice 提供分类校准(通过 tfl.layers.CategoricalCalibration),具有类似的输出边界以馈送到格中。

集成(Ensembles)

格层的参数数量随着输入特征数量的增加呈指数级增长,因此无法很好地扩展到非常高的维度。为了克服这一限制,TensorFlow Lattice 提供了集成格,结合(平均)多个微型格,这使得模型能够随特征数量线性增长。

该库提供了这些集成的两种变体:

  • 随机微型格 (Random Tiny Lattices, RTL):每个子模型使用特征的随机子集(有放回抽样)。

  • Crystals:Crystals 算法首先训练一个预拟合模型来估计成对特征交互。然后它会对最终的集成进行排列,使得具有更多非线性交互的特征位于相同的格中。

为什么选择 TensorFlow Lattice?

您可以在这篇 TF 博客文章中找到 TensorFlow Lattice 的简要介绍。

可解释性

由于每一层的参数即为该层的输出,因此分析、理解和调试模型的每个部分都很容易。

准确且灵活的模型

使用细粒度的格,您可以用单个格层获得任意复杂的函数。在实践中,使用多层校准器和格通常效果很好,并且可以达到或超过类似大小的 DNN 模型的效果。

常识性形状约束

现实世界的训练数据可能无法充分代表运行时数据。灵活的机器学习解决方案(如 DNN 或森林)在训练数据未覆盖的输入空间部分经常表现出不可预测甚至狂野的行为。当可能违反政策或公平性约束时,这种行为尤其成问题。

尽管常见的正则化形式可以产生更合理的推断,但标准正则化器无法保证模型在整个输入空间(尤其是在高维输入下)的行为合理。转向具有更受控和可预测行为的简单模型可能会以牺牲模型准确性为代价。

TF Lattice 使得继续使用灵活模型成为可能,但提供了多种选项,通过语义上有意义的常识性或策略驱动的形状约束将领域知识注入到学习过程中。

  • 单调性:您可以指定输出仅随输入增加/减少。在我们的示例中,您可能希望指定到咖啡店的距离增加只能降低预期的用户偏好。

  • 凸性/凹性:您可以指定函数形状可以是凸的或凹的。与单调性混合使用,这可以强制函数表现出针对给定特征的边际递减效应。

  • 单峰性:您可以指定函数应具有唯一的峰值或唯一的谷值。这使您可以表示具有特征“最佳点”(sweet spot)的函数。

  • 成对信任:此约束作用于一对特征,并建议一个输入特征在语义上反映对另一个特征的信任。例如,评价数量越多,您对餐厅平均星级的信心就越高。当评价数量较多时,模型对星级的敏感度会更高(即对星级的斜率会更大)。

利用正则化器进行受控的灵活性

除了形状约束外,TensorFlow Lattice 还提供了许多正则化器来控制每一层函数的灵活性和平滑度。

  • 拉普拉斯正则化器:格/校准顶点/关键点的输出被正则化,使其趋向于其邻居的值。这会导致更平坦的函数。

  • 海森正则化器:它惩罚 PWL 校准层的一阶导数,使函数更线性

  • 皱纹正则化器:它惩罚 PWL 校准层的二阶导数,以避免曲率的突然变化。这使函数更平滑。

  • 扭转正则化器:格的输出将被正则化以防止特征之间的扭转。换句话说,模型将被正则化以趋向于特征贡献之间的独立性。

与其他 Keras 层混合搭配

您可以将 TF Lattice 层与其他 Keras 层结合使用,以构建部分受约束或正则化的模型。例如,格或 PWL 校准层可以用在包含嵌入或其他 Keras 层的深层网络的最后一层。

论文

教程与 API 文档

对于常见的模型架构,您可以使用 Keras 预制模型。您还可以使用 TF Lattice Keras 层创建自定义模型,或与其他 Keras 层混合搭配。查看完整 API 文档以获取详细信息。