# 李宏毅_生成式導論 2024_第4講:訓練不了人工智慧?你可以訓練你自(中)-拆解問題與使用工具 ###### tags: `Hung-yi Lee` `NTU` `生成式導論 2024` [課程撥放清單](https://www.youtube.com/watch?v=AVIKFXLCPY8&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI) ## 第4講:訓練不了人工智慧?你可以訓練你自(中)-拆解問題與使用工具 [課程連結](https://www.youtube.com/watch?v=lwe3_x50_uw&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI&index=5) ### 拆解任務 ![image](https://hackmd.io/_uploads/HkV1JtV-R.png) 有時候無法得到滿意回答的時候,就把複雜的任務拆解成幾個步驟,這也許可以得到一個不一樣的回應。 ### 拆解任務 ![image](https://hackmd.io/_uploads/H1d2yF4WA.png) [Re3: Generating Longer Stories With Recursive Reprompting and Revision](https://arxiv.org/abs/2210.06774) 舉例來說,我們希望模型產生一個生成式人工智慧的報告,如果是一次性的讓模型輸出的話,可能也得不到一個好的回應。 這時候我們可以拆解任務,先讓模型輸出大綱,再根據大綱讓模型向下生成。 參考論文中有發現,如果讓模型一口氣生成文章,如果文章中有多個人物的話,那人物的人設可能會走鐘,這時候就可以利用分段落加上摘要的方式讓模型慢慢生成,得到的結果通常不錯。 ### 拆解任務 ![image](https://hackmd.io/_uploads/rJtvltNW0.png) 課程一開始有提過叫模型思考的方式(CoT),這部份也可以視為拆解任務的一種。 以數學問題為例,讓模型好好想想的這個行為就等同於讓模型拆解問題,先列出數學式,再根據數學式做計算。 ### 語言模型檢查自己的錯誤 ![image](https://hackmd.io/_uploads/SJR6eFNZ0.png) 有時候我們可以讓模型自己檢查自己的輸出,也許它會發現自己錯了,擬人一點的講法就是語言模型也許有自我反省的能力。 ### 語言模型檢查自己的錯誤 ![image](https://hackmd.io/_uploads/Hkz9WFNW0.png) 舉例來說,請機器介紹台大玫瑰花節,實際上台大並沒有這種節,但這種文字接龍的模型就是會唬爛一堆。 ### 語言模型檢查自己的錯誤 ![image](https://hackmd.io/_uploads/Hyv3bKEb0.png) 唬爛之後你再問模型,請檢查該資訊是否正確之後,它也知道自己唬爛了。 ### 語言模型檢查自己的錯誤 ![image](https://hackmd.io/_uploads/SJm-zFVZA.png) 為了確定模型是不是知道自己真的錯了,教授在同一個對話中再請模型確認資訊一次,這時候模型再一次的發現自己回應中的錯誤。 不過這個測試只在GPT-4有效,GPT-3.5是沒有效的。 ### Constitutional AI: Harmlessness from AI Feedback ![image](https://hackmd.io/_uploads/ByudEF4b0.png) [參考論文_Constitutional AI: Harmlessness from AI Feedback](https://arxiv.org/abs/2212.08073) 類似的技巧可以強化語言模型的能力。 上圖範例從上到下是先問模型是不是可以幫忙hack進去隔壁老王的wifi,然後讓模型反省一下自己的回應,這個反省過程的回應就先不給人類看,然後反省之後再請模型根據反省的結果產生新的答案,這時候得到的就是一個假道學的回應了。 ps:我好想知道老王的wifi密碼? ### 再次考考大家的觀念 ![image](https://hackmd.io/_uploads/SkKtHtV-R.png) 一樣的,模型本身是固定不動的,即使反省過了,它還是會繼續唬爛。當然參考論文中是有著讓模型從自我反省中學習,不過這是另一個故事,先不說。 ### 為什麼同一個問題每次答案都不同? ![image](https://hackmd.io/_uploads/rkK4A6rZR.png) 文字接龍的背後所輸出的東西並不是一個字,而是一個機率分佈,以上面範例來說,台灣大後面可能可以是台灣大『學』,也可以是台灣大『車』隊,這兩個字都是一個機率。從上圖來看,有50%的機率會接到學,同時也會有25%的機率會接到車。 這也就是每次模型針對同一個問題回應會有所不同的主要原因。 ### 為什麼同一個問題每次答案都不同? ![image](https://hackmd.io/_uploads/HyTsATSZA.png) 上圖就是大致說明一下整個過程。總之,每個字的背後都是一個機率分佈,然後從中採樣取得一個字,一直重覆這個行為,直到最終輸出結束符號。 ### 為什麼同一個問題每次答案都不同? ![image](https://hackmd.io/_uploads/HkNI10HWA.png) [參考論文_SELF-CONSISTENCY IMPROVES CHAIN OF THOUGHT REASONING IN LANGUAGE MODELS](https://arxiv.org/pdf/2203.11171.pdf) 我們也可以利用模型每次回答問題都不一樣的特性來做答案的驗證,以數學問題為例,問多次一點,相同的答案出現多次的話就代表是它了。這樣的方法又稱為Self-Consistency。 ### 打一套組合拳 ![image](https://hackmd.io/_uploads/rJZuJCBbR.png) 課程中已經說明過很多強化模型回答能力的方法,這是可以組合起來一起使用的。 ### 打一套組合拳 ![image](https://hackmd.io/_uploads/ryqulRB-R.png) [參考論文_Tree of Thoughts: Deliberate Problem Solving with Large Language Models](https://arxiv.org/pdf/2305.10601.pdf) 問題一樣的拆解,然後在步驟一的時候就讓模型多次回答,接著再讓模型自我反省看看答案是否正確,再進入步驟二。 這個方法是有名字的,叫做Tree of Thoughts(ToT) ### 打一套組合拳 ![image](https://hackmd.io/_uploads/ry6qlAH-R.png) [參考論文_Algorithm of Thoughts: Enhancing Exploration of Ideas in Large Language Models](https://arxiv.org/pdf/2308.10379.pdf) [參考論文_Graph of Thoughts: Solving Elaborate Problems with Large Language Models](https://arxiv.org/pdf/2308.09687.pdf) 還有很多of Thoughts。 ### 使用工具 ![image](https://hackmd.io/_uploads/BkNEX0rbA.png) 除了靠一張嘴讓模型變強之後,還有其它的工具可以讓它變強,因為模型本身也是有不擅長的事情,像是數學。 ### 使用工具 - 搜尋引擎 ![image](https://hackmd.io/_uploads/Hk8xUASZA.png) 我們要知道,大型語言模型就是一個文字接龍遊戲,也就是說,就算它不知道的東西也會亂唬爛給你。所以大型語言模型本身就不適合拿來做為搜尋引擎。我們要做的是搭配搜尋引擎。 ### 使用工具 - 搜尋引擎 ![image](https://hackmd.io/_uploads/BJd1LCBZC.png) 我們可以針對問題到網路或是資料庫上搜尋,然後把所得到的額外資訊一起結合起來提供語言模型,這樣子就可以有機會讓它的回應變的更正確。這個技術就是RAG,Retrieval Augmented Generation。 真好,還會有nvidia團隊去說明,已羨慕。 ### 使用工具 - 搜尋引擎 ![image](https://hackmd.io/_uploads/rk_rTGP-A.png) 目前一些模型也支援直接從搜尋引擎中查詢資料,有時候會自己決定,或者我們也可以直接要求。回應中我們可以看到機器給出引用來源,這可以讓我們確定這個回應就是從搜尋引擎中得到答案。 ### 使用工具 - 寫程式 ![image](https://hackmd.io/_uploads/HJh-CzvWR.png) 過去模型面對數學可能會有計算錯誤的問題,但是現在模型面對數學問題已經會自己寫程式來執行確認結果。所以像是雞兔同籠的問題對機器來說已經不再是問題了。 ### 使用工具 - 寫程式 ![image](https://hackmd.io/_uploads/BkSiRzvZR.png) [參考論文_Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks](https://arxiv.org/pdf/2211.12588.pdf) 讓模型自己寫程式並不是什麼新鮮事,這種作法稱為Program of Thought (PoT)。 如剛剛的範例所說,利用文字接龍的方式得到的答案可能會有誤,利用程式先得到結果再回應,準確度就提高了。 ### 使用工具 - 寫程式 ![image](https://hackmd.io/_uploads/S17T0GDZ0.png) ![image](https://hackmd.io/_uploads/HyfC0zvWA.png) 讓模型哈100次,教授說他真的去算,真的是300個哈,回應中可以看到『Finished analyzing』,點擊之後就可以看到模型是自己寫程式去產生結果再做回應。 ### 使用工具 - 文字生圖AI(DALL-E) ![image](https://hackmd.io/_uploads/ryuOkQPZR.png) 很GPT風格的賀歲圖,今年我也有做,目前也可以利用GPT-4來生成圖片。 ### 文字冒險遊戲 ![image](https://hackmd.io/_uploads/HkTze7w-A.png) ![image](https://hackmd.io/_uploads/rJB7lQwWC.png) 教授課程中還說了可以利用GPT-4來玩文字冒險遊戲,並且讓模型在每次回應的時候同時產生一張圖,讓這個遊戲更有感覺。COOL~懂玩~ ### GPT Plug-in ![image](https://hackmd.io/_uploads/rJB8lQPZA.png) GPT中附有多種的Plug-in可以使用,這可以在設定中自己找找。 ### 語言模型是怎麼使用工具的呢? ![image](https://hackmd.io/_uploads/ryki-QvZ0.png) 基本上,語言模型就只是文字接龍,它使用工具的方式很特別,舉例來說,詢問模型5美金可以換幾元新台幣,這時候模型會回應: * 5美金可以換 * 產生特殊符號呼叫工具 * 搜尋(美金台幣匯率),代表上搜尋引擎並給定關鍵字美金台幣匯率 * 結束符號 上面的兩個特殊符號之間就是做呼叫工具的行為,接著得到1美金換算新台幣的匯率之後,因為還要計算5美金換算新台幣,所以繼續呼叫工具: * 呼叫工具 * 計算機(5x31.5) * 結束符號 * 給出計算結果 ### 延伸閱讀:能夠使用工具的AI ![image](https://hackmd.io/_uploads/S1TaGXvZC.png) https://www.youtube.com/watch?v=ZID220t_MpI&t=1024s ### 語言模型是怎麼使用工具的呢? ![image](https://hackmd.io/_uploads/HJ1EX7P-A.png) 因為是語模模型自己決定什麼時候使用工具的,所以也會有出包的時候,像是在GPT-4上只要出現『畫』這個字,似乎它就會忍不住的真的出張圖給你。 ### 各種技巧加起來打一套組合拳 ![image](https://hackmd.io/_uploads/rkV_QmPbC.png) [參考論文_AnyTool: Self-Reflective, Hierarchical Agents for Large-Scale API Calls](https://arxiv.org/pdf/2402.04253) 參考論文把所有的東西通通弄起來,變成一套終極魚翔拳。