第一次大學兼課,平衡與取捨的難題

蘇嘉冠
13 min readJul 10, 2021

--

在學校教書從來不是在我人生規劃的事情,而且還是大學的兼課,更是想都沒想過。然而在今年(2021)上半年,我卻在北科大工程學院完成了一學期的教學:人工智慧與工程應用課程。會接這門課算是因緣際會,原本去年教這門課的朋友,因為他公司的原因今年無法再上課,就這樣找著找著找上我,我也用嘗試看看的心態答應了。雖然這只是一門兩學分的選修課,但因為一些個人的堅持,這學期花了不少時間在課程內容的準備,所以還是想紀錄一下心得,算是給自己的一個回憶總結。

在開始之前,先提供一下課程相關連結:

關於這門課

這門「人工智慧與工程應用課程」是開在工程學院底下,主要給材料與資源系、土木系、機械系、化工系、車輛系等工程學院的大學部學生修課。方向是以基礎概念搭配實做為主,內容從人工智慧的概念與應用,到現在主流的機器學習與深度學習等。因為需要實做,所以也花了幾週的時間教一些 Python 的基本,還有搭配不少的課堂練習、作業、期中考,以及最後的期末專題。

相對於電資學院,工程學院的學生對這方面的基礎比較薄落,所以在內容與難度的取捨上需要滿小心控制的。接下來,就來分享一下幾點我認為值得紀念的事情,以及需要再檢討的地方。

期中考試,教室的一隅

那些值得紀念的地方

自製教材

現在不論是學校、公家單位、坊間都有不少關於人工智慧的課程,主要以機器學習、深度學習為主。在這議題如此興盛的狀況下,當然品質就會參差不齊,但不論品質好壞,我認為開課的最重要的一件事就是教材要盡量自己準備,尤其是有收費的課程。然而,還是有聽聞過某些付費課程是直接使用別人的投影片內容,這對我來說已經跨越了良心的最基本底線。雖然我在北科大這門課應該偏向非營利的教育性質,領的鐘點費很少,但還是堅持盡量投影片自己做、練習題自己出。在平常還有其他許多事情的狀況下,能這樣子堅持一學期,大概是我這門課最大的成果之一吧!

把授權搞定

會想要做好授權這部份,原因也跟上面提到的有關:有些人會直接使用(或是擷取部份)別人的教材,而且不附上來源。我想包括我自己,大部份的人都很樂於分享自己做的內容,但如果你的內容被用在有商業利益的場合,而且還是在你沒有同意的情況下,大概想法就不一樣了,甚至可能牽扯到複雜的法律問題。為了避免這種「悲劇」發生,我在投影片跟影片都加上「創用 CC」授權,原始碼都用「GPLv3」授權。

創用 CC 通常用在圖片或是設計比較多,投影片跟影片相對比較少看到。授權的內容可以自行調整,其中一個不允許用在商業目(NonCommercial, NC)的選項,考量一陣子後我還是決定拿掉,授權方式為 CC BY-SA 4.0,簡單來說就是「你可以隨意拿去使用、修改,商業用途也可以,但記得要提到原始作品,並且用同樣的授權喔」。

