PTT推薦

Re: [心得] 2021 外商資料科學求職心得

看板Soft_Job標題Re: [心得] 2021 外商資料科學求職心得作者
AgileSeptor
(S.Duncan_JB)
時間推噓19 推:19 噓:0 →:1

之前在本板分享過我在 2021 年的數據分析求職經歷
我當時也找了機器學習演算法應用相關的工作
由於準備方法與數據分析領域大不相同,所以另外寫了這篇文章與大家分享經驗
尤其有很多資源是我在 Soft_Job 板找到的,也希望給這裡一點回饋

以下文章為了 PTT 排版有稍微精簡內容
部落格完整好讀版在此:
https://haosquare.com/machine-learning-2021-job-interview/

這篇文章是寫給跟我一樣「不是」資工或統計系背景的人,我將分享我從商管學士跨領域,應徵機器學習工作投了 10 家公司的履歷、經歷了 6 場面試、最終拿到 1 家錄取的歷程,我也寫下我遇到的機器學習面試題、以及準備方法與學習資源,希望為同樣跨領域挑戰的讀者增加信心:非本科系是有機會拿到機器學習工作錄取的!

本文分享的工作類型,將以機器學習演算法應用為主,不包含資料分析師(Data Analyst)、軟體工程師(Software Engineer)、或者機器學習工程師(Machine Learning
Engineer)。

---

## 求職背景與結果

我在此用條列的方式簡介自己 2021 年求職時的背景:
- 商管學院學士學歷,在校修過一些資工相關的課但是成績不佳,有修過機器學習相關專題課
- 在手機遊戲公司擔任資料科學家兩年半,工作中機器學習的專案不多
- 曾在中研院擔任一年的研究助理,負責金融業的深度學習與推薦系統產學合作專案,沒發過 Paper
- 會打機器學習競賽,都是國內賽事、沒有 Kaggle 成績

機器學習領域我投了海內外共 10 間公司的履歷,其中日本的 Mercari (實習)、新加坡的騰訊、台灣的 Garena 三間公司有進入面試,最後拿到 Garena 的 Data Scientist 錄取,以下文章都是基於這幾間的 9 場面試經驗所撰寫。

---

## 面試經驗與建議

### 程式能力

既然是機器學習工作,寫程式的能力當然是必考的,不只考程式語言特性、也考資料結構與演算法。但是跨領域求職者也不用太擔心,有個幾乎所有工程師都知道的練習秘訣:
LeetCode!到這個網站拼命練習題目就對了。

在我的面試經驗中,機器學習工作對演算法程式題的難度要求,比軟體工程師稍微低一點點,以 LeetCode 的難度標準來說,我面試只有遇過 Easy 跟 Medium 難度的題目,Hard等級的考題從沒有遇到過。

對於程式題練習,我想分享最重要的技巧是:分類。演算法跟資料結構的題型,可以有很多種分類法,包括 Linked List、Graph、Dynamic Programming 等等,練習的時候,如果沒有分類、只是隨機選題來練,可能會變成每個分類只練習一、兩題,結果上了戰場遇到某分類的變化題,實力卻不足以應對,練習不就白費了嗎?

因此,我的策略是在各個分類都挑出數題重要題目、有條理地練習。具體來說,我參考了SoftJob 板友 AH Tech 在 YouTube 影片中分享的 LeetCode 分類方法與表格,在每個分類中,我會把 Easy 到 Medium 難度而且免費的題目全部練習過,Hard 的題目則是最多只寫一題。並且,我會幫自己設定日曆、在隔一週後複習剛練過的那個分類,因為,只要是不熟悉的題型,即使練習過一遍,下次看到一模一樣的題目,還是有可能寫不出來!所以請別忘了安排複習行程,如果面試題(好運地)出現看過的題目,務必要追求 100% 拿分!

AH Tech 的分享:
https://www.youtube.com/watch?v=ucTL2ZdcyOs

我使用這些練習方法,總共只練習了約 100 題,相對於軟體工程師、的確題目數量算是少的,我主觀認為夠用了。我通過的四場 Python 程式面試、總共近 20 題的題目中,至少一半題目是我在這 100 題中看過的,我可以穩妥地拿分;另外一半則是用這 100 題練習過的技巧稍微變形就能過關。我猜想,或許大家不會拿聘用資深軟體工程師的難度標準來刁難資料科學家應徵者吧。

除了 AH Tech 的分享,我也推薦以下兩個 YouTube 頻道:
花花醬的 LeetCode 解題:
https://www.youtube.com/channel/UC5xDNEcvb1vgw3lE21Ack2Q
安妮在本板的解題技巧分享:
https://www.youtube.com/watch?v=fyf-GRH1Ceo

---

### 機器學習技術問題
機器學習領域的專業知識問題,範圍超級廣,從 20 世紀就提出的模型、到前兩個月剛發表的新論文,都有可能是面試會問到的。為了更有效率地準備,我蒐集了許多人的面試經驗、也整理自己的面試經歷後,總結出最重要的準備要點是:"Why A, not B?"

