当前位置: 首页 > 科技观察

TensorFlowLattice-Flexible,Controlable,InterpretableMachineLearning

时间:2023-03-13 01:35:26 科技观察

大多数机器学习从业者都遇到过训练数据和运行时用来评估模型的样本有很大不同的情况。因此,相对灵活的机器学习解决方案(例如DNN和随机森林)依赖于仅依赖训练数据的模型,并且在训练和验证数据集未涵盖的输入空间中经常表现出意外甚至疯狂。在可能违反重要政策和公平约束的情况下,这个问题变得尤为严重。不受约束的模型可能在仅由少数训练示例覆盖的输入空间中表现出意想不到的行为。如图所示,深度神经网络和梯度提升树的预测结果与测试集的真实结果相差甚远。尽管正则化通常可以带来更稳健的推理结果,但标准的正则化工具无法确保模型在所有输入空间中都能合理地执行,尤其是当输入空间是高维时。切换到一个简单、可控且行为可预测的模型是以严重的模型准确性为代价的。TFLattice可以通过一些具有语义意义的常识或策略驱动的形状约束,通过一些选项将领域知识注入学习过程,同时采用(高精度)灵活模型。例如,您可以指定模型的输入应该相对于给定的输入单调递增。这些额外的领域知识可以帮助模型学习训练数据之外的知识,让模型的行为对用户来说是可预测和可控的。TensorFlowLatticeLibrayTensorFlowLattice是一个用于训练受约束的、可解释的基于栅格的模型的库。栅格是一种插值查找表,可用于近似数据中的任意输入-输出关系。以上示例是基于2个输入要素和4个参数的栅格函数。这4个参数是栅格函数在输入空间的4个角点的函数值;其他的函数值都是通过这些参数得到的插值。您还可以使用更高维的网格或更细粒度的网格参数来获得更灵活的函数。该类库利用Keras图层对象tfl.layers.Lattice来实现上述栅格。TensorFlowRaster还提供了一个分段线性函数(tfl.layers.PWLCalibrationKeras层)来校准和归一化输入特征到栅格函数可接受的输入范围:上面的栅格示例是0到1。对于分类特征,TensorFlowRaster提供分类型校准以获得相似的输出边界,以便于输入到栅格中。结合上述校准器和栅格我们将得到校准后的栅格模型。TensorFlowLattice层提供了许多类型的约束,可用于将领域知识注入模型的训练过程:单调性:您可以指定模型输出应相对于输入单调增加或减少。在我们的例子中,您可能希望在预测用户对咖啡店的偏好时将模型限制为相对距离单调递减,即距离越远,用户对咖啡店的偏好越低。ConvexityandConcavity:您可以指定函数的形状是凸的还是凹的。结合单调性,限制凸性和凹性可以强制函数表征属性,例如相对于给定特征的收益递减。单峰性:可以指定函数是单峰的还是单峰的。这使您可以获得具有预期功能最佳点的功能。PairwisePositiveConfirmation:此约束表示一个输入特征在语义上增加了另一个特征的置信度。例如,评论数量较多的餐厅将更有信心获得较高的平均星级。但是当评论数量很大时,模型会对星级评分更敏感(例如,相对评分和评论数量有更大的斜率)Pairwiseadvantage:这个约束表明模型应该把某个特征作为一个更重要特征(相对于给定的其他特征)。此属性是通过确保函数的斜率在主要特征上更大来实现的。除了形状约束之外,TensorFlowlattice还提供了一系列正则化器来控制函数在每个特征上的灵活性和平滑度。这些包括拉普拉斯正则化(更平坦的函数)、Hessian正则化(更多线性校准函数)、皱纹正则化(更平滑的校准函数)和扭曲正则化(更多成对线性栅格函数)。示例:访问排序此示例来自我们的端到端函数形状约束教程,该教程针对许多包含上述约束的估计器,开箱即用。假设我们的场景是确定用户是否会点击餐厅搜索结果。这是点击率预测任务(CTR)。给定的特征包括:AverageRating:一个数值特征,取值范围从1到5Comments:一个数值特征,取值范围从0到200LadderScore:一个分类特征,取值范围从“$”到“$$$$”,数据表示为0到3个缺失值是-1我们有以下领域知识来限制或取消我们模型的行为:模型的输出相对于平均评分单调递增模型相对于评论数量的输出单调较低且递增,但边际收益递减但评论数量较多时,模型应该有信心平均评级会更高与带有“$”的餐厅相比,用户通常更喜欢“$$”我们可以使用TensorFlowLattice提供的Keras层来创建校准的栅格模型。模型=tf.keras.models.Sequential()model.add(tfl.layers.ParallelCombination([#Feature:averageratingtfl.layers.PWLCalibration(#Inputkeypointsforthepiecewiselinearfunctioninput_keypoints=np.linspace(1.,5.,num=20),#Outputismonotoniclyincreasinginthisfeaturemonotonicity='increasing',#Thislayerisfeedingintoalatticewith2verticesoutput_min=0.0,output_max=1.0),#Feature:numberofreviewstfl.layers.PWLCalibration(input_keypoints=np.linspace(0.,200.,num=20),#Outputismonotonicallyincreasinginthis,#Featureincreasinging单调有递减的评论数convexity='concave',#Regularizersdefinedasatuple('name',l1,l2)kernel_regularizer=('wrinkle',0.0,1.0),#Thislayerisfeedingintoalatticewith3verticesoutput_min=0.0,output_max=2.0),#Feature:dollarratingtfl.layers.CategoricalCalibration(#4+1missingcategorynum_buckets=5,default_input_value=-1,#Partialmonotonicity:calib(0)<=calib(1)monotonicities=[(0,1)],#Thislayerisfeedingintoalatticwith2verticesoutput_min=0.0,output_max=1.0),]))model.add(tfl.layers.Lattice(#A2x3x2gridlatticelattice_size=[2,3,2],#Outputismonotonicinalinputsmonotonicities=['增加','增加','增加']#trust:moreresponsivetoinput0ifinput1increasesedgeworth_trusts=(0,1,'positive')))model.compile(...)上面的网格使得训练好的模型满足所有给定的约束条件,并且加入了额外的正则化使得模型更加平滑:我们将上面的还可以使用工具包提供的开箱即用的估算器来构建模型。请参阅我们的形状控制端到端Colab教程了解更多详情,其中也描述了上述约束所起的作用。和效果。TFLatticeKeras层可与其他Keras层一起使用,以创建部分约束或正则化模型。例如,栅格或PWL校准层可用于引用其他嵌入和Keras层的深度神经网络的最后一层。请参阅TensorflowLattice网站了解更多信息。有许多教程可以帮助您入门,例如形状约束、集成估计器、自定义估计器、Keras层等。同时,大家可以在TF开发者大会上观看我们的视频了解更多。(https://youtu.be/ABBnNjbjv2Q)