TensorFlow Lattice:靈活、可控、可解釋的機器學習
本文轉自雷鋒網,如需轉載請至雷鋒網官網申請授權。
大多數的機器學習實踐者都曾遇到過訓練數據和實際運行時用以評估模型的樣本差別很大的情況。因此,相對靈活的機器學習解決方案,如DNN和隨機森林等,僅依賴于訓練數據的模型,在訓練數據集和驗證數據集沒有覆蓋的輸入空間的表現經常出乎意料甚至是瘋狂的。這個問題在重要的政策和公平性約束條件可能被打破的案例下變得尤為嚴重。
沒有被約束的模型在只有很少的訓練樣本覆蓋的輸入空間中,可能表現得出乎意料。如圖所示,深度神經網絡和梯度提升樹的預測結果和測試集的真實結果相去甚遠。
即便通常情況下正則化能夠的到更穩妥的推斷結果,但標準的正則化工具并不能確保模型在所有的輸入空間里都表現的合理,特別是當輸入空間的維度很高時。切換到簡單、可控且行為可期的模型將以嚴重犧牲模型準確率作為代價。
TF Lattice使得在采用(高準確率)靈活模型的同時,通過一些選項,通過一些有語義意義的通識或是策略驅動的形狀限制,向學習過程注入領域知識成為可能。例如,你可以指定,模型的輸入相對于給定的輸入應該是單調遞增的。這些額外的領域知識可以幫助模型學習到訓練數據以外的知識,并且使得模型的行為對用戶來說是可期、可控的。
TensorFlow Lattice Librayy
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)