QA 講稿
Q : 可以分享一下明翰過去的背景嗎?如何走上 AI 與 NLP 的研究的?
大概是7、8年前有一陣子有一波青年創業潮,那時候覺得趁年輕還能試錯的時候盡快去嘗試,一心想做出世界級的產品,解決問題改變世界,因此決定創業。因為產品的設計上就有需要用到非AI不可的技術才能實現的功能,主要是自然語言的資料探勘,很幸運的有創業夥伴是這方面的專業,雖然那時候真的極度冷門,但靠著夥伴的協助下自學才走上這條路。
那時候剛好也是本次AI熱潮剛要興起的時間點之前的一刻。台灣那時候跟現在比起來相對幾乎沒什麼人在做AI,能找到的資料都是1990年代左右出版的舊書,而且叫做資料探勘比較多。甚至連大家現在所熟知,啟發非常多人的林軒田教授的機器學習基石的影片的好像也是那時間點一兩年附近才開始有放在台大MOOC平台上。所以我那時候基本上都是上網找外文資料自學比較多。後來這個議題越來越紅,開始出現了一些小型的讀書會,就在前輩和同儕的幫助下一起學習。而這一路上幫助過我的人非常多,有業界的前輩,也有學界的教授,我能在這條路上撐到現在是真的要非常感謝有他們。
Q : 目前主要的工作內容是什麼呢?為什麼當時會選擇創業呢?
當時選擇創業的最大原因就是希望能建立一套自有體系。所以最主要的方向就是整理和實作底層機器學習技術,例如去了解類似Sklearn、Keras這種套件內部的演算法原理、閱讀原始碼、還有它實際上是怎麼實際運作的。就是要想辦法做出我們自己的套件,再根據我們需要的效果來改良它。
Q : 講者除了工作之外,也有經營社群、發表文章、演講的活動,請問是如何分配時間的呢?
其實真的做不太到好好分配時間,因為行程幾乎都是滿的,大概兩周左右會有一個deadline要處理,六日幾乎都還是在做事,畢竟要追上更早進入的同業的是真的需要多幾倍的努力。長期下來,反而是比較需要心理調適。另外我在捷運上的瑣碎時間通常會在社群上幫忙解決一些程式上或是理論上的問題,蠻常會在Python Taiwan、Taiwan 程式語言讀書會還有我自己的AI社群上幫忙回答問題,就是隨緣幫忙也能讓自己成長,時常保持自己知識的新鮮度,以及對問題的敏感度。所以也歡迎大家多發問,多交流,一起變的更好。
Q : 聽說你比較熟用 C++ / Python,請問兩者是如何選擇跟分配的?
Python主要是在驗證模型、清理資料、快速建立實驗上使用,因為有大量方便的工具。C++雖然不好寫但速度上有明顯優勢,開發AI系統會用來處理大量計算的部分。以前這部分原本是用Java來做,也用過Java Spark,後來Java 8之後因為開發生態問題、訴訟問題決定趁早轉移到C++上。
Q : 很多人會說模型只要會使用套件就好,不用管背後的數學原理,你怎麼看?
套件其實就是提供一大堆處理資料的程式模組、從前處理到分類器都會有。資料科學家就是要把它們按照要解決問題的順序有意義的連貫、組織起來。放遠一點來看,這些不同的演算法流程就像另外一種沒有名子的程式語言。
以下提供三個面向,僅供參考:
第一從軟體正確性而言:
學過程式語言的人都知道學會語法不等於學會用程式語言來解決問題,比如說知道If else loop各自的語法規則,大概只需要一兩周熟練即可,但要能夠組織起來變成連續有意義的完整流程,比如說每個網站都需要開發的使用者註冊頁面,怎麼由這些keyword堆出邏輯連貫的順序來去後台檢查是否重複註冊,這中間怎麼去調整、客製化符合商業上的設計考量,則可能需要兩三年甚至更長時間的去累積,組織邏輯沒有問題的語法的能力。而且最要命的是,傳統的前後端,程式若有邏輯上的Bug通常會直接反應在程式執行期間,例如執行到一半閃退,無窮迴圈,只要測試有覆蓋到的幾乎都可以把問題一一抓出來修正,而且也有一些設計問題是編譯器可以檢查到的,例如物件導向中私有物件可能會鎖起來不給用,如果亂用編譯器是不會給過的。
但是資料的PIPLINE建完之後,多數情況沒有什麼外部機制可以檢查,處理的流程是否合理,特別是演算法前後相連接的情況,彼此數學上的前提假設有沒有相互矛盾的地方、以及資料的樣貌是不是符合這些演算法。對產出結果的詮釋,只能依靠對演算法的原理以及數理統計的背景知識來加以檢查。而且這種具有軟性判斷性質的程式,都有良好的容錯能力,既然能容得下使用者輸入端的錯,當然也容得下開發者犯下的錯誤,也就是說,這種帶有Bug的程式還能夠看似正確的運作。一旦含有這類bug的產品部署上去之後,必須要隨著時間推移才會累積出足夠看出問題的數據,這些基本上不是寫普通的單元測試可以檢查出來的,等到發現時通常為時已晚。而這種產品都會希望蒐集更多資料,作為模型更新的來源,那蒐集到的資料也會帶有這些偏差,就不一定能修正,況且也不可能回到過去叫使用者再做一次行為留下正確的資料。因此它不像一般程式容易檢查出問題、也不像一般程式那麼好修正錯誤,顧慮會非常多。像兜積木一樣把流程串起來或許對初學者熟悉API語法沒什麼不對,但從軟體開發面最基本的正確性來看,不用管背後的數學原理,事實上會連最基本要求正確性都無法把握,如果今天是一台無人駕駛車的AI,試問有誰敢開上路呢?
第二從團隊內外層面而言:
技術主管需要負起的責任之一就是必須要有足夠的數理知識去排除與把關那些資料處理的程式流程設計上明顯的盲點,以及可能被誤用的演算法。其次就是要有能力衡量這套系統的效能,而這是統計審美的能力。採用不同的統計指標會有不同的假設,不同的計算方式,以及作出不同觀點的效能結論。其一是商譽良心的問題,正常來說理應要比客戶的知識更充分,要能跟客戶正確討論想要用什麼指標衡量系統效能才是客戶希望達到的效果,像準確度就是非常籠統的詞彙,客戶的問題也許是個Recall(誤判沒有而其實有比較嚴重)為重的問題,那就應該引導客戶到正確的方向,而不是拿Accuracy去搪塞。很多人覺得反正客戶想看什麼就給什麼統計指標,就短期而言知識不對稱或是知識不足還是能賺到錢也沒什麼不對,商業本來就是賺錢第一,但長期而言就是傷害自己商譽,甚至影響業界大環境。AI的合作窗口洽談會有點類似企業顧問的作法,需要用數理知識主動幫助客戶排除掉盲點,如果一個顧問只需要全盤接受、照單全收客戶的說法,那這個顯然不是在協助客戶解決問題,而是在製造更多問題。
第三則是從核心競爭力而言:
所有可開箱即用的套件必然有它的既有限制,在軟體開發上通常越是簡單取得的東西,它在背景運作的東西必然越多,也會有越多冗餘和越多假設。要能夠作出競爭力,在人無我有或是人有我優的境界上,就必須要有了解原理,知道其數學背景知識、甚至能夠推導公式並且實作,設計更有效模型的能力。講句實在的,資料依賴標註好的開源數據、演算法靠開源套件組一組兜一兜,github拉一拉,機器NV牌規格買一買,顯然大家都能做到的門檻,試問價值與競爭力從何而來?
Q : 你覺得統計學的背景觀念,對於 AI/ML 的影響程度高嗎?建議要選修嗎?
我認為非常必要,多修幾次都沒關係,統計學可以說是以養成一個以資料相關為職業的基本訓練。不過我會建議學統計一定要搭配相關程式操作,會解考題不等於能夠正確活用知識。
* 對於數學不好的同學,應該從哪裡開始加強起?對於數學好的同學,應該如何強化自己的優勢?
其實多數能走到接近職業階段或是已經是相關職業的朋友,多半都有學過基本的數理統計訓練,有很多知識是我們已經學過但只是為了通過考試,因此後來就荒廢了。這種情況我會建議不需要從頭來唸數學,而是去對目前接觸到、使用到的演算法有深入的理解,特別是它的公式長什麼樣子,每個符號表是什麼意思,怎麼處理輸入的資料,到回溯這個公式為什麼會長這樣,背後的數學知識點是什麼。若有中間卡關、不理解的數學知識去補充,嘗試自己導公式出來,就能在有限的時間下,把需要用到的數學基礎知識補充上來,並且知道它們用在資科科學的那些地方。
而數學基礎好的朋友們,我會建議可以培養數學知識對資料性質的直覺,例如說看到某些分布就知道資料有沒有被汙染,看到一些混淆矩陣特定的pattern就知道分類器哪邊出問題,這些是屬於在資料領域需要時間和數學能力累積的優勢,越早建立自己獨特的思維越有幫助。
Q : 對於現在想入門 NLP 領域的新人來說,有什麼建議的點?
正向的部分:主要還是需要對分析語言這種資料抱有熱情,對資料永遠感到好奇,並且主動去認識資料。負向的部分:適當的加入對語言理解的先驗知識協助模型是很有幫助而且必要的,但是切勿加入過多的主觀判斷,即使因為我們理解繁體中文,而在NLP上很容易做到。因為統計為主的技法注重在用資料本身找出規律,加入過多的判斷機制到最後就會變成Rule-Based的系統,這對於機器學習一體適用的能力會打折扣。
Q : 面對新出現的東西,覺得應該勇於嘗試還是暫且觀望?
只要有趣的、在自己承擔範圍內的都可以嘗試。
Q : 自己最近有在關注的 AI 界發展項目有哪些?
深度學習理論那邊有在追有關Double Descent現象的一些實驗結果
GPT系列的突破
本文允許重製、散布、傳輸以及修改,但不得為商業目的之使用
使用時必須註明出處自:楊明翰 , 台灣人工智慧與資料科學研究室 https://aistudio.tw