人工智能科学家:迈向全自动开放式科学发现AI Scientist Sakana AI

人工智能科学家:迈向全自动开放式科学发现AI Scientist Sakana AI

人工智能科学家:迈向全自动
开放式科学发现

📚  | 📝  | 📂

人工智能面临的最大挑战之一是开发能够进行科学研究和发现新知识的代理。虽然前沿模型已经被用来帮助人类科学家,例如集思广益或编写代码,但它们仍然需要大量的人工监督或严重局限于特定任务。

我们很高兴推出AI Scientist,这是第一个用于全自动科学发现的综合系统,它使大型语言模型 (LLM) 等基础模型能够独立进行研究。

提供了我们论文中的所有运行和数据,其中我们在每个模板上运行每个基本模型以获得约 50 个想法。我们强烈建议您阅读一些(尤其是扩散论文),以了解其优缺点。以下是The AI Scientist 📝 生成的一些示例论文:

注意:小心!此代码库将执行 LLM 编写的代码。这种自主性存在各种风险和挑战。这包括使用潜在危险的软件包、Web 访问和可能产生的进程。请自行决定使用。请确保容器化适当限制 Web 访问。

目录

要求

此代码是使用 PyTorch 为带有 CUDA 的 NVIDIA GPU 设计的。遵循,可能可以支持其他 GPU 架构。当前模板在仅使用 CPU 的机器上可能需要花费大量时间。所有代码均设计为在 Linux 上运行,其他操作系统可能需要进行重大调整。

安装   conda create -n ai_scientist python=3.11 conda activate ai_scientist # Install pdflatex sudo apt-get install texlive-full # Install pypi requirements pip install -r requirements.txt

安装时texlive-full,您可能需要。

支持的型号和 API 密钥

我们支持多种模型,包括开放权重和仅 API 模型。一般来说,我们建议仅使用比原始 GPT-4 能力更强的前沿模型。

OpenAI API(GPT-4)

默认情况下,这将使用OPENAI_API_KEY环境变量。

人性 API (克劳德十四行诗 3.5)

默认情况下,这将使用ANTHROPIC_API_KEY环境变量。

通过 Bedrock 的 Claude 模型

提供的 Claude 模型,请安装以下附加软件包:  pip install anthropic[bedrock]

接下来,指定一组有效的和目标:

设置这些环境变量:AWS_ACCESS_KEY_ID,,AWS_SECRET_ACCESS_KEYAWS_REGION_NAME

通过 Vertex AI 建立 Claude 模型

提供的 Claude 模型,请安装以下附加软件包:  pip install google-cloud-aiplatform pip install anthropic[vertex]

设置有效的身份验证,例如通过提供区域和项目 ID,如下所示:  export CLOUD_ML_REGION="REGION" # for Model Garden call export ANTHROPIC_VERTEX_PROJECT_ID="PROJECT_ID" # for Model Garden call export VERTEXAI_LOCATION="REGION" # for Aider/LiteLLM call, as per https://docs.litellm.ai/docs/providers/vertex#set-vertex-project--vertex-location export VERTEXAI_PROJECT="PROJECT_ID" # for Aider/LiteLLM call as per https://docs.litellm.ai/docs/providers/vertex#set-vertex-project--vertex-location

DeepSeek API(DeepSeek-Coder-V2)

默认情况下,这将使用DEEPSEEK_API_KEY环境变量。

OpenRouter API(Llama3.1)

默认情况下,这将使用OPENROUTER_API_KEY环境变量。

语义学者 API(文献检索)

语义学者 API 密钥(S2_API_KEY),我们的代码还可以选择使用它来提高吞吐量,但原则上如果没有它它也应该能工作。

请务必提供用于运行的模型的密钥,例如  export OPENAI_API_KEY="YOUR KEY HERE" export S2_API_KEY="YOUR KEY HERE"

设置 NanoGPT

这里和下面,我们给出了设置每个模板的数据和基线评估的说明。您只能运行您感兴趣的模板的设置步骤。这必须在您的机器上运行,因为训练时间可能因您的硬件而异。  # Prepare NanoGPT data python data/enwik8/prepare.py python data/shakespeare_char/prepare.py python data/text8/prepare.py

创建基线运行(取决于机器)   # Set up NanoGPT baseline run # NOTE: YOU MUST FIRST RUN THE PREPARE SCRIPTS ABOVE! cd templates/nanoGPT && python experiment.py --out_dir run_0 && python plot.py
创建 NanoGPT_lite 基线运行。我们使用它进行健全性检查   # NOTE: YOU MUST FIRST RUN THE PREPARE SCRIPTS ABOVE! cd templates/nanoGPT_lite && python experiment.py --out_dir run_0 && python plot.py

设置 2D 扩散   # Set up 2D Diffusion git clone https://github.com/gregversteeg/NPEET.git cd NPEET pip install . pip install scikit-learn # Set up 2D Diffusion baseline run cd templates/2d_diffusion && python experiment.py --out_dir run_0 && python plot.py

设置 Grokking   # Set up Grokking pip install einops # Set up Grokking baseline run cd templates/grokking && python experiment.py --out_dir run_0 && python plot.py

运行 AI 科学家论文生成实验

