在開始之前我想先提一下在Coursera課程AI for everyone裡面,Andrew Ng提過的一個非常有趣的問題。
怎麼樣算是一家AI公司?

而Andrew Ng提出一個類比,在過去我們提到的所謂「網路公司 Internet Company」,其實不單單指的是那些「有使用Internet」的公司。
就像是即便巷口的飲料店跟foodpanda做合作,我們幾乎不會稱他為網路公司。
那怎樣的公司我們會稱他為「網路公司 Internet Company」,實際上是那些「大力利用到網路好處的公司」,像是在網路上我們可以做AB test,可以以非常快速的速度迭代我們的產品、行銷策略 …等,這都是傳統公司做不到的,而只有一個公司利用到網路的各種好處,我們才會真正稱他為網路公司。
這其實也是一部份為甚麼這幾年包含agile、martech等名詞都非常夯,因為現在大家都在想要怎麼利用網路的優勢。
那回頭來講怎樣算是一家「AI公司」,並不是所有使用到AI的公司都是AI公司,我們同時要有正確利用到AI的好處,並且很重要的要有穩定的data取得方式,因為這是AI必不可少的一部份。
所以在這裡Andrew Ng就提到了 Strategic Data Acquisition是當代AI公司非常重要的一環,而這也是很多學界不考慮的事情。
而在3/25的ML ops演講中,又更深入談了這點。
Improve Data >>> Improve Model
Andrew Ng提到了在他們公司裡面的project,當scientist建構出了一個baseline後,他們嘗試了兩種不一樣的方法去improve performance。
Model-Centric的意思就是以改Model架構、演算法為主,也就是一般ML課程會提的知識,告訴你可以換成LightGBM、NN或是加Batch norm或是做ensemble、stacking …等方法
Data-Centric的意思就是以改善data為主,收集更多Data、做Data Cleaning, synthesis, augmentation之類的方法。
而在他們數個專案中,他們往往發現通常改善Data帶來的最終Improvement是遠大於改善Model的。
然而目前99%的研究都專注於怎麼樣改善Model,而不是怎麼樣改善Data。
這邊可能有些朋友就會提出一個觀點:改善Data通常要花錢,然而改善Model卻不用,這可能是大部分人優先改善Model的原因。
實際上是這樣沒錯,但是其實以我們請專職的RD、scientist來改善model,需要的人力成本、實驗成本,並不見得真的會比我們花錢去收資料還要更少。
不過這裡一樣有一個盲點,如果我們今天data已經是到了一定的量了,那實際上我們去改善data通常效果也有限,所以依舊要想清楚自己在甚麼階段。
如何在最佳化performance時搞清楚現在應該做甚麼可以參考我之前的文章。
那如果我們接受這種以Data為核心的想法,我們重新來看ML project的LifeCycle。

裡面大家可能最容易想的就是,那我們要Collect更多、更好的Data。
所以可能會自動把Data Centric自動想成在Collect Data這個步驟,但是實際上整個LifeCycle都可以用Data Centric的角度來想。
第一步:Scope Project
這一步在這次的演講中被跳過,也不是我這次筆記的重點,不過這邊可以提的就是我們可以去思考「不同project的Data、Label取得難度」。
一般我們的Label有兩種來源,一種就是請專人來進行Label,也就是所謂的Annotation Label,包含常見的Image Classification就是利用這種方法。
但是還有另外一種是依照用戶後續行為自動來進行Label,也就是所謂的Behavior Label,最典型的就是推薦系統,推薦系統的Label就是每個用戶後續會不會點擊特定的廣告、影片、文章...等,除此之外像是機台的檢測,也可以依照機台過往的出錯紀錄,來當成Label,而不需要請專家來進行Annotation。
可想而知Behavior Label比Annotation Label取得的速度更快、代價更小、真實度更高。
所以在Scope Project的時候我們可以想想看,我們的問題是否有某些Behavior Data可以取得。
第二步:Collect Data
在收集資料這步,Andrew Ng提到最重要的就是Label Consistency。
當我們要收集資料的時候,我們可能會遇到每個Labeler有各自的理解、Label方法,而導致我們資料最後非常Inconsistent,這種情況其實非常恐怖,這會直接導致我們Train不起來,因為Data與Label間沒有一致的pattern。
很多人可能一聽到Label Inconsistent,就想到Data Cleaning,實際上這並沒有錯,Data Cleaning可以解決Label Inconsistent。
但是比起後續補救,我們更重要的是要設計好的Labeling Pipeline,讓Labeler知道自己要怎麼做,給出更正確的Label,提高整體Label品質。
而實際上這種Label Consistency,或是說Clean Data跟Noisy Data的差別,在Project的初期影響相當嚴重。

中間,當我們Data夠多時,Noisy label的問題會被大量的Data所削減,然而當我們Data量還小的時候,如左邊及右邊,我們是否取得Clean Data,就會影響非常大。
下圖呈現了Andrew Ng他們內部Project早期時,如果收集的是Clean Data,更快速就可以達到好的Benchmark。

而實際上即便你Data量很多,如果今天有Long Tail的問題,那些Minority Class也一樣會很需要Clean Data。
這裡Andrew Ng給出一個建議,以Data Centric的角度來想事情,我們應該快速建立出一個Baseline model,然後用model的結果來improve我們的data,像是不斷做Error Analysis,從Model容易犯錯的點來回頭找尋Label pipeline裡面的問題。
而這邊其實我們在業界也很常會用類似的方法來validate哪些Labeler有問題。
第三步:Train Model
所以這邊就很簡單了,我們這邊在Training的過程中,重點就不是去設計很複雜的Architecture,而是要從Model的各種behavior、Permance來定位出我們Data的問題,並再想相對應的解法。
像是Error Analysis,或是看Model收斂速度,都可以看出一些Data的性質。
而我們也可以利用Data Augmentation, Synthesis等方法,來解決一些比較輕微的Data的問題。
所以這裡會非常非常大量的做實驗,並且我們要對Data進行Version Control。
這裡在工程上我們就必須引進一些MLops的tools,像是MLflow

藉由大量自動化Training以及自動Track ML的實驗,來加速我們整體流程,而不是每次Train一個Model都要ML Engineer開Jupyter Notebook弄一天。
後續針對MLops的工具的介紹我會用一個完整的系列來完整說明。
第四步Deploy in Production
在Deploy到Production時,我們最重要的就是要隨時Monitor Data Drift/Concept Drift,也就是說我們要能決定甚麼時候我們要Retrain我們的model。
決定甚麼時候要Retrain我們Model,很多人的習慣其實等到Model Performance掉到一定閾值之下,就進行Retrain。
這其實是很危險的。
主要原因有幾個
- Performance是Lagging indicator,當我們Performance出問題時,通常就已經是出大問題。
- Performance呈現的是Overall的結果,我們的Model有可能在一大個類別的用戶的預測上都做得很差,但是Overall Performance依舊很好,但這群被做爛的用戶有可能是我們最在意的用戶。或是這群被做爛的用戶可能呈現了我們的模型偏見。
- Performance可能可以作弊,就像是Youtube的推薦系統,Model不一定要預測的很準確我們喜歡甚麼,只要一直推薦給我們一樣的影片,他的Performance一樣可以上去,所以有時候即便Performance好,我們的Model依舊在做不對的事情。
所以我們在Monitor時其實除了Performance以外,我們還可以看Model的信心指數是否下降,信心指數下降會是比Performance下降更早期就出現的指標。如何理解具體ML的信心指數可以參考我之前的文章。
同時我們也可以Monitor Data的Distribution是否改變,具體要怎麼做這些,我會在之後用一篇專門講Monitoring來說明。
所以最後做個總結,如果我們要以Data-Centric來想事情的話,我們的每一步驟要問的問題就會變成下列這些

而Data-Centric極有可能會讓各個Startup或是新的AI產品在起步時輕鬆許多。
如果想知道更多細節,真的很推薦大家去看完整影片。
如果喜歡這篇文章可以幫我多拍手幾次XD,或是對於哪個類型文章有興趣都可以在留言區跟我講~ 後續會以中難度的ML/DS/AI知識為主,以及AI/HCI研究相關知識