DEV Community

Tutty
Tutty

Posted on

textGrad: Automatic “Differentiation” via Text

選定理由

Stanford Univ.の研究、適用先が広く革新的(という印象)。ライブラリとしての完成度も高い。

Paper: https://arxiv.org/abs/2406.07496
Code: https://github.com/zou-group/textgrad

自動微分と同様の発想でテキスト勾配による自動プロンプトチューニングを提案している。システムが多段式の複数のLLMを使用していても勾配伝搬という形でフィードバックできる点がポイントである。
実際には解析学における微分の定義とは異なり(テキストは離散空間だし)、テキスト勾配によって目的関数が局所最適解へ収束する
保証はない。強化学習の枠組みでいうと環境ダイナミクスの知識がなく、1エピソードが完了後に報酬が決定するのでモンテカルロ法に相当。

概要

【社会課題】
AIシステムの複雑化に伴い、複数のモデルやツールを組み合わせた複合システムの最適化が必要だが、従来はプロンプト調整が不可欠でコストが大きい。自動化された最適化手法が不足しており、これがAIシステムのさらなる発展を阻んでいる。

【技術課題】
複合システム内の異なる要素(例:コード、分子構造、医療計画)は、数値的な勾配計算が難しく、従来の自動微分や勾配降下法が適用できない。各要素に対する最適化の指針を自然言語で提供する方法が求められているが、実装や汎用性が課題であった。

【提案】
LLMが自然言語のフィードバックを生成し、それを使ってシステム内の各要素を最適化するTEXTGRADを提案。具体的には以下のようなタスクを自動最適化する

  • コーディング問題:LeetCodeの難問に対するコードの正確性や効率性
  • 質問応答の精度:科学的質問応答での回答精度改善
  • 分子構造:薬効を高めるための結合親和性(Vinaスコア)と薬剤適合性(QEDスコア)のバランス
  • 放射線治療計画:腫瘍ターゲットへの放射線量の最適化と健康組織への影響の最小化

これらの項目を「自然言語勾配(Textual Gradients)」を用いて改善し、各タスクに対してゼロショットでの最適化が可能になる。

【効果】
TEXTGRADによる最適化により、従来の手法と比較して以下のような成果を達成している:

  • コーディング問題ではGPT-4の性能を7%から36%まで向上
  • 質問応答の精度向上(GPQAデータセットで最良の55%を達成)
  • 分子設計では、より高い薬効を示す分子を生成(QEDスコア向上、Vinaスコアの低下)
  • 医療分野では放射線治療計画の精度を改善し、腫瘍への放射線照射量の最適化と健康組織の保護を実現​

Textual Gradientによる勾配伝搬

TEXTGRADは、複雑なAIシステムやブラックボックスシステムの最適化において「自然言語勾配」(textual gradients)を利用する。通常の勾配降下法が数値勾配でパラメータを調整するのに対し、TEXTGRADはLLMが生成する自然言語フィードバックを勾配として扱い、システム内の各要素を改善する。

fig1

計算グラフの構築

TEXTGRADは、システム内の各構成要素(例:コード、分子構造、推薦モデルのパラメータなど)を「ノード」として計算グラフを構築する。この計算グラフにより、入出力データのフローが定義され、各ノードは非微分関数(例:LLM APIやシミュレーター)で接続される。

自然言語フィードバックの生成

各ノードに対して、勾配として扱う自然言語フィードバックをLLMから取得する。例えば、あるコードが与えられた場合、LLMが「この部分が問題であるため、修正すべき」といったフィードバックを生成する。このフィードバックは、数値勾配のようにシステム改善の指針として扱われる。

テキスト勾配降下(TGD)

テキスト勾配降下法を適用し、LLMから得たフィードバックに基づいて各ノードのパラメータ(例:コード、推奨システムの設定、放射線治療の計画など)を更新する。これは通常の勾配降下法におけるパラメータ更新と同様の操作だ。