每份投影片都附有像這樣的 CC 授權聲明(來源

原始碼的 GPLv3 授權是 GPL 的一種,是一個「高污染性」且需要公開的授權。最簡單來說,即使你的作品只是使用某個 GPL 的作品,那你的作品也必須要用 GPL 授權並且公開。我花很多時間在撰寫練習題,還是希望能盡量貢獻在公眾領域,所以才決定用 GPLv3。為了保險起見,就算是同樣的原始碼,我在 GitHub跟 Colab 上的練習題都同時宣告 GPLv3,雖然有點龜毛,但多做總比少做好吧!

大量的練習題,與梗結合

第一堂課的時候,就有跟同學說這是一門教基礎概念、應用,有很多基礎練習的課程。為了實現這個承諾,基本上幾乎每週都有實做讓同學可以在課堂上練習(當然這也讓我準備的超累)。實做練習的內容盡量是偏向應用或是情境題取向,並且盡量結合一些大學生或是年輕世代能懂的網路梗,例如 Python 基礎練習就把天竺鼠車車的角色放進題目裡、某次作業用 Pokemon 能力值當作練習用的資料,並且結合比雕被小智拋棄 20 年的故事作為開頭,或是在做影像分類模型訓練的練習時,目標是讓模型學會分辨輸入圖片是紅貴賓或炸雞。各種的梗,就是希望讓學生能有更多實作經驗外,也對這些題目印象更深刻。

實做練習結合天竺鼠車車(來源

教學神器 Google Colab

Colab 是一個 Google 的雲端服務,讓使用者可以直接在瀏覽器在撰寫、執行 Python,可以想像是雲端版本的 Jupyter。使用者可以在 Colab 筆記本上寫程式碼,並且支援 Markdown 語法來寫說明與教學,也可以執行 Linux 指令(最常用的就是用 pip 來安裝需要的 Python 套件)。筆記本是儲存在 Goolge Drive 裡,所以可以輕鬆的分享給需要的人。對於初學者最方便的,大概就是不需要在自己的電腦安裝開發環境(這個步驟是很多初學者的一大關卡),而且 Colab 還提供免費的 GPU(訓練深度學習模型沒有 GPU 速度會慢很多),更是大幅降低入門的門檻。

以前我其實是滿反對使用 Colab 或 Jupyter 的,主因是我認為筆記本對程式碼的寫作方式是有害的,不過考量到 Colab 幾個難以取代的優點,最後還是決定以它為當作平台。雖然在大量使用 Colab 之後還是發現不少難以克服的缺陷,但也因為 Colab 讓不少同學能夠快速入門,盡量避免掉前期的挫折、失去興趣、甚至放棄。未來如果他們真的想走這程式設計這條路,再去學如何正確使用開發工具都還來得及吧。

自動改答案系統

在這門課學生真的需要繳交的作業及期中考其實沒有很多,但為了避免我及助教陷入改作業、考卷的地獄,我寫了一個簡單的系統,學生可以直接上傳答案,並且自動回答正確與否。這樣的方式看起來似乎「沒有人性」,但我認為可以讓學生提早知道寫程式是很少模糊空間的,並且可以讓他們體驗努力 debug 讓答案從 FAIL 變成 PASS 那種成就感,算是一種深刻的回饋吧!

答案變 PASS 的興奮感(來源

可能也會有人想,這種方式如何避免作業抄襲的問題?的確是沒有辦法避免的。我認為要探討的應該是:作業抄襲是道德層面問題(被發現會被譴責)還是法律層面的問題(被發現會有懲罰)?我的作法是相信學生,把它定義為道德問題。老實說就算真的有人抄襲,對其他人也是沒有任何損失,損失的還是抄襲者本人。

再來分享一下這個系統本身,我寫了一個簡單 REST API Server(GitHub 連結),並且部屬在 Heroku。學生只要呼叫 API 就可以上傳答案。Heroku 應該很多人都用過,可以快速的做更新與自動部屬,免費的版本就很強大了,非常推薦有類似需求的人使用。

上課的互動

以前被不少人說過,上台講話的口條有待加強。近幾年因為有許多機會在台上分享、演講,這方面的困難算是稍稍克服,但關於跟台下聽者的互動方式,似乎還是沒有一個習慣的模式。在大概期中考之後,課程內容開始變得偏難,那時候開始思考要如何透過互動讓同學可以容易吸收,最後想到的方法是:一直問問題,沒人回答就直接找人問,傳統但很有效!這個方法是看到我在 UBI Taiwan 的好夥伴:Tyler, 教學時與台下的互動,搭配他順暢的口條,氛圍與一般的上課就是完全不一樣。另外一個方式是搭配輕鬆的影片或網站,例如在講影像相關的課程時放啾啾鞋的影片、玩 Quick Draw,學生的回饋都是滿正面的。

疫情與遠距教學

今天五月中台灣很不幸的爆發疫情,那時候學校很快的決定全面改成遠距教學,就這樣我在學期的最後一個月有了完整的遠距教學體會。還好平常早就滿常用線上會議軟體,對我來說算是滿習慣的一件事。我是沒有要求學生開視訊鏡頭的,這對有些教學者來說可能會有心裡壓力:會不會根本沒人在聽我講話,大家都是躺在床上耍廢?我認為只要心態調整好,對學生有足夠信任,這不會是一個大問題。如果學生真的沒在上課,或許更可能要去想:是不是自己講的內容讓學生不想聽?先把自己要求好,再來要求學生吧!對我來說,遠距教學唯一的麻煩大概是上面提到的互動方式,變得更難進行了。這個似乎也只能再多點經驗,慢慢去探索好的方法,以及培養跟學生彼此的默契。

期末專題

為了讓學生能有更多空間發揮創意,並且有個具體成果帶回家,安排了期末專題,讓學生可以自行組隊、設定題目、尋找解法並且手動實做。在正式的專題分享的前一個月左右,每組要繳交專題構想書,讓題目能盡早確定下來以利後續發展。另外,我還提供學生許多案例,幫助他們做題目發想。最後總共有五祖,分別是「辨別假新聞」「閩南語語感訓練」「臉部情緒辨識」「股票預測分析」「惡意軟體預測」。其中有幾組的題目我認為非常有意義,而且做的也很扎實,看到學生能做出這些成果其實滿欣慰的。

那些值得檢討的地方

修課人數的設定

除了值得紀念的部份,教課的過程中也發生不少需要檢討的部份,其中最有印象的第一點就是修課人數的設定。原本期待這門課是小而美,盡量每個學生都可以照顧到,所以人數上限設定只有 24 位,而且不能加簽。開學的加選期間馬上就發生事故,選到課有一半是「聞香而來」的電機系學生,但這門課在難度上是開給工程學院的(電機系是電資學院)。為了保障工程學院學生的修課權益,只好透過各種方法「勸退」電機系學生,讓出寶貴的修課名額。雖然最後有協調成功,但選到課的人數最後只有 22 位。

另一個沒有事先預想到的,是學生會期中退選或直接放棄上課。當看到有人提出退選申請時,除了與學生溝通之外,實在是沒有拒絕的理由。當看到有人直接不來上課、不交作業及期末專題、不考期中考,那也只能默默的把學生當掉。最後堅持下來的人剩 18 位,相比之下教學資源(一位講師、兩位助教)其實是綽綽有餘的。如果未來還有機會開課,調整更適合的修課人數上限大概是我首要目標。

難度設定,到底什麼叫做「基礎」?

雖然這門課的目標是「基礎」,不過大家對基礎的認知似乎有落差。我原本滿期待是學生至少都有一些程式以及數學的經驗,不過在開學的小測驗後就馬上發現,大概有一半的學生是沒有辦法滿足這個期待的。所以我就把更多時間花在基本的數學以及程式(Python)教學嗎?後來我思考後答案是不,畢竟這是一門「人工智慧」課程,並不是大一的程式設計課,如果花太多時間在 Python 教學、基本數學,它就變成另一門課了。所以只能折衷用很快的時間把 Python 帶過(講解加練習大約花三、四周),數學則是在需要用到的地方大概提一下,不講太過深入。

從期中的表現來看,這個方法對有一定基礎的人應該是有用的,但對於比較不熟悉的人來說,似乎圍繞著跟不上進度的恐懼感。有一位期中退選的同學跟我說:「進入 3/10 那週有點吃驚的是老師用兩節課的時間把我通識python課的東西全部講完。往後的每一週又有更多的新東西和課程內容,到assignment 1 時已經對題目完全不知道如何著手了。」,當下除了安慰他以及核准退選之外,我好像什麼都無法做。另外,有幾位堅持修課到最後的學生,也可以明顯看出來他們是連簡單題目都無法應付的。這幾位案例讓我有點挫折,也感到對他們不好意思,是我教這門課的遺憾之一。

這個方法錯了嗎?我曾跟一位學生聊,他說他們系大一是有程式設計課的,只是開課的老師其實不太懂,所以只能呼嚕呼嚕的教過去,學生能學到的很有限。可以看出來「環境」問題也很重要,所以我的行動是跟系主任建議,應該要有其他的課程來搭配,先培養「運算思維」可能是更重要的事情。如果未來還有機會,或許會把修課的門檻稍微加高一些,至少有一定的基礎才能修課。畢竟要在短時間勉強讓學生長大,只會造成營養不良而已。

概念講解與實做練習的平衡

「理論與實做並重」大概是現代人最喜歡的一句話之一,要如何達到兩者的平衡永遠是個難題。其實我認為在機器學習、深度學習領域,先有良好的概念基礎是最首要的,不過如果在一週只有兩小時的課還是沒有還是沒有程上,要把所有重要的理論概念全部講完的話,大概就不用練習了。我只好盡量在合理的範圍內取得平恆。

課程回饋問卷來看,學生還是比較偏好實做練習,或是說更偏向實際應用的內容。例如在講 Regression 的時候,就有不少同學反應有點難吸收,但在講影像辨識應用的時候,正面回饋的比例就高很多。或許未來可以把這方面的內容再提高一些,更多實際的應用。另外也想到其他有趣的點子,例如結合 IFTTTLINE Notify 即時發送模型辨識的結果,或是用 Jetson Nano 做一些實體世界的應用。讓學生先有興趣,未來想要深入再自學都不遲。當然,如果要準備這些應用,對備課的人來說會是個大挑戰就是。

這大概是理論聽太多之後的反應吧?(來源

只教機器學習、深度學習?

許多人把「人工智慧」、「機器學習」、「深度學習」這幾個詞混用,甚至認為是同義詞。對於人工智慧這個詞,我一直認為它是個目標,而現在流行的機器學習、深度學習,則是實現人工智慧的其中幾還是沒有種方法,其他方法還有探索、推論、專家系統等等。在第一堂課時我就把這個想法講清楚,並且說明接下來的課程會以機器學習與深度學習為主,畢竟這是現在的主流。原本還希望安排一堂課講其他的方法,不過在時間的取捨下還是刪掉了。現在想來還是覺得很可惜,如果講能更廣一點,增加學生的也眼界應該很不錯。

當同學跟你問答案,你要講的多具體?

一般來說,如果學生在實做練習遇到程式上的問題,我都會盡力具體的回答。如果是概念方面的,則盡量用舉例的方式來幫助理解。但如果今天是更開放的問題,該如何回答是最好的?我遇到的狀況是期末專題某組的學生,遇到模型訓練準確率上不去的問題,所以寄信問我有沒有其他更好的模型可以去嘗試。從他的口氣看來,應該是真得很挫折(信中強調難好難)。我當下是滿猶豫的。專題本來就希望是讓學生自己去探索,加上這個問題目前也沒有正確解答(不同資料集有各種不同結果),所以最後只有給他們幾個參考用的連結,請他們自己嘗試不同模型看看。不知道是時間不夠的關係、還是太過困難而放棄,最後他們還是只有用原本的模型。如果那時候我回給他們一個明確的指示,結果會有不一樣嗎?對他們會是好事嗎?我現在還是沒有答案。

小小的結語

一學期下來,真的話不少時間在課程的準備上,心境也是起起落落,但整體來說還是個難得的經驗。最難忘的大概是期末專題的成果,以及每堂課學生給予的感謝。有一位大四學生說他未來想要走這方面的路,幾乎每堂課結束都會留下來再問我各種問題,我也很樂於回答、討論。他還跟我說他大四修了很多相關的課,但這次的期末專題是他第一次完整做一個專案,是一個很好的經驗。祝福他未來能夠順利,也謝謝拉拔我的朋友、系主任,辛苦協助的助教,以及每個願意來修課的學生。

--

--