V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  程序员

为什么大模型能记住 dataset 里几万亿字的内容,却记不住和用户聊天时两三万字的 context?

  •  
  •   drymonfidelia · 336 天前 · 3848 次点击
    这是一个创建于 336 天前的主题,其中的信息可能已经有所发展或是发生改变。
    28 条回复    2023-12-15 00:28:09 +08:00
    allenzhangSB
        1
    allenzhangSB  
       336 天前
    淘宝数据库里有都已经有几亿个商品, 为什么一个订单不能添加上一个商品?
    OMGJL
        2
    OMGJL  
       336 天前
    简单且模糊的说,ai 模型就是一个 N 维空间,每一个词都有自己在这个空间里对应的位置,根据输入信息的词组合 找到距离最近的对应词。

    换个说法,你学会查词典目录 不等于 你会这个词典里每一个字
    stimw
        3
    stimw  
       336 天前
    对于大模型来说,
    - 几万亿字的内容:这是训练数据集,在训练过程中最终会固化为数十亿个参数,形象来说就是“长期记忆”。
    - 聊天时两三万字:也就是你说的 context ,模型在推理时只能处理有限的输入空间,这跟模型的架构、推理能力、内存要求都有关系,形象来说就是“短期记忆”。

    所以他不是真的记住了几万亿字的内容。对于单次推理来说,它也不是真的记住了两三万字的 context ,而是每次推理都要“查看”一遍 context 。
    drymonfidelia
        4
    drymonfidelia  
    OP
       336 天前
    @stimw 把 context 转换为只对这个 session 有效的参数有什么难度?
    drymonfidelia
        5
    drymonfidelia  
    OP
       336 天前
    @drymonfidelia 说错了,应该是难点在哪里
    lt0136
        6
    lt0136  
       336 天前 via Android
    所以 fine-tune 就是把短期记忆变成长期记忆?
    ShadowPower
        7
    ShadowPower  
       336 天前
    @drymonfidelia 样本太小,而且很难找出让模型记住这句话所需要调整的关键权重。

    训练阶段会输入各种各样的数据,权重的调整方向是根据这些多样的数据算出的平均值。
    如果只有小样本训练的话,会过拟合,而且会破坏原有知识的关键权重,导致灾难性遗忘。
    Ericcccccccc
        8
    Ericcccccccc  
       336 天前
    这就好像, 搜索引擎搜全网的内容飞快, 你用邮箱的搜索功能慢的要死.
    thinkershare
        9
    thinkershare  
       336 天前
    并不是记不住,而是记得越多,下一次回答就要从头重新扫描一个当前的上下文,这会导致计算量极大,因此一个上下文越长,它的会速度就会越来越慢,越来越慢,至于为啥不能固化上一次的权重,当然是因为成本,如果算力足够,不计成本,当然可以记住你一个人的全部上下文。
    thinkershare
        10
    thinkershare  
       336 天前
    可以记住一个人的上下文,并不意味着可以记住全球几千万的,因为每个人的上下文是不能交叉的。
    vToExer
        11
    vToExer  
       336 天前
    的确如果采用 decoder 结构的模型,那么只需要记住 context vector ,就算是保存了当前 session 的状态,下次请求时也不需要把之前的聊天记录全部传过来,只需要拿 user_id 查表得到 context vector 就能恢复状态。

    这样做用户侧来看感觉是最合理的。至于 openAI 没这么做的原因,我能想到的是一方面节省查表的开销,另一方面调 api 时多收点 token 费用,不知是否还有其它技术原因
    ShadowPower
        12
    ShadowPower  
       336 天前   ❤️ 1
    @vToExer 那玩意巨大,存储成本太高了
    GeekGao
        13
    GeekGao  
       336 天前
    我觉得本质是因为内存和推理时间都大大增加了。现有商业模式下,ROI 不成正比,因而没必要增加 context 长度到成本无法承受的临界点,除非技术上有突破。
    vToExer
        14
    vToExer  
       336 天前
    @ShadowPower 有理。看了下单条 context 大小应该是 seq_len * embedding_size ?如果按一般的 1024*768 存放单精度浮点相当于 3M 长度字符了,也就是在 8k 上下文场景下的约 400 轮聊天记录,差距很明显
    felixlong
        15
    felixlong  
       336 天前
    @drymonfidelia 训练和推理需要的计算量不是一个量级的。
    stimw
        16
    stimw  
       336 天前
    @drymonfidelia #4 这些参数的作用是为了让模型“理解”或者说“适应”你的 context 并且拟合出回答,不是为了记忆的。其次实时根据 context 去 fine-tune 不说效果咋样,这个行为在目前本身就不现实。
    redocxz
        17
    redocxz  
       336 天前
    它能记住前者是因为它在大量的数据集上训练了

    (这说明学习就需要重复重复再重复
    june4
        18
    june4  
       336 天前
    数据集几万亿字又不是都清楚记住,相当于视频有损压缩得妈都不认识了
    laqow
        19
    laqow  
       336 天前
    模型没有记住任何东西,它只是学会了怎样的输入输出能让你产生它记住了什么的感觉而已
    johnsona
        20
    johnsona  
       336 天前 via iPhone
    因为自回归的误差会累积 预测的下一个词本来可能就有误差 再用来预测误差会累积
    预测一小时后的天气容易 预测 300 天后的天气不容易
    czfy
        21
    czfy  
       336 天前
    机器学习模型训练的过程又不是记忆过程...是学习规律的过程啊
    就像求回归方程只是通过既有数据点找出与现有数据误差最小的那条线,和记住数据无关啊
    danhahaha
        22
    danhahaha  
       336 天前
    爱因斯坦牛顿那么吊也不去记几百位的圆周率,是因为他们记不住吗?是因为记了没什么卵用,大模型训练几万亿内容是有目的的学习,和用户聊天两三万字它记了没啥用,记住反而会污染它的样本
    Taikyo
        23
    Taikyo  
       336 天前
    训练数据训练的过程其实不是记忆全部数据的过程,而是学习语言规律,用法,结构的过程,训练过程中会调整参数,在训练结束后,这些参数就是大语言模型的 “长期记忆”,而聊天的上下文,会传给大语言模型进行推理,找到权重相关的内容,然后组织出答案。上下文越多,关联的东西就越多,大语言模型需要进行更多的文本分析和激活更多的参数权重,所以就约束了参数的上下文长度。
    上面那个是我跟 chagpt-4 一起交流出来的,然后梳理出来的我的理解,有错的欢迎交流指正
    leoleoasd
        24
    leoleoasd  
       336 天前
    每次有类似问题我都会推荐看这个视频
    ShadowPower
        25
    ShadowPower  
       336 天前
    @vToExer 不止这么点,还有位置编码和自注意力矩阵。
    很长的上下文占用的内存(显存)会非常夸张,有个开源模型 Yi-34B-200K ,在满 200K 上下文的情况下显存使用量达到了 400GB 。
    Taikyo
        26
    Taikyo  
       336 天前
    对了,针对 4 楼的问题,我讲下我的理解,因为大语言模型回答的时候,是通过激活跟上下文相关的权重网络进行理解和回应的,并不是检索数据的过程,假设把 context 只针对本次 session 的参数,可能会有另一个问题,就是 context 如果是错误的,根据错误的权重网络,那么就会推导出错误的结果。
    xuanbg
        27
    xuanbg  
       336 天前
    因为 context 对电脑毫无意义。没有意义,为什么要记?
    Liftman
        28
    Liftman  
       336 天前
    字 就。。那么多。没有几万亿。。。英语 26 个字母。中文也不过就。过万而已。。。他只是存在 N 维的概率关系。。。通过推理概率得到下一个字。有点像一直在查字典。。。。但是你如果给他几万字,首先他要理解这个几万字就非常困难,他要重新构造这些内容的概率关系。。。进一步的压缩内容,得到核心的关键信息 ,所以会导致细节的丢失。进一步就是他可能会误伤上一层的关键信息。导致答案并没有那么完美。所以我个人觉得目前并不适合提问的时候塞入太多关键信息。除非你提前做好了知识库。。。。这两者是不一样的。 尤其是你看 claude 虽然支持 20 万 token 。但是并不是很理想。。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1035 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:24 · PVG 05:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.