大语言模型与多模态大模型loss计算

前言

如果看了我前面文章,想必你基本对整个代码有了更深认识。实际上,大多大模型都是使用huggingface搭建,而大多LORA训练也是调用PEFT库。然而,LLaVA代码却没有相关VIT模型训练内容,也没有不同组合训练。而我也是想探索单独使用vit的lora训练、单独使用llm的lora训练或全都使用会有什么效果呢?因此,本篇文章将探索LLaVA如何按需构建LORA训练,我会给出如何构建参数与修改源码,也会给出我实验结果。实验结果表明,视觉、语言、映射三着结合训练基本没有效果,视觉与语言训练也不会有效果,而其它基本会有转好效果。

一、大语言模型loss计算

1、loss计算代码解读

我以llama3的loss计算方法来说明,大语言模型的loss计算逻辑,我们可以发现输出logits是取前n-1个位置内容,而lables是取了1:n的内容。如此,使用计算前面内容推理后面内容,假如你输出是5个可推理第6个token内容,如此类推就可以生成式的给出推理内容,这也是推理逐字生成方法,其代码如下图:

在这里插入图片描述
我们从代码中可已发现,大语言模型使用交叉熵来计算的,至于有关交叉熵相关原理,可自行参考其它博客内容。

2、构建模型输入内容与label标签

我给出大概loss计算标签,我们可以发现input_ids输入与labels是对应的,只是和我上面所说训练是错位计算交叉熵。我也整理了一份表格供读者参考。当然,我这里有问题可留言指正。

在这里插入图片描述

3、input_ids与labels格式

这里我以语言模型为例,huggingface训练输入input_ids与labels对应的id是一样的,只是再计算loss时候,模型输出减少了最后一位,而labesl去掉开始一个位置,以此达到了错位计算loss的目的,具体可查看如下图示。

在这里插入图片描述

二、多模态大模型loss计算方法

1、多模态loss计算代码解读

多模态大模型都是依附大语言模型来获得输出内容。尽然如此,多模态大模型的loss计算方法和我上上面说的llama3的loss计算方法一致,都是使用交叉熵方法来求解loss,也是输出logits是取前n-1个位置内容,而lables是取了1:n的内容。如此,使用计算前面内容推理后面内容,假如你输出是5个可推理第6个token内容,如此类推就可以生成式的给出推理内容,这也是推理逐字生成方法,其代码如下图:
在这里插入图片描述
这里重点强调:-100位置不需要计算loss,我非常肯定!!

2、多模态输入内容

当然,多模态和大语言模型还是有区别,主要在于多了其它编码模块,如图像多模态就是多了图像编码器将输出内容作为大语言输入ids。再进入大语言模型输入之前模型的输入内容如下图:
在这里插入图片描述
从图上可知,有了图像占位内容,而labels不需要计算loss为-100.

2、大语言模型输入内容

我再之前以说过,多模态大模型是依附大语言模型输入。自然输入大语言模型内容格式需和大语言模型一样,然而图像需要经过图像编码encoder模块将图像转为embedding,在与文本进行cat,我这下面是个大致的示意表格,如下:
在这里插入图片描述

3、图像embending如何嵌入文本embeding

这里,我借助b站的up所说,可参考下图内容。b站参考连接这里
拼接位置:
在这里插入图片描述

拼接embeding:
在这里插入图片描述
注:embedding的拼接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangjunjun-owen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值