反復と更新

テキスト勾配降下法を反復適用し、フィードバックを元にシステム全体を段階的に最適化する。このプロセスにより、各タスクの性能が向上する。

実験

TEXTGRADの柔軟性の高さを示すために複数の異なるタスクでの実験を行った。各タスクでの反復回数は3~10回程度で、タスクの複雑性や改善目標に応じて調整されている。比較対象はCoT, Reflexion[Shinn2023]

タスク1. コード最適化

LeetCodeの難問データセットでGPT-4の回答コード生成を行うタスクでの検証。5回の反復でGPT-4のテストケース通過率が7%→36%に到達し、従来の最良性能(Reflexion)からさらに5%向上した。これはTEXTGRADは計算グラフを使った柔軟な最適化により、タスク全体を統合的に改善できる点、自然言語勾配を活用して各要素に対する精密なフィードバックを提供できる点、が原因と考えられる。

本タスクでの定式化とプロンプトは以下である。

Code-Refinement Objective=LLM(Problem + Code + Test-time Instruction + Local Test Results)

  • Problem:解決すべき問題の定義。最適化対象となるコードが取り組む問題を示す。
  • Code:現時点でのコード実装。最適化の対象となるコードそのもの。
  • Test-time Instruction:コードが満たすべき条件や評価基準に関する指示。この指示に従って、LLMがコードの改善点やエラーを特定する。
  • Local Test Results:コードがローカルテストでどのような結果を出したかを示す。この結果に基づいて、コードの正確性やパフォーマンスが評価される。

tb1

タスク2. 質問応答

複数のPh.D程度の科学技術に関する質問応答データセットを用いた。その中の1つ、Google-proof Question Answering (GPQA) はドメインエキスパートの回答率が81%、非エキスパートで22%であった。3回の反復でGPT-4oでの精度がGPQAで51%(CoT)->55%(textGrad)に向上し、既知の最高性能を達成した。

tb2

タスク3. 推論(Object Counting、Word Sorting、GSM8k)

推論系タスクでの評価は表3である。どれもTEXTGRADが最も高精度であった。ここに記載されているように、最適化前のプロンプトは「質問に対してステップバイステップで考える」のみで詳細な指示は含まれていない。一方で、最適化後のプロンプトは1.問題を自分の言葉で再確認することで理解を深める。2.各計算ステップを細かく説明し、正確性を確保するために再確認を行う。3.数学記法や問題文の文脈を守り、最終的に「Answer: $VALUE」という形式で答えるよう明確に指示をしている。

tb3

タスク4. 分子設計

薬効の高い分子を設計するため、分子の結合親和性(Vinaスコア)と薬剤適合性(QEDスコア)を最適化。各分子構造は10回の反復を行い、自然言語勾配を用いた調整を実施。生成された分子は、対象タンパク質に対する結合親和性と薬剤適合性で既存薬を上回る性能を示した。図2には自然言語勾配の例が示されており、化学構造をどのように変えるべきか詳細な指示が与えられている。

fig2

タスク5. 放射線治療計画の最適化

腫瘍と周辺組織への放射線量のバランスを最適化するための実験。TEXTGRADは自然言語フィードバックを用いて、5回の反復で治療計画(照射範囲、放射線量など)を改善。臨床で用いられている計画と比較して、腫瘍への照射精度が向上し、健康な組織へのダメージが減少した。

fig3

Image of AssemblyAI

Automatic Speech Recognition with AssemblyAI

Experience near-human accuracy, low-latency performance, and advanced Speech AI capabilities with AssemblyAI's Speech-to-Text API. Sign up today and get $50 in API credit. No credit card required.

Try the API

Top comments (0)

Heroku

This site is powered by Heroku

Heroku was created by developers, for developers. Get started today and find out why Heroku has been the platform of choice for brands like DEV for over a decade.

Sign Up

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay