TensorFlow Lattice:灵活、可控且可解释的机器学习
2020 年 2 月 10 日
发布者 Mahdi Milani Fard,Google Research 软件工程师

大多数机器学习从业者都遇到过这样的情况:训练数据与模型评估所使用的运行时查询看起来截然不同。因此,像 DNN 或森林这样的灵活机器学习解决方案,只依赖训练数据集,往往会在训练和验证数据集未覆盖的输入空间部分出现意外甚至疯狂的行为。这种行为在重要的策略或公平性约束可能被违反的情况下尤其成问题。
在训练数据覆盖率较低的地方,不受约束的模型可能会表现出意外行为。在这里,DNN 和 GBT 的预测与测试数据的真实情况相去甚远。
虽然常见的正则化形式可以带来更明智的推断,但标准正则化器无法保证在整个输入空间中合理的模型行为,尤其是在高维输入的情况下。切换到更简单、行为更可控和可预测的模型,可能会严重影响模型的准确性。

TF Lattice 允许您继续使用灵活的模型,但提供了多种选项,可以通过语义上具有意义的常识或策略驱动的形状约束,将领域知识注入到学习过程中。例如,您可以指定模型输出应相对于给定输入单调递增。这些额外的领域知识可以帮助模型超越训练数据集进行学习,并使其以用户预期和可控的方式进行行为。

TensorFlow Lattice 库

TensorFlow Lattice 是一个用于训练受约束且可解释的基于格子的模型的库。格子是一个*插值查找*表,可以逼近数据中的任意输入-输出关系。
上面的简单示例是一个在 2 个输入特征上且具有 4 个参数的格子函数,这些参数是函数在输入空间角点的值;函数的其余部分从这些参数插值得到。您可以使用更高维度的格子以及更细粒度的参数网格来获得更灵活的函数。该库使用tfl.layers.Lattice Keras 层来实现格子。

TensorFlow Lattice 还提供分段线性函数(使用tfl.layers.PWLCalibration Keras 层)来校准和规范化输入特征,以使其处于格子可接受的范围内:在上面的示例格子中为 0 到 1。
calibration distance and price graphs
对于分类特征,TensorFlow Lattice 提供分类校准(使用tfl.layers.CategoricalCalibration Keras 层),其输出边界类似于馈送到格子的边界。将校准器和上面的格子结合起来,我们可以得到一个*校准的格子*模型。

您可以对 TensorFlow Lattice 层施加多种形式的约束,以将您对问题领域的了解注入到训练过程中。
  • 单调性:您可以指定输出应仅相对于输入增加或减少。在我们的示例中,您可能希望指定到咖啡店的距离增加只会降低预测的用户偏好。
4 user preference by distance line graphs
  • 凸性/凹性:您可以指定函数形状可以是凸的或凹的。与单调性混合在一起,这可以强制函数表示相对于给定特征的收益递减。
  • 单峰性:您可以指定函数应具有唯一的峰值或唯一的谷值。这使您可以表示预期相对于某个特征具有最佳点的函数。
  • 成对信任:此约束表明一个输入特征在语义上反映了对另一个特征的信任。例如,较多的评论会让你对餐厅的平均星级更有信心。当评论数量较多时,模型对星级的敏感度会更高(即,对星级的斜率更大)。
  • 成对支配:此约束表明模型应将一个特征视为比另一个特征更重要。这是通过确保函数相对于支配特征的斜率更大来实现的。
除了形状约束之外,TensorFlow Lattice 还提供了一些正则化器,以便在每个特征的基础上控制函数的灵活性和平滑度。这些包括*拉普拉斯正则化器*(用于更平坦的函数)、*黑塞正则化器*(用于更线性的校准函数)、*皱纹正则化器*(用于更平滑的校准函数)和*扭转正则化器*(用于更共线的格子函数)。

示例:对餐厅进行排名

此示例来自我们的端到端形状约束教程,其中涵盖了许多上述带有罐装估计器的约束。想象一下,我们要确定用户是否会点击餐厅搜索结果。任务是根据输入特征预测点击率 (CTR)
  • 平均评级:范围为 1 到 5 的数值特征
  • 评论数量:范围为 0 到 200 的数值特征
  • 价格评级:一个分类特征,其值为“$”到“$$$$”,表示为 0 到 3,缺失值表示为 -1
我们有这些作为领域知识来限制和控制模型的行为
  • 输出相对于平均评级单调递增
  • 输出相对于评论数量单调递增,但收益递减
  • 当评论数量更多时,模型应更信任平均评级
  • 用户通常更喜欢“$$”餐厅而不是“$”餐厅

我们可以使用库提供的 Keras 层构建一个校准的格子模型
model = tf.keras.models.Sequential()
model.add(
   tfl.layers.ParallelCombination([
       # Feature: average rating
       tfl.layers.PWLCalibration(
           # Input keypoints for the piecewise linear function
           input_keypoints=np.linspace(1., 5., num=20),
           # Output is monotonically increasing in this feature
           monotonicity='increasing',
           # This layer is feeding into a lattice with 2 vertices
           output_min=0.0,
           output_max=1.0),
       # Feature: number of reviews
       tfl.layers.PWLCalibration(
           input_keypoints=np.linspace(0., 200., num=20),
           # Output is monotonically increasing in this feature
           monotonicity='increasing',
           # There is diminishing returns on the number of reviews
           convexity='concave',
           # Regularizers defined as a tuple ('name', l1, l2)
           kernel_regularizer=('wrinkle', 0.0, 1.0),
           # This layer is feeding into a lattice with 3 vertices
           output_min=0.0,
           output_max=2.0),
       # Feature: dollar rating
       tfl.layers.CategoricalCalibration(
           # 4 rating categories + 1 missing category
           num_buckets=5,
           default_input_value=-1,
           # Partial monotonicity: calib(0) <= calib(1)
           monotonicities=[(0, 1)],
           # This layer is feeding into a lattice with 2 vertices
           output_min=0.0,
           output_max=1.0),
   ]))
model.add(
   tfl.layers.Lattice(
       # A 2x3x2 grid lattice
       lattice_size=[2, 3, 2],
       # Output is monotonic in all inputs
       monotonicities=['increasing', 'increasing', 'increasing']
       # Trust: more responsive to input 0 if input 1 increases
       edgeworth_trusts=(0, 1, 'positive')))
model.compile(...)
最终训练得到的模型满足所有指定的约束,而添加的正则化使函数变得平滑
上面的模型也可以使用库提供的罐装估计器来构建。查看我们的形状约束教程,了解更多信息,其中包含一个端到端的 Colab,描述了每个所述约束的效果。TF Lattice Keras 层也可以与其他 Keras 层结合使用,以构建部分受约束或正则化的模型。例如,格子或 PWL 校准层可以在包含嵌入或其他 Keras 层的更深层网络的最后一层使用。有关更多信息,请查看TensorFlow Lattice 网站。有很多指南和教程可以帮助您入门:形状约束罐装估计器自定义估计器Keras 层。同时查看我们在 TF Dev Summit 上的演示

反馈

我们期待收到您对该库的想法和评论。对于错误或问题,请在Github 上联系我们。

鸣谢

此版本是在 Oleksandr Mangylov‎、Mahdi Milani Fard、Taman Narayan‎、Yichen Zhou‎、Nobu Morioka‎、William Bakst‎、Harikrishna Narasimhan‎、Andrew Cotter‎ 和 Maya Gupta 的贡献下完成的。

出版物

有关库中使用的模型和算法的更多详细信息,请查看我们关于格子模型的出版物
下一篇文章
 TensorFlow Lattice: Flexible, controlled and interpretable ML

- 发布者 Mahdi Milani Fard,Google Research 软件工程师

大多数机器学习从业者都遇到过这样的情况:训练数据与模型评估所使用的运行时查询看起来截然不同。因此,像 DNN 或森林这样的灵活机器学习解决方案,只依赖训练数据集,往往会在训练和验证数据集未覆盖的输入空间部分出现意外甚至疯狂的行为。...