跳到主要內容區

機器學習導論與實作 - 資訊系三年級 陳頎元

課程名稱►機器學習導論與實作      授課教師►資訊系 高宏宇老師
心得分享者►資訊系三年級 陳頎元
會得知這個課程的資訊是因為偶然在臉書看到同學在宣傳成大跨域模組化課程,在暑假閒來無事的時候,花費五天上密集課程就可以得到1.5學分真的很吸引我。系上也有同學在揪團一起修課,並且我本身也對這塊未知的領域頗有興趣,於是就在眾多模組化課程中選擇了『機器學習導論與實作』此堂課程。在選課開始時,這堂課程被瞬間搶完,於是我只能申請加簽,授課的高宏宇老師有在郵件中提醒我,此堂課程並非專業的機器學習課程,建議我這個資訊系學生可以去修系上所開的課程。但是由於我並沒有有關機器學習的基礎,再加上我想透過這堂初階課程來一窺機器學習的世界,所以我並沒有更改目標。
 
關於授課老師與課堂介紹
此堂課程分為兩個部分,早上九點至中午十二點為高宏宇老師進行機器學習的概念講解,就跟平常學期中的上課教學是差不多的,高老師人非常親切,第一天並沒有一開始就講太深的東西,而是先闡述了AI 不等於機器學習的觀點,AI是更廣的領域,而機器學習只是AI內的一部分而已。會這樣說的原因如下:機器學習只是代表了一種特定的技術方法,用於從數據中學習並改進性能。AI還包括其他元素,如知識表示、推理、規劃和感知等,這些都是實現智能的不可或缺的組成部分。因此,機器學習僅是實現AI的一個重要元素。老師也介紹了機器學習領域的基本元素以及各種學習模式,基本組成就是由:模型、參數、learner三種東西組成,老師也介紹了人腦與機器學習判斷的差異,老師也有提到,這五天的密集課程的內容沒有辦法讓我們有能力去處理非線性的資料,只能處理線性函式,例如y=ax+b。而下午一點至三點三十分為助教課,第一天助教使用colab來教學python,雖然助教是從頭講起,但是我還是建議來上這堂課前要有寫過一點程式或者學過一點python才不會跟不上,因為助教在兩個半小時內講完了python的基礎觀念。第二天高老師講解了監督式學習的基礎:決策樹(decision tree)、Instance-Based Classifiers、Nearest Neighbor Classifiers、Bayes Classifier等等等,並且也有提到training 的數量並不是越多越好,即overfitting and underfitting,在某個點時error rate會呈現最佳狀態。而在Bayes Classifier中,運算過程相當複雜,於是衍生出了Naïve Bayes Classifier,即將每個事件皆視為Independent(獨立),而運算就會瞬間簡化。這些運算符號對於我來說並不陌生,因為上學期剛修完資訊系的必修:機率與統計,其一開始就詳細的解釋了貝氏定理,所以我在第二天的早上課程是相當輕鬆愉快的。第二天的下午則接續了昨天下午的python演習課程,從迴圈的部分接續向下延伸,一樣是python的基本觀念,array、key and dictionary…一些基礎的結構應用。然而,到了接近課堂的一半時,助教所講的已然超出我之前所學的部分,變得開始有點吃力,尤其牽扯到新的Numpy的部分,整個課程的難度開始提升起來。首先因為是全新的概念,再加上需要對數據進行高效的多維數組操作和數學運算,這對我這個初學者來說較為複雜。此外,了解Numpy的API和數據結構,以及處理索引和切片等概念,都需要一定的時間,而且又要馬上應用,這就是較為困難的部分。
第三天老師依舊繼續講解有關機器學習的部分:深度學習,深度學習主要關注建立多層神經網絡以學習複雜的特徵表示。深度學習用於圖像、語音、自然語言處理等領域,主題包括神經網絡基礎、卷積神經網絡(處理圖像)、循環神經網絡(處理序列數據)和預訓練模型(BERT、GPT等)。不過時間相當短,差不多一個小時就結束,把時間讓給助教,而助教就開始介紹Pandas的基本概念。從這個時候開始,我終於了解到為什麼有修過這門課的前輩說這堂課程偏難了,首先,我整理出了Pandas的幾個難處:
   1.複雜的數據操作: Pandas 提供了豐富的功能,包括數據讀取、過濾、合併、轉換等,但這也使得它有許多選項和方法,初學者可能需要時間來熟悉。
   2.索引和選擇: 使用 Pandas 的索引和選擇功能需要理解行列標籤、位置索引、切片等概念,這可能會令人困惑。
   3.記憶體使用: Pandas 的數據結構在處理大數據集時可能占用大量內存,需要有效的記憶體管理。
   4.錯誤處理: 當處理數據時,錯誤處理和數據清理是挑戰,特別是對於不完整或不一致的數據。
   5.性能優化: 對大數據集進行高性能操作需要優化技巧,以確保運行效率。