資料科學家會用到機器學習模型的時機,是針對一個定義好的商業問題,選擇一個適合的模型。因此,面試中會考驗應徵者,是否了解模型的特性、以及不同模型選擇可能造成的差異。

舉例來說,常見的面試題像是:
- L1 與 L2 Regularization 有什麼不同?
- DenseNet 與 VGGNet 有什麼差別?
- 為何你在履歷中的專案經驗使用 Random Forest 而不用 XGBoost?
- Trasformer 在近年幾乎是顯學,它在任何場景都比 RNN 好用嗎?
- 深度學習的 Optimizer 怎麼選擇?你為什麼用 Adam?
- 遇到不平衡資料該怎麼處理,不同的處理策略之間有什麼優劣差異?

回答或介紹某個模型時,如果你把每個模型的每個元件都詳細地介紹一遍,想必要花不少時間、面試官大概會聽到打呵欠,因此筆者認為專注回答模型的「特色」、並提出為何你會為某場景使用 A 模型而不用 B 模型,會是其中一種有效的面試策略。

例如,當我被問到「DenseNet 與 VGGNet 的區別」,我會為每個模型只挑出幾個重要特性來講、而不是鉅細靡遺地描述:
- VGGNet 的特色
- VGGNet 的架構與 AlexNet 相似,但是用到更少參數、且引入更多卷積層來增加非 線性關係
- 例如一層 7 乘 7 的卷積用三層 3 乘 3 卷積取代,卷積層涵蓋的圖片大小相同, 但是參數量從 49 減少到 27
- 也引入 1 乘 1 的卷積,用來增強模型對特徵非線性關係的表述
- DenseNet 的特色
- 準確度近似於 ResNet 但是參數量更少、計算效率較高
- DenseBlock 設計讓深層網路也可以看到所有淺層網路所看到的內容,在原始特徵特 別重要的場景會有更好的效果
- 在我參加過的音訊分析競賽,原始特徵對於音訊表示特別重要,所以 DenseNet 比 起其他影像辨識 CNN 模型有較好的效果

像這樣,只選幾個特色來講、每個模型都只濃縮成幾句話,兩分鐘內就可以回答完一個貌似範圍超廣的問題。我認為,不要讓面試官聽到不耐煩、比回答的完備性重要。

---

機器學習面試問題,具體該要如何準備?任何人問我這項問題,我都會給他這個毫無創意的回答:
> 瘋狂蒐集題目、然後背答案!

機器學習有太多重要但是容易忘記的細節,求職前沒有複習的話,上了面試戰場肯定會十分慌張,例如:
- Vanishing gradient 是什麼意思?怎麼解決?
- 決策樹是怎麼建立的(要解釋 Information gain 與 Gini impurity)
- 隨機森林實際上是指什麼東西隨機?
- 請解釋 Precision 與 Recall 兩個 Metrics
- Batch / Layer / Group / Instance Normalization 之間的差別
- 什麼是 Bagging (Bootstrap + Aggregating)
- 請介紹深度學習會遇到的 Underflow 與 Overflow 以及建模過程怎麼看出這兩個問題

我會地毯式地到處搜索蒐集題目,記下不會的地方,整理在自己的筆記本裡,時時複習,資源包括:
Sroy20 的 GitHub:
https://github.com/Sroy20/machine-learning-interview-questions
板上 DrTech 大大分享的 NLP 面試經驗超實用:
https://www.ptt.cc/Soft_Job/E.gPZApR-tmzHQ

我得強調,上述的「背答案」策略只是為了找工作採取的不得已手段,它並不是研讀機器學習的好方法。機器學習模型背後的數學原理毫無疑問地非常重要,資料科學家需要了解這些數學知識才能正確使用模型,但是,面對現實吧,如果你未來兩個月內就要開始面試,根本來不及研讀所有數學公式與細節! 那就先拼命背答案,等到找完工作,再為自己規劃更扎實的學習方法。

---

### 專案經歷
非本科系、或者跨領域轉職找機器學習工作常有的困境,是相關作品不足,或者專案在工作中沒有太多實際成果。而在我的面試經驗中:
> 有機器學習相關實戰成果很好,但是就算成果不多,面試官也會重視你遇到什麼困難以及如何找出問題點並解決

我會在履歷中列出參加機器學習競賽的經驗,但是名次從沒拿過最亮眼的前三名,參加比賽也都是國內舉辦的、不是知名的 Kaggle 國際競賽,即使如此,只要有事先梳理內容,小型或者名次不是頂尖的比賽也非常值得在面試中分享。為了引起面試官興趣,我在整理經歷時,會為我的比賽作品強調以下兩點:
- 比賽的困難點:資料型態哪裡複雜、遇到過的「髒資料」、過擬合問題
- 與眾不同的做法:特殊的特徵工程、或者超參數調整策略等等,就算不是第 1 名,也可 以分享自己如何從最後一名進步到前 20 名

