OpenAI 的聊天機(jī)器人ChatGPT最近可謂是火到出圈,這也讓大家對(duì)ChatGPT背后的技術(shù)非常好奇。GPT-3是OpenAI 產(chǎn)品歷程中的一個(gè)重要里程碑,也是其 Codex(或Github CoPilot)和ChatGPT等應(yīng)用的基石(ChatGPT 基于GPT-3的加強(qiáng)版GPT-3.5)。近期,機(jī)器學(xué)習(xí)平臺(tái)Weights & Biases(W&B)發(fā)表了OpenAI的產(chǎn)品與合作伙伴關(guān)系副總裁Peter Welinder接受(W&B)員工Lukas和Boris的采訪:“Fine-tuning OpenAI's GPT-3”。
Peter Welinder 現(xiàn)任 OpenAI 產(chǎn)品與合作伙伴副總裁,負(fù)責(zé)GPT-3的運(yùn)行和其他業(yè)務(wù),在此之前,他曾是OpenAI的研發(fā)主管。在采訪中Peter Welinder比較全面地解密了OpenAI 背后的故事,并對(duì)GPT-3的研發(fā)和商用情況做了詳細(xì)介紹,特別是OpenAI 怎樣訓(xùn)練 GPT-3 使得它在文章摘要、翻譯以及問(wèn)題回答等任務(wù)中展現(xiàn)出色的能力;以及用戶應(yīng)該如何利用GPT-3進(jìn)行微調(diào)來(lái)更好地將其應(yīng)用于翻譯、文案寫(xiě)作和其他商業(yè)任務(wù)中;最后Peter Welinder還介紹了 OpenAI 團(tuán)隊(duì)對(duì)于GPT-3 API 產(chǎn)品研發(fā)和工程實(shí)施的一些思路。
撰文 | Angelica Pan
來(lái)源 | MoPaaS
摘要 (由ChatGPT 產(chǎn)生):
GPT-3是一種大型語(yǔ)言模型,被訓(xùn)練用來(lái)在給定上下文中預(yù)測(cè)下一個(gè)單詞,使用Transformer架構(gòu)。它很靈活,可以用于翻譯、摘要、分類(lèi)和問(wèn)答等任務(wù)。GPT-3的優(yōu)勢(shì)在于它的簡(jiǎn)單性和不需要專(zhuān)門(mén)訓(xùn)練數(shù)據(jù)集就能表現(xiàn)良好的能力。GPT-3可以用于翻譯任務(wù),方法是提供比如“德語(yǔ):英語(yǔ)”對(duì)的翻譯樣例(如果是德英翻譯),或者像問(wèn)人一樣要求模型翻譯給定的句子。盡管GPT-3主要是在英語(yǔ)數(shù)據(jù)上訓(xùn)練的,但仍然能夠在翻譯任務(wù)中表現(xiàn)良好,因?yàn)樗軌蛲ㄟ^(guò)提供的樣例中的模式,并利用自己的一般語(yǔ)言能力產(chǎn)生翻譯。GPT-3也可以用于摘要和問(wèn)答等任務(wù)。GPT-3在商業(yè)應(yīng)用中也取得了成功,如文本生成和問(wèn)答。它明顯比早期版本的GPT [規(guī)模]更大、[功能]更強(qiáng)大,訓(xùn)練的數(shù)據(jù)也更多。它被用來(lái)生成創(chuàng)意寫(xiě)作任務(wù)的起點(diǎn)或變體,如產(chǎn)品描述,并已與OpenAI API集成,使開(kāi)發(fā)人員更容易使用。API允許用戶對(duì)GPT-3進(jìn)行特定任務(wù)的微調(diào),包括設(shè)置學(xué)習(xí)率和數(shù)據(jù)的過(guò)渡次數(shù),以及選擇模型大校
01
使用GPT-3解決現(xiàn)實(shí)世界的問(wèn)題
Lukas:Peter (Welinger),上次我們談話時(shí),我記得你在OpenAI做研究,但現(xiàn)在我們發(fā)現(xiàn)你是OpenAI的產(chǎn)品和合作伙伴關(guān)系副總裁,我很好奇這意味著什么?你每天都在做什么?
Peter:我今天所做的與我做研究時(shí)完全不同,對(duì)我來(lái)說(shuō),做研究一直都是為了解決最困難的問(wèn)題,以便真正對(duì)世界產(chǎn)生某種影響。我個(gè)人更傾向于研究的最終目標(biāo),而不是研究本身,做研究真的很有趣,你知道,深入研究,探索事物,最后總是有一個(gè)目標(biāo)。
GPT-3發(fā)生了一件令人興奮的事情……當(dāng)我開(kāi)始在OpenAI工作時(shí),我做的很多事情都是機(jī)器人方面的。對(duì)于機(jī)器人技術(shù)來(lái)說(shuō),你在實(shí)驗(yàn)室里能做的事情和你在現(xiàn)實(shí)世界里能做的事情之間還有一些差距。使用GPT-3,當(dāng)我們?cè)贕PT-3中得到第一個(gè)結(jié)果時(shí),很明顯我們有一些東西可以開(kāi)始應(yīng)用于現(xiàn)實(shí)世界的問(wèn)題,而不僅僅是做酷炫的演示。
當(dāng)我從事機(jī)器人工作時(shí),我們最后得到的是一個(gè)非?岬臋C(jī)器人手解魔方的演示,但每個(gè)人的家里并不具備部署它的條件,即使它足夠強(qiáng)大,我也不知道它對(duì)解決魔方有多大用處,這是一種非常昂貴的方法。但是有了GPT-3,我們有了一個(gè)語(yǔ)言模型,你現(xiàn)在可以應(yīng)用它來(lái)解決各種不同的問(wèn)題,從翻譯到總結(jié),再到分類(lèi)和問(wèn)答等應(yīng)有盡有,這是一個(gè)非常靈活的模式。所以,我們要做的就是看看這個(gè)模型來(lái)解決現(xiàn)實(shí)世界的問(wèn)題是否足夠好,對(duì)我來(lái)說(shuō),這是一個(gè)非常有趣的領(lǐng)域。
當(dāng)你擁有這項(xiàng)非常強(qiáng)大的新技術(shù),有可能改變很多事物的工作方式時(shí),這一切都是為了找到合適的方法來(lái)來(lái)解決問(wèn)題,看看你如何利用你工具箱里的工具來(lái)解決這些問(wèn)題。不同的是,作為一名研究人員,我所做的是提出正確的基礎(chǔ)和正確的方法來(lái)衡量進(jìn)展。當(dāng)目標(biāo)非常遙遠(yuǎn)時(shí),你需要想出這些玩具的方法來(lái)評(píng)估進(jìn)展。
現(xiàn)在,就像客戶告訴我們“嘿,我正在嘗試將GPT-3應(yīng)用到這個(gè)用例中”,但它不起作用或太慢等諸如此類(lèi)的事情,這些問(wèn)題要具體得多。
我的日常,現(xiàn)在更多的是建立一個(gè)團(tuán)隊(duì),用我們?cè)贠penAI開(kāi)發(fā)的技術(shù)來(lái)解決這些現(xiàn)實(shí)問(wèn)題。
Lukas:當(dāng)你將GPT-3與其他用于大型語(yǔ)言模型的方法進(jìn)行比較時(shí),這似乎是一種趨勢(shì)。你是否注意到它在工作方式上有哪些關(guān)鍵差異,采取某種方式是否有所不同?
Peter:這是一個(gè)很好問(wèn)題,我認(rèn)為我真正喜歡GPT-3的地方,以及我認(rèn)為它與眾不同的主要方式是GPT-3所做的一切都非常簡(jiǎn)單……
GPT-3是一個(gè)大型語(yǔ)言模型,大型神經(jīng)網(wǎng)絡(luò)。它使用的是谷歌幾年前推出的一種非常流行的Transformer架構(gòu),如今,它基本上為所有不同的語(yǔ)言模型提供了支持,而且它也開(kāi)始進(jìn)入其他領(lǐng)域,比如計(jì)算機(jī)視覺(jué)等。
GPT-3的設(shè)置非常簡(jiǎn)單,它可以有一些上下文,你可以看看文本的歷史。比如,如果你正在讀一本書(shū),你可以看一頁(yè)或一段文字,然后它試著預(yù)測(cè)下一個(gè)單詞,這就是GPT-3的訓(xùn)練方式。它只是訓(xùn)練了來(lái)自不同來(lái)源的大量文本,大部分來(lái)自互聯(lián)網(wǎng)。它只是一遍又一遍地訓(xùn)練,根據(jù)它看到的一些單詞,預(yù)測(cè)下一個(gè)單詞。
你可以從幾個(gè)單詞開(kāi)始,但當(dāng)我們今天訓(xùn)練這些模型時(shí),我們訓(xùn)練它們的數(shù)量級(jí)是一千或幾千個(gè)單詞,你可以回顧這1000個(gè)單詞,然后試著預(yù)測(cè)下一個(gè)單詞。所以設(shè)置非常簡(jiǎn)單,你只需要在這些龐大的文本數(shù)據(jù)集上訓(xùn)練它,以便繼續(xù)預(yù)測(cè)下一個(gè)單詞,并在這方面做得非常好。
我認(rèn)為GPT-3的令人驚訝之處在于,如果你這樣做,然后你把模型變得非常大,這讓它有巨大的學(xué)習(xí)能力,然后它就會(huì)非常擅長(zhǎng)以前你需要專(zhuān)門(mén)模型的一系列任務(wù)。以前如果你想進(jìn)行翻譯,你就需要一種專(zhuān)門(mén)翻譯的神經(jīng)網(wǎng)絡(luò),或者如果你想做總結(jié),同樣,你會(huì)以特定的方式設(shè)置你的網(wǎng)絡(luò),然后只訓(xùn)練它完成總結(jié)任務(wù)。
我們?cè)谑褂肎PT-3中發(fā)現(xiàn),你實(shí)際上在一些基準(zhǔn)測(cè)試中獲得了非常接近最先進(jìn)的表現(xiàn),這些基準(zhǔn)測(cè)試包括總結(jié)、翻譯、問(wèn)題回答等等。該模型使用的是一個(gè)剛剛在互聯(lián)網(wǎng)上訓(xùn)練過(guò)的模型,它不專(zhuān)門(mén)執(zhí)行任何任務(wù),而是能夠以與閱讀文本相似的方式再現(xiàn)文本。
02
將GPT-3應(yīng)用于翻譯任務(wù)
Lukas:實(shí)際上,如何將其應(yīng)用到翻譯任務(wù)中,你如何把“預(yù)測(cè)下一個(gè)單詞”變成一個(gè)翻譯?
Peter:在很多其他的大型語(yǔ)言模型中,都有一些特定的步驟,你可以對(duì)一段文本進(jìn)行編碼。所以你會(huì)在神經(jīng)網(wǎng)絡(luò)中創(chuàng)建一些表示,然后你會(huì)有一個(gè)解碼器來(lái)接受它,然后用它來(lái)寫(xiě)一些句子。例如:如果你做翻譯,你會(huì)把它編碼成某種表示,然后你的神經(jīng)網(wǎng)絡(luò)會(huì)有一個(gè)單獨(dú)的部分來(lái)接受這種表示,并嘗試輸出你想要的東西,輸入可能是一個(gè)德語(yǔ)的句子,輸出的可能是一個(gè)英語(yǔ)的句子,而且,你知道它是專(zhuān)門(mén)為此訓(xùn)練的。
那么對(duì)于你的問(wèn)題,你如何處理GPT-3呢?最簡(jiǎn)單的方法是:你可以提供一些例子,說(shuō)明翻譯可能的樣子,僅以純文本形式,你會(huì)寫(xiě)“德語(yǔ):”和一些德語(yǔ)句子,然后是“英語(yǔ):”和一些英語(yǔ)句子。你可能只提供一個(gè)例子,那么這個(gè)稱為一下(one-shot),你可以提供一些例子,基本上都是“德語(yǔ)或者英語(yǔ)”的一些例子,然后你可以輸入你想翻譯的新句子,這就是所謂的多下(Few-Shot)訓(xùn)練。如果你有幾個(gè)例子和模型,只要看看它現(xiàn)在在其上下文中看到的模式,它可以產(chǎn)生一個(gè)翻譯。
這是一個(gè)非常簡(jiǎn)單的設(shè)置;旧,我認(rèn)為告訴GPT該做什么的方式有點(diǎn)像你告訴人類(lèi)做同樣的事情。比如,如果我給你寫(xiě)電子郵件,“嘿,Lukas,我想讓你翻譯一些句子”我會(huì)告訴你:“請(qǐng)翻譯這些句子,我可能會(huì)提供一些例子來(lái)讓你了解一下它的語(yǔ)氣,比如:我想要更正式的翻譯,還是更隨意的翻譯等等,你會(huì)發(fā)現(xiàn)其中的規(guī)律,給你一個(gè)德語(yǔ)句子(我不知道你懂不懂德語(yǔ))你就能把它翻譯成英語(yǔ)。
現(xiàn)在有了我們最新的模型,你甚至不需要提供這些例子,你可以像問(wèn)人一樣問(wèn)模型,比如,“嘿,把這個(gè)句子翻譯給我聽(tīng)”,或者“總結(jié)一下餛惱隆薄
我們剛剛發(fā)現(xiàn),這就是人們想要使用模型的方式。我們讓他們做了更多這樣的工作,但就是這么簡(jiǎn)單,你只要告訴它你想做什么,它就會(huì)盡最大努力去做。
Lukas:你是主要致力于訓(xùn)練模型使用多種語(yǔ)言,還是主要是英語(yǔ)?語(yǔ)料庫(kù)從何而來(lái)?
Peter:實(shí)際上我們做的正好相反。最初,當(dāng)我們訓(xùn)練GPT-3時(shí),我們一致努力不用英語(yǔ)以外的其他語(yǔ)言來(lái)訓(xùn)練它。事實(shí)證明,即使這些模型是巨大的,在你的數(shù)據(jù)集組合中也需要權(quán)衡取舍。如果你先用英語(yǔ)訓(xùn)練它,然后再用其他語(yǔ)言訓(xùn)練它,它在英語(yǔ)任務(wù)中表現(xiàn)就不那么好了,最終當(dāng)我們訓(xùn)練它的時(shí)候,我們想看看,它在更通用的能力上能有多好?
我們不太關(guān)心翻譯,因此,每當(dāng)我們輸入額外的語(yǔ)言時(shí),這只會(huì)以擅長(zhǎng)用英語(yǔ)執(zhí)行其他任務(wù)為代價(jià),比如回答問(wèn)題、總結(jié)等等。但結(jié)果是,即使明確地試圖過(guò)濾掉大多數(shù)其他語(yǔ)言,也可能有一小部分?jǐn)?shù)據(jù)是其他語(yǔ)言的。即便如此,該模型在翻譯方面還是非常出色,在許多翻譯任務(wù)中,它接近于最先進(jìn)的技術(shù)。
我的母語(yǔ)是瑞典語(yǔ),但我現(xiàn)在已經(jīng)不會(huì)用瑞典語(yǔ)寫(xiě)作了,因?yàn)槲覐膩?lái)沒(méi)有這樣做過(guò)。我現(xiàn)在做的是用英語(yǔ)寫(xiě)它,然后讓GPT-3來(lái)翻譯給我,這只是我的觀點(diǎn),它不會(huì)變得完美,我需要調(diào)試一些東西,但它出奇地好,而且模型中的瑞典訓(xùn)練數(shù)據(jù)量非常非常少。
我們一直在不斷更新我們的模型,讓它們變得越來(lái)越好,所以現(xiàn)在我們引入了越來(lái)越多的語(yǔ)言數(shù)據(jù),因?yàn)槲覀円呀?jīng)找到了如何以更優(yōu)化的方式進(jìn)行這些權(quán)衡。但是,一開(kāi)始我們想要的是相反的,我們只是想把英語(yǔ)學(xué)好。
Lukas:是預(yù)測(cè)單詞還是一次預(yù)測(cè)一個(gè)字符?這是怎么回事?
Peter:都不是,它實(shí)際上是在預(yù)測(cè)一種叫做符號(hào)標(biāo)記(Token)的東西,這就像“單詞的一部分”也許可以這么想,最常見(jiàn)的英語(yǔ)單詞,它們由單個(gè)符號(hào)標(biāo)記。我們有大約50,000個(gè)這樣的標(biāo)記,我們將它們映射到字符序列上,結(jié)果就像“hi”或“the”這樣的常見(jiàn)單詞最終會(huì)成為一個(gè)標(biāo)記。但如果你有一個(gè)更不常見(jiàn)的詞,比如“百科全書(shū)”之類(lèi)的,你可能會(huì)把它分解成兩三個(gè)符號(hào),這就像單詞片段,只是讓這些語(yǔ)言模型更容易、更有效地使用文本。原則上,你也可以在字符層面上這么做,但它會(huì)變得非常低效,你知道,這就是這個(gè)領(lǐng)域可能正在改變的地方,最終,它將不止在字符層面上做到這一點(diǎn)。
Lukas:但我認(rèn)為這會(huì)讓學(xué)習(xí)外語(yǔ)變得非常困難,比如,亞洲語(yǔ)言是不可能的嗎?如果他們有更多的符號(hào),或者我猜你可能會(huì)說(shuō),他們已經(jīng)為你做了標(biāo)記化,通過(guò)使用更多的字符來(lái)編碼更大的含義。
Peter:是的,訓(xùn)練標(biāo)記器(Tokenizer)的方式肯定會(huì)對(duì)不同語(yǔ)言的性能產(chǎn)生影響。通常這兩件事分兩個(gè)不同的步驟進(jìn)行訓(xùn)練,你可以在某些數(shù)據(jù)語(yǔ)料庫(kù)上訓(xùn)練你的標(biāo)記器,然后在其他一些數(shù)據(jù)集上分別使用該標(biāo)記器訓(xùn)練你的模型,為了讓你的模型真正擅長(zhǎng)不同的語(yǔ)言,你還需要在多種語(yǔ)言上訓(xùn)練該標(biāo)記器。
肯定是使用其他語(yǔ)言的成本更高,一個(gè)德語(yǔ)單詞最終會(huì)變成更多的符號(hào),因?yàn)槲覀冇?xùn)練它的次數(shù)少得多。而英語(yǔ)非常高效,很多單詞都是一個(gè)單一的符號(hào),所以這使得它在其他語(yǔ)言上更糟糕,而且更昂貴。
Lukas:我能把一些東西翻譯成日語(yǔ)嗎?GPT-3也能做到嗎?
Peter:是的,我記得我們的一個(gè)日本用戶的評(píng)論,他們非常喜歡使用GPT-3在英語(yǔ)和日語(yǔ)之間翻譯技術(shù)文檔,因?yàn)樗麄儼l(fā)現(xiàn)GPT-3在技術(shù)文檔翻譯方面比谷歌翻譯要好得多。這大概是一年前的事了,谷歌翻譯現(xiàn)在可能更好,但根據(jù)我們擁有的數(shù)據(jù)集,這可能只是一個(gè)偶然的事情。
實(shí)際上,關(guān)于GPT-3的翻譯功能,真正酷的事情是我們并沒(méi)有在顯式的輸入和輸出對(duì)上訓(xùn)練模型,翻譯的文本片段,就像你通常所說(shuō)的“對(duì)齊的文本片段”一樣。
只是看到了很多日本人,它看過(guò)很多日本電影,也看過(guò)很多英語(yǔ)電影。不知怎么的,通過(guò)學(xué)習(xí)如何預(yù)測(cè)下一個(gè)單詞,已經(jīng)有足夠多的小文本、博客文章或其他東西作者在日語(yǔ)和英語(yǔ)之間切換?赡軙(huì)對(duì)一些句子進(jìn)行翻譯,在那里它找到了映射,然后以某種方式有一個(gè)足夠好的表示,然后推廣到任意的翻譯任務(wù)。對(duì)我來(lái)說(shuō),這太神奇了,它只是通過(guò)閱讀大量的英語(yǔ)文本,大量的日語(yǔ)文本,然后可能就像在所有的數(shù)據(jù)中找到一些對(duì)齊的對(duì),它就能夠進(jìn)行翻譯,這對(duì)我來(lái)說(shuō)太瘋狂了。
03
文案及其他GPT-3商業(yè)應(yīng)用
Lukas:真是太神奇了,這種性能與早期版本的GPT有明顯的不同嗎?比如在GPT-3中是否發(fā)生了什么,OpenAI認(rèn)為“好吧,我們可以將其用于現(xiàn)實(shí)世界的商業(yè)應(yīng)用”?這是它需要達(dá)到的性能水平嗎?
Peter:是的,我認(rèn)為GPT-2和GPT-3之間最大的區(qū)別是:它被訓(xùn)練在更多的數(shù)據(jù)上,它是一個(gè)更大的模型,大概差了兩個(gè)數(shù)量級(jí)。最初的GPT-2大約有15億個(gè)參數(shù),而GPT-3最大的模型有1750億個(gè)參數(shù),它上升了兩個(gè)數(shù)量級(jí),而且由于它是一個(gè)更大的模型,它也需要更多的數(shù)據(jù)。
令人驚訝的是,這就是從感覺(jué)它相當(dāng)愚笨到可以與之互動(dòng)的原因,像 GPT-2 有點(diǎn)的酷炫,但大多數(shù)時(shí)候也感覺(jué)它非常愚蠢,我認(rèn)為在GPT-3中,它有時(shí)會(huì)表現(xiàn)得出乎意料的好。不要誤解我的意思,GPT-3仍然會(huì)犯很多愚蠢的錯(cuò)誤,但在某些任務(wù)上,它可能有30-50%的時(shí)間是正確的,有時(shí)甚至更好。就好像突然之間在你需要抽樣和嘗試任務(wù)之前,也許每隔20次你就會(huì)看到一次,“哦,這個(gè)看起來(lái)不錯(cuò)”。有了GPT-3,它開(kāi)始每三次發(fā)生一次,或每?jī)纱,或每五次發(fā)生一次,你會(huì)說(shuō),“哦,天哪,這實(shí)際上是……”
對(duì)于諸如總結(jié)文本之類(lèi)的事情,我們有一個(gè)例子是用二年級(jí)學(xué)生的風(fēng)格總結(jié)一段文字,令人難以置信的是,該模型能夠簡(jiǎn)化單詞,獲得一段文本的要點(diǎn)等等,再說(shuō)一次,它不是完美的,但它真的很好。
顯然,我們有很多學(xué)術(shù)基準(zhǔn)(academic benchmarks),你可以運(yùn)行這些模型,你可以看到它在學(xué)術(shù)基準(zhǔn)上越來(lái)越好。但當(dāng)你想要?jiǎng)?chuàng)建一些東西的原型時(shí),這是一種完全不同的感覺(jué),不同的是,現(xiàn)在很容易得到一些運(yùn)行良好的東西。這就是為什么我們決定,“嘿,現(xiàn)在它看起來(lái)很有用”,GPT-2看起來(lái)沒(méi)有那么有用,但是GPT-3,對(duì)于所有這些任務(wù),我們覺(jué)得“好吧,它已經(jīng)足夠接近最先進(jìn)的技術(shù)了”,如果你有一個(gè)專(zhuān)門(mén)的模型或其他什么,一個(gè)聰明的程序員應(yīng)該能夠?qū)⑵鋺?yīng)用到他們所擁有的任何任務(wù)中,這就是我們?cè)O(shè)置的API驗(yàn)證的內(nèi)容。
Lukas:你真正引以為豪的用例,它到底在哪里起作用?你能不能給我們指出一些地方,讓我們可以在商業(yè)環(huán)境中與之互動(dòng)?
Peter:當(dāng)然,我認(rèn)為最讓我們感到驚訝的是文案和問(wèn)題回答,一般來(lái)說(shuō)是創(chuàng)意寫(xiě)作。在文案方面,當(dāng)時(shí)有很多公司開(kāi)始在我們的平臺(tái)上進(jìn)行開(kāi)發(fā),有些公司像:Copysmith是第一批;CopyAI;還有Jarvis……還有很多這樣的公司。他們的做法非常聰明,因?yàn)樗麄円庾R(shí)到,當(dāng)你使用GPT-3來(lái)完成某些任務(wù)時(shí),它并不完美。時(shí)不時(shí)的,你可能會(huì)得到一些沒(méi)有意義的東西。
但如果你在做文案工作,比如你想根據(jù)產(chǎn)品的某些屬性寫(xiě)一些吸引人的產(chǎn)品描述,比如鞋子,可能是鞋底的類(lèi)型,顏色,鞋子的一些其他屬性,你想寫(xiě)一些真正吸引人的東西,那么作為一個(gè)人,你面臨的問(wèn)題是你陷入了某種寫(xiě)作瓶頸,我該從哪里開(kāi)始呢? 這些公司開(kāi)始做的是他們采用GPT-3,他們用它來(lái)生成一些起點(diǎn)或者一些產(chǎn)品描述的變體。
你會(huì)發(fā)現(xiàn),通常情況下,如果你生成五個(gè)這樣的例子,其中一個(gè)看起來(lái)會(huì)很好,你可以把它作為你的起點(diǎn),你可能只是接受它,或者做一些小的調(diào)整。這幾乎是一種幫助人類(lèi)創(chuàng)造力的方式,你知道嗎,我覺(jué)得這太酷了。
作家們會(huì)告訴我們,“嘿,我已經(jīng)試著寫(xiě)這本書(shū)半年了,我總是陷入寫(xiě)作瓶頸。然后我開(kāi)始在使用GPT-3,現(xiàn)在我花了兩周時(shí)間完成了整本書(shū)。”當(dāng)你陷入困境時(shí),它可以創(chuàng)造一個(gè)有趣的故事情節(jié)。作為一個(gè)有創(chuàng)意的作家,你開(kāi)始探索,就像“好吧,我沒(méi)有想過(guò)這個(gè)角色會(huì)往這個(gè)方向發(fā)展,但讓我們來(lái)探索一下吧。”然后它就變成了一個(gè)更有趣、更吸引人的過(guò)程。
這幾乎就像一個(gè)人,現(xiàn)在我們有一個(gè)頭腦風(fēng)暴的合作伙伴,你可以把它應(yīng)用到所有這些不同的任務(wù)上。我覺(jué)得非常酷的是,我發(fā)現(xiàn)很多公司都在利用這一點(diǎn),創(chuàng)造你以前做不到的新體驗(yàn)。我認(rèn)為這是非常令人興奮的。我覺(jué)得回答問(wèn)題也非?幔沁@個(gè)問(wèn)題出乎我的意料。我認(rèn)為我們不會(huì)預(yù)料到這是一個(gè)如此大的用例。
04
使用OpenAI API微調(diào)GPT-3
Lukas:GPT-3的優(yōu)點(diǎn)之一似乎是它可以開(kāi)箱即用。但我也可以想象,對(duì)于一些團(tuán)隊(duì)來(lái)說(shuō),如果出現(xiàn)問(wèn)題,他們可能會(huì)擔(dān)心該怎么辦。我想我很好奇,你通常與公司內(nèi)部的ML團(tuán)隊(duì)合作,還是更多的工程師認(rèn)為這里的好處是,他們不必弄清楚機(jī)器學(xué)習(xí)是如何工作的,以獲得自然語(yǔ)言處理的好處,或者你是否傾向于將其與ML團(tuán)隊(duì)集成到一種更大的ML工作流中?
Peter:我得說(shuō),這是一種混合,我們有多個(gè)機(jī)器學(xué)習(xí)團(tuán)隊(duì)。他們已經(jīng)有了自己的模型,他們會(huì)在網(wǎng)上下載模型等等,他們會(huì)根據(jù)任務(wù)對(duì)模型進(jìn)行調(diào)整,然后他們找到了我們的API并開(kāi)始使用我們的API做同樣的事情,結(jié)果證明你可以從我們的模型中獲得更好的性能。就像我們所擁有的最大的模型或最好的模型都沒(méi)有開(kāi)源版本,對(duì)于很多任務(wù)來(lái)說(shuō),這是最有效的方法。
但我認(rèn)為,我們的大多數(shù)客戶可能更傾向于另一個(gè)陣營(yíng),即“真正聰明的開(kāi)發(fā)者”。當(dāng)我說(shuō)“開(kāi)發(fā)人員”時(shí),這是一個(gè)相當(dāng)廣泛的群體,從程序員到工程師,從設(shè)計(jì)師到項(xiàng)目經(jīng)理。許多人告訴我們OpenAI API是他們進(jìn)入編程的原因,因?yàn)樗麄儚奈覀兊挠螛?lè)場(chǎng)得到了非常好的結(jié)果,在那里你可以與我們的模型交互。他們有了想法,就開(kāi)始學(xué)習(xí)如何編碼,并接觸到像Bubble IO之類(lèi)的無(wú)代碼工具。這真的降低了障礙,你不必成為一名機(jī)器學(xué)習(xí)專(zhuān)家,也能從這些模型中得到非常好的結(jié)果。你只需要善于迭代并弄清楚如何向模型編寫(xiě)指令。
這有點(diǎn)像每個(gè)人都能成為管理者,如果你想讓你的員工按照你的想法去完成任務(wù),你就必須給他們很好的指導(dǎo),這和這些模型非常相似。比如,如果你不明確你的任務(wù),你就會(huì)在輸出中得到非常高的差異,但是,如果你真的很擅長(zhǎng)具體說(shuō)明,甚至提供幾個(gè)例子,那么你就會(huì)得到非常好的結(jié)果。這不是一種機(jī)器學(xué)習(xí)技能,這幾乎更像是一種任務(wù)規(guī)范,管理技能,我覺(jué)得很多人都能很快學(xué)會(huì)。
我真的很興奮,看到這么多人都能接觸到這些模型,以前好像只有機(jī)器學(xué)習(xí)博士學(xué)位才能使用。
Lukas:我覺(jué)得我聽(tīng)人說(shuō)過(guò)一個(gè)叫做“提示工程師 (Prompt Engineer) ”的新角色可能與此有關(guān),清楚如何提示GPT-3讓它做你想讓它做的事情。
Peter:這個(gè)很有趣,因?yàn)樵缙,?dāng)我們有第一個(gè)版本的API時(shí),我們有一個(gè)非常聰明的人,他是一位世界知名的作者,也是一個(gè)程序員:安德魯梅恩(Andrew Mayne)。他是該API的早期用戶之一,他的內(nèi)部名稱是“提示耳語(yǔ)者(Prompt Whisperer)”,或“GPT-3耳語(yǔ)者”,他真的知道如何精心設(shè)計(jì)提示以獲得最好的結(jié)果。
因?yàn)樗窃诨ヂ?lián)網(wǎng)上訓(xùn)練的,你需要把你的思想放在這樣的想法中,“互聯(lián)網(wǎng)上的文本是如何開(kāi)始的”,如果你想要一個(gè)真正好的食譜,你必須開(kāi)始用食譜書(shū)或美食博客之類(lèi)的東西來(lái)寫(xiě)作,這并不是說(shuō)你可以讓模型做你想讓它做的事。我認(rèn)為,這其中有很大一部分開(kāi)始是這樣的。你真的必須善于理解GPT-3的復(fù)雜性,并設(shè)計(jì)出真正好的提示。
在我們推出后的一年半時(shí)間里,我們看到人們?cè)谶@方面有很多困難,所以我們開(kāi)發(fā)了一套新的模型,我們稱它為InstructGPT。這實(shí)際上就像上周一樣,它成為我們API中的默認(rèn)值,我們稱其為InstructGPT的原因,是因?yàn)樗惶峁┱f(shuō)明。
所以我想說(shuō),提示設(shè)計(jì)現(xiàn)在已經(jīng)不那么重要了。你可以告訴模型你想讓它做什么,并提供一些例子,還有一點(diǎn)關(guān)于格式可能會(huì)影響你提供示例的方式等等。GPT-3在這方面非常強(qiáng)大,但有時(shí)它確實(shí)有點(diǎn)問(wèn)題,一些調(diào)整很重要。但我想說(shuō)的是,與一年前相比,現(xiàn)在已經(jīng)不那么重要了,我的希望是,它變得越來(lái)越不重要,而是變得更有互動(dòng)性。
Lukas:你對(duì)模型還啟動(dòng)了微調(diào)的功能,這個(gè)想法是什么,它在什么地方有用?
Peter:GPT-3令人驚訝的是通過(guò)零下(zero-shot)就得到了非常好的結(jié)果。你只需要提供一個(gè)例子,或沒(méi)有例子,只是說(shuō),“嘿,把這個(gè)句子從德語(yǔ)翻譯成英語(yǔ)”就可以了,或者你提供了幾個(gè)(few-shot)示例,比如幾對(duì)德語(yǔ)和英語(yǔ)實(shí)例。只需幾個(gè)(few-shot)示例,你就可以得到令人驚訝的好結(jié)果。但這實(shí)際上意味著準(zhǔn)確性是非常依賴于具體任務(wù)的,對(duì)于一些任務(wù),也許30%的時(shí)間你得到的輸出是可以接受的,而對(duì)于其他更簡(jiǎn)單的任務(wù),你可能70%的時(shí)間都能做到。
當(dāng)它不是每次都很好時(shí),你必須非常聰明地在你的產(chǎn)品中暴露它。這就是為什么,比如它對(duì)很多文案公司都很有效,你可以只提供一些例子,你知道其中至少有一個(gè)是好的,這就是用戶所需要的。但是通過(guò)微調(diào),你能做的基本上你可以自定義你的模型,你可以為它提供更多你希望它執(zhí)行的輸入和輸出示例。如果你想做翻譯,或者如果你想總結(jié)文章,你可以提供幾百篇已經(jīng)做過(guò)人工編寫(xiě)總結(jié)的文章例子,你可以更新GPT-3來(lái)更好地完成這項(xiàng)任務(wù)。
你不能把所有這些例子都放在你的提示中,提示符的空間有限,但是通過(guò)微調(diào),你把這些例子轉(zhuǎn)化為神經(jīng)網(wǎng)絡(luò)的連接,轉(zhuǎn)化為神經(jīng)網(wǎng)絡(luò)的權(quán)重。在某種程度上,你就像有了一個(gè)無(wú)限的提示,你可以提供盡可能多的例子。顯然,示例越多,微調(diào)所需的時(shí)間就越長(zhǎng),成本也就越高。但微調(diào)基本上是一個(gè)概念,取一堆輸入和輸出的例子,把它們放入模型中,然后得到一個(gè)模型的新版本,該版本非常適合你提供例子的任務(wù)。事實(shí)證明,只需幾百個(gè)例子,或者大約100個(gè)例子你就能顯著提高準(zhǔn)確性。
我們有很多客戶使用過(guò)它,就像Keeper Tax一樣,他們正在分析交易以找到這些稅收注銷(xiāo)之類(lèi)的東西,他們所做的是提取相關(guān)的文本片段,進(jìn)行分類(lèi)等等。例如,他們對(duì)模型進(jìn)行微調(diào),并通過(guò)微調(diào)模型得到了更好的結(jié)果。我們?cè)诳蛻羯砩弦辉倏吹竭@種情況。他們可以得到非常好的結(jié)果,這些結(jié)果通常對(duì)于原型來(lái)說(shuō)已經(jīng)足夠好了,但是為了讓其達(dá)到足夠高的精度以將其投入生產(chǎn)通常超過(guò)90%或95%或99%,使用他們擁有的數(shù)據(jù)集對(duì)模型進(jìn)行微調(diào),這樣一直進(jìn)行下去。這可以讓他們比以前啟用更多的應(yīng)用程序。我們只是讓這種微調(diào)變得很簡(jiǎn)單。
Lukas:我想對(duì)你來(lái)說(shuō),你們可以調(diào)整的參數(shù)是什么,因?yàn)槟忝枋龅姆绞,?tīng)起來(lái)好像沒(méi)有任何參數(shù),參數(shù)在這里如何參與呢?
Peter:對(duì)于你關(guān)于參數(shù)的問(wèn)題,我們?cè)噲D在我們的API中使它變得非常簡(jiǎn)單。我們?cè)囍屇J(rèn)值非常非常好。一般來(lái)說(shuō),你可以通過(guò)微調(diào)獲得非常好的結(jié)果,而根本不需要過(guò)多匭薷牟問(wèn)行┎問(wèn)嵊興煌。例燃偓你可译E柚醚奧,震}悄閽諉扛鲅安街柚懈氯ㄖ氐某潭取
你可以設(shè)置你想要通過(guò)多少次數(shù)據(jù)的內(nèi)容,事實(shí)證明,如果你把數(shù)據(jù)調(diào)整太多次,你就會(huì)對(duì)數(shù)據(jù)集進(jìn)行過(guò)度擬合。這些GPT-3模型非常大,通常只需要對(duì)數(shù)據(jù)進(jìn)行2到5次迭代就能得到非常好的結(jié)果,如果你走得更遠(yuǎn),你有時(shí)會(huì)過(guò)度擬合。還有更高級(jí)的參數(shù),但我有點(diǎn)喜歡玩一點(diǎn)你想訓(xùn)練它的時(shí)代數(shù)量和他們的學(xué)習(xí)率,這讓你達(dá)到了90%的目的,如果你開(kāi)始擺弄其他參數(shù),它不會(huì)給你更多。
Lukas:這是考慮將參數(shù)留給其他人的想法嗎,你能從擺弄參數(shù)中得到樂(lè)趣嗎?
Peter:說(shuō)實(shí)話,如果這是完全自動(dòng)的,我會(huì)很高興,也就是說(shuō),我們確實(shí)有一些更注重研究的客戶,他們真的喜歡擺弄,所以我認(rèn)為我們很難刪除它。但是,就像我說(shuō)的,我們有兩大陣營(yíng)的用戶:研究人員和開(kāi)發(fā)者,開(kāi)發(fā)者總是告訴我們:“嘿,我只想要一個(gè)按鈕,我只想要最好的模型出來(lái)。”然后很多研究人員想要擺弄更多的參數(shù),我想我們可以長(zhǎng)期滿足雙方的需求。
Lukas:Boris (Boris 是一個(gè) ML 技術(shù)人員),我不知道你把自己歸哪一類(lèi)了,你做了一些驚人的,漂亮的演示,你也喜歡調(diào)整參數(shù),我很好奇你使用GPT-3模型的經(jīng)驗(yàn)。
Boris:我當(dāng)然喜歡有一個(gè)好的默認(rèn)值,因?yàn)樽畛跄阏娴牟恢滥銘?yīng)該在它上面改變什么,假設(shè)你選擇了錯(cuò)誤的參數(shù),結(jié)果什么都沒(méi)用?刹皇鞘裁从淇斓慕(jīng)歷。所以我喜歡如果你不選擇任何東西,它就已經(jīng)很好了。然后,我真的很喜歡調(diào)整參數(shù),看看“好吧,會(huì)有什么效果”并試著用直覺(jué)來(lái)調(diào)。
除了Peter提到的參數(shù)之外,還有兩個(gè)參數(shù)也讓我很感興趣,你可以決定微調(diào)哪個(gè)模型,有不同尺寸的模型。如果你使用一個(gè)更大的模型,也許你的API會(huì)慢一點(diǎn),但是你的效果會(huì)更好。也許有時(shí)你不需要它,也許有時(shí)確實(shí)需要,所以我想看看我使用哪種模式的效果。
我還喜歡看到“我可以給出多少個(gè)訓(xùn)練樣本”的效果,就像我只給出20個(gè)樣本,而不是100或200個(gè),因?yàn)檫@樣你就能知道我的模型在我開(kāi)發(fā)一個(gè)更大的數(shù)據(jù)集時(shí)會(huì)變得更好。我喜歡擺弄各種各樣的參數(shù),看看基于這些參數(shù)能做出什么樣的預(yù)測(cè)。
Peter:對(duì),最后一條,其實(shí)非常重要,我認(rèn)為這是我們一遍又一遍地給人們的最常見(jiàn)的建議之一。
這就像從一小組例子開(kāi)始,然后把它翻倍,看看你能得到多少改進(jìn)。如果你將訓(xùn)練數(shù)據(jù)量翻倍,那么你,就會(huì)看到錯(cuò)誤率的線性改善,如果你有10%的錯(cuò)誤率,你把訓(xùn)練數(shù)據(jù)翻倍,你可能會(huì)得到8%的錯(cuò)誤率。然后再翻倍,錯(cuò)誤率降至6%等等。如果你能看到這種趨勢(shì),那么你就會(huì)突然有一種感覺(jué),“就標(biāo)記更多的數(shù)據(jù)等等而言,我需要花多少錢(qián)才能得到我想要的結(jié)果”等等。
這是一件非常強(qiáng)大的事情。
Lukas:訓(xùn)練這些模型的結(jié)果是否可重現(xiàn)?每次對(duì)它進(jìn)行微調(diào)時(shí),有多少可變性?如果你對(duì)相同的數(shù)據(jù)進(jìn)行兩次不同的微調(diào),你會(huì)得到相同的模型嗎?
Peter:原則上,你可以把它設(shè)置成非?蓮(fù)制的。如果你在同一天訓(xùn)練,基本上你在訓(xùn)練時(shí)想要做的是,在每次訓(xùn)練迭代中,你有一批數(shù)據(jù),比如一些例子,你實(shí)際上可以把API設(shè)置批量大小,每次更新需要多少個(gè)示例。我認(rèn)為它默認(rèn)是32或類(lèi)似的東西,當(dāng)你這樣做時(shí),你還希望對(duì)數(shù)據(jù)進(jìn)行隨機(jī)排序,你希望對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行隨機(jī)抽樣。
只要你在訓(xùn)練中保持這些隨機(jī)化一致,你最終會(huì)得到相同的模型。這將是相當(dāng)可復(fù)制的。唯一需要注意的是,在實(shí)踐中,即使是推論,這也是正確的。我們有一個(gè)叫做溫度(Temperature)的參數(shù),你可以設(shè)置輸出的可變性。溫度越高,變異性就越大,即使你把值設(shè)為0也不能保證你會(huì)得到完全確定的輸出。
在這些大型模型的GPU中,有足夠多的噪音和一些奇怪的浮點(diǎn)運(yùn)算等等,都很難保證完全確定性的決定。
很多人問(wèn)我們這個(gè)問(wèn)題,答案總是這樣,“很不幸,我們不能提供這個(gè),但你可以得到一些公平的東西。”但是你應(yīng)該讓你的實(shí)驗(yàn)足夠強(qiáng)大,這樣你就不用太在意決定論了。
05
OpenAI API背后的工程挑戰(zhàn)
Lukas:我認(rèn)為,從操作上講,讓每個(gè)人都有自己的微調(diào)模型比每個(gè)人都使用符合相同模型的API在基礎(chǔ)設(shè)施方面面臨的挑戰(zhàn)要大得多。允許這種情況發(fā)生是一項(xiàng)艱巨的任務(wù)嗎?比如,當(dāng)人們開(kāi)始使用不同的模型時(shí),你需要換入和換出不同的模型嗎?
Peter:剛開(kāi)始的時(shí)候,我們做微調(diào)的方式基本上是在某種程度上。你幾乎租了一組運(yùn)行模型的GPU,在某種程度上,對(duì)于一些最早期的微調(diào)客戶,我們基本上是按GPU小時(shí)收費(fèi)的,比如每小時(shí),他們使用模型的次數(shù)。甚至從一開(kāi)始,我想在推出API后的六個(gè)月內(nèi),我們就有一些精選的客戶,他們有微調(diào)過(guò)的模型和類(lèi)似的東西,這就是它的工作方式。
問(wèn)題是,如果你想嘗試一些新的東西,GPU的時(shí)間是很昂貴的。你不會(huì)真的想要花錢(qián)去保留一個(gè)GPU,哪怕只有不到一個(gè)小時(shí),這一切都累積得非常非?。我們只是設(shè)定了一個(gè)目標(biāo)說(shuō)“好吧,一旦你微調(diào)了你的模型,你應(yīng)該立即能夠使用那個(gè)模型,你只需要為推理時(shí)進(jìn)入它的token付錢(qián)”,就像無(wú)論你在提示符里輸入什么。
要使這種體驗(yàn)真正出色,這無(wú)疑是一個(gè)巨大的工程挑戰(zhàn)。你只需開(kāi)始微調(diào),當(dāng)它完成時(shí),得到一個(gè)微調(diào)的模型名稱,F(xiàn)在你可以在API中使用那個(gè)模型來(lái)立即得到一個(gè)結(jié)果,而且你不會(huì)按小時(shí)或其他方式收費(fèi),你只會(huì)以相同的方式為API收費(fèi)。這真的很棘手,我們?cè)贠penAI有一個(gè)了不起的工程團(tuán)隊(duì),他們真的想出了很多技巧來(lái)平衡這些模型的最終位置,并以正確的方式緩存它們等等,以創(chuàng)造一個(gè)很棒的體驗(yàn)。
Boris:我很好奇你是對(duì)整個(gè)模型進(jìn)行微調(diào),還是只對(duì)部分模型進(jìn)行微調(diào),讓它更有效率。
Peter:我們用了很多技巧來(lái)實(shí)現(xiàn)這一點(diǎn),我們一直在努力尋找新的方法。如果你想對(duì)整個(gè)750億個(gè)參數(shù)模型進(jìn)行微調(diào),這是有挑戰(zhàn)的。它可能會(huì)變得非常昂貴和困難等等,有一些技巧可以讓它更快。
Lukas:你覺(jué)得你和所有使用GPT-3進(jìn)行自然語(yǔ)言任務(wù)的每個(gè)人之間的區(qū)別是模型本身的質(zhì)量和性能嗎?還是其他原因?是關(guān)于集成,還是生產(chǎn)中的監(jiān)控,或者類(lèi)似的東西?
Peter:當(dāng)然,我們?cè)跇?gòu)建API時(shí)所關(guān)注的關(guān)鍵事情是最重要的是模型的能力。
其次,你需要有快速的推理能力。在我們創(chuàng)建API之前,對(duì)于語(yǔ)言模型,沒(méi)有人關(guān)心推理。每個(gè)人都關(guān)心你能多快地訓(xùn)練他們,因?yàn)檫@才是最重要的。因此,你可以在一天結(jié)束時(shí)解決基準(zhǔn)測(cè)試問(wèn)題。我們做了大量的工程設(shè)計(jì)來(lái)讓推理超級(jí)超級(jí)快。我還記得在最初的幾個(gè)月里,我們將API的第一個(gè)原型交付客戶開(kāi)始使用,我們將推理速度提高了200倍之類(lèi)的。我們做了很多努力來(lái)讓它超快。
第三件事是圍繞安全的事情。我們投資這些InstructGPT模型的原因之一是,我們看到有時(shí)你可以得到出乎意料的模型輸出。例如,你可能寫(xiě)了一個(gè)非常無(wú)辜的句子,但由于某些原因,它可能會(huì)變得非常黑暗,或者你可能會(huì)以不同的方式得到一些有偏見(jiàn)的輸出。使用我們的推薦指令的模型,默認(rèn)情況下,它們的行為更符合預(yù)期,但你也可以以更好的方式指定行為。事實(shí)證明,當(dāng)安全和能力齊頭并進(jìn)時(shí),當(dāng)你能更好地控制它時(shí),它就會(huì)變成一個(gè)更好的產(chǎn)品。這些肯定是我們一直關(guān)注的事情,我認(rèn)為我們?cè)谶@方面做得比現(xiàn)有的其它替代方案要好得多。
最后,我們非常關(guān)注的事情是讓它使用起來(lái)非常簡(jiǎn)單,事實(shí)上,你不需要加載模型,你只需要調(diào)用一個(gè)微調(diào)模型,只需要一行Python來(lái)調(diào)用API,這也是我們的核心,我們希望每個(gè)人都能輕松使用它。
Lukas:太棒了。好的,非常感謝,很高興與你交談,祝賀你做出了如此成功的產(chǎn)品。
本文轉(zhuǎn)載自微信公眾號(hào)“MoPaaS”。
來(lái)源:
https://wandb.ai/wandb_fc/gradient-dissent/reports/Peter-Boris-Fine-tuning-GPT-3-with-OpenAI-and-Weights-Biases--VmlldzoxNTMyNDI1?galleryTag=gradient-dissent
特 別 提 示
1. 進(jìn)入『返樸』微信公眾號(hào)底部菜單“精品專(zhuān)欄“,可查閱不同主題系列科普文章。
2. 『返樸』提供按月檢索文章功能。關(guān)注公眾號(hào),回復(fù)四位數(shù)組成的年份+月份,如“1903”,可獲取2019年3月的文章索引,以此類(lèi)推。