這些題材上課速度過快,要及時吸收相當困難,回家複習都不一定能搞懂。之後幾天助教依序講解了:Matplotlib、Scikit-learn、Pytorch,到這個時候真的是有種期末的感覺,東西爆炸性地多然後隔天就要交出成品,在此強調千萬要找同伴一起修課。
 
team project and in-class HW
分組報告以及課堂作業是這門課程的評分方式,我認為team project是大多數這門課的學生的棘手之處,倘若不是熟識之人一同來修這門課程,沒有辦法短時間找到組員。而team project顧名思義,loading量對於一個人來說是有點多的,所以如果要一個人來修這門課可能會有點辛苦,但是實作能力強的人是可以負荷的。然而,就算是我們三個人一組,所做出的東西實在稱不上是好,大家作的主題都是KAGGLE上的題目(KAGGLE: 是一個數據科學和機器學習競賽平台,提供數據集、比賽和學習資源,讓數據科學家和機器學習專業人士共同解決問題並提升技能。),我們的主題被分配到的是沃爾瑪超市的購物主題,依據顧客的先前消費經歷來推斷他的下次消費,而基本上老師與助教都說,我們不需要所有程式自己從頭寫起,而是從討論區找多個人的程式碼,並且作修改,來讓loss下降。loss基本上是一種衡量模型預測和實際觀測值之間的差異的數值。它表示了模型的性能,通常越低越好。損失函數的目標是最小化這種差異。不同任務和模型使用不同的損失函數,如均方誤差(MSE)用於回歸,交叉熵(Cross-Entropy)用於分類,或者嘗試多種的model。老實說,我們在參考完各位前輩的程式碼後,完全沒有能力去修改他前面的各種參數,因此,我們主要以嘗試各種不同的模型來達成老師和助教們的要求,像是決策樹,KNN,最後我們千鈞萬髮終於在報告當天凌晨兩點趕出來了。我是負責解析每行程式碼,並且在報告中解釋,整份code有80幾行,而其他人則是負責常是新的模型。報告時間只有10分鐘,而最後簡報的方式就是先仔細分析我們這份參考他人的程式,例如:捨棄的資料、為什麼要捨棄、前處理、特徵、模型、、、等等,最後講解我們所使用的新模型,而最後助教給我們的點評是:資料感覺未經處理、未經比較,希望下次做有關機器學習的議題可以再改進。在這點我蠻認同的,因為我們的資料的確卻沒有經過篩選,而大家的作品都大同小異,所以描述自己數據的方法就會顯得更為重要。基本上助教們喜歡看到使用圖片來比較模型之間的差異性,通過助教的評語,我知道我在TRAINING的部分還有待加強。
課堂作業的部分基本上沒有甚麼問題,基本上就是助教在下午所上的東西,不過更為基本。而上課時教室後面也有助教隨時待命,助教三不五時也會來巡堂,看看大家有沒有遇到困難,因此課堂作業我相信大家都可以在上課時做完。而課堂作業每天都有,翹課基本都做不出來,大家要去上課!
 
心得
這門課可以說是超級硬。如果不想那麼累,建議一定要先具有Python以及機器學習的相關背景才來修課。五天課程真的相當充實,每天早上都要先接受全新的知識,下午都要自行動手操作。最後一天更是刺激,看著17組隊伍相互廝殺,看看誰的作品能夠吸引到老師的目光。但是也多虧這門課程,我不僅學習到了Python的基礎知識,以及Numpy、Pandas、Matplotlib、Pytorch、Jupyter、Scikit-learn,還有如何與同伴在短時間內製作出扣人心弦的作品,我絕對不後悔選修此堂課程!
 
關鍵字 #成大模組化 #難 #機器學習 #成大資工 #充實

瀏覽數: