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