back to index
【生成式AI】Finetuning vs. Prompting:對於大型語言模型的不同期待所衍生的兩類使用方式 (3/3)

link |
接下來要講的另外一個技術叫做channel soul,它的縮寫是cot。它是另外一種pumping的方式。
link |
我們剛才講說,我們要下指令給機器的時候,有兩種下法,一種是給機器問題的描述、任務的描述,一種是給機器一些範例。
link |
channel soul是另外一種更詳細的給機器pumping的方法,它講起來概念也非常簡單,它的概念是這樣的。
link |
文獻上發現說,如果是一些需要推理的問題,比如說數學的問題,直接用in-context learning給機器一些範例,它往往做得不是太好。
link |
所以你給機器一個應用題,告訴它說這題的答案是11,給它另外一個應用題,期待它可以自動給你答案,但是往往沒辦法答對。
link |
channel soul的概念是什麼呢?channel soul的概念就是,在給機器範例的時候,順便給它一些推論的過程。
link |
給它問題,給它推論過程,但這推論過程是人寫的啦,給它問題,給它推論過程,給它答案。期待它看到新的問題的時候,它會自己寫出推論過程,再寫出答案。
link |
期待它因為寫了這些推論過程,所以比較容易得到正確的答案。
link |
channel soul這招有沒有用呢?在文獻上看起來還真的蠻有用的。這是從channel soul原始的論文截出來的一個實驗結果。
link |
你會看到說在過去的結果,一個是FindQ,一個是GPT-3,直接FindQ GPT-3去解數學的問題,它可以得到33%的正確率。
link |
過去最好的結果可以做到55%的正確率。
link |
用PLM,它也是一個大型的語言模型,就像GPT-3一樣,但比GPT-3更大,GPT-3的三倍。
link |
如果你只是用一般的plumbing,這邊所謂的一般的plumbing指的就是in-context learning,只給它應用題跟應用題的答案,然後不給它詳解,就期待它可以答對,門都沒有,只得到18%的正確率。
link |
但是用channel soul,你今天給它問題答案的時候,還順便告訴它推論的過程,告訴它這個答案是怎麼來的,這個語言模型的能力突然就起飛了,得到57%的正確率。
link |
就是這麼神奇,只是多讓它看了詳解以後,突然之間,機器好像有了一點推論的能力。
link |
那channel soul還有不同的變形,我們剛才講的channel soul是在in-context learning下做的channel soul,也就是說你提供給機器一些範例,你要提供給它解題的過程。
link |
但是很多時候我們根本就沒有解題的過程,這個解題的過程是人寫的,有時候我們沒有解題的過程,怎麼辦?有人想了一個神奇的做法。
link |
這個神奇的做法是,機器回答問題之前,這個做法說穿了不值錢了,機器在回答問題之前直接多加一句話,告訴它說let's think step by step,它能力就起飛了,它突然之間就會做推論了。
link |
這種channel soul的方法叫做zero-shot channel soul,連例子都不給它,直接叫它think step by step,它就開始推論了。等一下我們會看到說這種做法,你可以得到什麼樣的結果。
link |
那在繼續看結果之前,再講另外一個channel soul常常搭配的招式,這個招式叫做self-consistency。
link |
你知道現在Chair GVT這種模型,它每次回答都不一樣,因為它是有隨機性的。所以你叫機器在做channel soul的時候,除了直接叫它think step by step,你要讓它產生好多次結果。
link |
那每一次結果,它的推論過程可能都不一樣,它的答案也都不一樣。但是很直覺的,你可以想像說,如果不同的推論過程都得到同樣的答案,這個答案的可信度其實就會高很多。
link |
Chair這個self-consistency的概念就是這麼簡單,讓你的語言模型產生好幾次不同的結果,有不同的推論,不同的答案,然後再做majority vote,看看哪一種答案出現最多次,它就是正確答案。
link |
其實在這篇文章裡面還有另外一個小小的技巧是說,我們不只是看答案,我們不只是投票,我們每一個答案還去算一下這個language model的信心分數。
link |
language model可以幫它的答案產生這個答案的機率,你可以把這個機率想成是一個信心分數。
link |
它可以說我們把不同的答案根據這個信心分數來給它一個權重,信心分數比較高的,這個答案就比較可靠。
link |
論文裡面發現說這招沒什麼幫助,直接做majority vote就好了,就很神奇,直接產生多個答案再投票,結果就會有幫助了。
link |
講到這邊,我其實有一個疑惑就是,這一招是不是要搭配chain of sorts才特別有效呢?
link |
這邊有一個解釋,是我直接拿chain of sorts實測的結果。其實chain of sorts這一招對chain of sorts我覺得沒什麼幫助,為什麼?
link |
因為其實check GPT不叫它列詳細的運算過程,它自動就會列詳細的運算過程,所以你要不讓它列詳細的運算過程,你得抑制它喜歡列數學式的能力。
link |
所以我這邊問它一個雞兔銅龍的問題,但是你知道這個check GPT真的很強,所以你問它一般的雞兔銅龍的問題是沒辦法考倒它的。
link |
我相信它已經訓練過很多雞兔銅龍的問題,一般只有雞只有兔是不夠的,所以要給它多種動物。
link |
所以這邊的題目是,有雞鴨兔共三十隻,總共七十二條腿,雞的數量是鴨的兩倍,問雞有幾隻?你要三隻動物才能讓它覺得很困惑。
link |
這邊是先告訴大家答案,雞十六隻,鴨八隻,兔六隻,你可以自己運算看看這個答案對不對。然後告訴check GPT說直接給答案不列計算過程,因為你不這樣講,它就要列計算過程。
link |
你告訴它不准列計算過程,不能用chain of soul,它答案就是十八隻,沒有答對。那你知道check GPT它是有隨機性的,那我就直接讓它跑五次的結果都是十八隻,它生不出另外不同的答案出來。
link |
但是如果現在讓它自己做一下推論,我這邊告訴它請想列計算過程再給答案,這個時候它就會開始想列計算過程了,雞的數量為x,鴨的數量為y,兔的數量為z,由體意可得以下三個方程式。
link |
很厲害,然後我檢查了一下發現它通常列的式子都是對的,它錯的話錯在哪一步呢?就錯在它開始解方程式,它解著解著就會解出莫名其妙的答案,然後結果就會錯掉。
link |
好,那我就試了五次,發現五次的答案都不一樣哦,有十八有八有十二有七有二,就是沒有一次是對的,但是五次的答案是不一樣的。
link |
所以你發現如果你有叫機器聲詳解,有做chain of soul,這個時候答案的diverse比較大,你不叫它做chain of soul,你其實每次答案都差不多,所以就沒有什麼self consistency可言。
link |
但是如果做chain of soul,每次答案會比較有差異,那這個時候做self consistency可能才會比較有幫助。我想這就是為什麼是先有了chain of soul,那self consistency才作為一個chain of soul搭配的方法被提出來。
link |
其實還有其他跟chain of soul有關的做法,這個做法叫least to most pumping,它的概念是說,有一些數學問題太難了,怎麼辦?我們要把這些困難的數學問題進行拆解,把它變成比較簡單的數學問題。
link |
比如這邊的數學問題是這樣子的,一個小女孩叫做Amy,Amy在玩樂園的那種滑水道,她爬到那個滑水道的頂端要四分鐘,滑下來要一分鐘,離遊樂園關門還有十五分鐘,在關門前她可以玩幾次滑水道。
link |
這邊的想法是說,直接讓機器去解這個數學問題太難了,我們要告訴機器說怎麼拆解這個問題,你就要language model自己先把這個問題拆解。
link |
language model自己說,要解決這個問題,就是到遊樂園關門之前可以玩幾次滑水道的這個問題之前,我們要先解說玩一次滑水道總共要花多少時間。
link |
你再把比較簡單的問題跟原來的問題接在一起,丟給language model,讓它繼續去做文字接龍,它就可以算出說玩一次要五分鐘。
link |
接下來把比較簡單的問題的答案跟比較簡單的問題都一起丟給language model,再給它我們最後的問題,期待它就可以因此得到正確的答案。
link |
那這整個process都非常的直覺。那這邊難的點就是,這一步要怎麼做呢?你給機器一個數學的問題,它怎麼知道要自動把這個數學的問題,難的問題做簡化呢?
link |
所以其實你還是得做in-context learning。所以在論文裡面,他們是有給機器一些範例的,告訴它說,看到這麼難的一個數學問題,你要先把它做這樣子的簡化,看到這樣的數學問題,你要做這樣的簡化。
link |
看到這個問題,那你會做怎麼樣的簡化?還是要做in-context learning,機器才能夠學會做簡化這件事情。
link |
接下來就是要講怎麼讓機器自動生成礦。我知道說現在網路上一大堆礦工程師,一大堆催眠大師,想要去催眠GPT,也會有人說催眠日後是一個很重要的工作,因為我們需要人類來想怎麼做礦。
link |
但是其實也有可能用機器來自動找礦,就讓你一點機會都沒有,你連催眠工程師都沒有辦法當,用機器來找礦。
link |
那怎麼用機器來找礦呢?我們到目前為止講的礦其實是hard礦。什麼叫hard礦?就是說我們輸入給機器的東西是文字,它是discrete。還有另外一種做法是給機器soft礦,就是你給機器額外的輸入,你給機器的指令並不是用人類看得懂的語言來描述的,而是一堆連續的項量。
link |
而這些項量是可以train的,你可以把這些項量想成就是模型參數的一部分,他們可以跟著label data進行調整。
link |
那講到這個soft礦,有人就會說那聽起來很像是把adapter放在input啊,其實也可以這樣看啦,其實確實可以把soft礦想成就是把adapter放在input。所以soft礦這個想法其實跟讓機器變成磚材是比較像的,你可以想成soft礦就是adapter的其中一種特例。
link |
那還有什麼其他的方法來讓機器自動找礦盆呢?你可以用reinforcement learning的方法來應找礦盆。
link |
所以你現在有一個大型的language model,給一個input,給一個response。你直接用另外一個language model生一個句子,這個句子就當作是比如說GPT-3的礦盆。
link |
那期待這個句子可以影響GPT-3,讓它output的結果是我們要的。那這個generator它怎麼知道要怎麼產生合適的礦盆呢?你就要做reinforcement learning,你要有一個方法去evaluate說現在大型language model的output是不是我們要的。
link |
如果是就得到高的reward,如果不是就得到低的reward。把reward丟給這個generator,讓generator進行學習,期待它產生出來的礦盆可以影響GPT-3,讓它變出來的結果是我們要的。
link |
所以你確實可以用reinforcement learning的方法來硬學一個generator,產生一個礦盆,來達成我們的目標。那這邊引用的是一個我們實驗室的paper,是在去年六月放到archive上的。
link |
這邊還要做reinforcement learning,感覺有點麻煩。接下來還有更狂的方法,連reinforcement learning都不用做,直接用大型language model,讓它自己把自己的礦盆想出來。怎麼做呢?這邊的做法是這個樣子的。
link |
你先給它下一個指令,這個指令是這樣。我給我的朋友一些instruction,我給他五個輸入,我的朋友讀了這些instruction,以後他寫出了如下的輸出,這是輸入跟輸出的例子。
link |
請告訴我,現在這個instruction應該是什麼?把這個東西丟給GPT3或ChainGPT,叫它硬是把那個instruction想出來,就不用人想了,讓機器自己把礦盆想出來。
link |
更具體的例子就是這樣,你的input跟output可能就是,input今天天氣真好是正面,今天運氣真差是負面。
link |
你給機器一些這樣的範例,問它說,如果要產生這樣子的結果,那要下怎麼樣的指令呢?期待它直接說出,請決定這句話是正面還是負面。
link |
能不能做到這樣子的事情呢?這是去年11月放到archive上面的文章。
link |
它的完整的做法是這個樣子的,你就給機器下一些指令,叫它硬是把instruction、硬是把指令想出來,讓機器自己去把指令想出來。
link |
把這些指令想出來以後,就把這些指令一個一個去試,看看哪一個指令效果最好,你就有一個好的指令了。
link |
因為怕機器找出來的指令不夠好,所以它還做了下一步,就是把一些比較好的指令再去丟給language model,跟它說,現在給你一個指令,請幫我生出這個指令的變形。
link |
然後得到更多不同的指令以後,再去你要的任務上面做評量,直到你選出一個最好的指令。
link |
論文裡面有說,其實後面這半段是不太需要的,後面這半段沒什麼幫助,基本上做第一步就可以找出很強的指令了。
link |
好,那我們就來看看剛才的那個數學問題吧。剛才一個很莫名其妙的敘述是說,當你跟機器講let's think step by step,它突然能力就爆衝。
link |
本來沒有做chain of sort,它的正確率是17.7,跟它說let's think step by step,正確率變78,然後這邊有各式各樣的指令。
link |
那用剛才那個方法可以找出另外一個更強的指令,這個更強的指令是let's work this out in a step by step way, to be sure we have the right answer,正確率就從78暴漲到82這樣子。
link |
用機器自己來想instruction,機器自己催眠自己,人類也不用想催眠的指令了。
link |
好,那這個就是今天想跟大家分享的對機器的兩個期待,那OpenAI期待機器可以成為一個通財,所以就有了ChairGPT這樣子的軟體。
link |
那如果你想要知道更多有關怎麼使用pre-trained language model的技術,你其實可以參考我跟江承翰同學還有莊永松同學給的一個tutorial,那這個tutorial的錄影是公開的,那我把連結放在這邊就給大家參考。
link |
那今天我想要跟大家分享的其實就講到這邊。