機器學習領域的學生、研究員、企業開發者都習慣了在模型的優化上花大量功夫,仿佛取得更高的準確率/AUC/mAP 等等就是機器學習研究和應用的全部。但是很少有人去問:測試表現優秀的模型就真的能很好解決真實世界的問題嗎?
可解釋的機器學習方向的研究員、《可解釋的機器學習》書作者 Christoph Molnar 近日就發表了一篇博客,提醒領域內的各位警醒這種風氣,開始注意機器學習的應用中那些不應該被忽視的問題。。
先講一個小故事。
德國某處,一個安靜的夜里。大多數人都已經沉沉睡去,但我沒有。我得把機器學習模型訓練完。我在和全世界和我一樣對模型著迷的人比拼,我們要看看到底誰的模型能得到最好的預測結果。我電腦的風扇在嗡嗡地響,鍵盤也被我敲得咯咯吱吱。我目前的模型沒拿到什么好名次,在公開排行榜上排在中間而已。真讓人來氣。模型的準確率其實還過得去,但在這個比賽里,「還過得去」是遠遠不夠的。比所有其他人的模型都好,才是我最終的目標。我還需要更好的特征工程、更好的學習算法。我已經有了一個建立新的特征的好點子,而且我還可以把隨機森林換成增強樹。訓練這個模型應該只需要半個小時時間,然后我就必須去睡覺了。
好幾個小時過去了,現在的時間是凌晨三點半。我終于得到了新模型的預測結果,可以沖擊排行榜上的新位置了。我滿懷希望地點了提交按鈕。我已經很累了,「你的結果正在被評估」的提示看起來都那么模糊。我能到多少位呢,能到前 10% 嗎?我開始甜蜜地遐想。但真正的結果很快打碎了我的幻象,這一刻我感覺到前所未有地疲憊。別說得到更好的名次了,這個新模型的表現還不如上一個模型。代碼里有 bug?過擬合了?還是我上傳錯文件了?我腦中有一個又一個的問題冒出來,但是理智告訴我自己必須要躺下了。我在床上翻來覆去,然后夢見了一個不停增長、大到我永遠沒法理解的決策樹。
「我得繼續改進我的機器學習模型!」
掀開眼罩看一看
我自己也曾有過類似這樣反復折騰機器學習比賽用的模型直到深夜的經歷,現在我已經不會再這么做了,原因有兩個,1,正常的睡眠現在對我來說重要得多,2,我對機器學習的認識也有了很大變化。
當我一開始接觸機器學習的時候,我認為最重要的機器學習技能就是知道如何訓練出表現最好的模型。為了達到這個目標,我把全部的精力都用來學習更多的算法、更多的特征工程技巧、更多的算法評估方法,一切都是為了讓模型的誤差立刻降下去。我如此地沉迷,以至于我當年甚至為隨機森林寫了一首詩。
今天我的觀點有了很大變化。我覺得「機器學習」這四個字的含義遠不僅僅是把損失函數最小化。某種程度上,模型的擬合可以說是最簡單的部分了,因為有大批的文獻、教材、練習以及實用工具來幫你改善現狀。而且你也總能立刻得到反饋(只需要在模型沒有見過的數據上進行測試就行),總的來說很讓人滿意。我覺得,以機器學習整個領域來講,在模型擬合這方面已經發展得相當成熟了。但是除了擬合模型之外,我們還需要解決很多別的很困難的問題。比如:
如何把現實問題轉化為預測任務?
我們如何在預測模型中建立信任機制?
訓練數據是否含有偏倚?訓練數據和實際部署以后的輸入數據相似程度有多高?
如果系統的運行不太正常,如何為機器學習模型 debug?
模型給出的預測(尤其是錯誤的預測)會對用戶和產品本身造成什么樣的影響?
在當前的預測和未來會增添的訓練數據之間是否存在有害的反饋關系?
一個固定不變的模型在不斷變化的環境中會有怎么樣的表現?
狗展門口。- 「我的狗訓練得很好啊」-「不行!」
—— 這就是數據科學家們把最新的模型整合到真實世界的時候的樣子
我自己的觀點是,機器學習領域內的人們大多數都還只關心怎么優化模型,對我列舉的這種模型實際應用中會遇到的問題知之甚少。但好消息是總的來說大家越來越意識到這些問題的存在,也投入更多精力考慮這些問題了。系統性思維、可解釋性、公平性、社會影響、數據的角色等等問題都在得到越來越多的關注。
模型的誘惑
我剛開始做機器學習的那幾年有一則趣事。我那時候剛加入一家創業公司,負責機器學習相關的幾個應用。那時候我的編程水平不如團隊里其它的成員,不過我問了很多問題,比如問他們訓練用的數據和之后在應用里使用的數據是否類似。我的導師表揚我提了一些好問題,但我自己沒明白他為什么要表揚我,顯然我那時候心里更在乎的是「我怎么還沒學會用 Scala 語言編程」;而且我還覺得,知道怎么構建更厲害的預測模型要比提出這些問題更重要。直到現在我才能完全理解我的導師為什么要表揚我。
經過了五年時間我才終于明白了,「擬合出最佳的機器學習模型」這件事的影響有多小。可明白這個為什么要花五年呢?簡單來說,所有的機器學習教學和科研都太過于關注「最好的模型」,因此也就忽視了數據、忽視了人的因素,也忽視了預測模型與所在環境的復雜相互作用。
展開來說的話,讓我們通過一個假想的機器學習新人感受一下吧。她的名字叫 Anna,她現在在讀電子工程的碩士,有扎實的數學基礎,也能夠用 C 和 Python 語言寫代碼。她的機器學習入門第一課是吳恩達的機器學習在線課程,同時她還在看《統計學習基礎(Elements of Statistical Learning)》這本書。和其它所有的教學材料一樣,在線課程和書里都是一個接一個地列出各種模型,并且詳細介紹模型背后的數學原理。它們幾乎不會提到如何認識數據、如何考慮社會和道德影響、如何解釋模型、模型的應用場景等等問題。她當然會看到一些應用案例,但這些案例都只不過是經過精心設計的簡單理想問題而已。
過了一段時間以后,她開始參加 Kaggle 上的各種比賽。再一次地,她在 Kaggle 上也看到各種經過精心設計的預測問題,簡直是喂到嘴邊了:在我們看到的比賽背后,Kaggle 已經把最難最累的活都做完了,先尋找企業、數據、問題,把問題轉化成預測任務,然后考慮要用哪些數據,可能還需要做一些數據清理和合并,再選一個模型評價標準,這些都由 Kaggle 包辦了。那對于參加 Kaggle 比賽的人來說,給他們剩下的事情除了特征工程以外,當然就只有「擬合出最好的模型」這一件事了!贏走了比賽獎金的都是誰呢?不是模型表現優良、有可解釋性的團隊,不是當別人要花幾天訓練的時候他們只需要幾秒鐘的團隊,不是模型真的有機會部署在生產環境中的團隊,因為這些模型的預測準確率注定不會是最高的。所以 Anna 也就跟著相信,機器學習就只不過是找到預測表現最佳的模型,而且這個信念越來越牢固。這不是開玩笑,大家都看得到,得到了獎金和榮譽的就是那些能做出預測表現最佳的模型的人,
所以 Anna 對機器學習的熱情也跟著被點燃了,她想要在下一個比賽中拿到更好的名次!幸運的是,機器學習社區很棒、很開放,有很多討論如何調試模型表現的技術博客可以供她學習,也有很多最新的機器學習庫可以讓她從 GitHub 上克隆使用。她終于明白:機器學習就是擬合出最好的模型。
Anna 也開始意識到機器學習這個領域有多么年輕、學術界和工業界的聯系又有多么緊密。為了了解最前沿的技術,她開始閱讀機器學習的學術論文。從哪里開始呢,嗯,當然是讀引用數最高的論文了!那么哪些論文引用數高呢?當然是研究常見科研任務模型的論文和各種機器學習框架的論文了……
數據科學家們的畢生夢想:一個模型,解決一切(就像魔戒的「一枚戒指,統治一切」)
可以說,在 Anna 的這一路上,她都時時刻刻在感受到這條最簡單的信息:想要做好機器學習,你就需要深入研究建模算法(以及一些特征工程的技巧)。而除此之外的方面,幾乎見不到人提起。
擬合模型不是唯一重要的環節
說了這么半天我想已經說明白了,只會贏 Kaggle 比賽是不足以稱得上機器學習專家的。那欠缺的知識都是什么呢?以我的淺見,下面這些課題的重要性被完全忽視了,整個機器學習領域都需要開始注意這些問題。
問題的格式化:把一個實際問題轉化為一個預測或者模式識別問題。
數據生成過程:理解數據,明白數據在解決問題中的限制和適用性。
模型解釋:用交叉驗證的性能估計方法之外的方式分析模型
應用場景:思考模型會如何和真實世界相互影響
模型部署:把模型集成到產品或者計算過程中
這里只是簡單列了幾項,大家可以繼續補充。
你完全有可能在擬合出了最好的模型之后在這幾個方面犯錯,然后你的模型就會變得沒用,甚至變得有害。當你的訓練數據和應用中的實際數據不匹配的時候,你的模型可能根本給不出正確的預測結果。當你的高管擔心模型是個黑盒子所以拒絕使用它的時候,你得拿出白板想方設法給他們解釋。假如你發現你的模型對不同膚色的人有偏倚,那你最好別使用這個模型。
只要你把問題的格式化、數據、解釋、場景和部署做好,你的項目就可以非常成功了,你的模型預測準確率很一般都沒關系。其他方面如果做不好,那么即便是調試很久的、在測試數據上完美無缺的集成模型也只能被扔進垃圾桶。
做錯容易,做對很難
機器學習模型完全可以有好的預測表現,但是帶來的影響和人們預期的相反,我給大家講個故事來說明一這點。我有個朋友在一家電信公司工作,這家公司的業務之一是銷售移動通信套餐(通話+短信+流量)。他在公司的數據科學團隊工作,然后公司想要預測哪些客戶最有可能不繼續使用套餐,他也是這個項目的成員;做這個預測的目標是給可能不再繼續使用的客戶提供性價比更高的套餐。那么,這個項目團隊就著手構建了一個機器學習模型,這個模型分辨用戶的能力也相當不錯。然后他們把高概率的用戶列出來,給到另一個團隊,這個團隊會和這些用戶逐一聯系,給他們提供更優惠的套餐。
那么結果呢?取消這家公司套餐的人更多了,而不是更少了!
事后他們才意識到,他們逐一聯系那些有可能不再使用他們的服務的用戶,這提醒了對方不能繼續使用這家公司的套餐。聯系用戶的舉動反倒成了使得他們最終解約并轉向別的運營商的導火索。
為什么不對勁了?從一開始他們嘗試把實際問題變成預測問題的時候就出錯了。他們的模型預測了「客戶 X 解約的可能性如何」,但他們實際上需要預測的是「當我們聯系客戶 X 的時候他解約的可能性如何」。這也可以看做是和應用場景相關的問題,他們沒有仔細考慮聯系已經有了解約心思的人之后的后果到底是什么。這個例子里,模型構建可以得 10 分,但問題的格式化和應用場景考慮只能得 1 分。
別以為你的隊友們就靠得住
那么是不是只有初學者才會在用機器學習解決真實世界問題的時候犯錯?當然不是。想要學習擬合模型之外的機器學習技能,最好的方法就是參與解決真實世界的問題。不過這還不算完,你必須真的希望自己在擬合模型之外的方面也變得更厲害。
只有經驗是不夠的。谷歌、亞馬遜之類對機器學習有大規模長期投入的企業,是不是就掌握了模型優化之外的方方面面了呢?其實也沒有。即便他們有那么多博士、有那么多資金、有那么多經驗、有那么多數據、那么多技術特長,他們也還沒能完全弄清楚。實際上他們也還在犯一些很蠢的錯誤,因為在真實世界任務中應用機器學習就是很難。
我舉幾個大公司用了機器學習然后搞砸了的例子:
谷歌照片(Google Photos)會把黑人分類為黑猩猩。然后他們的解決方案是不再讓模型預測黑猩猩這個類別。這就好像你家的墻漏水了,你貼了張墻紙遮住了事,而不是找你樓上的鄰居談談。
谷歌流感預測(Google Flu Trends)會高估流感的發生幾率。他們已經下線了這個產品。它的工作方式是關注那些和流感發生有很高相關性的詞語,然后似乎把「高中籃球」之類的完全沒有因果關系的詞也學進去了。
亞馬遜建立的招聘工具有性別偏倚。亞馬遜拿自己的招聘數據訓練了模型,然后模型就簡單直接地反映出了亞馬遜在招聘時的性別偏倚(也就是說,更傾向于招男性)。所以他們一直都沒有使用這個工具。但同時他們的潛臺詞是:我們不用這個工具就沒事,當前確實存在的性別偏倚也就當作不知道了。和上面一樣,貼墻紙遮住了事。
為什么不用數據簡化你的生活呢?為什么不?
如果工作里沒有什么反饋告訴你做的對不對、做的好不好,你可能會覺得很疲憊。尤其是做學術研究,或者你沒有直接上級的時候,不確定自己現在做的事情有多大意義是挺常見的一件事。如果有個老板或者上級告訴你應該做什么,感覺上會輕松一點,但是我偷偷跟你講個實話,沒人能真的弄明白。不管你做了十幾年還是幾十年,不管你有多少社會閱歷,你都不可能從某一天開始就對這個世界上的一切都一清二楚。
有一種解決辦法是用數據度量你的進展,這會給你提供一些反饋。可以算是通向成功的指標吧。
「今天我讀了 5 篇論文。」
「這周我做完了一個 10 頁的報告。」
「我的網站這個月有 10k 訪問量。」
「今年我拿到了 20k 的獎金。」
某種程度上,用數字度量成功是一種很棒的方法,能幫你簡化工作、幫你更高效地工作。不過這些數據也過于簡化了「成功」這件事,怎么可能把所有條件用簡單的幾個數字就表示出來呢。
比如你收入很高,但你不喜歡你的工作內容。那你還成功嗎?
比如你的論文經常被引用,但你對真實世界還沒造成什么實際的影響。那你還成功嗎?
比如你有上千個關注者,但是沒有人在看完你的動態之后點贊留言。那你還成功嗎?
比如你在機器學習競賽中取得了很靠前的名次,但是你偷偷利用了數據里的漏洞,就和其它排在前面的參賽者一樣。那你還成功嗎?
其實很難說什么時候要為了達成某個數字而努力,什么時候又不要。在我看來,如果要在「達成數字」和「難以測量的工作」(比如研究新的產品,而不是賣更多舊產品)做一個取舍的話,整個社會的口味都嚴重偏向于達成數字的那一邊。機器學習領域也是一樣。
當我覺得某人仿佛在「為達成某個數字而努力」的時候,我腦海里會浮現出賽馬的景象。有一匹很漂亮、很強壯的馬, 經過人們的訓練它可以跑得很快。然后如果它在比賽里獲得了好的名次,人們就會給它獎勵胡蘿卜吃(我不太確定馬是不是特別愛吃胡蘿卜,不過為了方便我講故事,我們暫且認為馬最愛吃的就是胡蘿卜吧)。為了讓馬的注意力完全集中在目標上,人們給馬眼睛上戴了眼罩,它會遮住馬對左右兩側的視野,讓它們只看得到前面。現在我們就是這些賽馬,我們每個人都帶著眼罩,讓我們只能「盲目」地為了評價指標而努力。但是很多時候,如果我們左右看看的話,也許賽道邊上就是一片無人照看的胡蘿卜地。
作為機器學習這個領域內的成員,我們已經在錯誤的機器學習比賽里面比拼了太久了。我們得摘掉頭上的眼罩。所以我寫了這篇博客,希望能啟發更多人摘掉自己的眼罩,以及希望這個領域的關注點能夠不再局限于模型表現,而開始更多地關注數據、解釋性、應用場景以及社會影響。
-
模型
+關注
關注
1文章
3286瀏覽量
49010 -
機器學習
+關注
關注
66文章
8434瀏覽量
132875 -
數據科學
+關注
關注
0文章
165瀏覽量
10081
原文標題:不要只關心怎么優化模型,這不是機器學習的全部
文章出處:【微信號:CAAI-1981,微信公眾號:中國人工智能學會】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論