我在之前的一篇文章中提到纪蜒,機器學(xué)習項目如何管理,目前在行業(yè)內(nèi)是一個普遍存在的難題扰付。具體而言堤撵,對于這類項目,我們需要一套行之有效的工作辦法羽莺,幫助一線工作者:(1)知道什么時候該做什么事实昨;(2)知道什么時候該看什么指標;(3)知道什么時候可能有什么風險禽翼。這樣一套工作辦法的第一步屠橄,就是對一個機器學(xué)習項目設(shè)置合理的期望。
機器學(xué)習到底是在做什么
機器學(xué)習的基本過程可以用下面這張圖來呈現(xiàn):
拿到已有的歷史數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)闰挡,我們需要對訓(xùn)練數(shù)據(jù)進行矢量化處理,把輸入的不論什么形態(tài)的數(shù)據(jù)(例如文本礁哄、音頻长酗、圖片、棋盤盤面)都轉(zhuǎn)化成包含若干列的矢量桐绒。從矢量中我們再分出特征(X)和結(jié)果(Y)夺脾,通常特征的列數(shù)遠多于結(jié)果之拨。
我們把X部分交給一個模型,算出與每一行訓(xùn)練數(shù)據(jù)對應(yīng)的預(yù)測值Y’咧叭。所謂模型蚀乔,就是一系列的權(quán)重系數(shù),把這些權(quán)重系數(shù)用在一行輸入數(shù)據(jù)上菲茬,就會得到針對這一行輸入數(shù)據(jù)的結(jié)果預(yù)測吉挣。我們把Y’與Y對比,評判這一輪預(yù)測的效果婉弹。這個效果睬魂,我們用損失來度量。
然后我們用一個機器學(xué)習算法來嘗試優(yōu)化損失镀赌。所謂優(yōu)化氯哮,就是不斷嘗試調(diào)整模型中的權(quán)重參數(shù)。調(diào)一次商佛,再計算出一組新的Y’喉钢,再與Y比較效果。如此迭代良姆,直到損失不再降低肠虽,或者達到預(yù)設(shè)的迭代次數(shù)。
所以歇盼,首先必須要記滋蚝邸:機器學(xué)習是一種優(yōu)化任務(wù)。優(yōu)化任務(wù)的目標不是找到“正確”的答案豹缀,而是找到一個“看起來不錯”的答案伯复。這一點會對我們看待這類項目的方式產(chǎn)生深遠的影響。
如何為優(yōu)化任務(wù)設(shè)置期望
傳統(tǒng)意義上的軟件開發(fā)(例如開發(fā)一個電商網(wǎng)站邢笙、開發(fā)一個社交app)是能夠得到確定結(jié)果的:只要需求分析得夠細致啸如、原型設(shè)計得夠保真、測試進行得夠周全氮惯,你就可以準確地框定一個軟件開發(fā)過程的產(chǎn)出結(jié)果叮雳,點擊哪個按鈕得到什么效果都是可以預(yù)先定義的。而機器學(xué)習項目則不然:不論分類妇汗、回歸帘不、聚類,本質(zhì)上都是對某個損失函數(shù)迭代優(yōu)化的過程杨箭。它沒有唯一正確的答案寞焙,只是有希望得到看起來不錯的答案。優(yōu)化任務(wù)的邏輯不是因果,而是概率捣郊。
對于優(yōu)化任務(wù)辽狈,我們不能問“是否正確”這個問題。有意義的問題是呛牲,模型的預(yù)測準確率能達到多少刮萌。一個缺乏經(jīng)驗的管理者可能會說“越高越好”,或者拍腦袋說出一個數(shù)字“90%”娘扩,顯然這都不太有助于合理地管理期望和把控進展着茸。暫時放下“準確率”的定義不談,我們?nèi)绾沃缹τ谝粋€機器學(xué)習得出的模型應(yīng)該期望什么樣的準確率呢畜侦?顯然大多數(shù)情況下預(yù)測準確率不可能達到100%元扔,那么這個期望應(yīng)該如何設(shè)置?
我們需要引入一個概念:貝葉斯錯誤率旋膳。簡單說澎语,貝葉斯錯誤率是對于一個問題有可能達到的最好的預(yù)測效果。貝葉斯錯誤率通常不是那么容易直接獲得的验懊,所以我們用人類的判斷作為一個代理指標:一般來說擅羞,我們認為人類的判斷錯誤率高于貝葉斯錯誤率,但是也相差不大义图。于是前面的問題變成了:對于一個機器學(xué)習得到的模型减俏,我們期望它的預(yù)測準確率與人類的判斷相比如何?
這個問題沒有唯一正確的答案碱工。有些時候我們希望模型的準確率高于娃承、甚至遠高于人類的判斷;另一些時候怕篷,我們只需要模型的準確率勉強接近人類的判斷历筝,這樣的模型就可以幫人類完成大量繁瑣的工作量。對模型的期望設(shè)置不是一個技術(shù)問題廊谓,而是一個業(yè)務(wù)問題梳猪,在開始一個機器學(xué)習項目之前,就需要先與業(yè)務(wù)的負責人展開相關(guān)的對話蒸痹。
如何定義“準確”
仍然以最簡單的分類問題為例春弥,模型的判別分為陽性(positive)和陰性(negative)兩種,兩種判別都有正確和錯誤的可能叠荠,于是總共就有了四種可能的情況:
True Positive(TP):判別為陽性匿沛,實際也是陽性
False Positive(FP):判別為陽性,實際卻是陰性
True Negative(TN):判別為陰性榛鼎,實際也是陰性
False Negative(FN):判別為陰性俺祠,實際卻是陽性
一種樸素的“準確率”定義方法是“判別正確的比例”公给,即:
但是當樣本的分布極其不均衡時借帘,這個對準確率的定義會很有誤導(dǎo)性蜘渣。例如我們假設(shè)10000人里有150人患胃癌(陽性),經(jīng)過對血樣的分析肺然,一個模型識別出100名患者(TP)蔫缸,有50名患者沒有發(fā)現(xiàn)(FN),同時誤報了另外沒有患病的150人(FP)际起;另一個模型則不做任何判斷拾碌,直接宣稱所有人都沒有胃癌。我們直覺會認為前一個模型優(yōu)于后一個街望,但樸素的準確率定義卻給了我們相反的結(jié)論:
因為樸素的準確率定義有這樣的問題校翔,實踐中更常用的指標是“精確率”(Precision)和“召回率”(Recall)。它們的定義分別是:
Precision = TP/(TP+FP):在預(yù)測的陽性個例中灾前,有多少是預(yù)測正確的防症?
Recall = TP/(TP+FN):在所有的陽性個例中,總共找出了多少哎甲?
可以看出蔫敲,Precision和Recall往往是互相矛盾的:如果追求找出更多陽性個例(提高Recall),那么陰性個例被誤判為陽性的情況也會增加(降低Precision)炭玫,反之亦然奈嘿。在不同的業(yè)務(wù)場景下,需要追求的指標也會不同吞加。例如在前面的體檢場景下裙犹,我們會追求更高的Recall:盡量找出所有患病的人,有一些人被誤報也沒關(guān)系衔憨。而另一個極端場景是推薦顧客可能會賣的商品叶圃,這時我們會追求更高的Precision:推薦位只有5個,我們必須保證推薦的每一件商品都打中用戶的興趣點巫财,至于還有幾千個他可能感興趣的商品沒有被推薦盗似,那并不重要。
以上我們看到的只是最簡單的分類問題的場景平项。對于其他場景赫舒,可能需要引入其他度量準確率的指標。所以我們再次看到闽瓢,采用什么指標來定義“準確”接癌、應(yīng)該如何權(quán)衡指標的取舍,這同樣是一個與場景高度相關(guān)的業(yè)務(wù)問題扣讼。項目的管理者和業(yè)務(wù)代表需要清晰理解指標的含義缺猛、并合理設(shè)置對指標的期望。
然后呢……
如果項目的管理者和業(yè)務(wù)方代表能懂得機器學(xué)習是一類優(yōu)化任務(wù)、能理解優(yōu)化任務(wù)的度量方式荔燎、能針對這類任務(wù)設(shè)置合理的期望耻姥,在理解和把握項目進度與風險的路上他們就邁出了第一步。在下一篇文章里有咨,我會拆解出機器學(xué)習類項目涉及的工作內(nèi)容琐簇。讀者將會看到,看起來高大上的機器學(xué)習座享、人工智能婉商,實際上需要特殊技能和高中以上數(shù)學(xué)能力的只有極小一部分,其他都是普通的渣叛、確定性的軟件開發(fā)工作丈秩,可以用典型的軟件開發(fā)過程和管理方法來對待。針對份額極小淳衙、但有時非常重要的“自行訓(xùn)練模型”部分蘑秽,我會給出更加細化的工作內(nèi)容拆解,并提出任務(wù)拆分滤祖、進度管理筷狼、風險管理的相關(guān)辦法。