TensorFlow Lattice:靈活、可控、可解釋的機(jī)器學(xué)習(xí)
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。
大多數(shù)的機(jī)器學(xué)習(xí)實(shí)踐者都曾遇到過訓(xùn)練數(shù)據(jù)和實(shí)際運(yùn)行時(shí)用以評(píng)估模型的樣本差別很大的情況。因此,相對(duì)靈活的機(jī)器學(xué)習(xí)解決方案,如DNN和隨機(jī)森林等,僅依賴于訓(xùn)練數(shù)據(jù)的模型,在訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集沒有覆蓋的輸入空間的表現(xiàn)經(jīng)常出乎意料甚至是瘋狂的。這個(gè)問題在重要的政策和公平性約束條件可能被打破的案例下變得尤為嚴(yán)重。
沒有被約束的模型在只有很少的訓(xùn)練樣本覆蓋的輸入空間中,可能表現(xiàn)得出乎意料。如圖所示,深度神經(jīng)網(wǎng)絡(luò)和梯度提升樹的預(yù)測(cè)結(jié)果和測(cè)試集的真實(shí)結(jié)果相去甚遠(yuǎn)。
即便通常情況下正則化能夠的到更穩(wěn)妥的推斷結(jié)果,但標(biāo)準(zhǔn)的正則化工具并不能確保模型在所有的輸入空間里都表現(xiàn)的合理,特別是當(dāng)輸入空間的維度很高時(shí)。切換到簡(jiǎn)單、可控且行為可期的模型將以嚴(yán)重犧牲模型準(zhǔn)確率作為代價(jià)。
TF Lattice使得在采用(高準(zhǔn)確率)靈活模型的同時(shí),通過一些選項(xiàng),通過一些有語(yǔ)義意義的通識(shí)或是策略驅(qū)動(dòng)的形狀限制,向?qū)W習(xí)過程注入領(lǐng)域知識(shí)成為可能。例如,你可以指定,模型的輸入相對(duì)于給定的輸入應(yīng)該是單調(diào)遞增的。這些額外的領(lǐng)域知識(shí)可以幫助模型學(xué)習(xí)到訓(xùn)練數(shù)據(jù)以外的知識(shí),并且使得模型的行為對(duì)用戶來(lái)說(shuō)是可期、可控的。
TensorFlow Lattice Librayy
TensorFlow Lattice 是一個(gè)類庫(kù)用來(lái)訓(xùn)練有約束的、可解釋的基于柵格的模型。柵格是一個(gè)插值查詢表,可以用來(lái)近似數(shù)據(jù)中任意的輸入-輸出關(guān)系 。
上述例子是一個(gè)基于2個(gè)輸入特征和4個(gè)參數(shù)的柵格函數(shù),這4個(gè)參數(shù)是柵格函數(shù)在輸入空間4個(gè)頂角的函數(shù)值;其他函數(shù)值是通過這些參數(shù)得到的插值。你也可以采用更高維度的柵格或者更細(xì)粒度網(wǎng)格參數(shù)來(lái)的到更靈活的函數(shù)。該類庫(kù)利用Keras層對(duì)象tfl.layers.Lattice實(shí)現(xiàn)柵上述柵格。TensorFlow 柵格也提供了分段線性函數(shù)(tfl.layers.PWLCalibration Keras 層)來(lái)校準(zhǔn)和規(guī)范化輸入的特征到柵格函數(shù)可接受的輸入范圍:上述柵格例子是0到1。
針對(duì)分類的特征,TensorFlow柵格提供了分類類型的校準(zhǔn),得到類似的輸出邊界,以便于輸入到柵格中。結(jié)合上述的校準(zhǔn)器和柵格,我們將得到校準(zhǔn)后的柵格模型。
TensorFlow Lattice層提供了許多類型的約束,可以被用來(lái)向模型的訓(xùn)練過程注入領(lǐng)域知識(shí):
- 單調(diào)性:你可以指定模型輸出應(yīng)該性對(duì)輸入是單調(diào)遞增或遞減的。在我們的案例里,你也許想要限制模型在預(yù)測(cè)用戶對(duì)咖啡店的喜好程度時(shí)相對(duì)距離是單調(diào)遞減的,也就是距離越遠(yuǎn)用戶對(duì)咖啡店的喜好程度越低。
- 凸性和凹性:你可以指定函數(shù)的形狀是凸的還是凹的。結(jié)合單調(diào)性,限制凸性和凹性能夠強(qiáng)制函數(shù)刻畫一些特性,如相對(duì)給定的特征收益遞減。
- 單峰性:你可以指定函數(shù)是單峰的或是單谷的。這可以讓你得到相對(duì)某個(gè)特性具有預(yù)期的最佳識(shí)別點(diǎn)的函數(shù)。
- 成對(duì)正向印證: 這個(gè)限制表明一個(gè)輸入特征,在語(yǔ)義上提高了另一個(gè)特征更確信程度。例如,具有較高的評(píng)論次數(shù)的餐廳,將更有信心能得到較高的平均星級(jí)評(píng)分。但評(píng)論數(shù)量較大時(shí),模型將對(duì)星級(jí)評(píng)分更加敏感(如相對(duì)評(píng)分和評(píng)論數(shù)有更大的斜率)
- 成對(duì)優(yōu)勢(shì): 這個(gè)約束表明模型應(yīng)該將某個(gè)特征視為更為重要的特征(相比于給定的另一個(gè))。該特性通過確保函數(shù)在支配特征上的斜率更大來(lái)實(shí)現(xiàn)。
除了形狀約束之外,TensorFlow lattice 提供了一系列正則器來(lái)控制函數(shù)在每個(gè)特征上的靈活性和平滑性。這包括拉普拉斯正則化(更平坦的函數(shù)),海森正則化(更加線性校準(zhǔn)的函數(shù)),褶皺正則化(更加平滑的校準(zhǔn)函數(shù))以及扭曲正則化(更加成對(duì)線性的柵格函數(shù))。
案例:參觀排序
這個(gè)案例來(lái)自我們端到端的函數(shù)形狀約束教程,該教程涉及許多包含上面提到的約束條件的估計(jì)器,開箱即用。假設(shè)我們的場(chǎng)景是確定用戶是否會(huì)點(diǎn)擊某個(gè)餐館搜索中得到的結(jié)果。這是一個(gè)點(diǎn)擊率預(yù)估任務(wù)(CTR),給定特征包括:
- 平均評(píng)分:一個(gè)數(shù)值特征,取值從1到5
- 評(píng)論數(shù)量:一個(gè)數(shù)值特征,取值從0到200
- 階梯評(píng)分: 分類特征,取值從“$”到“$$$$”,數(shù)據(jù)表示為0 to 3 缺失值為-1
我們有如下領(lǐng)域知識(shí)來(lái)限制或空值我們模型的行為:
- 模型的輸出相對(duì)于平均評(píng)分是單調(diào)遞增的
- 模型的輸出相對(duì)評(píng)論數(shù)是單調(diào)低遞增的,但邊際收益遞減
- 但有較高的評(píng)論數(shù)是,模型應(yīng)該確信平均評(píng)分會(huì)比較高
- 相比于“$” 的餐館,用戶通常傾向于“$$”的餐館
我們可以利用TensorFlow Lattice提供的Keras層來(lái)創(chuàng)建一個(gè)校準(zhǔn)的柵格模型。
- 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(...)
上述柵格使得訓(xùn)練得到的模型滿足所有給定的約束,并且額外添加的正則化使得模型更加平滑:
我們也可以通過工具包提供的開箱即用的估計(jì)器來(lái)構(gòu)建上述模型。請(qǐng)查閱我們的形狀控制端到端colab教程,來(lái)獲得更詳細(xì)的信息,該教程還描述了上述約束條件所起到的作用和效果。TF Lattice Keras層可以和其他Keras層一起使用來(lái)創(chuàng)建部分約束或正則化的模型。例如,柵格或PWL校準(zhǔn)層可以被用在引用了其他嵌入和Keras層的深度神經(jīng)網(wǎng)絡(luò)的最后一層。請(qǐng)參與Tensorflow Lattice網(wǎng)站獲得更多的相關(guān)信息。那里有許多教程能夠幫助你上手,如形狀約束、集成估計(jì)器、定制化估計(jì)器、Keras層等等。同時(shí)開可以觀看我們?cè)赥F開發(fā)者大會(huì)的視頻了解更多。(https://youtu.be/ABBnNjbjv2Q)