huggingface: https://huggingface.co/convaiinnovations/laya
github:
dataset:
huggingfaceLocalLLaMA/typed-decisions · Datasets at Hugging Face
LocalLLaMA/typed-decisions · Datasets at Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
背景
OpenAI前研究员Diogo Almeida在其初创TypeSafe AI发布首个System 1模型——
Jev。与以自然语言生成为核心的传统LLM不同,Jev将重点放在快速、结构化的决策上:给定输入状态(state),模型直接输出选择、评分、或判断结果。Jev的设计理念借鉴了诺贝尔奖得主Daniel Kahneman在认知心理学提出的双系统理论:
- System 1(系统一): 强调快速、直觉式、自动化的判断。
- System 2(系统二): 强调缓慢、审慎、需要投入更多认知资源的分析和推理。
TypeSafe AI借用这一概念,将
Jev定位为面向快速决策的模型。这里的 System 1 / System 2 更多是一种产品与能力定位,而不是对模型内部认知机制的严格划分。Jev关注的核心问题是:对于许多分类、排序和真假判断任务,我们是否有必要始终依赖通用 LLM 生成较长的文本,再通过额外的解析逻辑获得结果?围绕这一问题,
Jev将常见的决策任务抽象为三类基本操作(primitive)。primitive type | 核心功能 | 应用场景 |
Choice (选择) | 给定输入状态和一组候选项,估计各候选项的相对概率,从中选择最合适的结果。
| Workflow 意图识别、任务路由、工具选择 |
Score (评分) | 根据预先定义的评分标准,对输入状态或候选结果进行评价,输出相应的等级或分数。 | Rerank、相关性评估 |
Noul (命题判断) | 给定输入状态和一个待验证命题,判断该命题成立的可能性。 | 幻觉检测、事实一致性检查、规则校验 |
目前Jev在github的开源实现有很多,在本blog中,我们将介绍
Jev的开源实现 Laya,分析它如何实现这一决策范式,以及这种设计在模型结构、训练方式和推理效率方面有哪些值得关注的地方。Laya剖析
Laya的模型架构
简单绘制了一下Laya的架构图如下:

从模型架构来看,Laya 基于
BERT 这类双向 Transformer 编码器构建。与传统自回归语言模型通过逐 Token 生成文本不同,Laya 利用双向注意力机制对输入进行整体编码,并在此基础上完成决策任务。为了将通用编码器转化为决策模型,Laya 的关键设计之一是对输入序列进行特殊编排:通过引入
[MASK] Token,为候选项构建统一的预测接口,使模型能够结合输入上下文与候选信息,对不同候选项进行评估,并最终得到相应的概率分布。这种设计使模型不再局限于固定类别的传统分类任务,而是能够面向动态变化的候选集合进行决策。换言之,Laya 可以被理解为一种基于双向编码器、通过特殊 Token 与输入组织方式实现的动态候选分类模型。
接下来,我们进一步分析它的输入序列是如何构造的,以及
[MASK] Token 如何参与候选项的预测与概率计算。Laya的推理过程
Laya 的推理过程可以概括为四个阶段:
- 输入构建:将问题、候选项和输入状态组织成统一的序列。
- 上下文编码:利用双向编码器理解问题、候选项与输入状态之间的关系。
- 候选项打分:通过决策网络提取候选项表示,并使用共享的打分器计算每个候选项的分数。
- 结果解码:根据任务类型,将候选项分数转换为类别选择、等级评分或命题成立概率。
下面通过一个具体例子,看Laya是如何完成决策的。
例子:
假设我们要构建一个用于用户请求路由的Workflow,系统需要根据用户输入,判断请求应该交给哪个团队处理。
原始输入:
这里的
state是需要模型理解的输入状态,instructions描述了当前决策任务,而criteria则定义了候选标签及其含义。Step1: 构建输入
Laya将输入组织成下面的序列
可见,每一个候选项前都会额外插入
[MASK] token作为专属的读出位置(readout position)。需要注意的是:虽然使用了BERT风格的[MASK] token,但它不是传统Bert中的填空操作。推理时,模型不需要通过MLM (Masked Language Model) head预测每个[MASK] 应该填入哪个词,而是取这些位置的hidden state,用于后续计算。Step2: 送入到双向编码器理解上下文
完成输入构建后,整个序列进入预训练的双向编码器。Laya的英文基础模型使用 ModernBERT-large,其配置是 28 层、隐藏维度 、16 个注意力头;整个 Laya 模型约 421M 参数。多语言版本换用 mmBERT-base,约 322M 参数
设一个 batch 有条问题序列,补齐后的长度为,编码器的输出:
与自回归模型只能关注当前位置之前的Token不同,双向编码器可以利用双向注意力机制建模序列中不同位置之间的关系。例如在例子中
billing对应的[MASK]位置,可以通过注意力关联到状态中的 charged twice 和 refund,从而获得与当前请求相关的上下文表示。Step3: 加入任务类别信息
编码器之后,Laya 还引入了一个独立的决策网络(其实就是2层transformer)。 在送入到DecisionTransformer之前 ,会先将当前问题的类型注入隐藏表示。如下:
先把类型映射成向量:
然后把这个向量加到该问题的每个 token 上:
在送入到DecisionTransformer中,实际上是两层
TransformerEncoderLayer:
DecisionTransformer配置如下:
组件 | 配置 |
隐藏维度 | 1024 |
注意力头数 | 16 |
前馈层中间维度 | 4096 |
层数 | 2 |
归一化位置 | Pre-LayerNorm |
Dropout | 0.1 |
Step4: 结果解码
完成策略网络的计算后,模型根据预先记录的
[MASK] 位置,提取各候选对应的隐藏向量。
设第个候选项的标记位置为,则:
其中,就是第个候选项经过上下文编码和策略网络处理后的表示。随后,每个都经过同一个MLP打分器得到一个标量logit:
其中把维映射到维,再映射到 1 维。假设请求包含 3 个候选项,得到的就是 3 个分数;若包含 20 个选项,就得到 20 个分数。
得到所有候选项分数后,送入到softmax就能形成概率分布:
为校准温度。
把主要计算代码,大致如下:
Choice、Score、Noul共用这套候选项打分结构,区别主要在前期的输入序列的构造和结果读出方式。
类型 | 候选项如何表示 | 最终输出 |
Choice | 标签名称和描述 | ,再映射回标签 |
Score | 带有等级定义的候选项,如level0,level1,… | 有序等级的期望 |
Noul | false和true两个候选项 |
choice和Noul结果读取方式比较好理解,直接取概率分布的相关的预测值即可。而Score任务本质是一个回归问题,需要回答该如何从这个概率分布映射到一个回归分数。
以一个具体的例子说明。假设score任务有3个候选项,表示紧急程度,有3个等级0、1、2。经过Laya的到的概率分布是:
则:
可见,Score的连续值来自对离散等级概率分布的加权求和,而不是额外引入回归头来预测连续值。
如何训练Laya
在上一节中,我们详细介绍了Laya的推理过程:结构化编排输入 → 双向编码器 → DecisionTransformer → 打分MLP → logits。为了让logits具备实际意义,需要对参数模型进行训练。
衡量一个策略模型的好坏有2个关键因素:
- 决策是否正确。
- 置信度是否可靠。
围绕这个目标,Laya的公开微调实现提供了2类训练目标:1)Soft Cross-Entropy; 2) RLCD (Reinforcement Learning for Calibrated Decisions)。
Baseline —— Soft Cross Entropy 训练
对于一个包含(K)个候选答案的choice 类型任务,模型的输出logits:
通过softmax得到的预测概率为:
已知该样本的标签分布为
那么,其soft CE loss为:
基于RLCD训练
RLCD的训练目标为:
与上一节相同。主要看如何计算。
首先来看,Laya是如何定义policy function与reward
reward的定义:
第一项是对数评分(负交叉熵):如果正确选项被赋予很低概率,会受到较大的惩罚。
第二项是 spherical score,用目标分布与预测分布的内积,除以预测分布的二范数。这也是一种概率评分规则。
第三项只用于有序的Score问题,RPS的计算公式定义如下:
这让奖励知道等级有顺序。例如真实等级是 2,把质量放到等级 1 和放到等级 0,受到的惩罚不同。
policy function的定义
从前文可知,给定输入,模型前向能得到各个choice的logits
随后对添加组高斯扰动,得到G组经过扰动的logits
Laya源码中,还对噪声额外做了中心化处理,这种情形K维噪声的独立假设不成立,但最终的计算policy function的梯度时是一致的,为了简化推导,文本做了独立性假设。
我们把一次扰动后的logits向量视为连续动作。给定输入,扰动的采样机制确定了这个动作的条件分布,记为策略 。假定维的噪声独立,于是
根据K维噪声的独立性假设有
代入高斯分布的概率密度函数:
有:
根据reward与policy function的定义,可以写出PG项。
可见,RLCD也是GRPO-style的组相对奖励思路。
下面是简化代码:
在训练完成后,Laya还会固定模型参数做温度校准。即找到一个最优的,使得在校准集上soft-CE最小。即优化目标为:
Laya对3种问题类型分别拟合温度。
RLCD与Soft CE的消融比较
从平均准确率来看,RLCD并没有表现出明显优于Soft CE的优势。官方后续在三个随机种子下进行了对照实验:RLCD的平均准确率为 77.62%,Soft CE 为 77.63%,两者几乎相同。
但两种方法的训练稳定性存在差异。在这组实验中,RLCD的准确率标准差为 0.16 个百分点,而 Soft CE 为 1.55 个百分点。这表明,至少在当前数据集和训练配置下,RLCD 的结果对随机种子不那么敏感。
下表为用三个随机种子初始化RLCD和soft CE的精度表现。

小结
本文结合公开源码,介绍了Laya。它将问题、候选项与输入状态组织成统一序列,通过双向编码器联合建模,并在每个候选项对应的
[MASK] 位置提取表示,使用共享打分器生成候选概率。候选集合由请求中的文本定义,因此模型能够用同一套结构处理不同标签集合,以及 Choice、Score、Noul 三类决策任务。在训练方面,Laya 的公开微调实现将软标签交叉熵与策略梯度损失结合:前者直接学习目标概率分布,后者在当前 logits 周围采样扰动,根据候选分布的相对奖励形成更新信号。训练完成后,再固定模型参数,在预留校准集上按问题类型拟合温度,调整输出概率的集中程度。
如有疏漏之处,敬请指出~
- 作者:莫叶何竹🍀
- 链接:http://www.myhz0606.com/article/laya?_sm_nck=1%2F%2F
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



.png?table=block&id=1f63c18f-f81c-808d-8829-cd2c12c40b3e&t=1f63c18f-f81c-808d-8829-cd2c12c40b3e)

