台大資工大二上修課心得

前言

這學期終於沒有微積分和普物的惡夢了,所以我想把成績顧好一點,學期初的目標應該是全部科目都 A 以上,不過我還是選了一些非常硬的課,等等就會提到。

課表

2系統程式設計個體經濟學原理
3現代密碼學的理論基礎
4
5會計學甲一上
6機器學習
7投資學普通心理學
8
9國民法官必備之基礎鑑識科學
10

機器學習(HTML)

3學分,等第:A,A+率:12.06%。
我的課程評價所述,作業其實還好,因為比起 TAMC 真的輕鬆很多,難一點的題目也是想一下就能寫出來,花不了多久。

Project 遇到滿多挑戰,主要是問題真的很難,我們大概也都不是棒球迷,所以沒有 Domain Knowledge,基本上就是暴力法一直實驗。合作狀況也有點差,競賽基本上都是我在做,結果都沒做出好的結果來。結果 Random Forest 和 SVM 竟然是我和 BrineTW 最後一天努力肝出來的。因為另一位組員做出來 Accuracy 都 60 多%,實在太不合理,所以最後緊急重跑。想想真是有點荒謬,也許當初該把組員約出來實體見面,這樣他們大概比較會做事。
這堂課我學到最多的大概就是 SVM、Random Forest、Boosting 吧,雖然之前有聽說過,但不知道實際原理,像是 SVM 的 kernel trick、Random Forest 竟然是直接把一堆 Fully Grown Decision Tree 做 Uniform blending (實際上是 bagging),滿神奇的。

現代密碼學的理論基礎(TAMC)

3學分,等第:A+,A+率:23.53%。
選課時腦袋撞到亂選了一堆資工系的課,好像是因為很多課都不開放初選或是限制年級,再不然就是感覺太可怕,所以莫名的選到了這堂課。我想說既然選到了那就是有緣份,所以就硬著頭皮修完。

上課內容

課程的流程大致上是前幾週一路從因數分解的難度建構出 OWF、PRG、PRF、Strong PRP,達到各自的安全性質,而 SKE(Secret Key Encryption)其實可以簡單用 PRP 達成。實際上則是會直接建構 block cipher(相當於 Strong PRP),像是 AES 就是這樣。
接著是一些主題,首先是 PKE(Public Key Encryption),給出了 group-based 和 lattice-based PKE,分別是 El Gamel’s 和 Regev’s。滿有趣的,提到一些安全性像是 IND-CPA、IND-CCA(這邊並沒有劃分成常見的 IND-CCA1 和 IND-CCA2,為了簡化)。尤其是 FO transformation,從 IND-CPA 到 OW-CCA,再到 IND-CCA,真的是滿神奇的方法。
接著是 Signature、Zero knowledge、FHE,都是滿有趣的主題。

作業

寫 HW0 其實就有點累,主要是在 One-way function 的 Reduction 上我不太熟悉,甚至沒有寫機率的 Analysis,因為也沒有提及到要寫,這樣就被扣分我覺得滿冤枉的。之前第一次遇到 Reduction 是在呂學一的 ADA,那時是一些非常神奇、需要通靈(老師本人就這樣講)的 NP 問題 Reduction,像是 3SAT reduce to IS 等等,和這裡的 bits 輸入、bits 輸出的函數又不太一樣。
而後面上課時的內容和作業,則又變成了主要是 Security Game 的 Reduction,大多也是需要一些通靈或數學分析(主要是機率)。比如一開始的 Hardness Amplification of One-way Function (OWF) 是重複很多遍達到安全性,但這樣很顯然犧牲了效率,畢竟是理論,所以不太注重效率。具體的 Concrete Ver. 裡面的參數看起來真的很噁心,不過在證明的過程中就會發現是有用的。

上網查資料時很常查到 Cryptography Stack Exchange,有時候會不小心查到一些論文,通常論文的寫法都更加複雜且囉唆,所以實在有點難看懂。
寫作業時我很常問 AI,主要還是 ChatGPT,雖然回答品質很差,但有時還是會有點幫助,而且還能和它討論一些靈感,滿有用的。

