语言大模型的杂念
潜空间包含了丰富的语义,这种语义在 prefill 的时候就已经决定了,逐 token 输出本身是个很低效的表达方式,所以理论上存在更好的表达方式,比如逐句或者逐段输出。
当前逐词元训练是个很有效的预测方案,让每个 next token 都能更新全网络权重,但是,有效并不意味着最优解,寻找最小的充要条件,实现语义完整的输入和表达,或许是一套更加好的方案。
比如:明天天气很好。这是一个完整的语义,通常在分词器中容易被分为“明天”“天气”“很”“好”几个词元,每个词元也是一个完整的语义单元。但是语义单元通常不包含完整的语义。自然语言通过合理组织语义单元形成语义块或者句义单元,才能成为大脑能理解的基本语义。
同样的,越来越多的证据表明,注意力机制本身包含丰富的语义信息,FFN 包含训练出来的知识记忆,模型通过多层网络,提取到最匹配当前语义的下一个语义单元,输出 token,那么是否存在方案,能使其完整输出句义呢?比如输入:问:明天天气很好 答:是的,明天大晴天,我们出去走走吧。这种输出不是逐元输出,而是一次性的语义表达。
毕竟自然语言只是语义的载体,语义的载体多种多样,可以是文字、语音、图画、肢体动作,不一而足。
那就需要丰富的训练数据了。
根据大家推测,当前顶尖大模型训练数据在 15T-30T 规模,如果提炼成句义做输入输出,规模会减少到 1/10 左右。根据幂律定律,参数规模也该随之缩小。用更小的参数,表达相同的语义,取得更快的输出。
但有个问题。
next token 输出是固定长度,也就是说 decoder 其实每次输入输出都是定长的,图像输出一般也会固定像素大小,如果想实现句义甚至段义的输出,则变成了变长输出。输出“是!”和一大段代码的场景都很多,怎么定义好这种输出,以及损失函数,也是个问题。