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

【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】

一个加速语言模型生成的方法

  • 现在语言模型的一个弊端
  • speculative decoding
    • 预言家预测的问题
  • speculative decoding 模块的实现方法
    • NAT Non-autoregressive
    • 模型压缩
    • 使用搜索引擎
  • 一些更复杂些的speculative decoding 实现方式

speculative decoding 是一个适用于目前生成模型的加速方法,不需要修改模型,就可以大大加速模型的生成速度。

现在语言模型的一个弊端

现在语言模型用autoregressive decoding方法生成输出内容的时候,由于其底层实现机制是decoder按照顺序一步步生成的,没有办法并行,所以生成的速度很慢。

克服它的一个方法就是speculative decoding,模型之外,外挂一个预言家,多预言一个就加速一倍。

speculative decoding

现在就是要多加上一个speculative decoding模块,它生成速度很快,它的所用就是用来预测语言模型下一个要生成的是什么。这样就可以把语言模型原本串行的操作,变成并行的。原本语言模型的输入的,和 输入加 speculative decoding 预测的下一个token 一起输入到语言模型里,这样语言模型就一次可以并行处理两个输入,生成两个输出了,如图:
在这里插入图片描述
还是用机器翻译来举个例子:

  • 原本的输入形式:

输入:机器学习,输出 machine
输入: 机器学习 ,merchine,输出 learning
输入 :机器学习 ,merchine,输出 end

  • 加上预言模块后:
    输入一次变成两个 也就是原本输入中的上面的前两条一起输入给语言模型,也就是:
    不仅输入

机器学习,

,还要用 speculative decoding 预言到的machine ,形成

机器学习,machine
上面两个一起输入给语言模型,让它输出。

如果 speculative decoding一次预测一个,那么速度就可以提升为原来的2倍,一次预测2个token,就可以提升3倍:
在这里插入图片描述
看到这里你i肯定会想,难道预言家不会犯错么,上面一次预测的这两个token万一有错误呢?

预言家预测的问题

预言家必然不可能都预测准确,要不然语言模型还有什么用,下面我们看看预测错误会出现什么情况:
假如正确的输出是一个红一个黄的token,但是预言家预预测出了一个红一个灰的token,也就是预测错误了一个,那情况就如下:
在这里插入图片描述
这情况下,第三步是错误,但是前两步是正确的呢,速度还是提升了。极端的,预言家全部都没预测对,但是不影响原来一个token的输出,只是多了一点预言家的预测时间,和多了一些运算资源,但是几乎可以忽略。
总之,好处多余坏处。那么预言家 speculative decoding 如何实现呢

speculative decoding 模块的实现方法

speculative decoding 诉求就是速度快,可以犯点错,下面有三个方法可以实现这个诉求

NAT Non-autoregressive

我们可以用 Non-autoregressive 来实现这个,它的实现方式就是生成速度快,但是生成的没那么准确。
在这里插入图片描述
把输入放到NAT的模型里面,同时预测多个输出

模型压缩

可以压缩模型,比如模型量化等很多方法可以压缩模型,用小模型去作为预言家

使用搜索引擎

可以直接联网输入,把搜索到的拿出来作为预言的token

一些更复杂些的speculative decoding 实现方式

一个预言家预测准确的情况无法确定,但是我们可以放多个预言家,这样会耗费计算资源,但是预言准确的命中率会大大提升。

http://www.lryc.cn/news/427205.html

相关文章:

  • Rust 错误处理
  • 程序与进程 linux系统
  • 使用MongoDB构建AI:Story Tools Studio将生成式AI引入Myth Maker AI游戏
  • 鸿蒙UIAbility组件概述(二)
  • Oracle(70)如何优化SQL查询?
  • 深度剖析:Jenkins构建任务无法中断的原因及解决方案
  • 【YOLO】常用脚本
  • Springboot IOC DI理解及实现+JUnit的引入+参数配置
  • CeresPCL 最小二乘插值(曲线拟合)
  • 【TCP/IP】自定义应用层协议,常见端口号
  • Frida 的下载和安装
  • 后端开发刷题 | 链表内指定区间反转【链表篇】
  • 【NVMe系列-提问页与文章总结页面】
  • 用生成器函数生成表单各字段
  • 【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明
  • 结营考试- 算法进阶营地 - DAY11
  • 设计模式: 访问者模式
  • selenium底层原理详解
  • 【Solidity】继承
  • docker 安装mino服务,启动报错: Fatal glibc error: CPU does not support x86-64-v2
  • 地图相册系统的设计与实现
  • 使用vh和rem实现元素响应式布局
  • 螺旋矩阵 II(LeetCode)
  • 如何快速掌握一款MCU
  • XSS-DOM
  • uniapp去掉页面导航条
  • MySQL数据库专栏(三)数据库服务维护操作
  • 【QT】基于UDP/TCP/串口 的Ymodom通讯协议客户端
  • 超详细!!!electron-vite-vue开发桌面应用之引入UI组件库element-plus(四)
  • 【排序篇】实现快速排序的三种方法