s1: Simple test-time scaling

本文是LLM系列文章,针对《s1: Simple test-time scaling》的翻译。

摘要

测试时间缩放是一种有前景的语言建模新方法,它使用额外的测试时间计算来提高性能。最近,OpenAI的o1模型显示了这种能力,但没有公开分享其方法,导致了许多复制工作。我们寻求最简单的方法来实现测试时间扩展和强大的推理性能。首先,我们根据我们通过消融验证的三个标准(难度、多样性和质量),策划了一个包含1000个问题和推理痕迹的小型数据集s1K。其次,我们开发了预算强制来控制测试时间计算,方法是强制终止模型的思维过程,或者在模型试图结束时多次向模型的生成添加“等待”来延长它。这可能会导致模型对其答案进行双重检查,通常会修复不正确的推理步骤。在s1K上对Qwen2.5-32B-Instruct语言模型进行监督微调并为其配备预算强制功能后,我们的s1-32B模型在竞赛数学问题上比o1预览高出27%(math和AIME24)。此外,通过预算强制扩展s1-32B,可以在没有测试时间干预的情况下推断其性能:在AIME24上从50%到57%。我们的模型、数据和代码都是开源的https://github.com/simplescaling/s1.

1 引言

2 推理数据管理以创建s1K

3 测试时间扩展

4 结果

5 消

### 如何通过多种方式提升开源多模态模型的性能边界 #### 模型扩展 为了增强开源多模态模型的能力,可以通过增加模型参数量或采用更复杂的网络结构来实现。具体来说: - **扩大模型规模**:增大神经网络层数、宽度以及连接数可以显著提高模型表达能力和泛化能力[^1]。 - **混合专家机制(MoE, Mixture of Experts)**:引入稀疏激活模块,在不大幅增加计算成本的情况下有效提升了模型容量和灵活性[^2]。 ```python from transformers import AutoModelForSequenceClassification def expand_model(model_name='bert-base-uncased'): model = AutoModelForSequenceClassification.from_pretrained(model_name) # 增加额外层或其他改进措施 additional_layers = nn.Sequential( nn.Linear(768, 1024), nn.ReLU(), nn.Dropout(p=0.1), nn.Linear(1024, num_labels) ) combined_model = torch.nn.Sequential(model, additional_layers) return combined_model ``` #### 数据扩展 高质量的数据集对于训练高性能的多模态模型至关重要。以下是几种有效的数据扩展方法: - **多样化数据源集成**:融合来自不同领域、风格各异的数据资源能够使模型获得更加全面的理解力[^3]。 - **合成样本生成**:利用GANs或者其他生成对抗网络创造新的图像-文本配对实例,从而扩充原始语料库。 - **弱监督/自监督学习**:当标注信息稀缺时,可以从海量未标记数据中挖掘有用特征并用于辅助训练过程。 ```bash # 使用Data Augmentation工具包进行图片变换操作 !pip install imgaug albumentations import imgaug.augmenters as iaa seq = iaa.Sequential([ iaa.Fliplr(0.5), # 随机水平翻转 iaa.Crop(percent=(0, 0.1)), # 裁剪掉一定比例边缘区域 ]) images_augmented = seq(images=batch_images) ``` #### 测试时间扩展 在推理阶段采取特定策略同样有助于改善最终预测效果: - **集成学习**:组合多个独立训练得到的基础估计器来进行投票表决或平均输出,以此减少单一模型可能存在的偏差。 - **动态推理路径选择**:根据不同输入特性调整内部处理流程,比如跳过不必要的中间层运算以加速响应速度而不损失精度。 - **贝叶斯优化超参调优**:针对目标函数设计合理的先验分布并通过迭代搜索找到最优配置方案,进而优化整体表现。 ```python class EnsemblePredictor: def __init__(self, models_list): self.models = models_list def predict(self, input_data): predictions = [] for model in self.models: pred = model.predict(input_data) predictions.append(pred) final_prediction = np.mean(predictions, axis=0) # 或者其他聚合逻辑 return final_prediction ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值