(論文蒸餾)語言模型中的多模態思維鏈推理

(論文總結)語言模型中的多模態思維鏈推理

  • 論文名稱
  • 研究背景
  • 動機
  • 主要貢獻
  • 研究細節
    • 兩階段框架
    • 實驗結果
      • 促進收斂性
      • 擺脫人工標注
      • 錯誤分析與未來前景

論文名稱

Multimodal Chain-of-Thought Reasoning in Language Models

http://arxiv.org/abs/2302.00923

研究背景

CoT一開始出現了兩種發展路徑:一種是和CoT原始論文一致的,使用一個或幾個和任務類似的示例進行提示的少樣本(Few-Shot)CoT;一種是只在調用時給予啟發(“請逐步思考”)的零樣本(Zero-Shot)CoT。經過測試,少樣本CoT會比零樣本CoT更強(為什么?),因此成為了主流的研究方向。
少樣本CoT的研究方向主要和優化示例和優化推理鏈有關。對于優化示例而言,首先是示例的生成,一種是和CoT原始團隊相同的人工標注方法,稱為手動生成示例;一種是基于LLMs的零樣本CoT生成示例方法,稱作自動生成示例。其次是示例的優化。第一,少樣本CoT性能很大程度取決于示例質量,手動生成的示例會因為標注者不同而對性能有很大影響(有待進一步考證。原始CoT論文中提到少樣例CoT性能和標注者語言習慣沒有太大關聯,這里提到性能有影響可能是因為不同的標注者提供的示例質量不同,例如準確性、邏輯性、步驟顆粒度等等);第二,對于示例的選擇會產生很大影響。如果選擇和要解決的問題語義相近的示例,一旦示例中出現錯誤,會導致極大的性能下降;因此開發出了自動CoT),將數據集問題劃分為不同的簇,每次從每個簇中選擇代表性問題并用零樣本CoT生成其推理鏈,再把這種自動生成的示例用于少樣本CoT。此外還有基于RL的方法和基于復雜度的方法。
對于優化推理鏈而言,也有多個趨勢。一個是將問題進行分解,先將大問題分解成一個個小問題,再依次解答;每個小問題用得到之前問題的結果。(如果遇到含有條件分支的問題是否會指數級膨脹?如果中間答案錯誤會不會導致結果崩潰?)小問題還可以選擇進行提示以提高輸出質量。還有人提出了思維程序(PoT),將推理過程建模為一個程序,讓LLM去執行它;另外還有對推理路徑進行投票的方法。可以對大模型多個輸出進行采樣并進行多數表決,還可以增強隨機性來輸出更多的推理路徑。
在文章發布之前,另一個趨勢是通過微調大語言模型來引發思維鏈推理。主要方法是用老師模型的思維鏈輸出微調學生模型,另一種是?種迭代的上下文感知提示方法,以根據當前步驟的上下文動態合成提示。

動機

對于多模態的輸入(圖+文)而言,100B以下的純文本大模型很難輸出對于輸出正確結果有價值的思維鏈;無論是將思維鏈用于推理還是解釋,效果都比直接輸出結果要差。對于兩階段框架的CoT用法,也就是(1)QCM->R(2)QCMR->A,第一階段的推理依據生成的RougeL分數及準確率都很高,但第二階段的推理依然不如直接生成答案。通過對錯誤答案的分析發現,絕大多數情況都是因為沒有視覺特征的參與,模型出現了幻覺,從而生成了虛假的推論依據。即使將圖片內容用字幕表示出來,依然只有很微弱的提升。所以,應當將視覺特征與語義特征進行正交,從而得到正確的結果。

主要貢獻

提出了一種兩階段框架,通過微調語言模型實現融合視覺和語言表征,從而實現多模態思維鏈。

研究細節

簡要介紹:通過使用ViT模型提取出圖片的視覺特征,然后在將其輸入解碼器之前與編碼后的語言表示進行融合,就可以顯著提升這種兩階段框架的多模態場景下的CoT效果。

兩階段框架

兩階段分別用帶不同注釋數據集訓練同架構模型。第一階段將原始的語言和視覺輸入提供給模型,生成理由;第二部分將原始語言輸入和生成的理由連接起來,在和視覺輸入一起提供給模型生成答案。
[圖片]

