GPT-4 の出力がなぜそれほどランダムなのか、深く考えたことはありますか?

GPT-4 の出力がなぜそれほどランダムなのか、深く考えたことはありますか?

今年はAI分野で大規模言語モデル(LLM)が注目され、OpenAIのChatGPTやGPT-4が大人気となりました。 GPT-4 は、自然言語の理解と生成、論理的推論、コード生成などにおいて、優れた驚くべきパフォーマンスを発揮します。

しかし、GPT-4 によって生成された結果には大きな不確実性があることが徐々にわかってきました。 GPT-4 は、ユーザーが入力した質問に対してランダムな回答を返すことがよくあります。

大規模モデルには温度パラメータがあり、生成される結果の多様性とランダム性を制御するために使用されることが分かっています。温度を 0 に設定すると貪欲サンプリングとなり、モデルによって生成された結果は決定論的になります。ただし、温度 = 0.0 の場合でも、GPT-4 によって生成された結果はランダムです。

開発者の円卓会議で、誰かが OpenAI の技術スタッフに直接この質問をしたところ、次のような答えが返ってきました。「正直に言うと、私たちも困惑しています。システムに何らかのエラーがあるか、最適化された浮動小数点計算に不確実性があるのではないかと考えています…」

注目すべきは、2021年にはすでに、一部のネットユーザーがOpenAI Codexについてこの疑問を提起していたことだ。つまり、このランダム性にはより深い理由がある可能性があるということです。

画像ソース: https://community.openai.com/t/a-question-on-determinism/8185

現在、Sherman Chann という開発者が個人ブログでこの問題を詳細に分析し、「GPT-4 の生成結果の不確実性は、スパース MoE によって引き起こされる」と述べています。

シャーマン・チャンのブログアドレス: https://152334h.github.io/blog/non-determinism-in-gpt-4/

Sherman Chann このブログ投稿は、Google DeepMind の最近のソフト MoE に関する論文「From Sparse to Soft Mixtures of Experts」に触発されました。


論文アドレス: https://arxiv.org/pdf/2308.00951.pdf

Soft MoE 論文のセクション 2.2 には、次のような説明があります。

容量の制約下では、すべてのスパース MoE はトークンを固定サイズのグループにルーティングし、グループ内のバランスを強制 (または推奨) します。グループに異なるシーケンスまたは入力からのトークンが含まれている場合、通常、これらのトークンはエキスパート バッファー内の使用可能な位置をめぐって互いに競合します。その結果、一部の入力シーケンスが他の入力の最終予測に影響を与える可能性があるため、モデルはシーケンス レベルでは決定論的ではなく、バッチ レベルでのみ決定論的になります。

以前は、GPT-4 を専門家混合 (MoE) モデルと呼ぶ人もいました。シャーマン・チャンはこれに基づいて次のような仮説を立てました。

GPT-4 API は、バッチ推論を実行するバックエンドでホストされます。一部のランダム性は他の要因によるものである可能性がありますが、API の不確実性の大部分は、スパース MoE アーキテクチャが各シーケンスの決定論を強制できないことに起因しています。

つまり、シャーマン・チャンは、「スパース MoE モデルにおけるバッチ推論が、GPT-4 API における不確実性のほとんどの根本原因である」という仮説を立てています。この仮説を検証するために、Sherman Chann は GPT-4 を使用してコード スクリプトを作成しました。

 import os import json import tqdm import openai from time import sleep from pathlib import Path chat_models = ["gpt-4", "gpt-3.5-turbo"] message_history = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Write a unique, surprising, extremely randomized story with highly unpredictable changes of events."} ] completion_models = ["text-davinci-003", "text-davinci-001", "davinci-instruct-beta", "davinci"] prompt = "[System: You are a helpful assistant]\n\nUser: Write a unique, surprising, extremely randomized story with highly unpredictable changes of events.\n\nAI:" results = [] import time class TimeIt: def __init__(self, name): self.name = name def __enter__(self): self.start = time.time() def __exit__(self, *args): print(f"{self.name} took {time.time() - self.start} seconds") C = 30 # number of completions to make per model N = 128 # max_tokens # Testing chat models for model in chat_models: sequences = set() errors = 0 # although I track errors, at no point were any errors ever emitted with TimeIt(model): for _ in range(C): try: completion = openai.ChatCompletion.create( model=model, messages=message_history, max_tokens=N, temperature=0, logit_bias={"100257": -100.0}, # this doesn't really do anything, because chat models don't do <|endoftext|> much ) sequences.add(completion.choices[0].message['content']) sleep(1) # cheaply avoid rate limiting except Exception as e: print('something went wrong for', model, e) errors += 1 print(f"\nModel {model} created {len(sequences)} ({errors=}) unique sequences:") print(json.dumps(list(sequences))) results.append((len(sequences), model)) # Testing completion models for model in completion_models: sequences = set() errors = 0 with TimeIt(model): for _ in range(C): try: completion = openai.Completion.create( model=model, prompt=prompt, max_tokens=N, temperature=0, logit_bias = {"50256": -100.0}, # prevent EOS ) sequences.add(completion.choices[0].text) sleep(1) except Exception as e: print('something went wrong for', model, e) errors += 1 print(f"\nModel {model} created {len(sequences)} ({errors=}) unique sequences:") print(json.dumps(list(sequences))) results.append((len(sequences), model)) # Printing table of results print("\nTable of Results:") print("Num_Sequences\tModel_Name") for num_sequences, model_name in results: print(f"{num_sequences}\t{model_name}")

