既然決定參加職訓,就要能夠「對症下藥」,找最接近我想做的領域來上,因此當初直接以「數據分析」、「資料科學」等關鍵字搜尋。不過,當時沒有找到純粹的數據分析課程,通常會包含其它領域的知識,常見的有網頁(Django)以及AI(機器學習、深度學習)。
雖然同樣是寫程式,但是對跟網頁有關的前端沒什麼興趣,而且之前透過線上課程自學時,已經有初步接觸一些機器學習的概念,因此選擇了剛好時下正夯的AI相關領域。
以下就來跟大家分享這次職訓課程,大致上了哪些內容。
基礎語法的部分,多數都跟先前自學線上課程的差不多,頂多是提到的函數有差,但這些都可以透過查詢document解決(可以用的東西很多,全部講到根本不可能),所以課程一開始,我就依自己的速度把練習題都寫完(當然有取得講師允許),有聽到不太熟悉的內容時,再抬頭起來專心聽一下就好。
不過,到了課程後半,開始出現資料結構與演算法相關的知識,例如廢到知名的bubble sort、常常跟走迷宮一起出現的BFS跟DFS、中文名稱很容易搞混的queue跟stack。雖然真正應用這些知識的工作,跟很底層的程式開發有關,跟我想做的領域沒什麼交集,但聽說所有資工系的學生都必須學,而且在有些公司面試中,就會請你解釋這些概念,因此這些就成了python進階部分的主軸,除了理解它,也透過python實作出來。
除了課堂使用的軟體介面,跟之前自學時不一樣之外,基本語法沒有太多的不同,課堂練習也都可以靠自己研究&寫完。但令我意外的是,我在這堂課碰了不少網頁的語法!
雖然藉此可以理解部分網站的運作,確實跟資料庫相關,算是多了解不同層面的應用,但這跟我想像中的SQL學習差有點多;我原本認為會有更多實際資料庫的語法應用、分析跟探討。只能說講師備課的想法各有不同吧。
其實numpy與pandas都是python的模組,但把它們獨立出來,除了因為授課講師不同之外,我認為它們的重要性,應該屬整個職訓課程中最高的,可說是許多進階應用的基礎!
其實學習Numpy的操作,跟以前數學中的線性代數很像,而Pandas的操作,則跟Office Excel接近,也跟SQL類似。大部分的時候,我會先從以前學過的經驗,想像操作的步驟跟畫面,再來想怎樣透過程式碼實現,或者上網查找documentation的說明。
感謝之前數學系的訓練,以及事先自學SQL的基礎,除了一些參數設定細節不熟之外(e.g. axis=0 跟 axis=1的方向),多數程式碼都能快速理解,讓我能稍不費力地面對接下來的重頭戲:機器學習、深度學習(是真的挺不熟&複雜的,所以保守地說稍不費力😅)。
即使在線上課簡單認識了機器學習,但時數有限,這個部分並非那堂課的重點。現在來實體職訓了,必須認真面對這不太熟悉的領域,以及因為Alpha GO而常聽到但更不知其所以然的深度學習。
機器學習的運作模式,還算是可以想像的。這部分出現了更多數學知識與算式,也就是更多背後理論描述的內容。雖然我已經10年沒碰這麼抽象的數學,但仰賴學生時期培養出的「感覺」,大概80%理解這些式子想表達什麼。下課時,也偶爾幫不太理解的同學解說(雖不精確但至少讓對方能正確感受就好)。
深度學習可以想成:讓電腦用更貼近人腦的模式學習。人腦的學習機制都尚未摸透,可想而知深度學習的複雜度肯定更高;對我來說,操作這些模型沒什麼信心,即使得到想要的結果,也沒把握能了解透徹。從神經網路、CNN、RNN,以及現在正火熱的自然語言生成,當中仍有基於數學基礎而發展的結構,但更多的是先實驗出能提升表現、再回頭研究為什麼會提升的模型。
這就像科學家先從各種變因下手,做各式各樣的調整,突然就在某個moment,得出更滿意的結果後,才把此刻的變因組合記錄下來,再思考為什麼這樣調整是可行的,而非先從理論推論,再做實驗證明。有時常覺得深度學習的模型,都是摸不著頭緒的黑盒子呢!
在2個月左右的時間,就要塞進這麼多的知識,即使是我&班上已經有些程式基礎的同學,學起來也是有點吃力,連講師來上課也很有壓力;畢竟大家都希望來職訓就是要有成效,教不夠或學不上都很困擾。
不過,職訓畢竟不像大學上課,只能先將知識、技術交給你,接下來只能靠自己多花點時間,或是有機會應用在職場上的時候,好好練習、熟悉這些內容了。
PS. 其實職訓課程最後還有「專題製作」,也是我最看重的部分,就讓我獨立一篇在未來分享吧😆