大家好!經歷了數學/代碼/論文的磨鍊,我的大三算是真是結束啦!我之前記錄過大一到大二上過的課,現在要review大三上過的課啦!review包括:課程內容、用處、難度、教授特點。
如果你同在卡耐基-瓜學習,你可以看到我,作為你的同學,在這些課暢遊知識海洋(掙扎與死亡)的體驗。如果你不在卡耐基-瓜學習,這篇文章描述了在這裡學習的快樂(掙扎)體驗。歡迎報考卡耐基-瓜大學:D
相關信息:工程學院,電子與電腦工程專業( ece),數學雙專業。
以下正文。
大二下 19 Spring
1) Principle of Real Analysis I 21355
實分析入門,更嚴謹地學習數學(比如說通過addition,zero和one的定義來證明0+1=1)。內容包括number system, sequence and series, limit and inequality, some topology (continuity, compactness, connectedness), differentiation and integration, uniform convergence, sequence of functions 。
教的是一個postdoc,叫Venkatraman。用的textbook是baby rudin*(Principles of Mathematical Analysis, Walter Rudin)。我上過體驗最差的數學課,這篇「關於平衡的思考」就是寫它的作業寫哭之後產生的。
* papa rudin: Real and Complex Analysis; grandpa rudin: functional analysis
我覺得體驗差有如下的原因:
i) 早九的課,容易沒睡醒去聽。老師板書難看懂,對於學生的知識水平有錯誤的理解(比如說當老師說,某一行inequality是kindergarten algebra的時候,我就沒辦法理解,並且因為這個comment不好意思提問)
ii) 課程infrastructure不好。手寫筆記更新慢,作業多且沒有答案,course staff少(沒有老師以外的助教和grader),沒有practice exam
iii) 學生互動少。大家上課時都很沉默,老師就錯以為內容很簡單,開始飆車講課。
iv) 沒有經常交流的隊友。有一個跟我一起上課的朋友,當我們倆都很忙,沒有機會一起討論課程相關的問題(一般來說老師坑的話就得和隊友一起自救)
雖然我對355的體驗很差,但是數學系的同學必須上這門課,我也會推薦任何想更嚴謹地學習數學的同學上這門課。我的建議是可能的話,不要跟Venkatraman上。我知道Piztora有時候也會教這門課,我跟他上過probability。這個可愛的老爺爺講話很慢,作業比較reasonable,office hour很有幫助,可以考慮跟piztora上real1。
2) Fundamentals of Digital Signal Processing 18491
數位訊號處理,18290升級版。很多matlab,很多數學。可以作signal的area/coverage。如果對信號處理感興趣的話非常建議上!內容包括:z transform , dtft, dtfs, fft, bilinear transform, sampling and reconstruction, filter design.
教授是Richard Stern,會很多樂器(似乎本科在mit有minor Baroque Music?在ece band做鍵盤手,大學還出過樂隊專輯),在audio signal processing方面很有名,他的博士生有參與siri和微軟小冰的audio部分。我覺得作為一個ece的area/coverage,491的workload還是很reasonable的。只要有隊友討論每周作業+去office hour+考前做practice exam,會學到很多,成績也不會差~
可愛的Stern
3) Structual Design of Digital System 18240
硬體設計課,ece必修。教datapath的設計,用verilog寫碼,在fpga上調試代碼。只要final前的分數在90或以上,就可以免考final,直接拿A(如果final前分數沒有90,幾乎不可能拿A)。
教授是Bill Nace,經歷蠻神奇的。本來是軍人,喜歡自己釀啤酒,娶了日本妻子,經常在makerspace的車間(弄side project?),每年都和學生參加build18(硬體hackathon)。
如果可能的話,儘量不要選周一/二的lab section。各種奇怪的坑(比如說助教寫的base code有bug)都會被周一/二的小白鼠們碰到。如果相對晚做lab,就可以問之前同學的經驗,也更小几率會看到hamerschlag的日出:p
4) Operation Research I 21292
在一些學校叫做industrial engineering,跟optimization有點關係。解決的問題類似:「如何在一塊田種不同的穀物,才能最大化收益?」 內容包括Simplex Method, Duality Theorem, Economic Interpretation of Solution, Sensitivity Analysis, Transportation Problem. 第一個midterm前都非常簡單。
教授是Daniela Mihai, 要求很清晰(考試前會發需要記住的所有知識點的review sheet),課infrastructure很好(有typed的作業答案,所有上課的slides)。算是比較簡單的數學課,不過要記很多找最優解的trick。這一點我不太喜歡。
5) Independent Study with Prof. José Moura (6 unit)
研究圖信號處理,每周參加研究組會議、跟教授單獨開會、跟帶我的博士生開會。我從不同階段的博士生,工作的research scientist和教授學到了很多。開始幫忙跑實驗,在逐漸了解圖信號處理這一研究領域後,開始有了自己感興趣的研究方向。
對於有興趣讀grad school的ece同學,非常建議上independent study!12分的independent study可以算coverage :D
我認為找到一個真正關心自己的研究導師特別重要。我很幸運碰到了john(直接負責我的博士),他很關心我的成長,總是鼓勵我去更勇敢、更有野心地做高質量的研究。我意識到做研究不是隔離在地下密室裡安靜地思考the theory of everything並寫下複雜難懂的數學。很大部分的做研究是交流:和同事交流(和同項目的同事討論細節,和同組的同事討論領域內不同的研究方向,去會議了解不同領域、不同地區的研究),和大眾交流(寫資金申請,寫博客介紹自己開發的工具/技術)。我意識到做研究的細節很重要,但大方向和課題的重要性也影響研究的質量。我開始把冰淇淋和冷凍食物帶到辦公室冰箱。我開始習慣在白板上寫下claim,然後對質疑作出回應。我開始讀更多論文(但範圍有點過廣。比如說列印了幾十頁shannon的資訊理論論文,開始midterm之後就再也沒動過,最後整理辦公室時扔了QwQ)
大二暑假 19 Summer
1) Research with Prof. José Moura (paid)
繼續春季學期的工作,研究圖信號處理。取得了一些進展(有了自己主導的project)。期間第一次參加學術會議(GSP Workshop),見到了來自世界各地的研究者!當時就下定決心,下一年要好好做research、學習,才能明白更多大家討論的東西,還想present自己滿意的研究成果(遺憾的是2020年的暑假還在隔離)。通過gsp workshop,明白了「research community」的重要性。
會議送的杯子
2) Combinatorics (21301)
Discrete math一個重要的分支!最早是從「七橋問題」開始的。跟graph,probability,algorithm也有關係~irina教了很多topics,包括counting, generating function, calculus with generating function, lagrange inversion, graphs.
很喜歡上irina的課,講課清晰,作業合理(有hw drop!),infrastructure好(有latex答案),考試合理(很多基於作業) 。Office hour很有幫助人還長得好看。強烈推薦這門課<3
大三上 19 Fall
1) Machine Learning (10701)
這個課是設計給非ml專業的博士生上的,assume學生之前不會ml。這門課的用處是可以初步了解ml的數學、專有名詞和應用,有一個小組final project。內容包括Batesian Network, EM Algorithm, Hidden Markov Model, model selection, learning theory, PCA/ICA, reinforcement learning. 有五個作業,兩周左右due一次。
對比一下ml課:
10301/10601 本科和碩士的ml intro課,比較偏應用
10701 給非ml專業的博士生上的ml intro課,應用理論都有
10715 給ml專業博士生上的ml intro課,比較偏理論
18461/18661 給ece本科/碩士上的ml intro課,有可能比10301/10601簡單
因為是給grad student上的課,這門課有至少一半的人會拿A. 所以儘量要在考試/作業/project裡比平均值好。最好提前找好隊友,隊裡最好有三個人,這樣做作業/project都有人商量。
我的教授是ziv bar-joseph和ameet talwalkar. ziv的口音有點難以理解,ameet很年輕,教的也很棒。我喜歡聽ameet的lecture。去oh要注意挑ta,ta的水平參差不齊,找ml department的phd一般會比較靠譜。不用太緊張project,注意選自己熟悉/有開源例子的方向,最後大家的project平均分是97 xD
最後poster session的海報
2) Image & Video Processing (18793)
好玩學得多又有用的signal課!走過路過不要錯過啊!18793,你值得擁有~(需要prereq 18491, 正好把signal的area上完)我對這門課可能有bias因為我把隊友變成了男朋友
開學前兩周講光學和針孔照相機的成像原理(我被傳教得買了個二手單反)。
二手單反小紅(pc超可愛的婉合小姐)
然後講怎麼把圖像轉到頻域分析(2d fourier transform, gabor filter, discrete cosine transform, short term fourier transform, radon transform, discrete wavelet transform), 最後講optimization (iterative soft/hard thresholding, orthogonal matching pursuit).
每周都有作業,題量很少,有數學和matlab題。並沒有12unit的工作量~考試reasonable(有past exams),有靠譜的隊友的話,還算好拿A~ 順便說下教授aswin在image processing方面很厲害,人也很好!如果想跟他做研究的話可以趁上課的機會多跟他交流~(也可以跟他交流貓,他很喜歡貓)
3) Algebraic Structure (21373)
數學專業必修的抽象代數課,我上的是anton bernstein教的section。anton對教數學很有熱情,教的內容偏難,上課就像在黑板前面跳舞。如果想挑戰自己,並且學更多代數的話,可以考慮跟anton上(代價是比較低的拿A機率)。如果想輕鬆一點,可以跟richard statman上(據說exam是take home)。anton很喜歡set theory和combinatorics,所以他講課的時候也會混進相關的內容(像zorn's lemma啦axiom of choice啦isomorphism between ordered sets啦algebra of graph啦之類的,一個學期後我上完set theory才明白他什麼意思)
每周都有作業,建議去oh,可以看到anton更多精彩的表演。有隊友討論作業的話,壓力不會太大。總的來說教的還是不錯的,不過內容偏難,具體的topics在https://www.math.cmu.edu/~abernsht/teaching/Fall2019/21-373/可以找到。
數學冰山, 轉自facebook group "mathematical mathematics meme"
4)Survery of Form: Fiction (76260)
有很多讀寫作業的小說課!作為一個workload蠻大的gened,我上得很開心因為我小時候想得諾貝爾文學獎嘛!最後的project是寫一個short story,不過不可以寫硬科幻或者魔幻故事(我最後還是寫了一個科幻故事)。我的老師是kevin gonzalez,聽說workload比另一個section小~課上只有我一個國際生,會見到平常technical課見不到的同學(drama/business/creative writing/philosophy major)。平常課上的活動都很有趣,比如說這個續寫故事練習。
如果學期很忙的話不推薦上這門課,如果對寫故事感興趣並且缺writing gened可以考慮這門課~
5) Independent Study with Prof. José Moura (6 unit)
繼續做我主導的project,同時和一個六人小組合作。期間去了加州的Asilomar Conference! 認識了很多有趣的朋友xD
Asilomar是我第一次在學術會議演講。研究組的同事都陪我練習,很耐心地給我意見,讓我特別感動~我在Asilomar認識了很多不同領域的研究者,他們都很好玩,做的工作也讓我佩服。我還有幸見到了幾位年輕的女副教授(她們是我希望自己十年後成為的樣子),跟她們聊天,更堅定了自己讀博士、做好研究同時好好生活的目標。
和monterey bay的賣花姐姐
大三下20 Spring
1) Graph Signal Processing (18898)
傳統的數位訊號處理能很好地分析regular data,比如說1d的time series(隨著時間變化的溫度,股票指數)和2d的圖像(圖像是一個個正方形像素組成的)。但是現今我們有了越來越多irregular data,比如說微信上人與人之間的社交關係,還有新冠在人和人之間的傳播,都沒有辦法用regular data來model。那麼我們怎樣才能把傳統信號處理的技巧應用到irregular data上呢?這就是graph signal processing探索的問題。在微信的例子裡,我們可以把每個人看作一個node,如果兩個人認識,這兩個node之間就有一條undirected edge。我的老闆josé moura是graph signal processing的創始人之一,也是18898的教授。
這門課需要基礎的discrete math,linear algebra和machine learning的知識。以小組(2~3人)完成兩周due一次的作業(有數學和編程的部分),最後有一個final project(topic是新冠病毒的傳播,不過不強制)。內容包括graph theory, graph parameters, generative models for graphs, basics of GSP, basics of machine learning. 後期沒有講課,是我們組的phd來講他們跟graph相關的最新研究。聽說大部分人都拿了A, 找到靠譜隊友很重要~
我比較推薦這門課的。雖說有12 unit,我每周只花6小時左右。當然我之前就了解gsp這個領域,可能有bias。
2) Computer Graphics (15462)
自己寫的碼渲染出的玻璃兔子
cg這門課的宣傳語應該是:「來和我們從頭寫一個3d渲染引擎吧!是的就是像unity和unreal那樣用來造遊戲的軟體啊啊啊啊酷!」
hw0: 複習linear algebra和vector calculus(編程經常用到!不掌握好的話容易有math bug)
hw1: 寫一個rasterizer。寫完之後可以render出不同的2d圖像。
hw2: 加編輯mesh模型的功能。寫完之後可以建立並編輯自己的3d模型。
hw3: 加光線追蹤(ray trace)的功能。寫完之後可以render出像照片一樣的圖像。上圖的兔子就是hw3作業的一部分
hw4: 加動畫功能。寫完之後可以讓上圖的兔兔跳舞變形滿天飛!
教授是keenan crane,很年輕的教授,經常忙著research。還教computational differential geometry(雖然我不清楚是什麼但聽起來很厲害)。ta特別少,所以piazza回復奇慢。每次作業都有bonus(比如說用某種高級技巧implement某個功能)。我從來沒做過bonus,因為總是會遇到奇妙的bug。我覺得如果肯在編程作業上下時間(比如說早開始作業,爭取每次都滿分,做bonus),拿A是不困難的,因為編程作業佔比很大。話是這麼說,學期中的時候一切都開始變得混亂,如果沒辦法每次都commit這麼多時間的話,可能會因為一次作業分不好導致整門課的成績爆炸。
總的來說是我推薦的software area的課。雖然很難、很花時間,但是上著蠻開心的。看到自己做的動畫很有成就感呢:3
3) Probability (21325)
數學系的elective,教授是piztora,intro probability課。內容包括probability space and sigma field, discrete-time probability, continuous time probability, transformer formula, generating function / mgf / characteristic function, statistics, stochastic process (branching process, brownian bridge, M/M/1 Queue).
因為我上過ece的stat(36217 probability and random processes),內容有較多重複,總體學的比較輕鬆。我很喜歡piztora上的課。他講課速度比較慢,會舉很多例子,在office hour能清楚地解答疑問,是一個很好玩的老爺爺。piztora總是說:" I hate grades! The point is you learn something, right?" 每次我很stressed about grades的時候就會想到他這句話,就會平靜下來(甚至對自己要做的一大堆作業感到一絲滿意?)。推薦piztora的課~
4) Ordinary Differential Equation (21261)
數學系的必修。學解只有一個變量的微分方程的技巧和技巧背後的理論。跟21260的區別是,260更強調記憶技巧,而261更強調證明理論。教授是Dejan Slepcev. Course Infrastructure做得特別好,每次exam都照著practice exam的模式來,lecture也講得好!
Slepcev是cmu math的graduate studies的director。他似乎還用微分方程研究graph neural network。我這學期上太多課,一直沒機會跟他聊天(sigh
5) Set Theory (21329)
數學系的elective,從axiom開始學set theory,是一種很嚴謹看待數學這個學科的foundation的方式。如果set theory有問題的話,很多數學公式以及基於公式的工程應用都會fall apart。有一些平常我們習慣的「常識」被當作公理(axiom)來嚴謹的學習。公理就是數學家默認是對的statement。公理沒辦法被證明也沒辦法被證偽。比如說,axiom of infinity是說存在有無限多個element的集合。因為set是一個抽象的、非物理的概念,關於這個概念(無限集合)的存在,一個人只能選擇相信或者不相信(認為不存在無限集合的人叫做finitist,聽起來像個宗教一樣,在以前很普遍。現在大部分數學家都相信存在無限集合)。我做第一周的作業就蠻struggle,儘管要證明的claim都聽著很trivial。比如說,A是一個set,證明A的冪集(powerset)是一個set。再比如說,A和B是兩個set,證明所有從A到B的函數是一個set。
教我的是Assaf Shani。他是一個以色列的postdoc,講課很清晰,總是積極地問學生有沒有問題。在office hour也很耐心地解答問題。作業量合理(一開始偏多,跟他反映了之後就變少了)。lecture很有用,不過infrastructure不太好,體現為沒有作業solution。我很喜歡Assaf教證明的方法。他總是start with picture,給我們一個high-level, intuitive的理解,然後再講證明中的各種細節。我覺得跟他學到了很多東西,不過作業比較難,所以學期中壓力會比較大。總的來說很推薦shani的set theory (it's almost kinda philosophical, you know)!聽說anton bernstein也教這門課,但是教的比grad set theory還難...
6) Learning about Learning (99361)
我一直對學習很感興趣,以為這門課主要教的是神經科學,沒想到教的是教學設計(instructional design)。我從這門課學到最重要的概念是backward design。就是在設計課程時,我們要先思考想讓學生達到的詳細目標。舉個特別簡單的例子,假設我們想教學生笑。那麼我們要把笑分成詳細的技能,比如說學生要知道笑的社交意義:笑表示開心,友好,認同。我們要詳細地說明教的是微笑。學生要能夠移動面部肌肉,直到嘴角形成合適的弧度,同時眼神要友好(眉毛放鬆,眼睛微彎)。不是所有的學生都適合學習微笑,我們假設學生能夠聽見聲音,這樣我們才能用語言進行指導。我們假設學生能夠控制面部肌肉, 這樣學生才有可能學會微笑的動作。有了這些目標之後,我們再相應地設計教學。教學後我們要設計測試,對比學生上課前後的區別,才能科學地測量課程的效果。如果學生上課前後都不會笑,我們設計的課就不太好。
教授是lauren herckis,人很好,跟我們的討論也很meta。比如說我們會在課上跟教授討論不做這門課作業的各種原因(因為在講學生的motivation問題)。9 unit的課,真實workload大概3~4 unit。最後有個final project,要設計一個三十分鐘的課。我們教了撬鎖,還有教縫衣服、角色設計、摺紙飛機、在高級餐廳用餐的project。我推薦這門gened!
7) Research with Prof. José Moura (paid)
繼續和小組一起工作,了解到extended abstract,research proposal,grant proposal, tutorial paper, research paper的區別。和小組一起交了Signal Processing Magazine的overview paper(review結果還沒出),我負責node classification部分。學期末向asilomar交了第一篇我作為一作的extended abstract,希望能被接受~
實驗室聚餐
大三暑假 20 Summer
這個暑假還是跟prof. moura做graph signal processing的研究,同時有一個跟prof. pulkit grover做的神經科學相關的課題。我的暑假三大目標:
1)保持健康(保持八小時睡眠,規律作息,每天鍛鍊,自己備餐)
2)兩個project都產出有意義的實驗數據(負面結果也是有意義的)
3)宣傳我們lab的研究(通過寫簡單的blog/youtube視頻/開原始碼)
轉眼就快要進入本科的最後一年,我很開心大一交了很多好朋友、嘗試機器人研究、打機器人比賽;大二轉進數學系,開始做信號處理方面的研究;大三上更深的課,學習更好地做研究,交了男朋友。我對自己的身份認知,逐漸從「本科學生」轉變成「要上本科課的新手研究員」。希望我的暑假能高效又開心~大家也夏天加油:D