相关博客
【极速前进】20240706-24240714:用于Agent的树搜、理解LLM的语种困惑、事实知识抽取微调、Quiet-STaR
【极速前进】20240615-20240623:Zipper融合模态、VideoLLM视频理解、WebAgent可以自我改善、Nemotron-4、AnyGPT统一模态
【极速前进】20240608-20240610:评估模型Prometheus 2、CoPE、DITTO:使用示例反馈对齐LLM、CoA:利用多Agent解决长文本、Qwen2在线合并优化器
【极速前进】20240524-20240526:Meta多模态模型Chameleon、参数高效微调MoRA、跨层注意力降低KV Cache、Octopus v4、SimPO
【极速前进】20240423-20240428:Phi-3、fDPO、TextSquare多模态合成数据、遵循准则而不是偏好标签、混合LoRA专家
【极速前进】20240422:预训练RHO-1、合成数据CodecLM、网页到HTML数据集、MLLM消融实验MM1、Branch-Train-Mix
【极速前进】20240415-20240421:TR-DPO、压缩与智能的线性关系、模拟伪代码改善算术能力、Many-shot、合成数据综述
一、用于LM Agent的树搜
论文名称:Tree Search for Language Model Agents
论文地址:https://arxiv.org/pdf/2407.01476
1. 简介
基于LLM的Agent已经展现出了执行决策任务的能力,但是LM主要是针对自然语言理解和生成进行优化的。在基于多步推理、计划和理解环境反馈来求解现实计算机任务对于LM来说很难。本文为LM agent提出了一种推理时搜索算法,用于在web环境中执行探索和多步计划。
2. 方法
成功求解web环境中的一个任务,可以被解释为给定正向奖励 R ( s ∗ ) = 1 R(s_*)=1 R(s∗)=1时达到某个目标状态 s ∗ s_* s∗。agent起始于状态 s 0 s_0 s0。给定自然语言指令 I I I,agent的目标是通过执行一组动作 ( a 0 , … , a t ) ∈ A (a_0,\dots,a_t)\in\mathcal{A} (a0,…,at)∈A来达到目标状态。每个动作会产生一个新状态 s t + 1 ∈ S s_{t+1}\in\mathcal{S} st+1∈S和观察 o t + 1 ∈ Ω o_{t+1}\in\Omega ot+1∈Ω。状态的转移 s t → s t + 1 s_t\rightarrow s_{t+1} st→st+1是由转移函数 T : S × A → S T:\mathcal{S}\times\mathcal{A}\rightarrow\mathcal{S} T:S×A→S决定的。
大多数方法将其看作是一个部分可观察Markov决策过程,仅基于当前观测 o t o_t ot来预测下一个动作 a t a_t at。这有一个显著的限制:agent的错误会随着步骤累加,若在某个t时刻采取了错误的动作,这将导致未来的不良状态且难以纠正。
2.1 Agent Backbone
大多数SOTA web agent都是建立在LLM上的。一个预训练语言模型或者多模态模型 f ϕ f_{\phi} fϕ被要求基于当前的webpage观测 o t o_t ot来预测下一个要执行的动作 a t a_t at。通常会利用一些prompting技术,例如ReAct、RCI或者CoT等来改善agent的效果。
2.2 Value Function
本文基于价值函数
f
v
f_v
fv实现了best-first搜索启发算法,该价值函数用于估计当前状态
s
t
s_t
st的期望奖励
E
[
R
(
s
t
)
]
\mathbb{E}[R(s_t)]
E[R(st)],而真实的目标状态将提供值为1的完美奖励。由于模拟器的状态
s
t
s_t
st并不能总是被agent访问,价值函数使用当前和先前的观测以及自然语言任务指令
I
I
I来计算价值
v
t
v_t
vt:
v
t
=
f
v
(
I
,
{
o
1
,
…
,
o
t
}
)
∈
[
0
,
1
]
v_t=f_v(I,\{o_1,\dots,o_t\})\in[0,1] \\
vt=fv(I,{o1,…,ot})∈[0,1]
在本文的实验中,价值函数(value function)是通过提示一个多模态语言模型来实现的。
2.3 搜索算法
本文提出的算法是受A*搜索启发的best-first搜索算法。使用语言模型agent来提出搜索树的候选分支。该搜索具有超参数深度 d d d、分支因子 b b b和搜索预算 c c c,这些决定了搜索树的最大尺寸和终止阈值 θ \theta θ。
在执行轨迹的时刻 t t t,agent先前已经执行了一系列动作达到了状态 s t s_t st。从 s t s_t st开始搜索算法,初始化一个最大优先级队列 F ← { } \mathcal{F}\leftarrow\{\} F←{},该队列包含了计算进行评估的状态集合。目前找到的最优状态为 s ^ t ← s t \hat{s}_t\leftarrow s_t s^t←st,最优序列分数为 v ^ t ← 0 \hat{v}_t\leftarrow 0 v^t←0,搜索计数器为 s ← 0 s\leftarrow 0 s←0。
在每次搜索过程中,从
F
\mathcal{F}
F中抽取下一项
s
p
←
pop
(
F
)
s_p\leftarrow\text{pop}(\mathcal{F})
sp←pop(F)。然后使用价值函数来计算状态
s
p
s_p
sp的分数:
v
p
=
f
v
(
I
,
{
o
1
,
…
,
o
p
}
)
v_p=f_v(I,\{o_1,\dots,o_p\}) \\
vp=fv(I,{o1,…,op})
然后,增强搜索计数器
s
s
s,若
v
p
v_p
vp比当前的最优分数
v
^
t
\hat{v}_t
v^t更高,则更新分数和最优状态:
s
←
s
+
1
s
^
t
←
{
s
p
if
v
p
>
v
^
t
s
^
t
otherwise
v
^
t
←
max
(
v
^
t
,
v
p
)
\begin{align} s&\leftarrow s+1 \\ \hat{s}_t&\leftarrow \begin{cases} s_p&\text{if }v_p>\hat{v}_t \\ \hat{s}_t&\text{otherwise} \\ \end{cases} \\ \hat{v}_t&\leftarrow\max(\hat{v}_t,v_p) \end{align} \\
ss^tv^t←s+1←{sps^tif vp>v^totherwise←max(v^t,vp)
若
v
p
≥
θ
v_p\geq\theta
vp≥θ或者
s
≥
c
s\geq c
s≥c(超出搜索预算),将会终止搜索并转移到目前为止最优状态
s
^
t
\hat{s}_t
s^t。
若当前分支没有超过最大深度
(
即
∣
(
s
0
,
…
,
s
p
)
∣
<
d
)
(即|(s_0,\dots,s_p)|<d)
(即∣(s0,…,sp)∣<d),那么会从语言模型agent
f
ϕ
f_\phi
fϕ中获取
b
b
b个候选动作
{
a
p
1
,
…
,
a
p
b
}
\{a_p^1,\dots,a_p^b\}
{ap1,…,apb}作为分支的下一步动作。对于每个
i
i
i,执行动作
a
p
i
a_p^i
api并添加结果状态
s
p
i
s_p^i
spi至优先队列中:
F
←
F
∪
(
v
p
,
s
p
i
)
for
i
=
1
,
…
,
b
\mathcal{F}\leftarrow\mathcal{F}\cup(v_p,s_p^i)\quad\text{for }i=1,\dots,b \\
F←F∪(vp,spi)for i=1,…,b
这样就结束了搜索迭代。若两个终止条件都没有达到,回溯并重复这个过程。
二、理解和缓解LLM的语种困惑
论文名称:Understanding and Mitigating Language Confusion in LLMs
论文地址:https://arxiv.org/pdf/2406.20052
1. 简介
本文研究LLM的局限性:它们无法始终如一地以用户期望的语言生成文本。创建了一个语言困惑基准(Language Confusion Benchmark, LCBl)来评估语言一致性,其覆盖了15种不同类型的语言。评估了一系列单语或者多语LLM,发现Llama Instruct和Mistral展现出高度的语言困惑,即使是最强的模型也无法始终以正确的语言进行应答。本文发现base模型和以英语为中心的指令模型更容易产生语言混乱,复杂的指令和高采样温度会加剧语言困惑。few-shot提示、多语言SFT和偏好微调能够部分缓解语言困惑。
2.Language Confusion Benchmark
2.1 生成设置
在两种设置中衡量语言困惑:单语言生成和跨语言生成。单语言生成:使用语言 l l l进行查询并期望使用语言 l l l应答。跨语言生成:用户使用语言 l l l来提示模型并期望使用另一种语言 l ′ l' l′来响应。
2.2 语言困惑度量
行级检测。将响应划分为行,并使用fastText来检测每行是否为用户期望的语言。
词级检测。没有现成的词级别语种检测工具,并且LLM的准确率不足以作为自动评估器。观测到单词级困惑主要是在英语中,因此选择启发式评估一个语种子集,包括Arabic(ar)、Hindi(hi)、Japanese(ja)、Korean(ko)、Russian(ru)和简体中文(zh)。
二值评估。计算二值度量来表明应答中是否包含实例:(a) 一行不正确的语言;(b) 非Latin语言中包含度量的英文单词或短语。
行级通过率(LRP):模型应答能够通过行级语言困惑检测的百分比。若一个应答的所有行都满足用户期望的语言则为正确。
LRP
=
∣
R
\
E
L
∣
∣
R
∣
\text{LRP}=\frac{|R\backslash E_L|}{|R|} \\
LRP=∣R∣∣R\EL∣
其中
R
R
R是所有应答的集合,
E
L
E_L
EL是包含行级错误的应答集合。
词级通过率(WPR):应答中所有单词都是用户期望语言的比例。
WPR
=
∣
(
R
\
E
L
)
\
E
W
∣
∣
R
\
E
L
∣
\text{WPR}=\frac{|(R\backslash E_L)\backslash E_W|}{|R\backslash E_L|}
WPR=∣R\EL∣∣(R\EL)\EW∣
其中
R
R
R是所有应答集合,
E
L
E_L
EL是具有行级错误的应答集合,
E
W
E_W
EW是具有单词级错误的应答集合。
语言困惑通过率(LCPR):LPR和WPR的调和平均值
LCPR
=
2
×
LPR
×
WPR
LPR+WPR
\text{LCPR}=2\times\frac{\text{LPR}\times\text{WPR}}{\text{LPR+WPR}} \\
LCPR=2×LPR+WPRLPR×WPR
2.3 数据源
Aya、Dolly、Okapi、ShareGPT、Native prompts、Complex prompts。
3. 实验
单语生成。Command和GPT模型在LPR上表现很好,但是Llama和Mistral表现比较差。Mistral在一些欧洲语言上表现会好一些,但是Llama即使在德语这种高资源语言上表现也比较差。大多数模型的WPR在相同范围,Mixtral 8x7B则要差的多。GPT-4 Turbo在LCPR上最强,GPT-3.5 Turbo和Command R+位列第二。
跨语言生成。Command和OpenAI模型总体是最好的。Llama表现相当差,仅有30多分,因为其倾向于英语应答。
三、理解事实知识抽取的微调
论文名称:Understanding Finetuning for Factual Knowledge Extraction
论文地址:https://arxiv.org/pdf/2406.14785
1. 简介
本文研究QA微调数据对下游事实性的影响。研究表明,即使在预训练时见过所有的事实,但是使用鲜为人知的事实进行微调要不熟悉事实微调的效果差的多。
2. Preliminaries
事实知识定义。将事实知识表示为从主实体 s s s和关系类型 r r r到答案 a a a的映射。表示这些映射为知识三元组 ( s , r , a ) (s,r,a) (s,r,a),其中 s ∈ S , r ∈ R , a ∈ A s\in\mathcal{S},r\in\mathcal{R},a\in\mathcal{A} s∈S,r∈R,a∈A,且 S , R , A \mathcal{S,R,A} S,R,A是所有实体、关系和答案的集合。单个三元组 ( s , r , a ) (s,r,a) (s,r,a)在自然语言中有多种表示。这里,建模自然语言为token序列的集合,token来自于集合 T \mathcal{T} T。
知识格式化函数。知识可以有很多种文本表示。通过引入一个格式化函数 g : S × R × A → T k g:\mathcal{S}\times\mathcal{R}\times\mathcal{A}\rightarrow\mathcal{T}^k g:S×R×A→Tk来将三元组 ( s , r , a ) (s,r,a) (s,r,a)映射为token序列。
预训练和微调。给定一个知识三元组集合 D k = { ( s , r , a ) i = 1 N } D_k=\{(s,r,a)_{i=1}^N\} Dk={(s,r,a)i=1N}和一个预训练格式化函数,那么生成预训练语料 D p r e = { g p r e ( s , r , a ) ∣ ( s , r , a ) ∈ D k } D_{pre}=\{g_{pre}(s,r,a)|(s,r,a)\in D_k\} Dpre={gpre(s,r,a)∣(s,r,a)∈Dk}。对于一个下游格式化函数 g d o w n g_{down} gdown,生成下游数据集 D d o w n = { g d o w n ( s , r , a ) ∣ ( s , r , a ) ∈ D k } D_{down}=\{g_{down}(s,r,a)|(s,r,a)\in D_k\} Ddown={gdown(s,r,a)∣(s,r,a)∈Dk}。实践中,微调数据集相对于预训练来说是有限的,因此将 D d o w n D_{down} Ddown划分为 D f t D_{ft} Dft和 D e v a l D_{eval} Deval,其中 D f t D_{ft} Dft用于微调且 D e v a l D_{eval} Deval用于测试集。
在QA的设置中, g p r e g_{pre} gpre以书籍或者文章的形式呈现知识,而 g d o w n g_{down} gdown以问答对的方式呈现知识。
3. 合成实验
3.1 合成设置
对于三元组中每个subject、relation和answer都是单个token,并令 g p r e ( s , r , a ) = ( s , r , a ) g_{pre}(s,r,a)=(s,r,a) gpre(s,r,a)=(s,r,a)。为了能够模拟下游任务的变化,为每个relation类型引入QA-prompt token p r p_r pr。QA-prompt token在预训练中未见过,但是会在下游的格式化函数中使用: g d o w n ( s , r , a ) = ( s , p r , a ) g_{down}(s,r,a)=(s,p_r,a) gdown(s,r,a)=(s,pr,a)。因此,在微调时语言模型必须学会对于 ( s , r ) (s,r) (s,r)使用 ( s , p r ) (s,p_r) (s,pr)应答。token空间 T = S ∪ R ∪ A ∪ { p r ∣ r ∈ R } \mathcal{T}=\mathcal{S}\cup\mathcal{R}\cup\mathcal{A}\cup\{p_r|r\in\mathcal{R}\} T=S∪R∪A∪{pr∣r∈R}。
在预训练过程中, ( s , r , a ) (s,r,a) (s,r,a)是从分布 s ∼ Zipf ( S ) , r ∼ Unif ( R ) s\sim\text{Zipf}(\mathcal{S}),r\sim\text{Unif}(\mathcal{R}) s∼Zipf(S),r∼Unif(R)中独立同分布采样出来的。这个建模选择类似于预训练语料了,即包含流行的实体也包含未见的实体。在微调时,在 D f t D_{ft} Dft上执行标准的batch。假设呈现给模型的所有知识序列都与 D k D_k Dk中的ground truth ( s , r , a ) (s,r,a) (s,r,a)一致的。
最终,所有下游微调和测试数据集 D f t D_{ft} Dft和 D e v a l D_{eval} Deval中的事实都在 D p r e D_{pre} Dpre中有呈现。
3.2 模拟观测
主要发现:微调事实流行度影响下游表现。上图2(a)绘制了在最流行(FT-Top)和最不流行(FT-Botton)实体上微调的准确率。我们发现微调数据的选择会显著影响下游QA的事实性。具体来说,在最流行事实上微调会为模型的事实性带来10%的改善。当在测试集中包含不太流行的事实时,这种差异会被放大。例如,当将测试集中最受欢迎的5%实体扩展至10%时,FT-Top和FT-Bottom的差异会翻倍。当逐步增加不流行实体比例,这种差异会持续存在。
预训练语料中长尾的影响。上图2(b)展示了 Zipf α \alpha α参数影响。直觉上,随着 α \alpha α增加,流行和不流行事实的差异会增大。另一方面,低 α \alpha α值会导致事实的更均匀分布。我们发现,增加 α \alpha α会加剧微调数据集的差异。这些发现表明微调数据集差异的影响与预训练中事实频率差异有关。
预训练步数的影响。先前,我们观察到预训练分布中的长尾性会控制微调数据集的敏感性。这个现象的一种解释是,低频率的事实可能并没有存储在模型中,但是我们观察到即使所有的事实都可以通过 ( s , r ) (s,r) (s,r)的形式抽取,但是高频和低频事实的差距仍然存在。这表明这种差异是由内部事实存储的差异造成的。在图2©中,通过绘制FT-Top和FT-Bottom之间的差距作为预训练步数的函数来研究这个问题。可以发现,更多的预训练步数会缩小差距,表明随着事实被看到足够的次数,事实存储的内部差异消失了。
3.3 事实显著性
在模拟中的发现表明,一个模型是否"知道"一个特定的事实是一个持续的过程。这控制了下游任务中抽取事实的程度。此外,模型对事实的了解程度也觉得了微调的行为。将模型对事实的了解程度这种直观数量称为事实显著性。
本文的模拟结果表明,事实显著性和预训练语料中的事实频率有关。特别地,可以看到随着预训练分布变的更加长尾,显著性差于会被加剧。然而,我们也发现这些差异可以通过额外的预训练来缓解,这表明差异主要是由见过事实的次数驱动的。
四、Quiet-STaR:语言模型可以学会说话前思考
论文名称:Quiet-STaR: Language Models Can Teach Themselves to Think Before Speaking
论文地址:https://arxiv.org/pdf/2403.09629
1. 简介
人在写作或者说话时,有时会暂停下来进行思考。先前的一些工作将推理作为回答问题或者完全特定任务的方法,但是推理通常隐含在文本中。例如,在数学证明的步骤中有很多没有明说的步骤;对话的背后同样有很多心理活动。在Self-Taught Reasoner中,用few-shot的方式令模型学会使用rationales进行推理。本文Quiet-STaR则是对Self-Taught的推广。
2. Quiet-STaR
2.1 并行生成
Quiet-STaR的关键挑战是为输入序列中每个token位置高效的生成rationales。这需要对每个token进行独立的前向传播,对于长序列来说在计算上难以处理。
观察到语言模型的一次推理能够为所有的输入token产生下一个token的概率分布,因此可以高度并行生成。当然,这允许为每个输入中的token采样下一个token。若已经为每个token生成了后继,那么就无法使用原始序列来继续生产。例如,为"<bos> the cat sat"中的每个token生成next token,则可能得到"yes orange saw down",每个后继都是前缀序列的合理的next token。可以利用这些后继来为每个观察到的token生成隐思考。
为了能够有效地做到这一点,缓存每次的前向传播,并拼接对角注意力mask至先前的注意力mask。这样,每个生成的token仅能关注生成它的所有token以及其本身。此外,这个并行化的采样过程可以重复任意次数。
2.2 “混合”头
对于最初的预训练模型,thoughts是分布外的,因此会损害语言模型的效果。为了能够平稳转移到思考模式,在LM使用thought和不使用thought之间引入了一个插值。给定一个end-of-thought token的hidden state以及原始文本token的hidden state,混合头会输出一个决定权重,该权重决定了post-thought预测logit被使用的程度。这个头使用一个浅层的MLP,为每个token输出标量值。
2.3 优化Rationale生成
优化Start-of-Thought和End-of-Thought token
<|startofthought|>和<|endofthought|> token作为meta-token来控制模型的rationale生成。优化这些token的表示至关重要。使用"—"的embedding来初始化start和end token的embedding,因为其在文本数据中通常表示暂停或者思考。这可以利用语言模型已有的知识。此外,为了使这些embedding能够更快的被优化,在更新时为这些embedding的梯度添加了一个权重。
Non-myopic评分和Teacher-forcing
由于并不期望在预测每个token都使用thoughts,那么更希望模型的奖励较少依赖于准确的下一个单词,而是后面的语义内容。这里有两个主要的挑战。首先,不同于基于transformers的典型语言建模,仅有那些与给定next-token预测对应的thought才能从预测中接收梯度,这是并行采样策略的结果。我们可以通过采样先前的token来为未来的token添加Loss项,从而接近这个问题。然而,这将导致语言建模更多的熵太高,降低生成文本的质量。相反,本文使用并行注意力mask来计算true next token的对数概率,通过假设模型选择了正确的next ground-truth token来应用teacher forcing。
目标函数
使用REINFORCE来优化rationales的似然,即给定先前观测的tokens和一个rationale,语言模型对于
n
t
r
u
e
n_{true}
ntrue个true next tokens
X
j
+
1
:
j
+
n
t
r
u
e
+
1
X_{j+1:j+n_{true}+1}
Xj+1:j+ntrue+1的对数似然。为了降低方差,为输入序列中的每个token生成多个rationale continuations。因此,定义每个rationale
T
j
T_j
Tj的奖励
r
j
r_j
rj为
p
j
:
j
+
n
t
r
u
e
t
a
l
k
p_{j:j+n_{true}}^{talk}
pj:j+ntruetalk和rationales的平均值
(
p
ˉ
j
:
j
+
n
t
r
u
e
t
a
l
k
)
(\bar{p}_{j:j+n_{true}}^{talk})
(pˉj:j+ntruetalk):
r
j
=
log
p
j
:
j
+
n
t
r
u
e
t
a
k
l
(
X
j
+
1
:
j
+
n
t
r
u
e
+
1
)
−
log
p
ˉ
j
:
j
+
n
t
r
u
e
t
a
l
k
(
X
j
+
1
:
j
+
n
t
r
u
e
+
1
)
r_j =\log p_{j:j+n_{true}}^{takl}(X_{j+1:j+n_{true}+1})-\log\bar{p}_{j:j+n_{true}}^{talk}(X_{j+1:j+n_{true}+1}) \\
rj=logpj:j+ntruetakl(Xj+1:j+ntrue+1)−logpˉj:j+ntruetalk(Xj+1:j+ntrue+1)
然后在REINFORCE损失中使用该奖励来更新语言模型的参数
θ
\theta
θ,从而增加rationales的似然:
∇
θ
L
j
REINFORCE
=
−
r
j
⋅
∇
θ
log
p
θ
(
T
j
∣
[
X
:
j
;
<|startofthought|>
]
)
\nabla_{\theta}\mathcal{L}_j^{\text{REINFORCE}}=-r_j\cdot\nabla_{\theta}\log p_{\theta}(T_j|[X_{:j};\text{<|startofthought|>}]) \\
∇θLjREINFORCE=−rj⋅∇θlogpθ(Tj∣[X:j;<|startofthought|>])
该损失函数鼓励模型生成能够改善未来预测的rationales。
模型的参数
θ
\theta
θ,从而增加rationales的似然:
∇
θ
L
j
REINFORCE
=
−
r
j
⋅
∇
θ
log
p
θ
(
T
j
∣
[
X
:
j
;
<|startofthought|>
]
)
\nabla_{\theta}\mathcal{L}_j^{\text{REINFORCE}}=-r_j\cdot\nabla_{\theta}\log p_{\theta}(T_j|[X_{:j};\text{<|startofthought|>}]) \\
∇θLjREINFORCE=−rj⋅∇θlogpθ(Tj∣[X:j;<|startofthought|>])
该损失函数鼓励模型生成能够改善未来预测的rationales。