發表文章

目前顯示的是 2021的文章

語言模型的物理學 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...

如何得到和 Anaconda 的 Jupyter Notebook 一樣的使用者體驗但卻不需安裝 Anaconda ?

圖片
 身為一個資料科學家或是機器學習工程師,Jupyter Notebook 是必不可少的好用工具,而 Anaconda 則是在入門這個領域的時候為了減少痛苦而安裝的一個龐大軟體。 但實際上大部分時候我們只需要 Anaconda 中的 Jupyter Notebook,而不是它內含的其他東西以及Python 環境選擇 (我不如用 pipenv...),若是你像我一樣希望捨棄笨重的 Anaconda,但又希望獲得同樣的體驗,而不是每次都要打開 terminal,輸入 Jupyter Notebook 才能打開的話,這篇會是一篇適合你閱讀的文章。 Anaconda 上的體驗是怎樣的? 若是以只使用 Jupyter Notebook 為前提的話,它主要的方便在於安裝 Anaconda 之後會自動產生一個 Jupyter Notebook 的捷徑在開始工具欄,當你需要使用的時候就直接點開就好。而不用打開 terminal 打字什麼的。 (我很在意這個所以一直被 Anaconda 綁架......)  除此之外,Anaconda 的 Jupyter Notebook 路徑是固定的,每次開啟都會在 username 那個資料夾裡面,所以我得因此被其綁架而得把所有資料和 Notebook 都放在那個資料夾裡面。 所以,接下來就要開始如何將 Jupyter Notebook 以一個有 icon 的桌面捷徑開啟而且還可以基於開啟的路徑而開啟的教學。 安裝 Jupyter Notebook pip install notebook 建立 Jupyter Notebook 捷徑 首先要在桌面上右鍵新增 -> 建立捷徑,然後在項目位置中打入  cmd /k "jupyter notebook" , 如下圖。 然後就將捷徑命名為 jupyter notebook,或是其他你喜歡的名字,像是 AI 煉蠱場之類的。 這串項目位置的意思是當點擊這個捷徑的時候會做兩個動作 :   1. 打開 cmd   2. 自動打入 jupyter notebook 改變 Jupyter Notebook Icon 這步很簡單,總之就是去下載 jupyter notebook 的 icon (記得轉成 .ico 檔名),然後...

時間序列資料的交叉驗證方法 Cross Validation on Time Series data

圖片
最近接了一個跟時間序列資料預測有關的case,也因此開始惡補一些跟時間序列有關的知識。時間序列資料其實和正常的資料相比來說有許多不同的地方需要小心處理,其中一個我自己挺有印象的就是驗證方法上的不同,因此打算寫一篇 blog 來介紹幾個能夠在時間序列上使用的驗證方法。 為什麼正常的交叉驗證不可行? 這是因為正常的過程是基於 隨機 的切分資料,不論是 Boostrapping resampling, k-fold 或是 stratified k-fold 等等都一樣。想像如果你將一群有時間前後關係的資料打亂,可能會因為隨機性而拿未來的資料來預測過去,拿現在的資料預測過去,這在機器學習上完全不合理,因此我們必須用其他方法來避免掉這種 future-looking 的預測方式。 Walking Forward (Time Series Split ) Cross-Validation 既然我們只需要避免 future-looking,那麼我們的交叉驗證方法 只需要確保使用的訓練資料其時間是早於測試資料即可 。 舉一個例子來說,比如有一個時間序列資料集,照時間順序排列包含 [1, 2, 3, 4, 5] 第一個 iteration : Training: [1] , Test: [2] 第二個 iteration : Training: [1, 2], Test: [3] 第三個 iteration : Training: [1, 2, 3], Test: [4] 第四個 iteration : Training: [1, 2 ,3, 4], Test: [5] 最後將四個 fold 的模型表現平均起來就得到交叉驗證的最後結果 這種方法不僅能達成交叉驗證的核心思想,也就是要把所有資料都至少掃過一遍來驗證,以避免資料的偏誤。同時也比不使用交叉驗證,只將整個資料切成兩半,以時間較早的作為訓練,較晚的作為測試的方式都好很多。 除此之外也能夠在不同時間線上測試模型的表現有沒有不一樣,以便之後能夠對那個時間所發生的事件做深入分析。 實作上可以參考  sklearn.model_selection.TimeSeriesSplit Blocked Cross Validation 相較於 Walk Forward CV,Blocked CV 完全隔開了訓練資料以...

【讀書筆記】特徵工程不再難

圖片
本篇文章為 特徵工程不再難:資料科學新手也能輕鬆搞定! ( Feature Engineering Made Easy. By  Sinan Ozdemir, Divya Susarla ) 之個人讀書筆記。 書中有提供程式碼,請見此 Github Repo ,但應該是 Python 2,我下面的程式碼都會改為 Python 3 版本。 特徵工程的評估步驟 先得到機器學習模型的 baseline performance 應用特徵工程 對於每一種特徵工程,獲取一個效能指標並和 baseline 相比較 如果效能的改進大於某個臨界值 (User defined),則認為這種特徵工程是有益的,並將其部屬到機器學習模型中 效能的改變通常是以百分比(%)為計 (如果 baseline performance 是從 40% 準確率變成 76% 準確率的話,改進就是 76-40 / 40 = 90% 評估監督式學習演算法?迴歸通常用 MSE,分類通常用 Accuracy 或是 AUC 評估非監督式學習演算法?主要用  輪廓係數(  silhouette coefficient ) 或是用統計檢定的相關係數、t-test、卡方檢定(Chi-squared tests)以及其他方法來評估並量化原始資料以及轉換後的資料的結果 特徵工程的技巧有哪些 特徵理解 : 學習如何辨識定量(數值型)和定性資料(分類型) 特徵改進 : 清洗和填補缺失值 特徵選擇 : 透過統計方法選擇一部分特徵以減少資料雜訊 特徵建構 : 建構新的特徵,探索特徵之間的互動 特徵轉換 : 提取資料中的隱藏結構,利用數學方法轉換資料集、增強效果 特徵學習 : 以深度學習來對資料進行學習,以此來更加地瞭解資料 特徵理解 資料結構分為結構化和非結構化 結構化資料指的是可明確將觀察值(Row)和特徵(Column)分開的資料 非結構化資料指的是不遵守標準結構 (表格) 的資料 通常判斷資料的第一個問題是,資料是定量還是定性的? 事實上,資料可以同時是定量和定性的,為了更明確的去區分開來,通常會分為四個等級 定類等級 (nominal level) : 第一個等級,結構最弱,屬於定性資料,比如血型的A、B、O、AB,動物物種和人名,通常可以畫出眾數(mode)以及長條圖(bar plot)...