注意:请确保上述设置步骤已完成。  conda activate ai_scientist # Run the paper generation. python launch_scientist.py --model "gpt-4o-2024-05-13" --experiment nanoGPT_lite --num-ideas 2 python launch_scientist.py --model "claude-3-5-sonnet-20240620" --experiment nanoGPT_lite --num-ideas 2

如果您拥有超过 1 个 GPU,请使用该parallel选项在多个 GPU 之间并行化想法。

获取 LLM 生成的论文评审   import openai from ai_scientist.perform_review import load_paper, perform_review client = openai.OpenAI() model = "gpt-4o-2024-05-13" # Load paper from pdf file (raw text) paper_txt = load_paper("report.pdf") # Get the review dict of the review review = perform_review( paper_txt, model, client, num_reflections=5, num_fs_examples=1, num_reviews_ensemble=5, temperature=0.1, ) # Inspect review results review["Overall"]  # overall score 1-10 review["Decision"]  # ['Accept', 'Reject'] review["Weaknesses"]  # List of weaknesses (str)

运行批量分析:  cd review_iclr_bench python iclr_analysis.py --num_reviews 500  --batch_size 100 --num_fs_examples 1 --num_reflections 5 --temperature 0.1 --num_reviews_ensemble 5

制作你自己的模板

如果您希望AI 科学家探索某个研究领域,那么创建自己的模板应该非常容易。通常,请遵循现有模板的结构,该结构包括:

  • experiment.py-- 这是包含内容“核心”的单个文件。它接受一个参数out_dir,它应该在其中创建文件夹并保存运行中的相关信息。
  • plot.py-- 这应该从文件夹中获取信息run并创建图表。代码应该清晰且易于编辑。
  • prompt.json-- 在此处输入有关您的模板的信息。
  • seed_ideas.json-- 将示例想法放在此处。您也可以尝试在没有任何示例的情况下提出想法,然后挑选出最好的一个或两个放在此处。
  • latex/template.tex-- 我们建议使用我们的乳胶文件夹,但请务必将预加载的引文替换为您认为更相关的引文。

模板资源

我们提供了 3 个模板,它们大量使用了来自其他存储库的代码,我们在下面注明了这些代码。(通常,我们会在文件本身中执行此操作,但由于它是可见的,因此不清楚这会如何影响 AI Scientist)。

NanoGPT 模板使用了来自和此代码。

2D 扩散模板使用了来自、和的代码。

Grokking 模板使用了来自和的代码。

我们要感谢开源模型和软件包的开发人员所做的贡献以及他们的工作。

引用人工智能科学家的话

如果您在研究中使用《AI Scientist》 ,请按以下方式引用:

<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>@article{lu2024aiscientist,
  title={The {AI} {S}cientist: Towards Fully Automated Open-Ended Scientific Discovery},
  author={Lu, Chris and Lu, Cong and Lange, Robert Tjarko and Foerster, Jakob and Clune, Jeff and Ha, David},
  journal={arXiv preprint arXiv:2408.06292},
  year={2024}
}
</code></span></span></span></span>

常问问题

如果您对《AI 科学家》有任何疑问,我们建议您首先阅读我们的论文。

为什么运行 AI Scientist 时缺少文件?

确保您已经完成了主要实验脚本之前的所有设置和准备步骤。

为什么没有生成 PDF 或评论?

AI 科学家完成一个想法的成功率取决于模板、基础模型和想法的复杂性。我们建议参考我们的主要论文。Claude Sonnet 3.5 的成功率最高。审查最好用 GPT-4o 进行,所有其他模型都存在积极性偏差或无法符合所需输出的问题。

产生的每个想法的成本是多少?

使用 Claude Sonnet 3.5,每篇论文通常不到 15 美元。我们推荐使用 DeepSeek Coder V2,这是一种更具成本效益的方法。寻找新模型的好地方是。

如何更改与撰写文章相关的基本会议格式?

template.tex更改每个模板中包含的基础文件。

如何针对不同学科领域运行 AI Scientist?

请参阅不同模板的说明。在当前迭代中,这仅限于可以用代码表达的想法。但是,解除此限制将代表令人兴奋的未来工作!:)

如何添加对新基础模型的支持?

请参阅此以获取有关如何添加新模型的示例,例如这次通过 Bedrock 为 Claude 添加模型。我们不建议将任何明显弱于 GPT-4 级别的模型用于 AI Scientist。

为什么我需要自己运行基线运行?

run_0由于硬件差异,这些显示为并且应该在您执行 AI Scientist 的每台机器上运行,以便进行准确的运行时比较。

如果我在访问 Semantic Sc​​holar API 时遇到问题该怎么办?

我们使用 Semantic Sc​​holar API 检查想法的新颖性并收集论文写作的引用。如果您没有 API 密钥或 API 访问速度较慢,您可以跳过这些阶段。

容器化

我们提供了一个Docker 镜像,它可以帮助您进行容器化工作experimental/Dockerfile

您可以像这样使用该图像:  # Endpoint Script docker run -e OPENAI_API_KEY=$OPENAI_API_KEY -v `pwd`/templates:/app/AI-Scientist/templates <AI_SCIENTIST_IMAGE> \ --model gpt-4o-2024-05-13 \ --experiment 2d_diffusion \ --num-ideas 2    # Interactive docker run -it -e OPENAI_API_KEY=$OPENAI_API_KEY \ --entrypoint /bin/bash \ <AI_SCIENTIST_IMAGE>

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk