2021 年了,爲啥還有人在用 LR?

作者 | 梁唐

出品 | 公衆號:Coder 梁(ID:Coder_LT)

大家好,我是梁唐。

今天來和大家聊聊一個上古模型——LR。

關於 LR 模型,之前其實寫過不少文章了,剖析過原理,也做過公式推導。今天這篇文章主要來聊聊 LR 模型應用相關的一些理解。

王喆大佬在《深度學習推薦系統》一書當中對於 LR(邏輯迴歸)模型的評價非常高,說它曾經在相當長的一段時間裏是推薦系統、計算機廣告業界的主要選擇之一。

不僅如此,就我瞭解到,即使是現在 2021 年了,國內依然有不少公司還在用 LR。所以 LR 模型雖然簡單,但是圍繞着它的討論點卻很多,有非常多值得我們討論和思考的地方。

LR 的長處

如果在面試的時候面試官問你,說說 LR 模型有哪些優點。估計稍微瞭解一點的同學都能侃侃而談上不少。像是什麼實現簡單、模型運行效率高、可解釋性強云云,但如果仔細問題,爲什麼運行效率高,爲什麼可解釋性強,這些優勢究竟有什麼作用?估計能答上來的要少不少。

我們從原理出發,一條一條來說。

運行效率高

一般來說,線性模型的運行效率都不低。但 LR 依然可以說是線性模型當中效率最高的幾個模型之一,可能只有線性迴歸模型比它更快。我們來看下 LR 的公式:1oPA3K

寫成向量形式就是:rpIOCx

對於多條樣本來說,我們想要預測它們的結果,只需要做一次矩陣乘法,然後再過一下sigmoid函數即可。矩陣相乘的操作是可以並行計算的,因此程序運行的效率是非常非常高的。

可解釋性強

LR 模型可以簡單理解成各個特徵的加權和,然後再過一層 sigmoid 函數,sigmoid 函數的取值範圍剛好是 0 到 1,也符合我們對於 CTR 的直觀認識。

另外 sigmoid 函數是一個單調遞增函數,也就是說它的結果和特徵以及特徵權重之間是正相關的。不同的特徵重要程度不一樣,也就意味着對於結果的影響程度不一樣。權重越大往往說明特徵越重要,對於結果的影響也越大。

如此一來,模型的可解釋性就很強,我們只需要看一眼特徵權重的分佈,就能知道什麼特徵比較重要,什麼特徵影響很小。在模型出了偏差的時候,我們也很容易溯源,找出導致問題的原因。

易於特徵工程

我們知道 LR 模型的輸入是一個各個維度的特徵向量,輸出的結果是這個向量加權之後經過 sigmoid 函數的值。很容易想到,如果我們輸入的特徵全爲 0 或者 1,那麼得到的結果其實就是權重的求和結果。

01 特徵也叫 one-hot 特徵或者是 sparse 特徵,一般長度短的做 one-hot 長度較長的做 sparse。簡單解釋一下,比如說我們現在要對類目 id 做 one-hot,類目一共有 100 種,當前的類目 id 是 10。那麼做完 one-hot 之後,將會得到一個長度爲 100 的向量, 它的第 10 位爲 1,其餘全爲 0。

顯然這樣的方式會比較浪費空間,因爲大部分都爲 0,只有極少維度爲 1。所以我們可以沒必要存儲整個 01 的向量,就記錄爲 1 的維度即可,這樣可以節省大量的空間。這種 01 向量的表達方式稱爲 sparse 類型,也就是稀疏類型。

在推薦領域,我們通常會傾向於使用 one-hot 和 sparse 特徵。因爲這樣可以消除數值帶來的偏差,舉個例子,比如說我們要用物品的價格作爲特徵。那麼就有一個問題,物品的價格分佈是非常不均勻的,便宜的物品可能只有 1 塊錢,而貴的物品可能好幾萬。如果我們直接用價格作爲特徵,這些特別貴的物品顯然會對權重產生極大的影響,這樣的偏差會對模型的結果產生巨大的噪聲。

爲了消除這樣的噪聲,比較好的做法是根據價格分段。比如 0-100 分爲一段,100-200 爲一段,200-100 爲一段…… 分段之後,價格這個取值範圍極大,並且爲浮點型的特徵就被轉化成了一個 01 組成的 one-hot 特徵。這樣不論價格高低,對於模型參數的影響都是一樣的。

還有一個原因是一些特徵不適合作爲浮點型(dense)特徵,比如說時間。有一個行爲發生在 5 點,有一個行爲發生在 10 點,如果我們直接拿時間作爲特徵的話。因爲共享權重,所以 10 點這個值的影響是 5 點的兩倍。但是我們知道,時間和時間之間是沒有倍數關係的。10 點和 5 點表示的是兩個不同的時間而已,本身並沒有數學上的任何關聯。

在推薦領域,我們常常會生成一些交叉特徵使用。比如用戶性別和物品類別的交叉,用戶標籤和物品標籤的交叉。所謂的交叉特徵,其實就是類別和類別的特徵做笛卡爾積。比如說用戶的某個特徵有 01 兩個取值,而物品的某個特徵有 [012] 三種取值,交叉之後的結果就是 2 x 3 = 6 種取值。

通過特徵交叉,我們可以生成一些更高信息維度的特徵,進一步提升模型的能力。一般做交叉的都是 one-hot 和 sparse 類型的特徵,交叉之後的結果也同樣爲 one-hot 或 sparse 類型。前面也介紹過,LR 模型非常適合使用 one-hot 以及 sparse 類型的特徵。所以兩者相得益彰,給了 LR 模型繼續更新的動力。

在 GPU 沒有流行之前,很多公司的算法工程師的主要工作就是人工生成一些交叉特徵餵給 LR 模型,以希望模型能夠學到更多高維的信息,提升效果。在有着大量人工生成的特徵的加持下,LR 模型的效果還算可以。也正因此,給 LR 模型續命了很久,直到深度神經網絡興起之後,才逐漸被淘汰。

易於分佈式訓練

早年在 GPU 流行之前,計算資源是非常寶貴的。在大數據場景下,每天動輒 TB 的數據。在這個量級下,模型的訓練開銷和服務開銷都是非常可觀的。唯一可行的辦法就是分佈式多機訓練,利用多臺機器並行訓練提升訓練速度。

我們知道,LR 模型的參數非常簡單,就是一維的權重向量,所以它非常適合做分佈式的訓練以及部署。而很多其他的模型比如 GBDT、Adaboost 等,由於模型結構的限制,導致了無法並行訓練。而 one-hot、sparse 特徵爲主的特徵集導致了隨機森林等樹模型很難擁有良好的效果。所以在這種場景下,使用 LR 並不是一個糟糕的選擇。

簡單講一下分佈式訓練的原理,首先選擇一臺機器作爲主節點,其餘的機器作爲副節點。每個節點在訓練的時候不會直接更新,而是會將得到的梯度傳給主節點。主節點在拿到所有副節點傳來的梯度之後求平均,再返回給副節點。副節點得到主節點傳回的梯度之後更新參數,這樣可以保證每一個節點的模型的參數都是一樣的。

LR 的劣勢

很有意思的一點是,很多時候長處和短處其實是一體兩面。

一個明顯的優點,反過來理解也是它的缺點。比如說模型結構簡單,可解釋性強是 LR 的優點。但反過來理解,也是一個短板。畢竟模型節點會導致模型的擬合能力不夠,很難學習到一些高階的信息,非常依賴特徵工程。

我們知道特徵工程是非常依賴人力的,需要做大量的數據處理,以及進行大量的實現才能取得一點點提升。因此 LR 的部署和搭建都非常簡單,但想要進一步作出效果得到提升則很難。越往後邊際效應越明顯。在神經網絡興起之後,多層神經網絡強大的表達能力很快就秒殺了 LR。沒幾年的時間,幾乎已經看不到 LR 的蹤跡了。

不過在一些要求強可解釋性特殊場景下,LR 模型依然沒有完全淘汰。比如金融、風控等場景,這些場景不求模型效果有多好,但求儘量少地出問題,以及出了問題之後能夠找到原因解釋,這一點神經網絡模型就無法辦到。

對於算法學習者或者是推薦領域的從業者來說,是 LR 模型入手是一個非常好的選擇。因爲很多時候有了對比才有感悟,再說了,只有工程師的水平高低,沒有模型本身的高下之分。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mj-TDeAhpKOymJSmKwb5dQ