天天看點

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

大型語言模型 (LLM) 通過利用思維鍊 (CoT) 提示生成中間推理鍊作為推斷答案的基本原理,在複雜推理上表現出了令人印象深刻的性能。 然而現有的 CoT 研究主要集中在語言模态上。 我們提出 Multimodal-CoT(多模态思維鍊推理模型),它将語言(文本)和視覺(圖像)模态結合到一個兩階段架構中,該架構将基本原理生成和答案推理分開。 通過這種方式,答案推理可以利用基于多模态資訊的更好的生成原理。 使用 Multimodal-CoT,作者提出的模型在 對ScienceQA 資料集進行評估,結果顯示在少于 10 億個參數下比之前 LLM(GPT-3.5)高出 16 個百分點(75.17%→91.68% )的準确率。

論文位址:https://arxiv.org/abs/2302.00923

代碼位址:https://github.com/amazon-science/mm-cot

本文研究在小于 10 億參數的情況下就産生了性能提升,是如何做到的呢?簡單來講,本文提出了包含視覺特征的 Multimodal-CoT,通過這一範式(Multimodal-CoT)來尋找多模态中的 CoT 推理。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

1 什麼是COT

COT全稱為Chain-of-Thought,定義是在應對推理任務時,在給出最終答案之前所産生的中間推理步驟,載體是一系列的短句子 。簡單來說,思維鍊是一種離散式提示學習,更具體地,大模型下的上下文學習(即不進行訓練,将例子添加到目前樣本輸入的前面,讓模型一次輸入這些文本進行輸出完成任務),相比于之前傳統的上下文學習,即通過x1,y1,x2,y2,…x_test作為輸入來讓大模型補全輸出y_test,思維鍊多了中間的一些閑言碎語絮絮叨叨,以下面這張圖為例子:

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

上圖展示了在 CoT 誕生之前是怎樣使用标準的 prompting 方法來求解推理任務的。首先這是一個少樣本學習的方法,需要給出一些問題和答案的樣例,然後拼接這正想要求解的問題,最後再拼接一個字元串“A:”之後輸入到大語言模型中,讓大語言模型進行續寫。大語言模型會在所提供的問題和答案的樣例中學習如何求解,結果發現很容易出錯,也就是上面提到的大語言模型在推理任務上很容易遇到瓶頸

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

上圖展示了 CoT 的做法,CoT 與 Standard prompting 唯一的差別就是,CoT 在樣例中在給出問題的同時,不僅給出了答案,在答案之前還給出了人為寫的中間推理步驟。在把問題、中間推理步驟和答案的若幹樣例拼接上所想要求解的問題和字元串“A”,再輸入到語言模型之後,語言模型會自動地先續寫中間推理步驟,有了這些推理步驟之後,它就會更容易地給出正确答案,也就是能夠更好地解決推理這類的問題

2 研究背景

2.1 使用LLM進行CoT推理

最近,CoT 已被廣泛用于激發多步LLM 的推理能力。具體來說,CoT 技術鼓勵 LLM 生成用于解決問題的中間推理鍊,主要技術有Zero-SHot-CoT、Few-Shot-CoT、Manual-CoT、Auto-CoT

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

優化推理示範

Few-Shot-CoT的性能比較依賴于示範的品質,使用不同人員編寫的示範例子在符号推理任務中産生的準确性浮動比較大。除了手工制作示範之外,最近的研究還研究了調整示範選擇過程的方法,比如Auto-CoT。除此之外,還有作者提出了基于複雜性的語言模型中的強化學習(RL)和多模态思維鍊推理政策,已經獲得有效的論證,比如GPT-3.5。

優化推理鍊

優化推理鍊的一個常用的方法是問題分解,有人提出了最小到最大的提示,将複雜問題分解為子問題,然後依次解決這些子問題。是以,對先前解決的子問題的答案有助于解決一個給定的子問題。

2.2 通過微調模型引出CoT推理

最近的一個興趣是通過微調語言模型來引出CoT推理。在一個帶有CoT注釋的大規模資料集上對Encoder-Decoder結構的T5模型進行了微調。然而,當使用CoT來推斷答案時,可以觀察到性能的急劇下降,即在答案(推理)之前生成推理鍊,相反,CoT隻被用作答案之後的解釋。後續有人通過對一個更大的教師模型産生的思維鍊輸出的學生模型來微調知識蒸餾,該方法在算術、常識和符号推理任務方面都表現出了性能的提高。具體論文和代碼可以查閱《Large Language Models Are Reasoning Teachers》:

論文連結:https://arxiv.org/pdf/2212.10071.pdf

項目位址:https://github.com/itsnamgyu/reasoning-teacher

3 多模态CoT的挑戰

現有研究表明,CoT推理能力可能以一定規模出現在語言模型中,例如超過1000億個參數。然而,在1b模型中引出這種推理能力仍然是一個未解決的挑戰,更不用說在多模态場景中了。本篇論文工作的重點是1b模型,因為它們可以用消費者級gpu(例如,32G記憶體)進行微調和部署。在本節中,作者進行了一些列實驗,研究了為什麼1b模型在CoT推理中失敗,并研究如何設計一個有效的方法來克服挑戰。