這門課的作業和 scribe 都是要求用 $\LaTeX$ 寫,我是覺得還好,過一段時間後就熟悉了,是個很好的練習機會,但對有些人來說可能會有點困擾。

Scribe

這堂課比較特別,要求每人至少寫一週的 scribe,也就是筆記,在國外的理論課好像很常見。像是我在寫作業時常常遇到不會證明的就上網找資料,通常論文的東西都太新太難,而有些密碼學的課的 scribe 剛好就會講到題目的重點,滿爽的,但通常都還是找不太到,像是 Hardness Amplification 好像在網路上完全找不太到。說回 scribe,我自告奮勇在第二週的 Hardness Amplification 就寄信去說想寫,畢竟有前人的 scribe,其實沒有寫多少東西。

報告

其實這門課的開課對象是沒有資工系的,只有資工所和網媒所。所以其實修課的人大多都還是碩一碩二的學長,只有少數幾個大三大四,而大二更是只有我一個。還好分組報告有兩個碩一學長願意收留我。
我們一開始決定 FHE(Fully Homomorphic Encryption) 這個大方向,我們也都比較想找偏實用方面的研究,查了一下 survey paper 大致了解 FHE 的發展,大致就是很久以前提出一個概念,然後 2009 年一位大神 Gentry 的博士論文給出第一個真正的 FHE,透過 bootstrapping 來達成。後來再做各種改進和變化。
我是到處找 FHE 應用時,發現了這篇,當初是在 arxiv 找到的,所以老師問我這篇是在哪裡發表我還回答不出來,果然太菜了,後來發現是在 IEEE Access 上發表。這篇是第一個實作完整的 ResNet-20,用來推論 CIFAR-10 等簡單的資料集。雖然只是得益於更加進步的 bootstrapping 技術,但還是很大的進展。所用的 FHE 當然是 CKKS,是適合浮點數運算的 FHE。因此我們最後決定的主軸就是介紹 CKKS,它的構造本身就有點複雜,尤其是 bootstrapping,不過有個問題是我們不知道怎麼證明它的 IND-CPA 安全性,網路上也沒有完整的 reduction,所以只好呼嚨過去,還好老師沒什麼意見。最後我還是在報告裡坦承了我們不會證明。

考試

考試占比不重,只有期中考,closed book,但題目也真的有點難。不能帶走題目,但我真的很想搞懂該怎麼寫,還是稍微背了一下,這邊簡單列舉一下題目:

  1. next-bit unpredictable $\Leftrightarrow$ pseudorandom
  2. a. Are any PRG also a OWF? b. If $G(x)=G_1(x\oplus 1^n)|G_2(x)$, is G PRG? c. Twisted GGM: Change $F_k(x)=G_{x_1},…,G_{x_n}(k)$ to $F_k(x)=G_{k_1},…,G_{k_n}(x)$. Still PRF? d. OWF from PRP: Construct a OWF by fix a k, $f(x)=F_k(x)$, is $f$ OW?
  3. collision resistant in target collision resistant in OW.
  4. 1-bit SKE 擴展至 n-bit,會保持CPA,但CCA會壞掉
  5. PRF to 1-bit SKE, Suppose $F:{0,1}^n\times{0,1}^n\to {0,1}^n$ is PRF. $Gen(1^n): k\gets {0,1}^n$ $Enc(m)=(r,F_k(r)\oplus m)$, where $r\gets {0,1}^n$ $Dec(ct=(u,v))=F_k(u)\oplus v$ 應該是要證明 Security、Correctness 等

其中一堆 reduction 我真的想不太出來,尤其是 2a,因為作業中需要用到一個 PRG 是 $G(x)=G_1(x)|x$,不過這明顯就不是 OW,畢竟輸入就直接包含在輸出。但我在考試中一直覺得 PRG 必須是 OW,否則就可以透過還原輸入再運行一次 PRG 來分辨。現在看來應該是不一定,但我還是不太清楚該怎麼證明。