N=30、max_tokens=128 の場合、結果は次の表のようになります。

Sherman Chann が logit_bias 問題に気付く前は、次の結果が得られました (max_tokens=256)。

実験結果によると、GPT-4 の出力は常に不確実です (一意の完了値が非常に高く、同じ入力に対して GPT-4 によって生成される出力が常に異なることを示しています)。これは、GPT-4 に問題があることをほぼ裏付けています。そして、反復的で無駄なサイクルに陥らない他のすべてのモデルにも、ある程度の不確実性があります。これは、信頼性の低い GPU コンピューティングでも、ある程度のランダム性が生じる可能性があることを示しているようです。

シャーマン・チャン氏は次のように述べた。「不確実性がスパース MoE バッチ推論の固有の特徴であるならば、この事実はそのようなモデルを使用するあらゆる研究にとって明白であるはずです。Google Deepmind の研究チームは明らかにこれを知っていたようで、彼らはこの問題があまりにも些細なものだと考え、論文の中で何気ないコメントとしてそれを書いただけです。」

さらに、シャーマン・チャン氏は、GPT-3.5-Turbo でも MoE が使用される可能性があると推測しました。

ネットユーザーはどう思う?

このブログ投稿が公開された後、開発者たちは GPT-4 出力の不確実性についても議論し始めました。これは「マルチスレッド並列処理」によって発生する可能性があると考える人もいます。

「計算は決定論的ですが、計算を実行する複数のプロセッサ間でクロック周波数の偏差が生じる可能性があります」と言う人もいます。

シャーマン・チャンの仮説を支持する開発者は、「GPT-3.5-Turboは、OpenAIがGPT-4用に構築した小さなテストモデルである可能性がある」と述べた。

別の開発者は次のように分析しています。「Soft MoE の論文によると、スパース MoE は不確実性をもたらすだけでなく、エキスパート モジュールの割り当てをめぐって競合する同時リクエストの数に応じてモデルの応答品質が左右される可能性もあります。」

これについてどう思いますか?

<<:  GitHubが11,000スターを獲得、ソフトウェア開発プロセスをシミュレート、オープンソースフレームワークMetaGPTが爆発的に増加

>>:  MetaGPTが人気に! 2ドルでボスになれる、GitHubには11.2万個のスターがつき、AIエージェント「オールラウンダー」が誕生

ブログ    
ブログ    
ブログ    

推薦する

プライベート5GとAI技術は自動化から自律性への移行を加速させる

モノのインターネットとインダストリー 4.0 の登場以来、マシン ビジョン、人工知能、機械学習、ディ...

焦点: 注目すべき 6 つのスマート セキュリティ トレンド

スマート セキュリティは、新しい AI 機能のおかげで、静的なセキュリティ ビデオ録画からリアルタイ...

機械学習でデータを実用的な洞察に変換する

ビジネスが今やデータ主導型になっていることは誰もが知っています。データ収集の増加に伴い、分析はビジネ...

人工知能が教育を改善する32の方法

過去数年間、ソーシャルメディアから音声認識、モノのインターネットから新しい小売業、ロボットから自動運...

消費者の95%は買い物中にロボットと話したくない

オラクルが市場調査会社ウェイクフィールド・リサーチおよびニューヨークに拠点を置く小売コンサルティング...

Googleの視覚言語モデルPaLI-3がリリースされました。パラメータはわずか50億で、より小さく、より高速で、より強力です。

大規模モデルの時代では、視覚言語モデル (VLM) のパラメータは数百億、さらには数千億にまで拡大し...

...

...

JavaScript 面接でよくあるアルゴリズムの質問の詳細な説明

[[185725]] JavaScript での変数の昇格を説明するいわゆるプロモーションは、その名...

予想外だが妥当: ガートナーの 2020 年データ サイエンスおよび機械学習プラットフォームのマジック クアドラントの解釈

最近、ガートナーはデータ サイエンスおよび機械学習 (DSML) プラットフォームに関するマジック ...

...

ガートナー、2023年の中国のデータ分析と人工知能技術の成熟度曲線を発表

ガートナーは、2026年までに中国のホワイトカラー職の30%以上が再定義され、生成AIを活用し管理す...

2021年11月のドローン業界の最新動向を3分で振り返る

現在、人工知能や5Gなどの技術の助けを借りて、我が国のドローン開発は急速な成長の軌道に乗っています。...

...

...