⚒️

GPT4 vs Claude3 vs Llama3 数理統計篇

2024/04/26に公開

はじめに

Meta社が4月19日にLlama3を発表しました。
オープン・ソース・モデルでありながら、クローズド・モデルと同等の性能が報告されています。

これを受けて、LPUを開発するGroq社が一部界隈で話題になっています。
LPUとは、GPUに比べ爆速な推論を実現する計算処理ユニットです。
同社はLPUを用いて、ChatGPTのようなチャット型AIサービスGroqを提供しています。
Groqの裏側ではGroq社が自社開発したモデルではなくオープン・ソース・モデルが動いており、その1つにLlama3が追加されたことから、ChatGPTやClaudeと同等性能かつ、遥かに速いレスポンスを備えたAIが登場するのではないか、との期待が高まり、一部界隈で注目が集まっています。

とは言え、Llama3+Groqってぶっちゃけどのくらい速いの? 回答精度はどうなの? と気になります。
本記事では、取り急ぎ雑にGPT4とClaude3と比較してみました。
Gemini1.5との比較もそのうちできればと。

比較内容

手元にあった数理統計の教科書から適当に(入力トークン数が少なくて済みそうな問題を)20問選んで、それぞれGPT4-Turbo、Claude3-Opus、Llama3-70BのAPIにリクエストします。
同時に各問題のリクエスト処理にかかった時間を計測しておきます。
具体的な問題一覧は後述。

# モデル API提供元
1 gpt-4-turbo OpenAI API
2 claude-3-opus-20240229 Anthropic API
3 llama3-70b-8192 Groq API

Claude3にはシステムプロンプトがないので、Claude3のプロンプトには、GPT4でシステムプロンプトに書いている内容も含めてリクエストしました。
また、Llama3は正式には日本語対応していないため、回答を日本語で生成するようシステムプロンプトで指示をしています。

import openai
import anthropic
from groq import Groq
import time

def call_gpt(prompt):
  """OpenAI APIのGPT4-Turboにリクエスト"""
  sys_prompt = """
  あなたは統計の専門家です。#[問題]について、#[回答方法]に沿って回答を出力してください。
  #[回答方法]
  回答過程を一歩ずつ論述する。
  """
  # Start the timer
  start_time = time.time()
  completion = openai.chat.completions.create(
    model="gpt-4-turbo",
    messages=[
      {"role": "system", "content": sys_prompt},
      {"role": "user", "content": prompt}
    ]
  )
  # End the timer
  end_time = time.time()
  processing_time = end_time - start_time
  # Extract output
  output = completion.choices[0].message.content
  return (output, processing_time)

def call_claude(prompt):
  """Anthropic APIのClaude3-Opusにリクエスト"""
  # Start the timer
  start_time = time.time()
  message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": prompt}
    ]
  )
  # End the timer
  end_time = time.time()
  processing_time = end_time - start_time
  # Extract output
  output = message.content[0].text
  return (output, processing_time)

def call_groq(prompt):
  """Groq APIのLlama3-70Bにリクエスト"""
  sys_prompt = """
  あなたは統計の専門家です。#[問題]について、#[回答方法]に沿って回答を出力してください。
  #[回答方法]
  回答過程を一歩ずつ論述する。回答は日本語で出力する。
  """
  # Start the timer
  start_time = time.time()
  chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": sys_prompt,
        },
        {
            "role": "user",
            "content": prompt,
        }
    ],
    model="llama3-70b-8192",
  )
  # End the timer
  end_time = time.time()
  processing_time = end_time - start_time
  # Extract output
  output = chat_completion.choices[0].message.content
  return (output, processing_time)

比較結果

図にはモデルごとに全20問のリクエスト処理時間をプロットしました。縦軸は秒単位です。
推論速度ではLlama3-70Bが圧勝です。
噂に違わずGroqが爆速であることが分かります。
また、GPT4-TurboよりClaude3-Opusの方がやや速いかな、という印象です。

次に回答精度を見ていきます。
問題一覧は以下です。統計検定2級〜準1級・1級レベルの問題です。