系統程式設計

3學分,等第:A+,A+率:25.74%。
這是系上的大二必修課,主要是讓我們熟悉 UNIX 系統底層的運作邏輯、原理,並成為一個好的 system programmer。介紹了很多 system call 和 UNIX 的機制。
鄭卜壬上課十分有熱情,會說因為他很熟悉 UNIX,所以要跟著他在腦袋中模擬 UNIX 運作。講的也確實很細,還有隔壁班的同學都跑來聽我們單班的課,因為他很佛心,NTU COOL 都是公開的,那裡有許多疫情期間的錄影,想了解的不妨去看看。不過常常岔題,而且很常不小心講到重複的事情,像是女兒去拿 Google 的小物就講了至少三次,也很常講到有位優秀的學生在面試 Google 時因為沒有檢查函數的輸入是否合理就被刷掉的故事。

考試

禁止 IPC(Interpersonal Communication),而且是 closed book。
期中考考了非常多 deadlock 和 race condition,我覺得課程安排的最大問題就在於期中考前幾週才提到這兩個概念,但沒有舉太多的例子,所以考試時很難想出這些情況,看考古題也會發現主要都是考不同 process 用 pipe 做循環溝通時的 deadlock。其實我覺得這應該要在課堂中舉例的,不然很難想出來。題目一樣是禁止帶走,不過我為了知道自己錯在哪,有在發還後拍照自用。期中考我考了 66 分,平均 56 分,雖然已經知道很多 deadlock 都不會寫,也很正常,但還是深受打擊,老師後來說參加網媒所 20 週年所慶的話可以加學期成績兩分,所以非常多同學參加,也順便見了許多研究所的研究,滿好的。
期末考就明顯感覺簡單許多,每一題我都會寫,就沒有抓 deadlock 這種需要通靈或是說腦筋急轉彎的題目。我考了 122/130,平均 95 分,可以發現所有人都考得很好。

作業

分成手寫和程式,程式的分數占比大很多。手寫作業大多都沒有很難,我都是用 $\LaTeX$ 寫,像是 signal mask 就能畫出精美的圖,程式碼也不用手寫,很方便。
程式題目大致是練習 I/O、fork process、pipe、模擬 thread、pthread 等使用,滿實用的,不過常常會遇到這種奇怪的問題,卡了很久。

個體經濟學原理

3學分,等第:A+,A+率:25.68%。
老師是朱敬一,是個很厲害的人,有一大堆 title。上課常吐槽一些事情,比如台灣的勞資關係、產業外移問題,這在我的筆記中有提到。
課程內容偏簡單,從供需法則開始,到廠商分析、各種市場結構、公共財、外部性、資訊經濟學等等。其中與謝德宗的總經原最大的差別就是非常新手友善,謝是直接帶過彈性的定義,搞得我們一頭霧水。而朱就有詳細的介紹,畢竟這是工管系大一上的必修課,甚至沒用到多少微分。
沒有作業,考試也很簡單,而且是 open book,限定「一本裝訂好的書或筆記等」,所以雖然我有寫筆記但沒有印出來,都是只帶課本。所以想刷分數的不妨選這門課,也能學到一點經濟學的概念,算是不錯的課。

投資學

3學分,等第:A+,A+率:28%。
高度照著課本上,偶爾補充一點時事,像是 TRF 事件,一堆中小企業老闆(娘)被銀行騙去用很不利的方式做多人民幣,然後直接爆炸。一開始是介紹資產類別,接著是交易方式、衡量報酬的方式、分散、CAPM(資產定價模型)、EMH(效率市場假說)、行為財務學、股票評價、選擇權等等。
很入門的投資理論課程,基本上聽股癌就可以學個八成,再來可以看一點課本。因為偏理論,所以如果是想現在就開始用自己的幾十萬拿去投資的話,修完可能還是不太會投資,我覺得實務上不如聽股癌。畢竟投資學還是主要面向為公司管很多錢的內容,所以還會包含一些散戶根本用不到的 Fixed Income。

