#P16762. [Nerc2025]LLM Training
[Nerc2025]LLM Training
题目描述
给定一个文本数据集。你的任务是训练一个 LLM(大型语言模型),并求出最小可能损失。不是开玩笑。
文本数据集由文本数组
组成。每个文本 是一个 token 序列。
令 表示至少在一个文本中出现过的所有 token 构成的集合。
对于每个文本 ,还给定一个位置集合
若 ,则 token 是由 LLM 生成的;否则,它是由用户写入的。
定义上下文大小为 的 LLM 为概率模型 。对于任意长度在 到 之间、元素来自 的序列 ,模型给出下一个 token 的概率分布:
对于任意合法上下文 ,必须满足:
以及
上下文大小为 的模型 的损失函数定义为
$$\mathcal L_k(P_k)= \sum_{i=1}^{n} \sum_{j\in L_i} -\log_2 P_k\left( t_i[j]\ \middle|\ t_i[\max(1,j-k)\ldots j-1] \right)。$$其中, 表示从第 个 token 到第 个 token 组成的子串, 表示空串。
也就是说,对于每个由 LLM 生成的位置,根据它前面的至多 个 token 构成的上下文,加入该 token 条件概率的负对数。
若某个概率为 ,则其负对数视为 。
这个损失函数称为在 LLM 生成位置上的以 为底的交叉熵损失。损失越小,模型越好。
对于每个
求某个上下文大小为 的模型能够达到的最小损失 。
可以证明,这个最小值一定能够达到,并且不是无穷大。
输入格式
第一行包含一个整数 ,表示文本数量。
接下来依次给出每个文本。第 个文本的描述如下:
- 第一行包含一个整数 ,表示文本长度;
- 第二行包含 个字符串 ,表示各个 token;
- 第三行包含一个长度为 的字符串 ,只包含字符
U和L:L表示该位置由 LLM 生成;U表示该位置由用户写入。
保证每个文本的最后一个 token 都由 LLM 生成,即
输出格式
令
输出 个实数。第 个数表示上下文大小为 时的最小可能损失,其中
每个数可以输出在单独一行。
若答案的绝对误差或相对误差不超过 ,则认为答案正确。
样例 1
4
5
1 + 1 = 2
UUUUL
5
1 + 2 = 3
UUUUL
5
2 + 1 = 3
UUUUL
5
2 + 2 = 4
UUUUL
6.000000000000
6.000000000000
4.000000000000
4.000000000000
0.000000000000
样例 2
4
4
N E F <EOS>
LLLL
5
N E R C <EOS>
LLLLL
6
N E E R C <EOS>
LLLLLL
5
I C P C <EOS>
LLLLL
55.683674395584
12.490224995673
8.000000000000
8.000000000000
8.000000000000
8.000000000000
样例 3
1
16
a b a c a b a d b a b d a b a c
ULLULLLLLLULLLLL
22.595941331507
12.464393446710
5.245112497837
2.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
0.000000000000
样例 4
2
4
WA WA WA AC
LULL
4
AC AC WA AC
LLUL
5.509775004327
4.754887502163
4.000000000000
2.000000000000
数据范围
每个 token 的长度在 到 之间,字符的 ASCII 编码范围为 到 。
所有文本长度之和不超过 。