# 問題
0 #[問題][0,6]上の一様分布の密度関数、期待値、分散を求めよ。
1 #[問題][0,6]上の一様分布においてチェビシェフの不等式が成立することを示せ。
2 #[問題]ポアソン分布の分散の式を証明せよ。
3 #[問題]負の二項分布の確率密度関数を導出せよ。
4 #[問題]正規分布の再生性を証明せよ。
5 #[問題]二項分布の再生性を証明せよ。
6 #[問題]ポアソン分布の再生性を証明せよ。
7 #[問題]2つの壺A、Bの中に3個のボールを投げ入れる。壺Aの中に入ったボールの数をX、ボールの入っている壺の数をYとすると、XとYの同時確率分布を求めて、XとYは無相関であるが独立ではないことを示せ。
8 #[問題]あるデパートの注文服売場の販売員のところへ来る1時間あたりの来客数は\lambda=1.5のポアソン分布に従うという。午前3時間の来客数が5人以上である確率を求めよ。
9 #[問題]母集団分布がパラメータ\lambdaの指数分布であるとき、そこから大きさnの標本に基づく\lambdaの最尤推定量を求めよ。
10 #[問題]確率変数X_i(i=1,2,...,n)はそれぞれ独立に平均\lambdaの指数分布に従うとする。X_iの分散\thetaの最尤推定量\hat{\theta}の漸近分散\lim_{n\rarr\infty}V(\sqrt{n}(\hat{\theta}-\theta))\lambdaの関数で表せ。
11 #[問題]確率変数X_i(i=1,2,...,n)はそれぞれ独立に区間(0,\theta)上の一様分布に従うとする。\theta>0は未知パラメータである。X_iの最大値をY=max(X_i)とするとき、Y\thetaに関する十分統計量であることを示せ。
12 #[問題]ガンマ関数の漸化式とベータ関数からベータ分布の平均と分散を求めよ。
13 #[問題]XとYは互いに独立な区間(0,1)上の一様分布に従う確率変数とする。U=XY、V=X/Yと変換した時の(U,V)の同時密度関数を求めよ。また、Vの周辺密度関数を求めよ。
14 #[問題]確率変数X_i(i=1,2,...,n)はそれぞれ独立に幾何分布P(X_i=x)=p(1-p)^xに従うとする。ただしxは0以上の整数。pに関する十分統計量を求めよ。
15 #[問題]確率変数X_i(i=1,2,...,n)はそれぞれ独立に幾何分布P(X_i=x)=p(1-p)^xに従うとする。ただしxは0以上の整数。pに関するフィッシャー情報量を求めよ。
16 #[問題]X_1,...,X_nが互いに独立にポアソン分布Po(\lambda)に従う時、\bar{X}\lambdaのUMVUであることを示せ。
17 #[問題]Xをポアソン分布Po(\lambda)に従う確率変数とする。X(X-1)\lambda^2のUMVUであることを示せ。
18 #[問題]X_1,...,X_nを互いに独立にポアソン分布Po(\lambda)に従う確率変数とする。検定問題H_0:\lambda\leq1 vs. H_1:\lambda>1に対する一様最強力検定を求めよ。
19 #[問題]二項分布の成功確率H_0:p=p_0に対する尤度比検定を求めよ。

1つ誤算だったのが、各モデルの生成回答に含まれる式の記法がバラバラで非常に読みにくい点。
全ての回答を詳細に確認はできていないものの、パッと眺めた限り総合的に一番優れているのはClaude3-Opusの印象。
Llama3-70Bの計算ミスが他より多かったのは、そもそもの性能の問題として数値計算が苦手なのか、プロンプトを日本語で入力したからなのか、今回の結果だけで判断するのは難しい。

  • GPT4-TurboよりもClaude3-Opusの回答の方が日本語の文章として読みやすい。
  • Llama3-70Bの回答には英語と日本語が混在したり、絵文字が登場したりする。
  • #1の問題はGPT4-TurboもClaude3-Opusも正解だが、Claude3-Opusの回答の方がシンプルで分かりやすい。GPT4-Turboの回答は冗長。Llama3-70Bは分散の計算を間違えている。
  • #8の問題はClaude3-Opusのみ正解。GPT4-Turboは求め方は合っているのに途中で終わってしまって最終的な解が出ていない。Llama3-70Bも求め方は合っているが途中で計算ミスしている。
  • #10の問題は3モデルとも間違えているものの、Claude3-Opusはプロンプト中の\lambda\frac{1}{\lambda}を取り違えたから答えも間違っただけで導出ロジック自体は正しい。GPT4-TurboとLlama3-70Bの回答は嘘。

GPT4-Turboの回答

Claude3-Opusの回答

Llama3-70Bの回答

Discussion