我们正在推出 OpenAI o1,这是一种新的大型语言模型,经过强化学习训练可以执行复杂的推理。o1 在回答之前会思考——它可以在回应用户之前产生一个长长的内部思路链(a chain of thought )。
OpenAI o1 在竞争性编程问题(Codeforces)中排名第 89 位,在美国数学奥林匹克 (AIME) 预选赛中跻身美国前 500 名学生之列,并在物理、生物和化学问题 (GPQA) 基准测试中超越人类博士级准确度。虽然要想新模型与当前模型一样易于使用,所需的工作仍在进行中,但我们正在发布此模型的早期版本 OpenAI o1-preview,供 ChatGPT 和受信任的 API 用户立即使用。
我们的大规模强化学习算法教会模型如何在高效数据训练过程中利用其思路进行有效思考。我们发现,随着强化学习的增加(以训练时间计算)和思考时间的增加(以测试时间计算),o1 的性能会持续提高。扩展此方法的限制与 LLM 预训练的限制大不相同,我们将继续研究这些限制。
o1 性能随着训练时间和测试时间的增加而平稳提升。
评估
为了突出推理能力相对于 GPT-4o 的提升,我们在一系列不同的人工考试和 ML 基准上测试了我们的模型。我们表明,在绝大多数推理能力较强的任务中,o1 的表现明显优于 GPT-4o。
o1 在具有挑战性的推理基准测试上大大优于 GPT-4o。阴影区域表示 64 个样本的多数投票(共识)表现。
o1 在广泛的基准测试中都比 GPT-4o 有所改进,包括 54/57 个 MMLU 子类别。图中显示了七个子类别以供说明。
在许多推理能力较强的基准测试中,o1 可与人类专家的表现相媲美。最近的前沿模型1 在 MATH2 和 GSM8K 上表现出色,以至于这些基准测试不再能够有效区分模型。我们评估了 AIME 的数学表现,这是一项旨在挑战美国最聪明的高中数学学生的考试。在 2024 年的 AIME 考试中,GPT-4o 平均只解决了 12% (1.8/15) 的问题。o1 在每个问题单个样本中平均为 74% (11.1/15),在 64 个样本中达成共识的平均率为 83% (12.5/15),在使用学习到的评分函数对 1000 个样本重新排名时为 93% (13.9/15)。13.9 的分数使其跻身全国前 500 名学生之列,并超过了美国数学奥林匹克的分数线。
我们还在 GPQA-diamond上对 o1 进行了评估,这是一个很难的智能基准,测试化学、物理和生物学方面的专业知识。为了将模型与人类进行比较,我们招募了具有博士学位的专家来回答 GPQA-diamond问题。我们发现 o1 的表现超过了那些人类专家,成为第一个在这个基准上做到这一点的模型。这些结果并不意味着 o1 在各方面都比博士更有能力——只是意味着该模型在解决一些博士需要解决的问题方面更熟练。在其他几个 ML 基准测试中,o1 的表现都超过了最先进的水平。在启用视觉感知功能后,o1 在 MMMU 上的得分为 78.2%,成为第一个与人类专家相媲美的模型。它还在 57 个 MMLU 子类别中的 54 个子类别中胜过 GPT-4o。
思路链(a chain of thought )
与人类在回答难题之前会长时间思考的方式类似,o1 在尝试解决问题时会使用思路链。通过强化学习,o1 学会磨练其思路链并改进其使用的策略。它学会识别和纠正错误。它学会将棘手的步骤分解为更简单的步骤。它学会在当前方法不起作用时尝试不同的方法。这个过程极大地提高了模型的推理能力。为了说明这一飞跃,我们在下面展示了 o1-preview 中一个编码的思路链。
“编写一个 bash 脚本,将矩阵表示为格式为 '[1,2],[3,4],[5,6]' 的字符串,并以相同格式打印转置。”
GPT-4o
下面是一个 bash 脚本,它以“[1,2],[3,4],[5,6]”格式的字符串表示矩阵,并以相同格式打印其转置:
#!/bin/bash
# Input matrix as a string
matrix_string=$1
# Remove square brackets
matrix_string=$(echo "$matrix_string" | tr -d '[]')
# Convert the string into an array of rows
IFS=',' read -r -a rows <<< "$matrix_string"
# Get the number of columns (length of the first row)
num_columns=$(echo "${rows[0]}" | awk -F',' '{print NF}')
# Initialize an array for the transpose
declare -a transpose
# Loop over each column
for ((i=0; i<num_columns; i++)); do
column=()
# Loop over each row and extract the i-th element
for ((j=0; j<${#rows[@]}; j+=num_columns)); do
element=${rows[$((j+i))]}
column+=("$element")
done
# Join the elements of the column with commas
transpose+=("[$(IFS=','; echo "${column[*]}")]")
done
# Print the transpose as a matrix
echo "$(IFS=','; echo "${transpose[*]}")"
如何使用脚本:
1. 将脚本保存到文件,例如 transpose_matrix.sh。
- 使脚本可执行:
chmod +x transpose_matrix.sh
- 使用矩阵字符串作为参数运行脚本:
./transpose_matrix.sh "[1,2],[3,4],[5,6]"
输出:
对于输入“[1,2],[3,4],[5,6]”,脚本应输出:
[1,3,5],[2,4,6] ❌
该输出代表转置矩阵。
OpenAI o1-preview
思考五秒钟
#!/bin/bash
input="$1"
# Remove any spaces
input="${input// /}"
# Split input into rows
IFS=']' read -ra rows <<< "$input"
# Initialize an array to hold the matrix
declare -a matrix
num_rows=0
for row in "${rows[@]}"; do
# Remove leading commas and brackets
row="${row#','}"
row="${row#'['}"
row="${row//]/}"
# Skip empty rows
if [ -z "$row" ]; then
continue
fi
# Split row into elements
IFS=',' read -ra elements <<< "$row"
# Store elements in matrix
matrix[$num_rows]="${elements[*]}"
((num_rows++))
done
# Number of columns (assuming at least one row)
IFS=' ' read -ra first_row_elements <<< "${matrix[0]}"
num_cols=${#first_row_elements[@]}
# Prepare an array to hold the transposed matrix
declare -a transposed
# For each column c
for (( c=0; c<$num_cols; c++ )); do
col_elements=()
# For each row r
for (( r=0; r<$num_rows; r++ )); do
# Get elements of row r
IFS=' ' read -ra row_elements <<< "${matrix[$r]}"
col_elements+=("${row_elements[$c]}")
done
# Store the column elements as a row in transposed matrix
transposed[$c]="${col_elements[*]}"
done
# Build output string
output=""
for (( i=0; i<${#transposed[@]}; i++ )); do
IFS=' ' read -ra elements <<< "${transposed[$i]}"
# Build a string '[elem1,elem2,...]'
row_string="[${elements[0]}"
for (( j=1; j<${#elements[@]}; j++ )); do
row_string="$row_string,${elements[$j]}"
done
row_string="$row_string]"
if [ -z "$output" ]; then
output="$row_string"
else
output="$output,$row_string"
fi
done
echo "$output"
将此脚本保存到文件,例如 transpose.sh,使用 chmod +x transpose.sh 使其可执行,然后运行它:
./transpose.sh '[1,2],[3,4],[5,6]'
它将输出:
[1,3,5],[2,4,6]
编码
我们训练了一个模型,该模型在 2024 年国际信息学奥林匹克 (IOI) 比赛中获得 213 分,排名 49 个百分点,方法是从 o1 开始初始化,然后进行训练以进一步提高编程技能。该模型在与人类参赛者相同的条件下参加了 2024 年 IOI 比赛。它有 10 个小时来解决六个具有挑战性的算法问题,每个问题允许提交 50 份答案。
对于每个问题,我们的系统都会抽取许多候选提交,并根据测试时间选择策略提交其中的 50 个。提交是根据 IOI 公共测试用例、模型生成的测试用例和学习的评分函数的表现来选择的。如果我们随机提交,我们的平均得分只有 156 分,这表明在比赛限制下,这种策略值近 60 分。
我们发现,在放宽提交限制后,模型性能显著提高。当允许每个问题提交 10,000 次时,即使没有任何测试时间选择策略,该模型也能获得 362.14 分,高于金牌门槛。
最后,我们模拟了 Codeforces 主办的编程竞赛,以展示该模型的编码技能。我们的评估与竞赛规则非常接近,允许提交 10 份作品。GPT-4o 的 Elo 评级 为 808,在人类竞争对手中处于第 11 个百分位。该模型远远超过了 GPT-4o 和 o1——它的 Elo 评级为 1807,表现优于 93% 的竞争对手。
在编程竞赛上进一步微调,o1 得到提升。改进后的模型在 2024 年国际信息学奥林匹克竞赛规则下排名第 49 位。
人类偏好评估
除了考试和学术基准之外,我们还在广泛领域的具有挑战性的开放式提示上评估了人类对 o1-preview 和 GPT-4o 的偏好。在这次评估中,人类训练师看到了对 o1-preview 和 GPT-4o 提示的匿名回答,并投票选出他们更喜欢的回答。在数据分析、编码和数学等推理能力较强的类别中,o1-preview 的受欢迎程度远远高于 gpt-4o。然而,o1-preview 在某些自然语言任务上并不受欢迎,这表明它并不适合所有用例。
安全
思路链为协调和安全提供了新的机会。我们发现,将我们的模型行为策略整合到推理模型的思路链中,是一种有效的方式来强有力地教导人类价值观和原则。通过向模型教授我们的安全规则以及如何在上下文中推理它们,我们发现推理能力直接有利于模型稳健性的证据:o1-preview 在关键越狱评估和我们用于评估模型安全抵御边界的最严格的内部基准上取得了显着的改进。我们相信,使用思路链(a chain of thought )为安全性和协调性提供了重大进步,因为
- 它使我们能够以清晰的方式观察模型思维,
- 关于安全规则的模型推理对于分布外场景更具鲁棒性。
隐藏的思路链
我们认为隐藏的思路链为监控模型提供了独特的机会。假设它是忠实且清晰的,隐藏的思路链使我们能够“读懂”模型的思想并了解其思维过程。例如,将来我们可能希望监控思路链以寻找操纵用户的迹象。但是,要做到这一点,模型必须能够自由地以未改变的形式表达其思想,因此我们无法将任何政策合规性或用户偏好训练到思路链上。我们也不想让用户直接看到不一致的思路链。
因此,在权衡了用户体验、竞争优势以及是否要进行思路链监控等多种因素后,我们决定不向用户展示原始思路链。我们承认这一决定有弊端。我们努力通过教导模型在答案中重现思路链中的任何有用想法来部分弥补这一缺点。对于 o1 模型系列,我们展示了模型生成的思路链摘要。
结论
o1 显著提升了 AI 推理的最新水平。我们计划在不断迭代的过程中发布此模型的改进版本。我们期望这些新的推理能力将提高我们将模型与人类价值观和原则相结合的能力。我们相信 o1 及其后续产品将在科学、编码、数学和相关领域为 AI 解锁许多新用例。我们很高兴用户和 API 开发人员能够发现它如何改善他们的日常工作。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754772562a5200245.html
评论列表(0条)