普通心理學

3學分,等第:A+,A+率:78.06%。
標準甜涼課,成績主要是考試,兩次都是線上考選擇題。少部分作業,老師甚至說有的題目只要有寫助教就會給對,真的有點誇張。
這堂是 EMI 英語授課,然後老師偶爾會叫我們討論,我發現我的英語聽力還是不太行,要聽懂有點口音又講得很快又坐得離我有點遠的人講話真的很困難。所以後來都坐類似的座位和講中文的人討論。
我承認我是因為甜涼才選的,沒想到其實滿無聊的,畢竟是「普通XX學」,通常就是大概的介紹,是個背科,而我又比較沒有興趣。真的滿後悔選這門課,以後一定會確定有興趣才選。我是期待或許可以學到像是 子非魚kun 的 mygo 解析 裡提到的各種實用分析,像是某些姿勢代表防禦姿態等。不過基本上就是很分散的主題,每個主題都稍微講一點。

國民法官必備之基礎鑑識科學

2學分,等第:A,A+率:40.51%。
這門課非常熱門,主要應該還是因為 A+ 率很高,和普心一樣其實讓我有一點後悔選它,滿無聊的。課程要求很簡單,每週寫心得,期末寫 1000 字報告。每週的心得雖然說 50 字以上,但實務上大概還是要寫到兩三百字比較好。
每週請不同領域的專家來上課,律師、毒物學、昆蟲學、法醫等等,不同人因為沒有溝通好,所以會稍微有點內容重複或是不確定其他人有沒有講過的情況。也因為這樣,其實滿多內容一直重複,有點無聊。
我的成績則因為心得很多次忘記交,所以被扣了很多分,導致最甜涼的課反而沒拿到 A+,真是賠了夫人又折兵,唉,真的要謹慎選課呀。

會計學甲一上

3學分,等第:A+,A+率:18.29%。
我暑假就打算修會計,因為我覺得會計是一個很重要的技能,不管是自己創業開公司還是投資股票時看財報,都會用到。所以我在暑假就開始看英文教科書自學,應該使大致看到股票發行的部分。
在第一堂課我就遇到了一個電機系大一的學弟找我搭話,他正打算加簽,後來他很幸運抽到,而且和我同班,我們基本上助教課都一起坐在第二排中間。

有很多班,助教課可能在不同時段,允許在一開學時與別人協調好後交換班別。

整體而言我覺得算是入門會計不錯的方式,有基礎後要自己學應該也比較方便。

上課內容

老師上課是錄好影片,在週二助教課前要自己看完,上學期的影片放在 YouTube 上 (播放清單),下學期開始逐漸放在 NTU COOL 了,這樣雖然有字幕但還是看影片會比較不方便一點。老師上課內容可能會稍微與課本有一點出入,但還是大致涵蓋。

各班的助教在助教課時教的東西可能深淺不一,我這班教得比較淺,基本上就是和老師上課內容一樣,其他班可能會補充多一點東西。

考試

這堂課基本上是得要買課本,因為小考很常從課本例題、每個章節的題目出,沒記錯的話是原價 800、特價 8 折 640 元。

小考是各班助教出題,所以如果遇到教比較深的助教,就可能比較難一點。我這班是都很簡單,偶爾難一點,不知道算不算好事。

大致上每兩週一次小考,上學期較多,下學期調整得少一點,因此之後也許會維持較少的趨勢。

總結

這學期選了兩門硬課 (HTML、TAMC),以及兩門甜涼課,我深刻感覺到我是寧可吃苦也不要選甜涼課的類型,所以下學期的選課策略就比較找到方向了。

成績部分,可以發現只有國民法官拿了 A,我真該使用探索學分的,畢竟在資工系一定要全部科目 A+ 才有可能書卷獎,探掉也許還有一點機會。


其他相關