發表文章

目前顯示的是 9月, 2020的文章

語言模型的物理學 Physics of Language Models - ICML 2024 Tutorial

圖片
這是一個ICML 2024的tutorial talk,同時也是 一系列的研究 ,talk的youtube link在 這裡 本篇主要把看這個talk的一些讀書筆記記錄下來,雖然實際上talks是從 3 -> 2 -> 1 這個順序去講的,但這裡仍然以投影片的順序來描述,並把講者最後的感概放在Part 1的最後。 Intro 把智慧分為1.結構、2.知識以及3.推論 在可控制、理想的環境下做研究 (控制資料、調整參數) 可重複性高的實驗 (使用100M大小的模型,推出通用法則) 使用 probing 技巧去看模型裡面如何運作 1. Language Structures 這個部分有兩個目標:  1. 大型語言模型的解讀 (interpretation of LLMs)  並不是基於token level,而是使用更困難的階層式演算法來更精確地解釋LLM如何學習解決這樣的演算法 2.大型語言模型的結構 LLM如何學習格式(format)? → hallucination(幻覺) hallucination只是LLM學習到格式的速度比底層任務快而造成的現象 希望能觀察LLM如何解決更階層式、複雜的語言架構 他們使用的方法是CFG(context-free grammar)作為課題來達成以上兩個目標 他們設計了自己的CFG,大約有20+的長度,這是一個非常長的CFG CFG會從root開始 →  leaf 完成整個推論的樹,這樣長度的CFG會非常難從最終結果回推到他們的源頭,要完全記住這些samples也不可能,因為會有10的80次方個sample  他們從三個面向來測試模型是否能學習這樣的CFGs: accuracy, diversity, distribution 如果使用相對或旋轉嵌入的位置編碼,準確度會很高,但如果是用絕對的位置編碼就會得到很差的結果 為什麼會這樣呢? 因為使用相對/旋轉的位置編碼對於語言架構的注意力來說非常有幫助 相對注意力表現比旋轉好,但相對注意力太慢了 但如果用一個GPT_stupid也可以發現不錯的表現 (這個GPT的head h會往回看2^h-1個token) 例如第一個head會往前看第1個token,第二個head往前看前3個token,第三個head往前看前7個token,這些tok...

十種常見的軟體架構模式 10 Common Software Architectural Patterns

圖片
剛升上大四,發現大四的課程開始接觸到許多各種不同的領域,像是 Mobile App 這種跟 OOP 密不可分的領域,剛好這周談到軟體架構相關的東西,像是 MVC(Model-View-Controller) 之類的,讀起來蠻有趣的,同時有點好奇這種軟體架構有沒有一個大補帖可以一窺究竟,於是就爬了幾篇文之後,著手撰寫了這篇文章。 首先,架構模式 (architectural patterns) 與軟體工程的設計模式 (design patterns) 有些類似,兩者都是為了解決一些常見的軟體問題,但前者更為廣泛,且較能重複應用。我認為前者較有"架構"的感覺,也就是可重複使用性較高。前者的架構可以是跨領域應用的,而後者比較像是在某種情況下可以使用哪種模型。 軟體架構模式有以下10種常見的模式: 1. Layered pattern 最經典的例子就是網路的 OSI 七層設計 另外還有我曾在系統分析與設計學到的Three-layer  architecture 分別是View layer、logic layer、Data layer View layer : 系統的UI、外觀 logic layer: 功能的實作層 data layer : 存取資料的function 至於常見的應用當然是 Web application,以 Chrome 手機版為例,打開來看到的所有功能像是輸入網址欄、最近的瀏覽紀錄、左上的首頁按鈕等等都屬於 view layer,至於 logic layer 則是使用者開始在網址欄中輸入後對你所搜尋的事物的預測,比如輸入了"天氣",則會跑出像是天氣預報的推薦搜尋,當然還有按下搜尋後,根據使用者的輸入來推測他想查詢的是甚麼,這都屬於在實作這個搜尋功能。最後,Data layer 是介於資料庫與軟體之間的中介,Google 搜尋若想顯示出在 logic layer 的那些推薦搜尋,勢必得從他們的資料庫中調出關於使用者的資料還有較為宏觀的搜尋資料,只要是需要跟資料庫作互動的都屬於data layer。 2. Client-server pattern 這個模式可能是最常見的但也最簡單,就只有客戶端與伺服器端。客戶端作為主動方提出服務的要求,而伺服器端被動接收 到之後負責提供服務給客戶端。 最常見的應用就是瀏覽網站。當瀏覽...