本文转自雷锋网,如需转载请至雷锋网官网申请受权。数据库
大多数的机器学习实践者都曾遇到过训练数据和实际运行时用以评估模型的样本差异很大的状况。所以,相对灵活的机器学习解决方案,如DNN和随机森林等,仅依赖于训练数据的模型,在训练数据集和验证数据集没有覆盖的输入空间的表现常常出乎意料甚至是疯狂的。这个问题在重要的政策和公平性约束条件可能被打破的案例下变得尤其严重。网络
没有被约束的模型在只有不多的训练样本覆盖的输入空间中,可能表现得出乎意料。如图所示,深度神经网络和梯度提高树的预测结果和测试集的真实结果相去甚远。机器学习
即使一般状况下正则化可以的到更稳妥的推断结果,但标准的正则化工具并不能确保模型在全部的输入空间里都表现的合理,特别是当输入空间的维度很高时。切换到简单、可控且行为可期的模型将以严重牺牲模型准确率做为代价。ide
TF Lattice使得在采用(高准确率)灵活模型的同时,经过一些选项,经过一些有语义意义的通识或是策略驱动的形状限制,向学习过程注入领域知识成为可能。例如,你能够指定,模型的输入相对于给定的输入应该是单调递增的。这些额外的领域知识能够帮助模型学习到训练数据之外的知识,而且使得模型的行为对用户来讲是可期、可控的。函数
TensorFlow Lattice 是一个类库用来训练有约束的、可解释的基于栅格的模型。栅格是一个插值查询表,能够用来近似数据中任意的输入-输出关系 。工具
上述例子是一个基于2个输入特征和4个参数的栅格函数,这4个参数是栅格函数在输入空间4个顶角的函数值;其余函数值是经过这些参数获得的插值。你也能够采用更高维度的栅格或者更细粒度网格参数来的到更灵活的函数。该类库利用Keras层对象tfl.layers.Lattice实现栅上述栅格。TensorFlow 栅格也提供了分段线性函数(tfl.layers.PWLCalibration Keras 层)来校准和规范化输入的特征到栅格函数可接受的输入范围:上述栅格例子是0到1。性能
针对分类的特征,TensorFlow栅格提供了分类类型的校准,获得相似的输出边界,以便于输入到栅格中。结合上述的校准器和栅格,咱们将获得校准后的栅格模型。学习
TensorFlow Lattice层提供了许多类型的约束,能够被用来向模型的训练过程注入领域知识:测试
单调性:你能够指定模型输出应该性对输入是单调递增或递减的。在咱们的案例里,你也许想要限制模型在预测用户对咖啡店的喜爱程度时相对距离是单调递减的,也就是距离越远用户对咖啡店的喜爱程度越低。大数据
凸性和凹性:你能够指定函数的形状是凸的仍是凹的。结合单调性,限制凸性和凹性可以强制函数刻画一些特性,如相对给定的特征收益递减。
单峰性:你能够指定函数是单峰的或是单谷的。这可让你获得相对某个特性具备预期的最佳识别点的函数。
成对正向印证: 这个限制代表一个输入特征,在语义上提升了另外一个特征更确信程度。例如,具备较高的评论次数的餐厅,将更有信心能获得较高的平均星级评分。但评论数量较大时,模型将对星级评分更加敏感(如相对评分和评论数有更大的斜率)
成对优点: 这个约束代表模型应该将某个特征视为更为重要的特征(相比于给定的另外一个)。该特性经过确保函数在支配特征上的斜率更大来实现。
除了形状约束以外,TensorFlow lattice 提供了一系列正则器来控制函数在每一个特征上的灵活性和平滑性。这包括拉普拉斯正则化(更平坦的函数),海森正则化(更加线性校准的函数),褶皱正则化(更加平滑的校准函数)以及扭曲正则化(更加成对线性的栅格函数)。
这个案例来自咱们端到端的函数形状约束教程,该教程涉及许多包含上面提到的约束条件的估计器,开箱即用。假设咱们的场景是肯定用户是否会点击某个餐馆搜索中获得的结果。这是一个点击率预估任务(CTR),给定特征包括:
平均评分:一个数值特征,取值从1到5
评论数量:一个数值特征,取值从0到200
阶梯评分: 分类特征,取值从“$”到“$$$$”,数据表示为0 to 3 缺失值为-1
咱们有以下领域知识来限制或空值咱们模型的行为:
模型的输出相对于平均评分是单调递增的
模型的输出相对评论数是单调低递增的,但边际收益递减
但有较高的评论数是,模型应该确信平均评分会比较高
相比于“$” 的餐馆,用户一般倾向于“$$”的餐馆
咱们能够利用TensorFlow Lattice提供的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开发者大会的视频了解更多。(https://youtu.be/ABBnNjbjv2Q)
【编辑推荐】
【责任编辑:张燕妮 TEL:(010)68476606】