感謝李宏毅老師提供這麼有趣的課程 [李宏毅【2023 生成式AI】](https://www.youtube.com/playlist?list=PLJV_el3uVTsOePyfmkfivYZ7Rqr2nMk3W) ![image](https://hackmd.io/_uploads/HJWjfLjlWl.png) ### Day 22 夢開始的地方 2022年11月30日,ChatGPT3.5出現在世上,當初一用也覺得驚為天人,之後就一直用到現在。今天彷彿又回到夢開始的地方,當大家還在摸索,還會誤解回應是罐頭訊息,或是回答是透過網路搜尋複製貼上。但ChatGPT真正做的事情是文字接龍。它會輸出詞彙的機率分佈,然後從這個機率分佈中進行取樣,選出一個詞彙。因為取樣有隨機性,這就是為什麼每次的答案都不同。然後反覆執行,把新產生的詞彙加到原來的輸入中,逐步產生完整句子。 訓練GPT背後的關鍵技術是預訓練,可以低成本大量製造配對好的資料的技術,網路上的每個句子都能被用來訓練模型做文字接龍。 但從GPT-3到ChatGPT,需要人類老師監督式學習,人類老師提供資料,告訴模型正確的輸出,之後還加上強化學習 。好處是節省人力,還有人類自己不確定答案的問題。 ChatGPT也對研究領域帶來新的影響和問題,像是如何精準提出需求、知識限制和錯誤修正、判斷是否是AI生成、 使用AI工具的態度與影響,還有AI的機密外洩與遺忘問題。 ![image](https://hackmd.io/_uploads/SyNnG8ixbg.png) ![image](https://hackmd.io/_uploads/ByVJmUigZl.png) ### Day 23 文字冒險和機器學習簡介 今天內容蠻有趣的,先展示用ChatGPT玩文字冒險。劇情還蠻好笑的,可玩性沒有很高。 再來是換一種解釋方法,說明機器學習在幹嘛,首先前置作業是決定要找什麼樣的函式,這個決定與技術無關但是決定要解什麼問題。 三個步驟分別是設定函式範圍、設定評估標準、達成目標。 首先選擇候選函式的模型,然後訂出評量函式好壞的標準Loss, Loss透過比較函式的輸出和標準答案之間的差距,差距越小越好。 最後是找出一個最好的函式,因為候選函式的模型很多,需要好的演算法來尋找Loss較低的函式。 今天還分享了一個故事,如果教育部想要了解全國高中生跑100公尺的速度,要求全國每個高中一個人來測量跑步速度,來得到全國高中生的平均資料,但是每個高中以為這是一場跑步比賽,都派出他們高中田徑隊中跑最快的選手來跑,導致計算出來的100公尺標準超高,最後結果顯示99.9%的高中生都是肥宅。 這個故事告訴我們,如果用一組不具代表性的資料來定義標準,當標準資料分布不同時,會得到錯誤的結論。 ![image](https://hackmd.io/_uploads/B1xQQUjlbx.png) ![image](https://hackmd.io/_uploads/Bk7NX8jlbx.png) ### Day 24 生成式學習的兩種策略和可使用工具的AI 第一個策略是各個擊破,指的是模型每次只生成一個元素,這種模型叫做自回歸模型像是GPT,這種方法比較缺點是慢,無法平行化,但優點是生成品質比較好,可以根據已經生成的內容調整下一步的機率分佈,避免生成不連貫的答案。 另外一個是一次到位策略,就是一次將所有的文字產生出來,這種模型叫非自迴歸模型。圖片生成常採用一次到位,因為圖片因為像素太多,用各個擊破會花很久時間。它的優點是可以平行化,但缺點是一次到位可能在取樣時,可能把多個正確答案的元素混在一起,導致出現奇怪的結果。 有時會將兩種方法綜合截長補短像是N次到位。 先產生比較模糊圖片,再經過多次的一次到位方法,讓圖片越來越清楚,因為大方向已經在第一步決定,後續生成就比較知道要選什麼答案,這就是Diffusion Model的基本精神。 還有提到早期的ChatGPT其實不能用網路搜尋,今天也有介紹 WebGPT是如何網路搜尋的,一樣是把使用搜尋引擎當作是一個文字接龍的問題。驚覺AI真的進步好快。 ![image](https://hackmd.io/_uploads/B1iumUogbe.png) ### Day 25 微調和提示詞 常常聽到這兩種技術,是來自人類對LLM的兩種期待:專才和通才, 可以透過微調變成專才,例如把BERT專才化可以有兩個改造。 加外掛,因為BERT本身不擅長產生完整句子。 微調參數 ,利用有標籤資料調整語言模型的內部參數。 Adapter技術是一種更有效率的微調方法。不變動語言模型本身的參數,只插入額外的小模組並只調整這些模組的參數,節省儲存空間。 第二種期待是把LLM變成通才,可以透過提示詞,直接用自然語言指令叫AI做事。 首先是情境學習,提供任務例子讓模型學會回答問題,但有趣的是發現到給小模型錯誤例子影響不大,但如果給大模型錯誤例子正確率會反而會下降。 另外介紹指令微調,讓模型能理解和執行從沒看過的自然語言指令。 還有介紹一些提示詞技巧,像是思維鏈,在提供例子時,同時提供完整的推論過程,解決LLM在處理需要推理問題時表現不佳的問題。另外還有讓模型生成多次不同的推論和答案,然後投票選出最一致的答案,或是將複雜問題拆解成簡單子問題,引導模型一步一步解決。 ![image](https://hackmd.io/_uploads/HJRhQLsxZl.png) ![image](https://hackmd.io/_uploads/B1ApQLjlbl.png) ### Day 26 量變改變質變 大模型的能力並不是隨著規模變大而緩慢變強,而是在某一個瞬間突然開竅。 我覺得很有趣的是Calibration,判斷模型是否知道自己正在瞎掰,模型輸出文字機率(信心分數)代表對答案的信心,發現大模型在瞎掰答案時會感到心虛。 還有提到陷阱任務,這種任務有趣的是最小的模型表現較好;中等大小的模型結果反而較差,但當模型達到真正巨大的規模時,性能又會好起來。因為中等模型一知半解吃大虧,只有最大的模型才能看懂題目敘述克服陷阱,做出正確答案。 如果在運算資源固定的前提下,要大模型還是大資料? 一種是大模型小資料,就像思而不學,另外一種是小模型大資料,就像學而不思。實驗結果是每條固定算力的曲線都呈現U型,代表要在學與思之間取得平衡,性能才是最好,孔子說得有道理。 還有提到KNNLM採取了一種不完全依賴Transformer內部參數,而是依賴外部資料檢索的方法,它的優勢是處理非常罕見的字,不用特別去記,但缺點是它在推論太花時間。 最後還提到GPT-4,發覺到AI模型真的進步太快了。 ![image](https://hackmd.io/_uploads/H11x4Ijebx.png) ### Day 27 圖像生成模型套路 圖像生成輸出具有非常多可能性,這個分佈非常複雜。 為了處理複雜的多樣性,大部分的圖像生成模型都有一個共同的套路,它們都需要一個額外的向量輸入,通常是從一個簡單的機率分佈中採樣出來的,模型必須想辦法把採樣出來的東西,對應到正確的圖像分佈中可能的結果。 常見圖像生成模型像是有VAE、流式模型、擴散模型。 VAE目的在訓練一個解碼器,讓它能夠以潛在向量作為輸入,輸出正確的圖像。還需要訓練一個編碼器了解向量與圖像的對應關係,把圖像壓縮成向量。將編碼器和解碼器串聯起來,輸入一張圖變成向量,再透過解碼器還原成原圖。輸入和輸出越接近越好。 流式模型是訓練一個編碼器,輸入一張圖,輸出的向量的分佈是常態分佈。這模型關鍵是強迫編碼器是一個可逆的函數。如果編碼器是可逆的,那麼逆函數就可以直接當作解碼器來使用。 擴散模型的順向過程把一張圖片一直加雜訊,直到最後圖片完全看不出來是什麼。逆向過程是訓練一個去噪模型,從一個純雜訊的輸入開始,讓去噪模型慢慢地將雜訊去掉,最後產生圖像。 ![image](https://hackmd.io/_uploads/rJ1zEIoeZx.png) ### Day 28 Diffusion Model 原理剖析 今天筆記包含大量 **Diffusion Model** 數學公式分析和原理剖析, 首先講一下 **Diffusion Model 的運作流程**,包括固定的**順向加雜訊過程**與由模型學習的**反向去雜訊過程**,並將其與 **VAE 的結構進行類比。仔細介紹論文 DDPM 的訓練演算法,指出實際訓練目標被簡化為預測混入的雜訊** ,而非想像中的逐步去雜訊。 影像生成模型的本質目標是將一個簡單的分佈轉換成一個複雜的分佈。 多數影像生成模型(如 VAE 和 Diffusion Model)都採用最大似然估計 (Maximum Likelihood Estimation) 來量化「越接近越好」這件事。然後說明**最大化似然性**,這等價於**最小化分佈之間的散度**。還有解釋了 Diffusion Model 如何透過**變分下界 (ELBO)** 和對反向過程的**高斯分佈假設**來實現訓練。最後,筆記討論了在圖像生成中採樣**的重要性,以及 Diffusion Model 在**連續數據**和**離散數據應用上的不同策略與成功關鍵。 ![image](https://hackmd.io/_uploads/Bk5r48je-e.png) ![image](https://hackmd.io/_uploads/rJJDV8oxWl.png) ### **Day 29 窮人如何低資源復刻自己的ChatGPT** OpenAI是會把平常和ChatGPT對話拿去訓練的,除非去設定關閉,但平常還是不要把機密資料給ChatGPT。 要復刻前先準備一個預訓練的大型語言學生模型,並使用GPT API作為老師,訓練學生模型模仿老師的輸出行為。資料可以由GPT自己生成,或是利用真實用戶對話。這就是常聽到的知識蒸餾的技巧。 還有提到AI會自我反省的,可能是因為驗證答案的正確性比生成答案本身更容易,就像我們在寫題目也會犯錯,但在事後反思或檢查時,往往可以發現錯在哪。 另外還有一些 AI 自我提升機制,像是讓兩個模型互相扮演創作者與評論員,透過對話提升讓答案更周全。或是在複雜任務中,每次行動前加入思考步驟,先對輸入資訊進行總結。還有當任務失敗後,模型撰寫檢討報告,將失敗經驗作為下次任務的參考依據,我好像也可以把自己當成AI訓練。 最後有提到讓AI村民組成虛擬村莊會發生什麼事,有舉脫稿玩家電影的例子,這讓我思考我們會不會其實也是NPC,都被某種事物操控住了? ![image](https://hackmd.io/_uploads/HJMKV8sgWl.png) ### Day 30 用語言模型來解釋語言模型 哇連續一個月每天看李宏毅影片了,之前有分享過可解釋性AI,那語言模型能不能來解釋語言模型,來了解模型**內部單一神經元的功能與語義?** 今天介紹一篇研究,探測類神經網路內部神經元的作用,透過觀察神經元在讀取不同詞彙時的啟動情況,來推測其代表的語義或功能。 研究架構有三個模型:**被解釋模型**(提供真實啟動數據)、**解釋模型**(GPT-4 產生自然語言描述),和**角色扮演模型**(GPT-4 根據解釋預測行為)。 解釋的準確度透過計算預測值,和真實輸出值的相似度來評估,利用可解釋性分數 **研究還有引入**神經元替換測試,來評估神經元在網路中的實際功能重要性。**主要發現是**較小模型和較低層次的神經元比較容易被解釋,多數神經元難以被準確描述,平均分數偏低,**優化的部分**採用 GPT-4 **自動生成關鍵範子**的方法,有效克服僅觀察高活躍度數據的盲點,並修正了功能解釋的準確性。 但研究面臨用黑箱解釋黑箱**的質疑。還有這方法僅聚焦於**單一神經元,可能忽略了由神經元群組構成的複雜功能,或是人類語言難以描述所有抽象的神經元行為。 ![image](https://hackmd.io/_uploads/ByfhVUolZx.png) ### Day 31 **讓 AI 做計劃然後自己運行自己 和 FrugalGPT** 現在AI agent很發達,可能會覺得AI能自己做計劃,自動運行是件稀鬆平常的事情。但讓我們把時間回到2023年5月,那時侯很多像是AutoGPT等等讓 AI 自己規劃任務研究,如何讓AI學會把大任務拆解成一系列的小任務,而且要如何把每個小任務,對應到實際可執行的動作我覺得蠻有趣的。 另外我覺得有趣的主題是如何用省錢的方式來使用 ChatGPT。 現在有很多服務使用到 AI API,能不能在不影響成果的前提下節省成本? 像是可以從優化輸入內容下手,減少提供給模型的範例數量。或是多個問題串接起來一次丟給 API,以節省重複輸入所需的成本。 還有自建語言模型來避免使用線上 API,但這適用於比較有錢的窮人。或是儲存問過的問題與答案。當遇到相似問題時,直接從資料庫丟出答案,以節省API呼叫費用。 另外還有 LLM Cascade,針對問題難度,分級使用不同強度和價格的 API。成果是系統能大幅減少昂貴模型的使用,組合系統的準確率比單獨使用最強的 GPT-4 高一點。