本文轉自雷鋒網,如需轉載請至雷鋒網官網申請受權。數據庫
大多數的機器學習實踐者都曾遇到過訓練數據和實際運行時用以評估模型的樣本差異很大的狀況。所以,相對靈活的機器學習解決方案,如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】