資料科學競賽類型的作品經歷,強調的不只是建立最複雜的機器學習模型,資料觀察與清理能力、還有為分析流程找出錯誤的 Debug 能力,也都是資料科學家所重視的,有競賽經驗的讀者,可以透過介紹困難點、以及與眾不同做法的方式,向面試官展現出自己在不同分析流程的實力。

---

## 非本科系到底能不能應徵機器學習工作?

在此,筆者試著回答太多人都想知道的問題:
> 不是資工系或統計系,也能做機器學習工作嗎?

我投了 10 家公司,只有 3 間履歷過關、進入面試,最後只有 1 間拿到錄取。根據這個經驗,我會回答:可以,但是請先整理自己的心態、並且分析自己的弱點。

首先,沒有資工系學歷,找機器學習工作時就該整理好心態。就如前面分享的求職結果,我投的台灣公司機器學習職缺,全都沒辦法進入面試關卡,我個人主觀猜想,在台灣要是沒有資工背景、或者沒有碩士學歷,找機器學習工作時,履歷特別容易被忽略。因此我認為,非本科系的畢業生、或者從業人員,要準備好正確心態,在台灣跨領域求職不順利的話,不要太難過!而是該盡快練練英文能力,鼓起勇氣往新加坡、日本、澳洲、或者中國投遞履歷,海外的職缺對碩士學歷的硬性要求相對較低,而且海外的職位總數也比台灣多得多,履歷多一些機會被看見。

其次,雖然現在網路上開源的學習資源超多,有熱情的資料科學家們即使不是本科系也能積極自學,但是,非本科難以自學練成的最大弱點會是:機器學習實務經驗。以筆者自己的經驗出發,可以舉例兩個方面,第一是 MLOps,包括了後端 API 開發與串接、模型大小與準確度之間的權衡、串流資料的 Incremental learning、還有平行化運算等等議題,在校沒有做過大型專題、或者沒有機器學習領域的工作經驗,就很難講出 MLOps 要解決的痛點、也不容易扎實累積 MLOps 的知識,我面試的每家公司都有問我 MLOps 相關經驗,我也感覺得出來自己對此回答較薄弱,總會讓面試官眉頭一皺。如果你距離開始求職還有時間,請記得為自己補充點 MLOps 知識,至少不要上了面試戰場完全講不出一個字。

第二個值得提的非本科系弱點是完整的專案開發經驗,看書與上課自學、或者透過 Kaggle競賽練習,通常只會學到資料科學流程的建模與特徵工程,而一開始怎麼把模糊的商業問題定義成機器學習能解決的問題、如何選擇好的訓練資料、以及模型上線後如何驗證成效等等,都需要從頭到尾參與過一項機器學習專案開發,才能在面試中講出有見地的回答。我有通過面試的兩間公司,都被問到「我們發現使用者有某種濫用 APP 的行為,請問你如何用機器學習來捕捉這項行為?」或者「我們公司的主要產品是有某某特色的影像串流,請問你會怎麼設計推薦系統來改進使用者體驗?」這類開放式系統設計問題。不害臊地說,我運氣好在這兩間公司提問的領域有一些些相關經驗才能面試過關,因此,建議非本科系又有志於機器學習工作的朋友,請在鑽研酷炫機器學習與深度學習模型以外,規劃時間研究一些如上述舉例的實務議題,並且為你有興趣的公司蒐集領域知識,對此,我非常推薦你到 PyData 的 YouTube 頻道 向全世界的高手學習他們在實戰中遇到過的問題。

## 結語

不是資工系能找到機器學習工作嗎?可以!但是,即使我自認本業外的時間花了很多力氣鑽研機器學習與深度學習、最後也的確拿到一封機器學習工作的錄取信,我還是認為自己還有太多資料科學知識需要加強才能跟上業界標準,拿到錄取大概是運氣與實力的成分各佔一半,成功換了工作後也依然不敢懈怠下班後的進修。所以,對於非本科系的畢業生或已經在工作的朋友,既然要跨領域挑戰機器學習工作,就要比一般人投入兩倍以上的努力、好好準備!希望這篇文章分享可以給大家跨領域的準備方向與啟發。

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.183.213 (臺灣)
PTT 網址

yifor03/01 01:08推 好文

MS00687203/01 02:57強者...

yyyyyyyv03/01 03:20

netburst03/01 03:44

CRPKT03/01 09:49

ntpuisbest03/01 10:16

※ 編輯: AgileSeptor (1.160.183.213 臺灣), 03/01/2022 10:22:50

ManOfSteel03/01 10:31

kyrie7703/01 11:50

azzc103103/01 12:08幹這行的 學習能力真的超重要 推

qa8520tw03/01 12:22

smooth00003/01 13:02

yiche03/01 13:45

Lomerhaer03/01 16:01

bug203/01 18:12謝謝分享實用的心得 :)

gl4rmp403/01 18:58感謝分享

BIGBBBTW03/01 22:46

cmelo151503/02 18:21

iam63703/02 19:32推 謝謝分享

iamyugachang03/02 21:35用心推

weiyuhsi03/03 15:35推,身為統計碩的看到這篇有點慚愧XD