閱讀時間約 5 分鐘

2086 字

我在業界也做了六年機器學習工程師 (雖然職稱都不是這個,不過我覺得工作內容是),在深度學習熱潮起來以前就入行。工作內容包含將商業問題轉換成 機器學習可解的問題並且將解出來的模型跟系統組的同事合作推上線,有時候也要處理 data pipeline。分享一下我認為作為機器學習工程師需要的數學能力。

工作上用到的數學

  1. 一些基本的統計觀念,對於觀察資料會有幫助。
  2. 理解使用到的機器學習模型的概念,了解這個有時候會對參數選擇有所幫助。
  3. 深度學習的話至少看得懂 loss function,有時候會把不同 loss 合起來一起訓練。少數幾次遇到的問題沒有合適的現成 loss ,所以自己亂寫 loss function,寫完也是丟給 TensorFlow 或 PyTorch 幫我 optimize。
  4. 理解使用到的 metric,關乎到你怎麼挑選模型跟 loss function。

我覺得理解 metric 跟 loss 是很重要的,這樣模型在 metric 表現不好的時候才知道要往哪個方向調整。

另外一個會用到數學的機會就是讀新的研究論文,讀論文我第一個看它實驗怎麼做的、結果怎樣,看完覺得有機會在我的資料上也夠好才會繼續看,第二個看有沒有現成的程式碼可以用,第三個才是去理解它的方法 (通常是 loss function)。至於裡面的定理,很多假設都跟現實有差距或是它是在證 error bound 這種就算我知道了也不能幹嘛的東西,所以通常都是跳過不看。

工作上最需要的就是做的東西要有商業價值,至於後面是什麼技術、數學多難本身不是太重要,跟不懂的人講什麼模型聽起來都很厲害。如果 rule based 的方法成效就足夠好,我也會先用它頂著。當然一般來說 ML 的成效都會比 rule based 更好,所以用到 rule based 的機會其實不多。

數學重要在幫助你選擇適合的 metric 跟模型,以及調模型的時候更有效率,可以不用所有的參數丟下去跑,畢竟這個花時間也花錢,對公司來說這兩個都是大成本。所以數學好對公司來說是有商業上的價值的。

以這些需求來說,我覺得不需要很艱深的數學,主要是機率、統計、線性代數、微分 (沒有積分),再難的就很少了。重要的是觀念要清楚,用到的都是觀念。

最後,工程師寫程式就是基本功,資料結構跟演算法也算是數學。所有的想法都要寫程式才能在真實世界實現,尤其機器學習常常處理大資料,模型也要上線在真實環境運作。我不知道機器學習要強到什麼程度公司才願意配一個人專門幫你寫程式。

我的經驗是架構方面通常會有專業的同事幫忙設計,model inference 的部分就要自己寫。Data pipeline 的話同事會將資料整理好,可能會用 parquet 格式放在 s3 上面。把它轉成 feature 到 model training 再將 model 送上 production 機器這一段要自己寫。

實驗的程式碼就是全部自己來,程式有沒有效率就關乎你實驗跑多久、能跑多大的規模。

面試時用到的數學

六年來我也應該面過二十幾個機器學習工程師的職缺,大小公司都有,台灣日本新加坡都有。我自己在兩家公司也都有幫忙面過機器學習工程師。通常機器學習面試就是給你一個問題,問你怎麼用機器學習解。比如說怎麼設計推薦系統之類的,然後再從你的回答問延伸問題。我覺得只要大觀念會,對於提出來解決問題用的模型有一定程度的理解就可以了。我從來沒有被問過任何證明推導的問題。Research scientist 我就沒面過了,不清楚。

除了少數幾家小公司沒有問 Leetcode-style 的演算法題,其他幾乎都有,而且我體感規模越大的公司問的越難,所以 Leetcode 還是要刷,越大間的公司越要刷。

面試的要求

前陣子剛好敝公司比較多機器學習工程師的 headcount,所以我幫忙面了大概有十個人吧,最後錄取三個。我參與的是第二輪面試,所以我不知道第一輪是怎麼挑人的。我們主要想找有 NLP 經驗的人,我看到的履歷沒人有 top conference paper,只有一個有 Kaggle 成績,一個是碩班做 NLP,其他都是因為相關工作經驗被找來。進來以後我覺得工作能力上也沒有什麼問題,對公司也能有商業上的貢獻。

我自己面試時對於機器學習工程師的基本要求是:

  1. 能根據問題挑選合適的 metric。
  2. 根據這個 metric 挑選合適的模型。
  3. 使用的模型概念是什麼,哪些參數是重要的。
  4. 怎麼判斷模型好壞。
  5. 成效不好的時候怎麼 debug 跟調整。

以上跟有沒有發過論文完全無關,當然發過 top conference paper 的人對於上面這些問題一定是都能答得不錯,但沒發過也可以。反而因為上面這些問題很重要,我個人是很看重 Kaggle 的,Kaggle 除了 metric 幫你決定好以外,其他能力都要好才能有好成績。Kaggle 我只認可有獎金的比賽成績,銅牌以上我覺得應該就有基本能力可以找來面試看看,銀牌以上應該程度不錯,金牌我會覺得很強。

當然 Kaggle 在深度學習相關的比賽有設備有優勢,不過也是有人靠免費的 Google Colab 拿到金牌,如果只要求銅牌的話拿免費的 Colab 也算堪用。有些比賽 Google 也會贊助 300 美金讓你用 GCP,我覺得不求頂尖成績的話設備不會是問題。

轉領域的準備

會找來面試的通常是有相關工作經驗,或是碩班做 ML,或是有 Kaggle 成績。轉領域的話前兩項一定是沒有的,就去 Kaggle 刷一個銅牌吧!刷不到至少也知道機器學習是怎麼回事,有沒有興趣做下去,探索興趣對人生來說也是很重要的事情。我覺得刷 Kaggle 很好玩呀,每次比完 Kaggle 都能學到很多新東西,只是太花時間了,不然我也想天天刷。

原文發表在 PTT Soft_Job 版:https://www.ptt.cc/bbs/Soft_Job/M.1636769550.A.E5D.html,僅稍微修改內容讓他在部落格上看起來更通順一點。

comments powered by Disqus

最新文章

分類

標籤