Использование ИИ для решения математических задач, чтобы вам не приходилось

Насколько хорошо GPT-3 решает математические задачи и задачи программирования? В частности, насколько хорошо GPT-3 решает задачи из Project Euler?

Проект Эйлер (названный в честь известного математика) — это веб-сайт с сотнями математических задач и задач компьютерного программирования различной сложности. Я впервые узнал о Project Euler еще в средней школе, когда мой (азиатский) папа настоял, чтобы я решал математические задачи с веб-сайта в свободное время, чтобы быть лучше в математике (я делал это с большой неохотой, возможно, объясняя, почему мой нынешний математические способности довольно средние).

GPT3 — это генеративная языковая модель, созданная OpenAI в 2020 году. Она обладает огромной способностью понимать и генерировать различные виды человеческого языка, включая ответы на вопросы общего характера, обобщение статей, создание творческой фантастики, написание маркетингового контента, создание рецептов и другие сумасшедшие варианты использования. GPT-3 также использовался для решения математических задач в начальной школе.

А как насчет сложных задач из Project Euler? Веб-сайт Project Euler заявляет о своих проблемах следующее: «Хотя математика поможет вам найти элегантные и эффективные методы, для решения большинства задач потребуется использование компьютера и навыки программирования». Это говорит о том, что для решения этих задач может потребоваться сочетание математических знаний и навыков программирования.

Проверим GPT-3! В этой статье я покажу повторяющиеся этапы разработки подсказок или создания текста, используемого для подсказки GPT-3 для генерации ответа, которые я предпринял для получения правильных решений нескольких задач Project Euler.

ГПТ-3

Чтобы использовать GPT-3, я использовал OpenAI Playground, который позволяет вам играть с GPT-3 с помощью дружественного пользовательского интерфейса. Существует множество различных гиперпараметров или настроек, которые вы можете настроить для получения разных результатов, которые отображаются на панели справа. Эта статья более подробно описывает, что означают различные гиперпараметры. Для своих экспериментов я оставил все настройки по умолчанию.

Задача 1: число, кратное 3 или 5 (сложность 5%).

Первая задача в Project Euler имеет низкий рейтинг сложности и может рассматриваться как введение в виды задач, которые можно найти на веб-сайте. Это происходит следующим образом:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

Попытка 1: наивный подход (естественный язык)

Простой (и наивный) подход может состоять в том, чтобы дословно сообщить GPT-3 о проблеме. Я скопировал и вставил прямо с сайта. Выходы от GPT-3 выделены зеленым цветом.

Как вы можете видеть, GPT-3 начинает хорошо, но затем теряется в своем ручном подходе к перечислению всех чисел, которые делятся на 3 или 5. На самом деле, он теряет пар и вскоре сдается. Даже если вы не математик, вы можете сделать вывод, что это явно не лучший способ решить эту задачу. Итак, что еще мы можем сделать?

Попытка 2: естественный язык + цепочка мыслей

Недавно в машинном обучении появилась новая концепция под названием подсказка по цепочке мыслей. По сути, вместо того, чтобы подсказывать языковой модели задачу, которую вы от нее хотите выполнить, вы заставляете ее обдумывать задачу шаг за шагом — как вы могли бы делать в реальной жизни (вместо дай мне встать с постели цепочка рассуждение может звучать примерно так: позвольте мне откинуть одеяло —> позвольте мне поставить одну ногу на землю —> позвольте мне поставить другую ногу на землю и т. д.).

Итак, в этой следующей итерации я добавил предложение «Давайте думать шаг за шагом» в конец исходной задачи.

GPT-3, кажется, движется в правильном направлении… пока не отклоняется в совершенно другом направлении. Он умеет находить числа, кратные 3 и кратные 5, но затем забывает исходную задачу и где-то ошибается. (Можете ли вы понять, где и что произошло?)

Попытка 3: Программный подход

Одна гипотеза, которую я вывел из предыдущей попытки, заключается в том, что для сложных задач, требующих знаний как в математике, так и в программировании, GPT-3 может быть сбит с толку простым текстом и может работать лучше, если он думает с использованием языка кодирования. Поскольку GPT-3 тоже обучался на коде, стоило попробовать. Тем более, что другие люди видели хорошие результаты от GPT-3, переводя математические задачи в код.

Итак, я переформатировал условие задачи в формате Проблема/Решение. Это пример немногократного обучения, когда модель учится всего на нескольких примерах (в данном случае на одном примере) с точки зрения того, как решать возникающую задачу (на самом деле, GPT-3 хорошо известна за малое обучение!). Затем я предложил GPT-3 подумать о программном способе решения проблемы. Затем я подсказал ему начало блока кода, и он придумал решение проблемы.

## Example:
Problem: Find the sum of all the multiples of 3 or 5 below 10.
Solution: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3,5,6 and 9. Th esum of these multiples is 23.
Answer: 23
---
Problem: Find the sum of all the multiples of 3 or 5 below 1000.
Solution: Let's think of a programmatic way to solve the problem.

Результат выглядит чистым и лаконичным. Если вы скопируете код в интерпретатор Python, вы получите правильный ответ. Однако для таких ленивых людей, как я, это еще один дополнительный шаг, который необходимо выполнить, чтобы получить ответ. Что, если вы хотите, чтобы ответ был доставлен вам на тарелке без дополнительной работы? Это возможно?

Попытка 4: программный подход + параметризация ответов

В моей последней попытке я объединил программный подход с принудительным форматированием GPT-3 своего вывода в определенном формате с использованием параметров. GPT-3 будет знать, что нужно поместить проблему и ответ в правильный раздел, основываясь на моей подсказке.

Use this format to find the solution:
Problem: ${Problem}
IPython session:
```
${IPython function and commands needed to find solution}
```
Answer: ${Answer}

И вот мы идем! Мы получили самое краткое решение на данный момент, И ответ был дан мне в конце, так что мне не пришлось делать никакой дополнительной работы.

А как насчет других проблем?

Это была первая и самая простая задача проекта Эйлера. А как насчет более сложных задач?

Задача 51. Замена простой цифры (сложность 15%).

Мы можем попробовать тот же процесс для немного более сложной задачи. Задача 51 связана с заменой простых цифр и немного сложнее (с рейтингом сложности 15%). Как видите, задача немного длиннее и сложнее.

By replacing the 1st digit of the 2-digit number *3, it turns out that six of the nine possible values: 13, 23, 43, 53, 73, and 83, are all prime.
By replacing the 3rd and 4th digits of 56**3 with the same digit, this 5-digit number is the first example having seven primes among the ten generated numbers, yielding the family: 56003, 56113, 56333, 56443, 56663, 56773, and 56993. Consequently 56003, being the first member of this family, is the smallest prime with this property.
Problem: Find the smallest prime which, by replacing part of the number (not necessarily adjacent digits) with the same digit, is part of an eight prime value family.
Use this format to find the solution:
Problem: ${Problem}
IPython session:
```
${IPython function and commands needed to find solution}
```
Answer: ${Answer}

Я использовал тот же формат, что и в моей последней попытке решить Задачу 1 — заставить GPT-3 решить проблему с помощью программирования.

Ответ правильный! Я смог получить этот ответ, не прилагая больших усилий, кроме как скопировать и вставить задачу с веб-сайта Project Euler и использовать тот же формат приглашения, который я использовал для решения задачи 1.

Задача 111. Замена простой цифры (сложность 45%).

Я хотел бросить вызов математическим способностям GPT-3, поэтому заставил его решить задачу 111 (на уровне сложности 45%). Решение этой проблемы определенно заставило бы меня задуматься, но GPT-3 решил ее примерно за 10 секунд. Задача сложнее предыдущих двух задач, так как включает в себя таблицу и несколько абзацев, поясняющих задачу.

Considering 4-digit primes containing repeated digits it is clear that they cannot all be the same: 1111 is divisible by 11, 2222 is divisible by 22, and so on. But there are nine 4-digit primes containing three ones:
1117, 1151, 1171, 1181, 1511, 1811, 2111, 4111, 8111
We shall say that M(n, d) represents the maximum number of repeated digits for an n-digit prime where d is the repeated digit, N(n, d) represents the number of such primes, and S(n, d) represents the sum of these primes.
So M(4, 1) = 3 is the maximum number of repeated digits for a 4-digit prime where one is the repeated digit, there are N(4, 1) = 9 such primes, and the sum of these primes is S(4, 1) = 22275. It turns out that for d = 0, it is only possible to have M(4, 0) = 2 repeated digits, but there are N(4, 0) = 13 such cases.
In the same way we obtain the following results for 4-digit primes.
Digit, d M(4, d) N(4, d) S(4, d)
0 2 13 67061
1 3 9 22275
2 3 1 2221
3 3 12 46214
4 3 2 8888
5 3 1 5557
6 3 1 6661
7 3 9 57863
8 3 1 8887
9 3 7 48073
For d = 0 to 9, the sum of all S(4, d) is 273700.
Problem: Find the sum of all S(10, d).
Use recursion in the final solution.
Use this format to find the solution:
Problem: ${Problem}
IPython session:
```
${IPython function and commands needed to find solution}
```
Answer: ${Answer}

На этот раз код GPT-3 длинный и сложный. Хотя мне трудно сказать, сколько из этого кода GPT-3 запомнил во время обучения и сколько он рассуждал самостоятельно, в конце дня он может получить правильный ответ.

Заключение

В этой статье я рассмотрел различные попытки, которые я использовал для повторения своей подсказки, чтобы получить разные ответы от GPT-3 для решения математических задач проекта Эйлера. Главный вывод заключается в том, что мы постоянно изучаем, как лучше всего использовать GPT-3 для выполнения определенных задач за нас. В то время как в некоторых случаях прямота с нашей подсказкой может привести к ожидаемому ответу, более творческий подход к вашим подсказкам может привести к более интересным или правильным ответам!

Если вам понравилась эта статья, вы можете прочитать еще что-нибудь подобное в моем Substack! https://blog.yenniejun.com/