Research Project
這一門課, 總之, 就是教導論文的寫作觀念, 文章結構以及如何使用word或者latex來撰寫論文. 大部分的同學都是選擇latex, 雖然要學會打latex的程式但是latex的數學公式跟排版真的漂亮! 我也是非常推薦使用latex!
簡單說一下, latex 有網路版本, 可以與人分享並且允許同時多人在線上在同一個文件上面做修改 — Overleaf. 這個線上版本我不推薦用來寫自己的長篇論文的 … 因為在網路上面編譯很慢, 而且也不能設計自己的references … 但是, 我們會拿來做報告(conference paper), 因為, 報告會需要大家分工來撰寫. 因此, 就可以運用前面提到的 — 共同修改的功能!
那最推薦的latex軟體就是TexShop, 我一開始也不是很會設定這個環境(mac), 但後來研究過其實並不難蠻好用的. 只是 … Texshop的編譯很不良 … 常常需要重新編譯好幾次…但沒差! 因為速度很快, 畢竟是本地端.
這門課會與自己的指導教授開始密切的開會以及討論未來的論文撰寫方向(理論上). 因為, 我的指導教授忙到我把Literature Review交出去之後, 才跟我開會討論我研究的結果. 因此, 我的論文全部自己DIY的(我想來這邊讀可能就要有點想法吧!) 所以, 選教授就是自己選不只是自己的題目以及喜歡的方向, 還要選擇這個教授到底適不適合自己! 如果很需要一個能常常指導也會定期開會的教授就要問好. 如果想要更多自由亦然. 順帶一提, 我的教授在系上是超級紅, 因為她是主攻Reinforcement Learning, 所以非常多人想當她的學生. 她今年總共收了10位碩士生.
Functional Programming
禮拜五(17, May)剛剛考完這一科的期末考 …
這一門課分成兩個重點: 一開始會先學如何寫haskell, 這是屬於課程的前半, 大概40%的課程. Functional Programming language很有趣, 主要是要使用recursion來處理超大量的計算, 因為, 一般的腳本程式語言recursion使用stack來做堆疊運算. 因此, 面臨著大量運算, 很可能會把電腦的的stack疊爆! FP的程式語言因為使用了Continuation的技術來解決這一個問題. 簡單說:學會用recursion來設計type跟寫程式! 非常有趣的程式語言. 另外的60%是在學習所謂的lambda calculus. 什麼叫做lambda calculus? 上課就知道囉. 這是當年由Alonzo Church提出來並在Turing機發表後的幾年 … 由Alan Turing 證明得出 lambda calculus 與圖靈機是等價的. 基本上, 這個就是電腦的原型. 不過, 完全用數學的函數來思考程式語言語法以及定義型態. 非常的變態! 但是, 很有趣! 邊學邊讚嘆Church的偉大!
考試的部分, 2019年的考題很不錯! 我認為具有挑戰性, 雖然我這一次準備的時間很短無法充分準備所以我的具有挑戰性並不是完全準確. 但是一考完, 英國的同學也問說這一科考試也要及格才算過嗎? 還是總分過就可以了? 考題設計非常具有創意度, 我很喜歡今年的考題.
functional Programming這一門課只有一份大作業, 80%寫程式, 20%寫報告關於什麼是Continuation. 程式的部分同樣分成A部分與B部分.
A部分主要是帶妳去了解基本的Beta Reduction到底該如何做, 透過瞭解數學定義來寫出程式. 這邊強烈建議一定要弄懂跟手作. 因為之後學的數學推導你同樣還是得會.
B部分主要是讓你去完成Krivine Abstract Machine. 總之, 這些東西的資料也很少! 相信老師的教導, 老師的講義筆記都非常詳細. 這一部分很難, 據我所知全部答對的人並不多.
接下來是選修的部分, 選修部分有好多堂課:Reinforcement Learning, Cryptography, Intelligent control and cognitive systems, Human-Computer Interaction, Entrepreneurship, Security and Integrity.
粗體字標起來的就是我修的課程, 因此, 其他我不予評論. 雖然有聽同學很多大大小小的評論 … 但為了不失偏頗性我決定不予評論以及提供任何資訊, 這邊先說聲抱歉了.
Reinforcement Learning
這一門課, 老實說, 沒什麼好講的!網路上都有資源, 就是教Sutton跟Barto那本書. 老師教到policy gradient method為止. 然後助教有帶如何寫NN. 那這一門課呢, 其實, 我覺得很重! 但是, 非常的有趣. 因為這項技術就是AlphaGo的主要應用概念.
第一份作業是寫機器人在地圖上找金塊. 這裡一開始都不是很會 … 後來才逐漸的了解! 算是入門題目但是一開始做得非常痛苦. 但是, 非常值得! 算是打開了自己後續對於RL的思維. 如果我有力氣, 我再把Sutton and Barto的讀書心得放上來, 雖然網路上已經很多資源了, 一堆人都寫過讀書心得.
第二份作業是寫蒙地卡羅方法來學習玩21點. 這一部分很單純. 學會如何使用MC來設計出Model-free的agent.
第三份作業是做tic-tac-toe. 這裡你會學到如何設計state以及關於temporal difference的方法 — Sarsa. 這份作業寫完, 我認為, RL的基礎能力已經成形了!至少在未來很多DQN會用到的思維都已經具備!
第四份作業是MountainCar. 這一份作業是所有作業裡面比重最重的. 你可以學會如何使用逼近的方式來去做學習而不是像現在大家所熟知的Neural Network.
最後, 有一個大型的報告. 這一份報告可以由1人至4人一起完成. 我們這一組是用設計Agent來學習有效地控制紅綠燈. 使用Sumo來搭建環境道路環境. 然後, 自己研究如何使用各種RL的方法來解決自己所選擇的問題.
Intelligent control and cognitive systems
這一門課超級有趣, 但是, 整體而言, 我覺得這一門課非常地逼人! 我想如果你認真去想把事情做更多的時候, 真的會學到非常非常多的東西, 因為老師給的問題都是開放性問題! 而且這位老師非常厲害是全球人工智慧設計道德的先驅 — Joanna J. Bryson. 我們這一門課的設計是跟MIT裡面的課程設計是一模一樣的, 因為老師是MIT畢業的學生, 所以, 她非常喜歡以前學校的教學模式! 如果想要感受MIT的上課方式選這一門課就對了.
這一門課非常的緊湊, 一週會上3個小時左右的課程, 然後下一週就會進行多選題的考試(有倒扣). 考試題目一半是課本上大概可以找到答案, 一半則是你必須懂才有辦法選出答案, Google都不一定Google得到確切的答案.
一學期總共有四份作業, 每一份作業都必須要寫成conference paper的形式. 老師強調: 只要發明任何東西或做出來任何東西, 她隨時都可以幫助學生發表論文也可以幫助學生申請獎學金或者到名校讀phd等.
1. LeJOS 樂高機器人: 基本上, 這一個在台灣也買得到!可以自己研究. 我們的目標就是設計出實體的機器人最有效率地跟著牆壁走. 沒了 … MIT的課程設計就是open question. 是一個務實的在解決真正的問題, 沒有真正的解決答案, 透過實際上的動手做來學習. 但是, 時間很短 … 所以, 如果心很大的時候, 就會很痛苦因為時間非常短. 當然, 也肯定會學到很多!!!
2. Netlogo: 人工智慧的機器人一開始都會使用虛擬環境來進行模擬. 過去最主流就是用Netlogo來做(現在不是了). 那這一份作業, 會針對人類社會行為跟文明來進行探討. 會有不同的方式來做討論, 要進行所謂的統計分析.
3. BOD-UNITY-GAME: 這是一個5 vs 5在Unity平台上面進行的槍戰遊戲. 這裡完全自己設計遊戲的人工智能, 最後要參加比賽跟其他同學對打. (我有試著使用Reinforement Learning的方式來做, 但是如果未來有人想做要記得! 在xml那邊的非同步問題必須要注意到! 因為遊戲的程式寫得並不是很穩定, 所以, 我最終是失敗. 但是, 我認為時間夠多! 至少有辦法使用Q-learning來做學習.) 這份作業如果參加了比賽, 就不需要寫paper囉!!! 變成要寫觀察報告: 寫10點於比賽觀察到的現象與遊戲人工智慧的關係.
4. conference paper(2–3 pages): 這就是把前面三個作業選一個作延伸來寫成conference paper. 這個占比是最重的.
Cryptography
密碼學整個學期幾乎沒上課XDDD 因為前面兩門選修超級忙 … 再加上我都特意去做出Rinforcement learning的東西(跟自己的Dissertation有關, 我覺得有趣過頭了) … 所以, 我的時間分配在這學期變得非常糟糕! 這一門課我必須要說老師其實教得還好(不是沒上課嗎? 還批評老師?) … 助教教得很好. 密碼學只學兩件事: 加密系統 跟 數論(純數). 我不會覺得我數學超厲害, 但是, 我認為我都是可以理解的. 所以, 我一直不懂數學系在講純數很難很抽象很不知道怎麼應用 … 到底是什麼概念 … 學完數論之後, 我懂了! 而且, 我很肯定我以後應該不會再碰這一個領域(直接孬掉). 基本上, 數論就是在學著用各種數學定理去求數字與數字間的關係!!! 就是數字跟數字. 密碼學很在乎是不是質數這件事情 … 那怎麼求餘數就是一件非常重要的事情! 怎麼對多個不同的數字求取到相同的餘數等. 如果有興趣現在就可以放上來幾個赫赫有名的定理: Fermat’s LittleLemma, Chinese Remainder theorem, RSA. 當然我是全部都理解也可以推導的 … 如果, 有人想要問更多也歡迎留言進行討論! 這領域還是相當有趣的! 只是我當初的認為是比較偏向是hash function方面程式上的設計 …. 沒想到是單純的學數論. 整體而言 … 好抽象啊XDDD 這一門課是數學系大學部的必修! MSc Computer Science的選修! 整個班100多人吧?! 只有11個CS的學生(其中有3個大學是數學系的) … 對數學系而言, 這門課應該是簡單的?!
第二學期就這樣結束了 …. 不敢說這學期自己會拿到Distinct了, 但我小小的希望XDDD 不過, 這學期我真的收穫滿滿! 希望, 接下來寫論文順利了. 寫完之後, 如果大家認為有必要的話 … 我再把論文的寫作方式跟latex的經驗分享給大家.