該基于Transformer的網絡有三個步驟:編碼,交互和解碼。
編碼:設模型為F(X),同時接受語言和視覺輸入,文本表示H_{language}和視覺特征H_vision獲得方式如下:
H l a n g u a g e = L a n g u a g e E n c o d e r ( X l a n g u a g e ) H v i s i o n = W h ? V i s i o n E x t r a c t o r ( X v i s i o n ) H_{language} = LanguageEncoder(X_{language})\\ H_{vision} = W_h · VisionExtractor(X_{vision}) Hlanguage?=LanguageEncoder(Xlanguage?)Hvision?=Wh??VisionExtractor(Xvision?)
其中,· 由Transformer網絡實現。 H l a n g u a g e ∈ R n ? d H_{language}\in R^{n*d} Hlanguage?Rn?d是Transformer編碼器最后一層隱藏狀態,其中n是輸入語言長度,d是隱藏維度;視覺方面,通過ViT等凍結視覺提取模型提取塊級視覺特征,然后通過一個可學習的投影矩陣 W h W_h Wh?將特征轉換為和 H l a n g u a g e H_{language} Hlanguage?同形狀的 H v i s i o n ∈ R m ? d H_{vision} \in R^{m*d} Hvision?Rm?d,其中m是塊的數量。
交互:編碼結束后,使用單頭注意力網絡(為什么?)將文本標記和圖像塊相關聯得到 Q ( H l a n g u a g e ) K ( H v i s i o n ) V ( H v i s i o n ) Q(H_{language})K(H_{vision})V(H_{vision}) Q(Hlanguage?)K(Hvision?)V(Hvision?)。注意力輸出為
H v i s i o n a t t n = S o f t m a x ( Q K T √ d k ) V H_{vision}^{attn} = Softmax(\frac{QK^T}{√ d_k})V Hvisionattn?=Softmax(dk?QKT?)V
然后通過門控融合機制將 H l a n g u a g e H_{language} Hlanguage? H v i s i o n H_{vision} Hvision?融合:
λ = S i g m o i d ( W l H l a n g u a g e + W v H v i s i o n a t t n ) H f u s e = ( 1 ? λ ) ? H l a n g u a g e + λ ? H v i s i o n a t t n , \lambda = Sigmoid(W_l H_{language} + W_v H_{vision}^{attn})\\ H_{fuse} = (1 ? λ) · H_{language} + λ · H_{vision}^{attn} , λ=Sigmoid(Wl?Hlanguage?+Wv?Hvisionattn?)Hfuse?=(1?λ)?Hlanguage?+λ?Hvisionattn?,
融合后的輸出即為 H f u s e ∈ R n ? d H_{fuse}\in R^{n*d} Hfuse?Rn?d W l W_l Wl? W v W_v Wv?是可學習參數。
解碼:將 H f u s e H_{fuse} Hfuse?輸入Transformer解碼器,以此來進行預測結果。

實驗結果

從上圖可以看到,多模態思維鏈的兩種十億以下的實現均做到了最尖端;第四部分的三種幾個月后同期發布的模型和改論文的實現是正交且可融合的。他們可以聯合起來達到沒有人工標注推理依據的場景。

促進收斂性

兩階段與單階段相比,在較低的訓練輪次就可以取到較高的正確率,但后續的訓練收益也就相對較低;多模態與Base模型相比,在每一個輪次都有更高的正確率。對于單階段而言,多模態和Base模型在后期訓練的成果基本一致,均強于兩階段基線模型;而兩階段多模態模型則強于所有模型。

擺脫人工標注

當用ChatGPT和InstructBLIP代替人工標注去進行推理鏈的生成時,第二階段答案正確的概率和人工標注的準確率區別不大。
不同模型實現的有效性
將底層模型替換成不同類型其他變體之后,準確率沒有太大的波動;而將視覺特征也進行替換后,ViT對比其他特征的優勢是最大的。

錯誤分析與未來前景

對于這種基于十億級模型的兩階段結構多模態思維鏈而言,最大的問題是對于常識的運用,這類錯誤占了總錯誤的80%。例如在解讀地圖、計算圖像中的物體數量等。因此,后續的研究可以:(1)融入常識知識(2)整合更具信息性的視覺特征(3)實現過濾,剔除不相干的思維鏈(為什么會出現這種情況?)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87540.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87540.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React Native 接入 eCharts

React Native 圖表接入指南 概述 本文檔詳細介紹了在React Native項目中接入ECharts圖表的完整步驟,包括依賴安裝、組件配置、數據獲取、圖表渲染等各個環節。 目錄 1. 環境準備2. 依賴安裝3. 圖表組件創建4. 數據獲取Hook5. 圖表配置6. 組件集成7. 國際化支持8…

基于C#的OPCServer應用開發,引用WtOPCSvr.dll

操作流程: 1.引入WtOPCSvr.dll文件 2.注冊服務:使用UpdateRegistry方法注冊,注意關閉應用時使用UnregisterServer取消注冊。 3.初始化服務:使用InitWTOPCsvr初始化 4.使用CreateTag方法,創建標簽 5.讀寫參數使用下面三…

Java類加載器getResource行為簡單分析

今天嘗試集成一個第三方SDK,在IDE里運行正常,放到服務器上卻遇到了NPE,反編譯一看,原來在這一行:String path Test.class.getClassLoader().getResource("").getPath(); // Test.class.getClassLoader().ge…

【CodeTop】每日練習 2025.7.4

Leetcode 1143. 最長公共子序列 動態規劃解決,比較當前位置目標和實際字符串的字母,再根據不同情況計算接下來的情形。 class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] t1 text1.toCharArray();char[] t2…

ES6從入門到精通:Promise與異步

Promise 基礎概念Promise 是 JavaScript 中處理異步操作的一種對象,代表一個異步操作的最終完成或失敗及其結果值。它有三種狀態:Pending(進行中)、Fulfilled(已成功)、Rejected(已失敗&#xf…

數據結構:二維數組(2D Arrays)

目錄 什么是二維數組? 二維數組的聲明方式 方式 1:靜態二維數組 方式 2:數組指針數組(數組中存放的是指針) 方式 3:雙指針 二級堆分配 💡 補充建議 如何用“第一性原理”去推導出 C 中…

HAProxy 和 Nginx的區別

HAProxy 和 Nginx 都是優秀的負載均衡工具,但它們在設計目標、適用場景和功能特性上有顯著區別。以下是兩者的詳細對比:1. 核心定位特性HAProxyNginx主要角色專業的負載均衡器/代理Web 服務器 反向代理/負載均衡設計初衷高性能流量分發高并發 HTTP 服務…

基于Java+SpringBoot的健身房管理系統

源碼編號:S586源碼名稱:基于SpringBoot的健身房管理系統用戶類型:多角色,用戶、教練、管理員數據庫表數量:13 張表主要技術:Java、Vue、ElementUl 、SpringBoot、Maven運行環境:Windows/Mac、JD…

【MySQL安裝-yum/手動安裝,卸載,問題排查處理完整文檔(linux)】

一.使用Yum倉庫自動安裝 步驟1:添加MySQL Yum倉庫 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm步驟2:安裝MySQL服務器 sudo yum install mysql-server -y步驟3:啟動并設置開機自啟 sudo systemctl start mysqld sudo systemct…

自定義線程池-實現任務0丟失的處理策略

設計一個線程池,要求如下:隊列最大容量為10(內存隊列)。當隊列滿了之后,拒絕策略將新的任務寫入數據庫。從隊列中取任務時,若該隊列為空,能夠從數據庫中加載之前被拒絕的任務模擬數據庫 (TaskDa…

【NLP入門系列四】評論文本分類入門案例

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

Ubuntu安裝ClickHouse

注:本文章的ubuntu的版本為:ubuntu-20.04.6-live-server-amd64。 Ubuntu(在線版) 更新軟件源 sudo apt-get update 安裝apt-transport-https 允許apt工具通過https協議下載軟件包。 sudo apt-get install apt-transport-htt…

C++26 下一代C++標準

C++26 將是繼 C++23 之后的下一個 C++ 標準。這個新標準對 C++ 進行了重大改進,很可能像 C++98、C++11 或 C++20 那樣具有劃時代的意義。 一:C++標準回顧 C++ 已經有 40 多年的歷史了。過去這些年里發生了什么?這里給出一個簡化版的答案,直到即將到來的 C++26。 1. C++9…

【MySQL】十六,MySQL窗口函數

在 MySQL 8.0 及以后版本中,窗口函數(Window Functions)為數據分析和處理提供了強大的工具。窗口函數允許在查詢結果集上執行計算,而不必使用子查詢或連接,這使得某些類型的計算更加高效和簡潔。 語法結構 function_…

微型氣象儀在城市環境的應用

微型氣象儀憑借其體積小、成本低、部署靈活、數據實時性強等特點,在城市環境中得到廣泛應用,能夠為城市規劃、環境管理、公共安全、居民生活等領域提供精細化氣象數據支持。一、核心應用場景1. 城市微氣候監測與優化熱島效應研究場景:在城市不…

【仿muduo庫實現并發服務器】eventloop模塊

仿muduo庫實現并發服務器一.eventloop模塊1.成員變量std::thread::id _thread_id;//線程IDPoller _poll;int _event_fd;std::vector<Function<Function>> _task;TimerWheel _timer_wheel2.EventLoop構造3.針對eventfd的操作4.針對poller的操作5.針對threadID的操作…

Redis 加鎖、解鎖

Redis 加鎖和解鎖的應用 上代碼 應用調用示例 RedisLockEntity lockEntityYlb RedisLockEntity.builder().lockKey(TradeConstants.HP_APP_AMOUNT_LOCK_PREFIX appUser.getAccount()).value(orderId).build();boolean isLockedYlb false;try {if (redisLock.tryLock(lockE…

在 Windows 上為 WSL 增加 root 賬號密碼并通過 Shell 工具連接

1. 為 WSL 設置 root 用戶密碼 在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;時&#xff0c;默認情況下并沒有啟用 root 賬號的密碼。為了通過 SSH 或其他工具以 root 身份連接到 WSL&#xff0c;我們需要為 root 用戶設置密碼。 設置 root 密碼步…

2730、找到最長的半重復子字符穿

題目&#xff1a; 解答&#xff1a; 窗口為[left&#xff0c;right]&#xff0c;ans為窗口長度&#xff0c;same為子串長度&#xff0c;窗口滿足題設條件&#xff0c;即只含一個連續重復字符&#xff0c;則更新ans&#xff0c;否則從左邊開始一直彈出&#xff0c;直到滿足條件…

MCP Java SDK源碼分析

MCP Java SDK源碼分析 一、引言 在當今人工智能飛速發展的時代&#xff0c;大型語言模型&#xff08;LLMs&#xff09;如GPT - 4、Claude等展現出了強大的語言理解和生成能力。然而&#xff0c;這些模型面臨著一個核心限制&#xff0c;即無法直接訪問外部世界的數據和工具。M…