当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、大语言模型loss计算
    • 1、loss计算代码解读
    • 2、构建模型输入内容与label标签
    • 3、input_ids与labels格式
  • 二、多模态大模型loss计算方法
    • 1、多模态loss计算代码解读
    • 2、多模态输入内容
    • 2、大语言模型输入内容
    • 3、图像embending如何嵌入文本embeding

前言

如果看了我前面文章,想必你基本对整个代码有了更深认识。实际上,大多大模型都是使用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的拼接!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Gin框架接入pyroscope完美替代pprof实现检测内存泄露
  • 离职保密协议是什么?怎么样才是合法的?如何维护公司权益?
  • DataGear 企业版 1.2.0 发布,数据可视化分析平台
  • django常用的组合搜索组件
  • 【区块链+金融服务】山西省信易贷平台 | FISCO BCOS应用案例
  • redis面试(九)锁重入和互斥
  • 基于PCA-BP的数据多变量回归预测 Matlab代码(多输入单输出)[可显示原始特征贡献率+贡献率排序+累计贡献率]
  • 【Git】远程仓库新建分支后,拉到本地开发
  • 音视频概要
  • 主机防火墙测试--IPV6地址TCP/UDP/ICMP协议测试方法
  • 应对FingerprintJS反爬:Selenium的破解策略与技术详解
  • 【零基础学习CAPL语法】——TestWaitForMessage:等待指定报文
  • MongoDB教程
  • Elasticsearch 桶(Bucket)聚合详解及示例
  • 基于vue框架的XXXX勤工助学管理系统vl6ft(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Google 是如何开发 Web 框架的
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Angular2开发踩坑系列-生产环境编译
  • eclipse(luna)创建web工程
  • Github访问慢解决办法
  • Java 最常见的 200+ 面试题:面试必备
  • javascript 总结(常用工具类的封装)
  • JavaScript设计模式与开发实践系列之策略模式
  • JS变量作用域
  • linux学习笔记
  • Python打包系统简单入门
  • scala基础语法(二)
  • uni-app项目数字滚动
  • vagrant 添加本地 box 安装 laravel homestead
  • 前端路由实现-history
  • 深度解析利用ES6进行Promise封装总结
  • 使用agvtool更改app version/build
  • 智能合约开发环境搭建及Hello World合约
  • 如何在招聘中考核.NET架构师
  • ​zookeeper集群配置与启动
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #数据结构 笔记三
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (python)数据结构---字典
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二) 初入MySQL 【数据库管理】
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)IO流之ByteArrayInput/OutputStream
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Oracle存储过程编写经验和优化措施