畢加索的「公牛」和機器學習的「特征工程」

這裡是「王喆的機器學習筆記」的第十六篇文章,今天我們放松一下,先不聊嚴肅的機器學習模型和算法,因為很多同學反映“別再更新瞭,老子實在學不動瞭。。”,那就換個空間,聊聊畢加索的一幅畫吧。

矽谷創業教父Paul Graham在那本著名的“黑客與畫傢”裡面提到,黑客和畫傢本質上有很多相通之處。在筆者看來,畫傢創作出來的畫跟機器學習大神們提出的模型和理論也有相通之處,雖然我自己在兩個領域都隻能算得上入門,但誰也阻擋不瞭咱們自己表達感想嘛,這次就從畢加索一幅畫——公牛,聊一聊抽象派的理念和機器學習的特征工程有什麼相通之處。

公牛——畢加索 1946年1月17日

上面的畫就是20世紀最著名的抽象派畫傢畢加索於1946年1月17日(為什麼要精確到天,大傢後面會知道)完稿的畫作——公牛,寥寥幾筆,勾勒出公牛的“特征”。很多人可能會覺得也許小學生也會畫出上面的畫嘛,但大師和小學生的區別就在於,大師得出這個終稿的過程是對一個哲學命題的探究——到底什麼是“公牛”?到底缺瞭什麼“特征”就不再是“公牛”?而小學生如果可以畫出類似的畫作,那是他對世界認識的本能。也許結果是一樣的,但他們背後邏輯的深度是不同的。

敏感的同學肯定已經知道我為什麼會說這幅畫跟機器學習中的特征工程有密切的聯系瞭。因為畢加索在畫中留下的是決定一頭公牛為什麼是公牛的“特征”。而機器學習工程師工作的本質也是去偽存真,留下一堆數據中最重要的模式和特征,用最簡潔的方式描述這堆數據,從而發現埋藏在數據後的模型和本質規律。

雖然我不是畢加索,但我還是會從“小學生”的眼光看這幅畫的,在我眼裡,這幅畫留下的公牛最重要的特征有這麼幾個:

  1. 長長的犄角
  2. 長長的尾巴
  3. 寬大的身軀
  4. 粗短有力的後腿
  5. 不可或缺的小丁丁

有一些特征被極簡化甚至忽視瞭,比如公牛頭成瞭一個小小的圓圈,所以至少在畢加索的眼中,公牛的“小丁丁”遠遠比公牛的“頭”重要。而對於吃瓜觀眾來說,也沒有人會否認這幅畫描繪的絕對是一頭健壯的公牛,不是奶牛、老黃牛,更不是馬,不是鹿,絕對的一頭公牛。

我們可以說畢加索這位莫名闖入“機器學習”領域的算法工程師是合格的嗎?我覺得大師不僅是合格的,更是超越瞭平凡的,他訓練出的“模型”是異常卓越的。為什麼這麼說,我們做幾個有趣的試驗,看看改變幾個特征之後,公牛還是不是公牛。

就拿最不起眼的尾巴來說吧,把它剪短,會怎麼樣?

0a7f462a31c7808ff713cbc6d9a806fb剪短尾巴的“公牛”

還是公牛嗎?還有當初的霸氣嗎?我總覺得它像一隻體型肥胖的公羊。所以你不得不佩服畢加索這位算法工程師的功力,他不僅用“主成分分析”找到瞭最關鍵的維度,還精確計算出瞭特征的數值。

如果還覺得還不夠有說服力的話,我們再做一個試驗,把公牛的犄角截斷一點點。

a0d7c724dc727376a7053545177ba64a截斷犄角的“公牛”

截斷犄角的“公牛”還是公牛嗎?也許它是,但卻沒有當初那般斬釘截鐵瞭。因為少瞭幾分攻擊性,也許還是牛,卻多瞭點鹿和羊的規規矩矩的溫順感。

當然,肯定還有同學對“小丁丁”這個特征感興趣,我覺得這個試驗就不用做瞭,你說把一個公牛凈身之後,它還是不是公牛瞭。。

所以,畢加索做對瞭兩個事情讓公牛成為瞭公牛,一是找對瞭特征維度,二是找對瞭特征值。

就像程蝶衣對段小樓說的那句經典的“說好瞭是一輩子,差一年,差一個月,差一個時辰,都不是一輩子!”。我們套用到這裡就是“說好瞭是一頭公牛,差一尾巴,差一犄角,差一小丁丁,都不是一頭公牛!”,再精確點就是“說好瞭是一頭公牛,差一分米尾巴,差一厘米犄角,差一毫米小丁丁,都不是一頭公牛!”。這才是畢加索這位算法工程師找對瞭特征和特征值之後應有的興奮和自信。

僅此而已嗎?並不是,在我看來,我們還應該從這位優秀的“同行”大師身上學三件事情:

  1. 模型泛化能力的重要性
  2. 特征組合的重要性
  3. 直覺與經驗結合的調參能力

先說第一點,畢加索創作公牛的過程並不是一蹴而就的,即使他是“機器學習”的大師,也不可能第一次就直接訓練出接近完美的模型。讓我們看看他創作這幅畫作的過程:

c7b739a669ec1dc19329186e054f23d0公牛 畢加索 1945年12月5日

這是畢加索的於1945年12月5日創作的公牛初稿。它是“公牛”嗎?它是。它有什麼特征使之成為一頭公牛?too many。。