3.1 CoT的作用

首先,作者在ScienceQA基準測試上微調了CoT推理的純文字基線,采用UnifiedQABase作為文本主體模型。3我們的任務被模組化為一個文本生成問題,其中模型将文本資訊作為輸入,并生成由基本原理和答案組成的輸出序列。如圖1所示的一個示例,該模型将問題文本(Q)、上下文文本©和多個選項(M)的标記串聯起來作為輸入。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

為了研究CoT的影響,我們将其性能與三種變量進行了比較: (i)直接預測答案(QCM→A)(無CoT);(ii)推理+預測答案(QCM→RA);(iii)預測答案+解釋(QCM→AR)。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

令人驚訝的是,我們觀察到,如果模型在答案之前預測原因或者原理(QCM→RA),準确率下降↓了12.54%(80.40%→67.86%)。結果表明,這些理論原理不一定有助于預測正确的答案。在其他研究中也觀察到類似的現象,其中合理的原因可能是模型在獲得所需的答案之前超過了最大長度限制,或提前停止生成預測。然而,我們發現生成的輸出(RA)的最大長度總是小于400個字元,這低于語言模型的長度限制(即UnifiedQABase中的512個)。是以,它值得更深入地研究為什麼這些理論原理會影響答案推理效果。

3.2 模型被“幻覺”推理誤導

為了深入研究推理如何影響答案預測,我們将CoT問題分為兩個階段,推理生成和答案預測。我們計算出了推理生成和答案預測的RougeL分數和準确性。表3顯示了基于兩階段架構的結果。雖然兩階段基線模型獲得了91.76的RougeL分數,但答案推理精度僅為70.53%。與表2中的QCM→A(80.40%)相比,結果顯示,在兩階段架構中生成的基本原理并沒有提高答案的準确性。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

然後,我們随機抽樣50個錯誤案例,發現該模型傾向于産生誤導答案推斷的幻覺理由。如圖2所示,

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

模型(左部分)産生幻覺,“一個磁鐵的南極最靠近另一塊磁鐵的南極”。我們發現,這些錯誤在錯誤情況中發生的比例為64%

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

3.3 多模态有助于實作有效的基本推理

我們推測,這種幻覺推理現象是由于缺乏必要的來執行有效的多模态cot的視覺環境。為了注入視覺資訊,一種簡單的方法是将成對的圖像轉換為标題然後在兩個階段的輸入中附加标題。然而,如表3所示,使用标題隻能産生邊際的性能提高(↑0.59%)。然後,我們通過将視覺特征合并到語言模型中來探索一種進階技術。具體地說,我們将成對的圖像輸入DETR模型來提取視覺特征。

然後我們在輸入解碼器之前 将視覺特征和語言表示融合。有趣的是,有了視覺特征,理論基礎生成的RougeL得分已經提高到96.97%(QCM→R),這相應地有助于更好的回答準确率達到84.91%(QCMR→A)。有了這些有效的理由,幻覺現象就得到了緩解,其中62.5%的幻覺錯誤已經被糾正所示,視覺特征确實有利于産生有效的理由,并有助于準确的答案推斷。由于表3中的兩階段方法(QCMR→A)比表2中的所有單階段方法都有更好的性能,是以我們在多模态-cot架構中選擇了雙階段方法。

4 多模态COT

總的來說,我們需要一個可以生成文本特征和視覺特征并利用它們生成文本響應的模型。又已知文本和視覺特征之間存在的某種互動,本質上是某種共同注意力機制,這有助于封裝兩種模态中存在的資訊,這就讓借鑒思路成為了可能。為了完成所有這些,作者選擇了 T5 模型,它具有編碼器 - 解碼器架構,并且如上所述,DETR 模型用于生成視覺特征。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5
class T5ForMultimodalGeneration(T5ForConditionalGeneration):
    _keys_to_ignore_on_load_missing = [
        r"encoder.embed_tokens.weight",
        r"decoder.embed_tokens.weight",
        r"lm_head.weight",
    ]
    _keys_to_ignore_on_load_unexpected = [
        r"decoder.block.0.layer.1.EncDecAttention.relative_attention_bias.weight",
    ]

    def __init__(self, config: T5Config, patch_size, padding_idx, save_dir):
        super().__init__(config)
        self.model_dim = config.d_model
        
        self.padding_idx = padding_idx
        self.out = open(os.path.join(save_dir, 'gate.txt'), 'w')

        self.shared = nn.Embedding(config.vocab_size, config.d_model)
        self.patch_num, self.patch_dim = patch_size

        self.image_dense = nn.Linear(self.patch_dim, config.d_model)
        self.mha_layer = torch.nn.MultiheadAttention(embed_dim=config.hidden_size, kdim=config.hidden_size, vdim=config.hidden_size, num_heads=1, batch_first=True)
        self.gate_dense = nn.Linear(2*config.hidden_size, config.hidden_size)
        self.sigmoid = nn.Sigmoid()

        encoder_config = copy.deepcopy(config)
        encoder_config.is_decoder = False
        encoder_config.use_cache = False
        encoder_config.is_encoder_decoder = False
        self.encoder = T5Stack(encoder_config, self.shared)

        decoder_config = copy.deepcopy(config)
        decoder_config.is_decoder = True
        decoder_config.is_encoder_decoder = False
        decoder_config.num_layers = config.num_decoder_layers
        self.decoder = T5Stack(decoder_config, self.shared)

        self.lm_head = nn.Linear(config.d_model, config.vocab_size, bias=False)

        # Initialize weights and apply final processing
        self.post_init()

        # Model parallel
        self.model_parallel = False
        self.device_map = None
           

