面試官讓我講一下DeepSeek-VL2的細節(jié)
看DeepSeek-VL2細節(jié)之前,先簡單介紹下DeepSeek-VL2提到的recaption方案和visual prompt數(shù)據(jù)。
1.recaption:PixelProse
1.1why recaption
PixelProse是《From Pixels to Prose: A Large Dataset of Dense Image Captions》中提供的一個(合成)caption數(shù)據(jù)集,共有16M條樣本;論文同時也介紹了他們構(gòu)造PixelProse的recaption方案。
為什么要做recaption?因為caption數(shù)據(jù)由來已久,業(yè)界有許多開源的caption數(shù)據(jù)集,這些數(shù)據(jù)集的收集、處理方式各不相同,數(shù)據(jù)內(nèi)容和質(zhì)量參差不齊。直接用這些數(shù)據(jù)訓練會帶入很多我們不想要的噪聲,效果也不太好。
通過具體case的分析,主要有這么些問題:
- 數(shù)據(jù)里存在一些NSFW和Child Sexual Abuse Material (CSAM)的內(nèi)容,這在很多場景都不合適甚至不合法
- 很多樣本的圖片和caption關(guān)聯(lián)性太差,比如過于簡短,或者缺乏準確的描述,這導致VL模型沒法很好學習語言和圖像之間的細節(jié)對齊關(guān)系
- 文字是VL模型和SD模型要學習的一個重點,但是現(xiàn)有的caption數(shù)據(jù)很多都沒有給出圖中文字的詳細內(nèi)容,使得模型很難學習文字
1.2方案
針對分析出來的這些問題,合成高質(zhì)量的caption數(shù)據(jù)的流程設(shè)計成這樣:
圖片
一步一步來看。
1)過濾
source data有三個,CommonPool、CC12M 和 RedCaps。當然如果現(xiàn)在我們要再多,那可以多加點數(shù)據(jù)集進去。首先,這些數(shù)據(jù)集通過NSFW分類模型和commercial Google APIs進行內(nèi)容過濾,僅保留圖片內(nèi)容合適合法的數(shù)據(jù)。
2)選擇prompt
接下來,會從下面5個預定義的prompt中隨機選擇一個,用于讓Gemini生成新的prompt。
圖片
3)加入alt-text
在生成的時候,會隨機加入圖片的alt-text到prompt中。參考《CapsFusion: Rethinking Image-Text Data at Scale》的發(fā)現(xiàn),加入alt-text有機會提升生成結(jié)果細節(jié)的準確性。
4)加入Negative Descriptions
無論是VLM還是diffusion模型,對于negative描述的指令遵循能力總是比較差。比如跟diffusion模型說“畫一幅沒有大象的畫”,最終畫出來的畫就有大象。
為了增強模型對negative instruction的遵循能力,隨機讓Gemini增加一些途中不存在的物體的描述。比如“途中有5個紅色的蘋果”,就會再加上negative description “但是沒有任何梨子出現(xiàn)在途中”。
5)優(yōu)化Text Recognition
文字能力是VLM和diffusion模型都很重要的一個能力,如果沒有文字識別能力,多模態(tài)模型無法識別圖片上的路標、廣告牌、標簽等信息,而diffusion模型在生成包含文字的圖像時也會是一團亂碼。
為了增強模型的文字理解能力,可以看到前面的5個prompt里都包含一個要求:
If any text is present in the image, mention where it is, and the font.Describe the text in detail with quotation marks.
不過生成caption的模型識別文字的準確率不是100%,甚至可能只有七八成的準確率,所以后面還要check一下。
在校驗之前,先用watermark model分類一下,對于不包含watermark,且出現(xiàn)文字的圖片,再用OCR模型進行識別。小于15個pixel的text region會被拋棄。
最終check的結(jié)果表明大概有76%的文字可以被caption模型正確識別:
圖片
當然OCR模型本身也不是100%正確的,對于樣式復雜的情況,OCR模型也識別不準,不過整體上這個準確率校驗還是可以參考的。
1.3.PixelProse
新合成的PixelProse文本長度相比原caption更長,包含更多細節(jié)信息:
圖片
從文本的分詞結(jié)果上看,PixelProse所包含的名詞多樣性也更豐富:
2.Visual Prompt
這一part主要是講一下visual prompt。
在純文本的場景,prompt的使用大家都很熟悉的。而在多模態(tài)場景,一般來說用戶指令也是以文本的形式給出,比如“圖上這個人多少歲了”,“這只狗是什么品種”這樣。
假設(shè)現(xiàn)在有一張圖,上面有很多人,你想要針對其中某個人對模型進行詢問。如果用文本進行描述的話,就有點困難:這些人可能沒有很整齊地排列,衣著也沒有鮮明特點;哪怕能夠通過位置或者特征進行文字描述,這也會給模型的理解和識別造成困難。
回想一下,如果是在和人交流,那么要準確定位圖上的一個人,最簡單的方法就是用手指一下,或者拿筆在對應位置畫個圈/箭頭。那跟模型交流的時候也可以這么干:
圖片
這個圈/箭頭就是visual prompt。
如果模型具備和這些圈/箭頭進行交互的能力,那么用戶在交互的時候就會更加自然。
2.1.數(shù)據(jù)
要訓練這樣的能力,首先就要有數(shù)據(jù)?!禫iP-LLaVA: Making Large Multimodal Models Understand Arbitrary Visual Prompts》就搞了一批數(shù)據(jù)。
1)source data
visual prompt的數(shù)據(jù)還是通過數(shù)據(jù)合成獲得。源數(shù)據(jù)就是現(xiàn)有各種物體識別/實體分割的數(shù)據(jù),這些數(shù)據(jù)包含物體的位置和類型/名稱信息,很方便改造成visual prompt數(shù)據(jù)。
2)visual prompt type
研究人員定義了一下巴中visual prompt類型,用于標識圖像中的物體,總共有8種:
個人認為,這8種其實可以分成3個大類:
(1)外框
橢圓、長方形、三角形、物體的mask都屬于把物體框起來的方式,只是有的框比較粗糙,有的比較精細。
在構(gòu)造這類visual prompt的時候,為了引入一定的隨機性,會對外框的ratio、顏色和大小進行一定的隨機變化,只要保證主要物體還在框里就行。
(2)箭頭
箭頭和把物體圈起來的做法不同,箭頭一般畫在物體附近,而且有方向性。
(3)涂鴉
scribble,contour和point其實都是類似涂鴉的方式,只是涂鴉的精細程度不同,point是最簡陋的,contour是最精細的,而scribble介于兩者之間。scribble是用貝塞爾曲線工具模擬人類軌跡畫的。
3.DeepSeek-VL2
DeepSeek-VL2開源了三個規(guī)模的模型,都是MoE:
- DeepSeek-VL2-Tiny:總參數(shù)3B,激活參數(shù)0.57B
- DeepSeek-VL2-Small:總參數(shù)16B,激活參數(shù)2.4B
- DeepSeek-VL2:總參數(shù)27B,激活參數(shù)4.1B
原文給出的效果對比:
不過這張圖比的是激活參數(shù)。其實直接看總參數(shù),DeepSeek-VL2的效果也是很不錯的,只是沒有看激活參數(shù)的優(yōu)勢那么大。從另一個角度想,如果DeepSeek通過模型架構(gòu)和計算框架優(yōu)化,可以把MoE+MLA結(jié)構(gòu)做到和同樣激活參數(shù)的dense模型相同效率的話,這么對比也不是不行。
DeepSeek-VL2相比前一代,主要有3個優(yōu)化點:
- 動態(tài)高分辨率vision encoding
- LLM架構(gòu)優(yōu)化
- 數(shù)據(jù)構(gòu)建pipeline優(yōu)化
LLM架構(gòu)優(yōu)化其實就是MoE + MLA,帶來的語言模型效率和效果提升,這部分在《DeepSeek-V3細節(jié)探索》中有細說,此處就不展開。三個開源模型的具體結(jié)構(gòu)參數(shù):
圖片
最小的Tiny模型沒有使用MLA,而是使用MHA,這和我們之前對MLA的認知是一致的:模型每個頭的大小并不需要很多,模型增大更多是增加頭數(shù),而MLA需要在頭數(shù)更多的場景下才能發(fā)揮效率和效果的優(yōu)勢,因此模型越大MLA優(yōu)勢越大,而在小模型上MLA則不容易發(fā)揮優(yōu)勢。
另外,只有最大的DeepSeek-VL2使用了expert correction bias和sigmoid routing function,這倆都跟expert parallelism有關(guān)。
另外有點奇怪的是只有small版本的vocab是102400,其他兩個都是129280
DeepSeek-VL2整體框架還是標準的三件套:
圖片
3.1動態(tài)分辨率:Dynamic Tiling Strategy
使用高分辨率 + 動態(tài)分辨率基本上已經(jīng)是現(xiàn)在的標準做法。
DeepSeek-VL2三個規(guī)模的模型使用的vision encoder都是SigLIP-SO400M-384,這是一個基礎(chǔ)分辨率為384 × 384的模型?;谶@個分辨率,定義了一批候選分辨率,這些候選分辨率的width和height都是384的倍數(shù):
對于每一個原始圖像,會保持ratio進行resize到每個候選分辨率,并選擇使用所需padding最少的候選resolution。
最后還會加上一個原圖的縮略圖,因此總用有(1 + m × n)個tile,每個tile都是384 × 384的大小,由vision encoder來單獨處理。
以上是vision encoder的輸出。接下來是VL Adaptor的處理。
SigLIP-SO400M-384使用的patch size = 14,每個tile會產(chǎn)生27 × 27個visual embedding,會通過pixel unshuffle,把visual embedding的數(shù)量減少到14 × 14個。
另外,為了幫助模型識別visual embedding的位置關(guān)系,在縮略圖和子圖的每行visual embedding最后都會加一個 \n token,標識一下這一行embedding的結(jié)束。
這么一來總的token數(shù)就變成:
14 × (14 + 1) + 14m × (14n + 1)
最終得到的圖像feature按這樣排布:
圖片
動態(tài)分辨率的方案到這里就結(jié)束了。不知道有沒有細心的同學發(fā)現(xiàn),上面的基礎(chǔ)分辨率384并不是patch size 14的整數(shù)倍數(shù)(384 / 14 ≈ 27.4),我也有點奇怪,搜索之下發(fā)現(xiàn)確實有問題:原來SigLIP-SO400M-384的真實分辨率并不是384,而是14 × 27 = 378,384只是由于歷史遺留問題一直保持這么個寫法。原鏈接在 https://huggingface.co/google/siglip-so400m-patch14-384/discussions/4。(這簡直和“2020年東京奧運會在2021舉辦”有異曲同工之妙)。
3.2多階段訓練
DeepSeek-VL2的訓練分三個階段:
- 對齊:訓練adaptor和vision encoder,凍結(jié)LLM
- 預訓練:全參訓練
- SFT:全參訓練
圖片
3.3數(shù)據(jù)
1)對齊
在對齊階段,DeepSeek-VL2只用ShareGPT4v數(shù)據(jù):包含1.2M條caption和conversation樣本。
2)預訓練
預訓練階段使用了70%的VL數(shù)據(jù)和30%純文本數(shù)據(jù)。
(1)Interleaved image-text data
主要來自WIT、WikiHo和OBELICS,它們的混合比例通過在eepSeek-VL2-Tiny上實驗確定;還有一個in-house數(shù)據(jù)集來增強真實世界知識的覆蓋。
(2)Image captioning data
對現(xiàn)有的caption數(shù)據(jù)進行recaption處理,參考PixelProse的做法,在生成新caption的時候加入:
- OCR hints
- meta information (e.g., location, camera settings)
- original captions
recaption之后還是存在一些質(zhì)量問題,因此用DeepSeek Chat對文本質(zhì)量再進行打分和過濾,這樣一來caption效果得到了有效提升
(3)OCR數(shù)據(jù)
包括LaTeX OCR和12M RenderedText數(shù)據(jù)集,和一些in-house數(shù)據(jù)集,主要是中英文的。
(4)VQA數(shù)據(jù)
包括:
- General VQA
- Table, chart and document understanding
- Web-to-code and plot-to-Python generation
- QA with visual prompt
(5)Visual grounding data
數(shù)據(jù)樣式:
Prompt: Locate <|ref|><query><|/ref|> in the given image.
Response: <|ref|><query><|/ref|><|det|>[[x1, y1, x2, y2],...]<|/det|>
<|ref|>, <|/ref|>, <|det|>, <|/det|> are special tokens. <query> is a place-holder for either the category name (e.g., “car”) or description of the object (e.g., “the leftmost person”). [[x1, y1, x2, y2], ...] is a list of bounding boxes, where each bounding box corresponds to an object’s position. The coordinates x1, y1 and x2, y2 specify the top-left and bottom-right corners respectively, normalized to values between 0 and 999 according to the resolution of the image.
還另外構(gòu)建了負樣本,把一些object從原圖上消去,以增加模型robustness。
(6)Grounded conversation data
數(shù)據(jù)樣式:
Prompt: <|grounding|>Can you describe the content of the image?
Response: Two <|ref|>dogs<|/ref|><|det|>[[x1, y1, x2, y2],...]<|/det|> are running on the grass.
3)SFT
(1)General visual question-answering
現(xiàn)有的VQA數(shù)據(jù)集有一些問題,包括:
- response太短
- OCR質(zhì)量差
- 有幻覺
因此把original question、image和OCR信息放在一起,重生成response,以提升數(shù)據(jù)質(zhì)量。
(2)OCR and document understanding
預訓練后模型的OCR能力已經(jīng)很強了,因此sft階段專注選出低質(zhì)量樣本,提升數(shù)據(jù)質(zhì)量。
(3)Table and chart understanding
同OCR類似
(4)Reasoning, logic, and mathematics
發(fā)現(xiàn)detailed response在小模型上的訓練效果并不好,小模型對簡潔的response的學習能力更好。
(5)Textbook and academic questions
使用了包含跨學科、大學水平的教科書內(nèi)容的內(nèi)部數(shù)據(jù)集。
(6)Web-to-code and plot-to-Python generation
對于開源數(shù)據(jù)也重新生成response提高質(zhì)量。
(7)Visual grounding
把query翻譯成了中文,還加了一個negative sample。
(8)Grounded conversation
使用《Groma: Localized visual tokenization for grounding multimodal large language models》和《Flickr30k entities: Collecting region-to-phrase correspondences for richer image-to-sentence models》數(shù)據(jù)集構(gòu)建對話數(shù)據(jù)。
(9)Text-Only datasets
使用了很多數(shù)據(jù),但是沒有給出比例。
一個總結(jié),在數(shù)據(jù)這塊DeepSeek-VL2在強調(diào)多樣性的同時,也用現(xiàn)有的模型構(gòu)建更強的pipeline重新生成response以提高數(shù)據(jù)質(zhì)量。
3.4.cases
圖片
4.小結(jié)
- 現(xiàn)有的多模態(tài)數(shù)據(jù)質(zhì)量有高有低,直接使用可能有很好的效果
- 數(shù)據(jù)多樣性能夠有效提升模型訓練效果
- 按這個趨勢MoE有可能再次火起來?如果硬件的優(yōu)化跟上,MoE說不定能成為attention一樣的標準方案。MLA也同樣有這個可能。