【多模态学习笔记一】

多模态代码阅读一:PinK

LayerNorm\ RMSNormal介绍


环境配置

https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/rdp/cudnn-archive

$ export PATH=/usr/local/cuda-8.0/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/root/paddlejob/workspace/env_run/cuda_11.7.1_cudnn_8.9.4/targets/x86_64-linux/lib:$LD_LIBRARY_PATH

https://github.com/Dao-AILab/flash-attention/releases/


self.register_buffer("causal_mask", torch.triu(causal_mask, diagonal=1), persistent=False)

_update_causal_mask 的方法,其主要功能是根据输入参数 attention_mask 和 input_tensor 来更新或生成因果掩码(causal mask)。因果掩码常用于自注意力机制(self-attention mechanism)中,以确保模型在处理序列时不会违反因果顺序。

数据生成

LLaVA-158K与LLaVA(Large Language and Vision Assistant)模型紧密相关。LLaVA是首个尝试使用纯语言的GPT-4生成多模态语言-图像指令跟随数据的模型。为了实现这一目标,它采用了MSCOCO数据集中的标注信息。每张图片都有5个较简短的标注说明和对象边界框(包括类别和位置)序列,这些信息被用作仅文本的GPT-4的输入。

通过特定的提示,GPT-4被引导“假装”看到了图片,并生成了三种类型的文本:关于图像中对象的对话、针对图片的详细描述以及与图片相关的复杂的推理过程。最终,构建了共158K条多模态指令跟随数据,这就是LLaVA-158K的由来。其中,包括58K的对话数据、23K的细节描述和77K的复杂推理。

这些数据为LLaVA模型提供了丰富的训练材料,使其能够连接视觉编码器和大型语言模型(LLM)进行通用的视觉和语言理解任务。这种创新的方法为大型多模态模型的训练开辟了新的途径,并有望在未来的视觉和语言处理领域中发挥重要作用。


数据集介绍

A-OKVQA是一个基于外部知识的视觉问答评测任务。与其他大多数VQA评测任务不同,A-OKVQA主要考察模型结合外部知识和图片内容回答问题的能力。这些问题一般不能通过简单地查询知识库或图片信息来回答,而是需要对图像中描述的场景进行常识推理。回答这些问题所需的知识包括常识性知识、视觉知识、知识库知识以及物理知识。在A-OKVQA评测中,每个问题都设置了选择题选项和10个自由形式答案,考核指标包括直接答案(Direct Answer,DA)评估和选择题(Multi Choice,MC)评估。


Visual Genome是一个由Stanford大学于2016年提出的图像及图像内容语义信息的数据集。相比于其他著名的图像标注数据集,如ImageNet(同样由Stanford大学维护),Visual Genome附加了更为丰富的语义信息。这个数据集的主要目的是帮助人们更好地理解图像中的内容和关系,从而推动基于图像及语义信息的人工智能应用的发展。

Visual Genome数据集对每张图片都进行了详细的标注,包括区域描述、对象、属性、关系、区域图、场景图以及问答对。其中,每个区域都有一个对应的区域图,而每张图则有一张场景图,即所有区域图的组合。对于每个图,有两种问答对被标注:一种是基于整个图片的自由问答,另一种是基于图片中特定区域的问答。每张图片都用“6W”问题进行标注,这些问题涉及到谁、什么、哪里、何时、为何以及如何等方面。

在具体数据上,Visual Genome数据集包含了大量的图像和相关的语义信息。例如,它包括了108,249张图片、420万区域内容描述、170万图像内容问答、210万对象案例、180万属性以及180万关系。这些数据为研究者提供了丰富的资源,以支持他们在图像识别、物体识别、图像内容理解、图像推理、图像问答以及图像语义理解等领域的研究。

总的来说,Visual Genome是一个功能强大且内容丰富的数据集,它为人工智能领域的研究者提供了宝贵的资源,以推动图像理解和相关应用的发展。


损失缩放参数在深度学习中主要用于解决低精度数值表示带来的问题。当使用较低精度的数值格式进行模型训练时,如半精度浮点数(float16),可以带来更低的存储占用、更大的带宽和吞吐量,以及由于降低了功耗而更节能的训练。

然而,低精度的数值格式也带来了数值不稳定的问题,这可能会降低模型的统计性能。为了解决这一问题,损失缩放参数被引入。在训练过程中,通过调整损失函数的值,可以在低精度数值表示的动态范围内转移梯度分布,从而防止下溢和溢出。

具体来说,损失缩放参数可以在网络模型前向计算后在反向传播前,将得到的损失变化值增大一定倍数。反向传播后,将权重梯度缩放相应的倍数,恢复更高的精度值进行存储。这种方法可以确保梯度在反向传播过程中不会因为低精度表示的限制而丢失信息。

此外,动态损失缩放算法是一种更为灵活的方法。它不是使用固定的放大倍数来缩放损失,而是根据梯度的溢出情况动态地调整损失缩放的规模。这样可以实现在不引起溢出的前提下使用最高的损失缩放因子,从而更好地恢复精度。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值