兩年前不知如何編寫程式碼的我,現在是一名人工智慧工程師
全文共3526字,預計學習時長11分鐘
圖源:Unsplash
經常有小夥伴私信給小芯,我沒有程式設計基礎,不會寫程式碼,如何進入AI行業呢?還能趕上AI浪潮嗎?
任何時候努力都不算晚。
下面,小芯就給大家講一個朋友的真實故事,希望能給那些處於迷茫與徘徊中的小夥伴們一絲啟發。(下文以第一人稱敘述)
圖源:Unsplash
正如Elsa所說,職業轉換是一次“進入未知領域”的旅程。
兩年前,我從大學畢業,主修經濟學與金融學,做好了在金融業工作的一切準備。投資銀行和全球市場是我理想的工作。畢業前9個月,我找到了在一家投行的工作,感到十分自豪,因為如果之前沒有在這家銀行實習過就很難得到聘用的機會。
在那個崗位上幹了幾個月後,我學會了一些Excel VBA程式設計方法,以及如何使用Tableau、Power BI和UiPath(一款機器人過程自動化軟體)。我意識到相對於銀行產品,自己對使用這些工具和學習程式碼更有興趣。我曾經對於銀行產品的複雜性很好奇,但現在發現它只是銀行從客戶身上獲利的一種方法罷了。
銀行環境對我的個人價值觀構成了極大的挑戰,但那是以後的話題。
同時,我的一位同事向我開啟了“機器學習”的大門。輸入特定資料就能“預測”特定結果,這一事實深深吸引了我。
我立刻入迷了。
但問題來了,我的程式設計技巧太過基礎。在我的字典裡,Python是一種“蛇”,而Pig……是一隻豬。
兩年過去了,我將要進入人工智慧(AI)行業,成為這個領域的一名工程師。這段旅程艱難而漫長。對我而言,轉戰人工智慧只是學習和成長的新開始。
圖源:Unsplash
我的旅程
跳上慕課的宣傳列車
只有經濟學和金融學背景,我不知道怎樣程式設計。ExcelVBA與程式設計十分接近,但僅此而已。為了成為一名高成就者,跳進資料科學的潮流,我報名參加了很多大型網路公開課(慕課)。以下是我報名的課程列表:
· python訓練營:從零到英雄[Udemy]
· 資料科學和機器學習的python訓練營 [Udemy]
· 使用MySQL管理大資料[Coursera]
· 初學者的Java教程[Udemy]
· Web開發人員訓練營[Udemy]
· 機器學習A-Z:資料科學中的python和R實踐[Udemy]
· 使用Docker部署機器學習和NLP模型[Udemy]
毋庸置疑,大多數課程我都沒能完成(只完成了標記粗體的課程)。我陷入了慕課自我延續的迴圈。知識的易獲取性使得課程很自然地從一門課延續到下一門,因為覆蓋的主題太簡短,使我的興趣轉瞬即逝,我經常還沒上完前一門課就跳到了下一門。
對我而言,內容簡短是慕課最大的缺點。我本希望學完慕課就能得到一份資料科學的職業,但現在看來過於天真了。
為了提供觀點,教授傳統的機器學習(ML)方法的慕課常常忽略了模型的實際作用。慕課講述隨機森林演算法是決策樹的集合,但並未說明決策樹如何決定在哪個分支上選擇哪個特徵(如熵的概念和計算)。它只簡單講述了支援向量機是一種分類方式,但沒有說明如何確定超平面。
在更先進的AI領域(如深度學習)裡,“我知道什麼”和“我需要知道什麼”大相徑庭。教深度學習的慕課的慣用套路是:把一堆程式碼放到Tensorflow上,放在如MNIST的優秀資料庫中,並推斷“你現在已經是一名深度學習專家了”(有些誇張,但你應該能懂我意思)。這與現實相差甚遠,因為研究報告經常包含複雜的結構,包括對深度神經網路模型中提取特徵的理解,以及其他更復雜的特徵,如變壓器和雙向編碼的理解。理解最先進模型優於其他模型的原因也很重要,以及一些概念如轉移學習和元學習。
我認為,教ML的慕課常常給人以這樣的錯覺,即任何人都能成為一名ML從業者。他們天真的以為,ML僅僅是幾行包含.fit()和.predict()的程式碼。這是因為慕課表示人們可以較為輕鬆的開始學習ML(或許正是對於ML的大量炒作使得這些課程利潤豐厚)。
不過別誤解我,慕課其實很棒。它使人們能方便快捷地獲得知識,開始某個話題。但是它們能使你成為專家嗎?明顯不能。你在學完課程後所做的,才能決定你能否成為專家。
把手弄“髒”
完成幾個慕課課程後,我一無所獲。誠然,我學會了python的一些基本技能,知道如何通過.fit()和.predict()使用sci-kit learn,但僅此而已。
為了提高程式設計技巧,我在Hackerrank上進行練習並完成了與SQL和Python相關的問題。與其同時,我想將python應用於真實專案中。於是我開始研究用於預訂羽毛球場的機器人,它主要能使用Selenium與瀏覽器互動以進行網頁導航,最終購買並支付定金(類似於運動鞋機器人)。我開始該研究的動機是,新加坡的羽毛球場通常提取兩週就被訂滿了,常常一到放票時間,許多人就每天在預訂網站上露營搶票。(它們通常在一兩秒內就被預訂了)
雖然我對自己的python程式設計比較自信,但我對程式碼效率一無所知。時間和空間複雜度對我來說是完全陌生的。對我而言,面對物件程式設計只是一個概念,我從未實戰過(更不用說最終會被遺忘了)。
在ML領域,我是Jupyternotebook專家。我可以將Jupyter notebook的主題改為“黑暗模式”並充分利用鍵盤上所有快捷鍵。顯然,我已經準備好接受資料科學家這一角色了。
而事實檢驗——我的面試慘敗。設計程式碼的技術測試讓我更快的邁出了“資料科學”的大門。我申請的技術分析崗位讓我到另一個部門,因為他們覺得我去業務分析崗位可能更合適。
我距離我需要去的地方還很遠。
圖源:Unsplash
手還不夠“髒”
為了更加深入學習ML和訓練python技能,我決定在新加坡管理大學攻讀IT商業碩士學位(專攻AI)。
我學習了傳統ML模型背後的數學原理,並將最先進的深度學習架構應用到自我管理的資料集中。我學習了關於AI的重要概念,包括通用搜尋演算法、Q學習和深度Q學習。學習了演算法設計,包括圖形演算法、時間和空間複雜度、名字匹配演算法以及許多幾乎要撕裂我非電腦科學大腦的演算法。實質上,這些課程為我提供了慕課所缺乏的學術嚴謹性。
碩士期間我的一些專案小有成就。他們不是完全成熟的專案,因為所用的資料集通常是別人給的或者從Kaggle上獲得的,而且展示在Jupyter notebook後專案就結束了。深度學習模型在Docker上持續執行,但是從未考慮過部署方面。畢竟只是學校的專案而已。
我認為,碩士學位提供了AI專業人士所必需的學術嚴謹性,但是缺乏實用性。碩士課程不會告訴你找到一份資料科學工作需要什麼,你必須自己弄清楚。軟體工程和開發運維技能是資料科學家工作的一部分(但是不夠廣泛)。程式碼協作在大型組織裡也很重要。同樣地,知道如何搭建Docker環境、啟動AWS EC2例項、在Azure blob儲存上託管資料集、有效組織程式碼以及使用GitHub或Gitlab進行版本控制都是一些必需的關鍵技巧,然而這些在課堂上也學不到。
就算你認為自己不夠優秀,也要大膽去嘗試。
我繼續參加面試,在技術面試和非技術面試中積累了大量經驗(儘管大多數面試還是不及格)。這使我瞭解自己的知識盲區並能花時間學習相關技能。更重要的是,它使我瞭解不同公司對同一崗位提出的不同工作描述,以及這些工作描述與公司在AI應用的成熟度上的相關性。
兩年後,我得到了一份AI工程師的工作。對我來說,這是一個極大的學習和成長機會,是我所夢寐以求的。除此之外,這也證明了任何人都能完成他們著手做的事情,儘管有些人花費的時間可能會久一些。
最後,職業是一場馬拉松,而不是衝刺賽。做你熱愛的事情,因為工作會佔據你人生的大部分時間。
如果你彷徨不知向何處去,請記住Elsa所說的,“做下一件該做的事”。
圖源:Unsplash
所以,與其浪費時間在那糾結,不如趕緊行動起來吧~
宣告:每個人在資料科學上的旅程是不同的。這篇文章不是關於“如何進入AI世界的大門”,也不應被視為入門指南。這只是我的個人經歷,希望能鼓勵人們冒險去做自己想做的,因為生命轉瞬即逝,不應毫無意義地虛度一生。
留言 點贊 關注
我們一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 “讀芯術”
(新增小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智慧科技哦~)
相關文章
- 盲人 Google 工程師是如何寫程式碼的?Go工程師
- 這兩年多我寫PHP業務程式碼的方式是如何進化的PHP
- 當我寫程式碼時 我寫的是
- 我是一名前端工程師前端工程師
- 我是如何將業務程式碼寫優雅的
- 如何編寫富有表現力的程式碼?
- 你們現在編寫程式碼是從先寫測試開始嗎?
- 我們應該如何編寫高質量的前端程式碼前端
- 我是如何成為一名機器學習工程師,並很快找到工作的?機器學習工程師
- 如何編寫MapReduce程式碼
- 如何編寫簡潔的程式碼?
- 現在的你,是開發工程師、程式設計師還是碼農?工程師程式設計師
- 如何編寫高效的Android程式碼Android
- 我是工程師,不是編譯器工程師編譯
- 如何編寫乾淨高效的CSS程式碼CSS
- 於是 我當了一名程式猿
- 我們在編寫python程式碼時應該注意那幾件事!Python
- 如何從一名軟體工程師轉行做人工智慧?軟體工程工程師人工智慧
- 我是一名聾啞的程式設計師程式設計師
- 在 Laravel 中編寫簡潔的程式碼的策略Laravel
- 我是一名程式設計師而且我很蠢程式設計師
- 現在的程式設計師的程式碼風格真的是超乎我的想象能力程式設計師
- 我試著用模式寫東西,可是總是不知道如何下手模式
- 我寫的jQuery程式碼jQuery
- 什麼程式碼是ChatGPT無法編寫的? - datachimpChatGPT
- 編寫觸發器實現兩張表資料同步,sql程式碼如下:觸發器SQL
- 我是如何兩週瘦12斤的......
- python如何換行編寫程式碼Python
- 如何學習用Java編寫程式碼?Java
- golang如何優雅的編寫事務程式碼Golang
- 如何編寫出擁抱變化的程式碼?
- 你現在不用寫程式碼了吧?
- 如何簡單高效的在程式碼中實現兩級快取的管理快取
- 菜雞程式設計師是如何寫程式碼的?程式設計師
- 編寫良好的程式碼:如何減少程式碼的認知負荷
- 消極程式設計師系列——我媽永遠不知道我敲的程式碼是什麼程式設計師
- 程式碼是寫在Routing中還是專門寫程式處理呢?
- 在別人寫的程式碼上做修改我是這樣保證正確性