畢加索的訓練“公牛”這個模型的目的是什麼?他要探索的是一個哲學問題,到底什麼使公牛成為一頭公牛。這幅初稿是他的答案嗎?也許是,但離真相差的太遠。因為它太過具體,具體到我們不知道是不是因為皮膚的紋理造就瞭一頭公牛,還是跟馬沒什麼區別的眼睛造就瞭一頭公牛。

如果訓練到這步就貿然上線,會有一個致命的問題:

樣本中任何特征的特征值的改變,都可能會導致這個樣本不是公牛的結論。

比如你說這幅畫是公牛,難道去掉那些身上的紋理就不是公牛瞭嗎?顯然不是。而這個復雜模型必然會導致大量樣本的誤判,準確率高,召回率低,這就是模型“泛化”能力嚴重不足的問題。

顯然,畢加索是深知這一點的,正因為要提升模型的“泛化”能力,才有之後的十幾次調參甚至改變模型結構的過程。

畢加索的十一次公牛創作

意識到“泛化能力”差這個問題之後,畢加索經過十幾次的連續創作,才最終得到瞭我們上面看到的抽象主義作品——公牛。也許這不是全局最優解,但絕對是非常接近真相的局部最優解之一。

第二點,為什麼說特征組合是重要的?

在構建模型的時候,我們總說線性模型的表達能力是弱的,特征組合和特征交叉能夠保留更多信息,為什麼?畢加索給瞭我們答案,在公牛的終稿中,他保留瞭五個特征:

  1. 長長的犄角
  2. 長長的尾巴
  3. 寬大的身軀
  4. 後腿粗短有力
  5. 小丁丁

你能說滿足其中四個條件的樣本就是“公牛”嗎?通過之前對於終稿的修改,我們已經非常明確的知道答案是否定的。隻有滿足這五個特征組成的“組合特征”,這才能是一頭公牛。

因此,我們不能割裂的看這五個特征,而是始終把他們作為組合特征放入模型,但遺憾的是,線性模型不具備組合特征的能力,這是畢加索給我們上的第二課。

第三點,畢加索教會瞭我們應該如何調參。

無數人說過機器學習的調參過程是一個煉金的過程,機器學習模型特別是深度學習模型的調參過程真的是碰運氣嗎?是也不是,我們的確無法預測深度學習的結果,但我們可以通過調參的經驗和直覺加快尋找到正確參數的速度。在這一點上,畢加索無疑也是優秀的。他做對瞭兩件事情快速完成瞭模型訓練:

  1. 必要時候改變模型結構
  2. 在一條路上要做到極致

在我看來,畢加索在尋找真相的過程中最重要的一次轉變是第三幅到第四幅的轉變。

第三幅公牛第四幅公牛

他做瞭什麼?他加入瞭線條。

他發現線條相比色塊更能抓住問題的核心,擁有更強的表達能力和泛化能力,正是他用“線條”這個“模型”替換瞭“色塊”這個“模型”,讓他擁有瞭進一步接近真相的可能。

但他是全靠直覺嗎?不是,你已經能看見第三幅公牛中色塊已經逐漸開始褶皺,在原有的表達方式基礎上他發現新的表達方式,果斷切換瞭“模型”。這是他的經驗,也是他的自信。

加入線條之後,他經歷瞭8次演進,他幾乎摒棄瞭所有細節,做瞭各種嘗試,才最終找到那最後一幅的真相。這是大師的努力和堅持。

從1945年12月5日完成第一幅初稿,到1946年1月17日完成終稿,畢加索花瞭一個半月的時間完成瞭“模型訓練”,從中你學到瞭什麼?要有切換模型的勇氣,但應是在堅持驗證過一個模型極限的前提下。這的確是經驗和直覺的結合。

寫這篇文章當然不是為瞭大傢學到什麼具體的機器學習技巧,但在你構建機器學習模型解決實際問題的時候,需要清楚的知道你在做什麼,為什麼你要這麼做。當你在調參的過程中迷失的時候,想想畢加索的“公牛”,也許能幫到你找到一些靈感。


這是第一次在「王喆的機器學習筆記」裡面隨便聊聊,希望沒有打擾到大傢的timeline。

最後還是歡迎大傢關註我的微信公眾號:王喆的機器學習筆記(wangzhenotes),跟蹤計算廣告、推薦系統等機器學習領域前沿。想進一步交流的同學也可以通過公眾號加我的微信一同探討技術問題,謝謝!


本文亦收錄在我的新書「深度學習推薦系統」中,這本書系統性地整理、介紹瞭專欄中所有的重點內容,如果您曾在「王喆的機器學習筆記」中受益,歡迎訂閱,謝謝知友們的支持!

发表回复

相关推荐

上遊犯罪未經刑事判決確認的洗錢犯罪案件的處理

關鍵詞洗錢罪 上遊犯罪最高人民法院司法解釋第四條 刑法第一百九十一條、第三百一十二條、第三百四十九條規定的犯罪,應當以上...

· 5秒前

恋情溃败,战死现实——《纸上的魔法使》评测

“故事的虚构性是其中不可缺少的部分,虚构乃是小说的本质。”

· 15秒前

三位一体:西班牙大方阵简述(1)

所有资料来源及翻译于: Dr. Pierre Picouet 建立的科普网站,现已失效,需要从Internet archive 挖掘 https://web.archive. ...

· 27秒前

git切換用戶

查看用戶名:git config user.name.切換用戶:git config --global user.name "xxx"切換郵箱:git config --g

· 37秒前

还搞不懂步进电机?一定要看这一文,工作原理+驱动方法,秒懂

大家好,我是李工,创作不易,希望大家多多支持我。今天给大家分享的是:步进电机及其工作原理。

· 46秒前