4.1 編碼器

模型F (X)同時接受語言和視覺輸入,并通過以下功能得到文本表示 H l a n g u a g e H_{language} Hlanguage​和圖像特征 H v i s i o n H_{vision} Hvision​:

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

T5 模型的編碼器負責生成文本特征,但 T5 模型的解碼器并沒有利用編碼器産生的文本特征,而是使用作者提出的共同注意式互動層(co-attention-styled interaction layer)的輸出。

拆解來看,假設 H l a n g u a g e H_{language} Hlanguage​是 T5 編碼器的輸出。 X v i s i o n X_{vision} Xvision​ 是 DETR 的輸出。第一步是確定視覺特征和文本特征具有相同的隐藏大小,以便我們可以使用注意力層。

4.2 互動層

在獲得語言和視覺表示後,我們使用單頭注意網絡将文本字元與圖像像素相關聯,其中查詢(Q)、鍵(K)和值(V)為 H l a n g u a g e H_{language} Hlanguage​, X v i s i o n X_{vision} Xvision​ 和 X v i s i o n X_{vision} Xvision​ ,其中注意力輸出 H v i s i o n a t t n ∈ R n ∗ d H^{attn}_{vision} \in R^{n*d} Hvisionattn​∈Rn∗d被定義為:

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

然後,我們應用門控融合機制如去融合文本和視覺特征

【論文解讀】如何使用1B參數的小模型吊打GPT3.5
hidden_states = encoder_outputs[0]
image_embedding = self.image_dense(image_ids)
image_att, _ = self.mha_layer(hidden_states, image_embedding, image_embedding)
merge = torch.cat([hidden_states, image_att], dim=-1)
gate = self.sigmoid(self.gate_dense(merge))
hidden_states = (1 - gate) * hidden_states + gate * 
           

4.3 解碼層

最後,解碼器将融合的輸出 H f u s e H_{fuse} Hfuse​輸入transformers,預測目标Y。算法1顯示了多模态COT的完整過程。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

5 實驗結果

作者使用 UnifiedQA 模型的權重作為 T5 模型的初始化點,并在 ScienceQA 資料集上對其進行微調。他們觀察到他們的 Multimodal CoT 方法優于所有以前的基準,包括 GPT-3.5。有趣的地方在于,即使隻有 2.23 億個參數的基本模型也優于 GPT-3.5 和其他 Visual QA 模型!這突出了擁有多模态架構的力量。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

作者還展示了他們的兩階段方法優于單階段方法。

【論文解讀】如何使用1B參數的小模型吊打GPT3.5

6 實驗結論

文本深刻研究了多模态CoT的問題,提出了多模态cot,它将語言和視覺模式整合到一個兩階段的架構中,将基本推理生成和答案預測分開,是以答案推理可以利用從多模态資訊中更好地生成的基本推理。通過多模态cot,結果表明該方法在ScienceQA基準上的準确率超過GPT-3.5 有16個百分點。

這篇論文帶來的最大收獲是多模态特征在解決具有視覺和文本特征的問題時是多麼強大。

  • 作者展示了利用視覺特征,即使是小型語言模型(LM)也可以産生有意義的思維鍊 / 推理,而幻覺要少得多,這揭示了視覺模型在發展基于思維鍊的學習技術中可以發揮的作用。
  • 從實驗中,我們看到以幾百萬個參數為代價添加視覺特征的方式,比将純文字模型擴充到數十億個參數能帶來更大的價值。

參考資料

  • 超越GPT 3.5的小模型來了!
  • Chain of Thought論文、代碼和資源【論文精讀】 - 哔哩哔哩
  • 思維鍊(Chain-of-thoughts)作為提示 - 知乎<
  • Chain of Thought 開山之作論文詳解 - 知乎
  • 思維鍊微調Fine-tune-CoT方法:大型語言模型教小模型一步一步推理 - 智源社群
  • 有了Fine-tune-CoT方法,小模型也能做推理,完美逆襲大模型 - 智源社群
  • 首個标注詳細解釋的多模态科學問答資料集,深度學習模型推理有了思維鍊-51CTO.COM
  • 上海交大&亞馬遜|語言模型的多模态思想鍊推理 - 智源社群

繼續閱讀