Stanford CS336 Assignment 1: Basics

Day 4

花費時數:3

進度記錄

昨天筆者晚上有健身課,回去之後又花了好一段時間把筆記補完。最後弄到凌晨兩點多,導致筆者整天無論是肉體和精神都處於極度疲勞的狀態,本來打算下午全神貫注開始編寫 assignment 1的,後來發現狀態不行就果斷先把雜事處理完,提早關機休息,等到晚上再全神貫注開始編寫 assginment 1。

Assignment 1 的 PDF 可以說是相當精彩,一共 50 頁,完全可以理解為何 2024 同學們的反應是 assignment 1 的工作量和另一門課的全部作業 + project 的工作量一樣了。然後開始閱讀 PDF 後,筆者也發現自己以為只需要 programming 實在太天真了。這份作業主軸雖然是從頭自己寫一個 language model,但需要動筆的觀念題也是絲毫沒少,不過筆者現在決定把重心放在 programming 的題目上,需要動筆的題目以後再說吧。

前兩部份分別是編寫自己的 tokenizer 以及 language model 的組件,但因為編寫 tokenizer 真的很無聊,筆者決定先從第二部分開始寫。而題目要求的細緻程度也算是超乎筆者想像了,題目直接禁止使用任何 torch 建好的 layer 包括最基本的 Linear , 多數已經建好的 function 例如 softmax 也是禁止使用,幾乎都要自己從頭編寫才行。

總結一下今日完成的部分:

  • Linear
  • Embedding
  • RMSNorm
  • SwiGLU
  • softmax
  • scaled_dot_product_attention

今日回顧與筆者的碎碎念

距離筆者上次這樣從頭開始編寫 Deep Learning Model 已經是一年多前的事了,那時候筆者還在趕自己研究論文的模型架構,讓人有點懷念。筆者在趕架構的那時候是完全沒用AI programming 的,而這份作業也直接要求把 AI autocomplete 的功能關掉,只能留下 像是 function autocomplete 這種最基礎的功能 (題外話,在這點上筆者覺得 PyCharm 比 VS Code 好用的多)。但寫了 3 小時的過程中,筆者確實也發現自己在 Deep Learning 的 programming 能力上,跟以前相比似乎變鈍了不少。至少筆者對於今天3小時的進度並不是非常滿意,不時會犯一些不該犯的錯誤,這些錯誤都是在運行 pytest 後回去看會覺得有點好笑的。尤其是 softmax 筆者花了近 20 分鐘 debug,算是今天問題最大的部分 (每次修改後都接著產出下一個神奇錯誤,導致來回 debug 了很多次)。不過整體而言筆者覺得自己依舊是挺有收穫的:

  • 差不多把寫 torch 的一些感覺找回來了
  • 應作業要求大量使用了 einops 這個專為 torch 的 tensor operations 設計的 library ,筆者覺得這種自帶 docment 屬性的程式碼寫起來真的相當舒服,未來肯定會繼續使用它

總之經過今天暖身後,筆者希望接下來能夠漸入佳境,重新把數學與 programming 結合的感覺找回來

Day 5

花費時數:1.5

進度記錄

今日完成的部分:

  • RotaryPositionalEmbedding

由於筆者今天去宜蘭旅遊,因此只花了 1.5 小時在上面,不過筆者很滿意今天的進度。因為順利完成的對筆者而言所有組件最難的部分 - RotaryPositionalEmbedding。雖然有點遺憾不是完全靠自己想的,不過筆者也是在盡可能讓 ChatGPT 不提供太多資訊,持續來回討論一點一點拼湊出解法的情況下完成的,因此還是相當有成就感。

Day 6

花費時數:1

進度記錄

今日完成的部分:

  • MultiheadAttention
  • TransformerBlock
  • TransformerLM

由於去旅遊的關係,因此筆者今天花費時間也僅有 1 小時,不過前兩天基本上已經把 language model 所需要的最基本組件都完成了,因此今天比較像在組裝積木一樣,一步一步往上拼湊出一個簡單的 language model。另外由於接下來還有預定的課程進度要進行 (筆者目標是在 4 週全部看完並寫完筆記),因此筆者打算每天利用一些零碎時間來處理 assignment 1。

Day 8

花費時數:0.5

進度記錄

今日完成的部分:

  • cross_entropy

今天筆者在處理 cross_entropy 的時候又因為數值穩定性的問題吃足了苦頭,不過最後還是解決了。只能說 softmax + cross_entropy 這兩次錯誤可以讓筆者記上好一段時間了。

Day 11

花費時數:1

進度記錄

今日完成的部分:

  • AdamW
  • learning_rate_schedule
  • gradient_clipping

Day 12

花費時數:0.5

進度記錄

今日完成的部分:

  • get_batch
  • save_checkpoint
  • load_checkpoint
3個讚