专栏名称: 深度学习自然语言处理
一个从大三就接触NLP的小小NLPer,本公众号每天记录自己的一点一滴,每篇文章最后也有托福单词等新知识,学技术同时,也一点一滴积累额外的知识。期待与你在知识的殿堂与你相遇!
目录
相关文章推荐
手游那点事  ·  今天,率土团队单机新作公开Steam页面 ·  2 天前  
手游那点事  ·  全球手游收入Top20:《王者荣耀》空降第一 ... ·  4 天前  
手游那点事  ·  又是腾讯?一款收入超10亿美金的二游出现了 ·  4 天前  
51好读  ›  专栏  ›  深度学习自然语言处理

速读 LLaMA3.2-Vision 模型的结构

深度学习自然语言处理  · 公众号  ·  · 2024-09-26 23:52

正文

作者栏

fanqi

随着 Meta 在今天放出了 LLaMA3.2 系列模型,LLaMA 系列也是正式迎来了官方版本的多模态大模型 LLaMA3.2-Vision [1] 。那我们就在本期内容中聊一聊 LLaMA3.2-Vision 模型的结构,希望对大家有所帮助。

相关代码位于 [2]

结论

先说结论, LLaMA3.2 的整体结构与 Flamingo 相似 ,均是采用 交叉注意力 的方式进行模态融合。而 projector 也仅仅由 一个线性层 组成。

LLaMA3.2-Vision-11B 的 ViT 参数量仅有 800M,projector 的参数量为 31M,而 LLM 部分的参数量来到了 9775 M。

具体结构

Vision Encoder

VisionModel 定义

先来看 Vision Encoder 部分。尽管 Vision Encoder 整体上还是 ViT 架构,但却比一般的 ViT 多出了很多东西,比如 gated_positional_embedding pre_tile_positional_embedding post_tile_positional_embedding 。此外,最与众不同的一点便是,Vision Encoder 中包含 两部分编码器 ,分别为 transformer global_transformer

在推理时,图片会首先经过 processor 进行处理。在对其进行 reshape 后,便会对其进行 PatchEmbedding 操作。但此时 并不会直接叠加位置编码 ,而是再次 reshape,之后再叠加 pre_tile_positional_embedding 。随后 reshape 回到叠加 pre_tile_positional_embedding 前的形状,并叠加 class_token 。在这之后,再次 reshape 并叠加 gated_positional_embedding 。完成这一切过后便是对于输入的 pad 过程。在准备好对于输入图片比例的 attention_mask 后,输入会通过 transformer 得到 第一份输出 。然后将这份输出 reshape 并叠加 post_tile_positional_embedding ,随后经过 global_transformer 得到其 最终输出与中间状态 。在将最终输出与中间状态叠加后,Vision Encoder 完成了其输出。

接下来,我们来看三个 positional_embedding 之间的区别。代码是这样定义的:

self.gated_positional_embedding = MllamaPrecomputedPositionEmbedding(config)

self.pre_tile_positional_embedding = MllamaPrecomputedAspectRatioEmbedding(config, is_gated=True)
self.post_tile_positional_embedding = MllamaPrecomputedAspectRatioEmbedding(config, is_gated=True)

可以看到,三个 positional_embedding 之间存在明显差别。其中 pre_tile_positional_embedding post_tile_positional_embedding 主要是对于图像的宽高比进行编码,而 gated_positional_embedding 更像是传统意义上的位置编码。

最后是 transformer global_transformer 的不同。 global_transformer 启用了 gated 参数,这会使得 MllamaVisionEncoderLayer 的行为不同。具体来讲,在启用 gated 时, MllamaVisionEncoderLayer 会有两个可学习的参数,分别用于控制 attention 层的输出 scale 和 ffn 层的输出 scale。

LLM







请到「今天看啥」查看全文