2025-01-16 機械学習勉強会

今週のTOPIC

※ [論文] [blog] など何に関するTOPICなのかパッと見で分かるようにしましょう。
出典を埋め込みURLにしましょう。

@Naoto Shimakoshi

[white paper] Kaggle Agents

  • Agentの概念を体系的に解説してくれているホワイトペーパー
    • Vertexを用いた具体的な実装例もある。
  • Agentの構成要素
    • Model
      • Agentでは中心的な意思決定者として使われる言語モデルのこと
    • Tools
      • モデルはテキストや画像を生成するのに優れているが、外部のデータやサービスと相互作用を持てないという制約がある。そのGAPを埋めるのがTools。
      • 通常はGET、POST、PATCH、DELETEなどのWeb APIメソッドに沿っている。
    • Orchestration
      • Agentが次の行動や決定を通知する方法を管理するための周期的なプロセスを記述する。このループはAgentが目標、または停止点に到達するまで継続される。
      • 簡単な計算であることもあれば、追加の機械学習アルゴリズムが入ることもある。
      • ReActやCoT、ToTなどが一般的。
  • 実際の推論の例
      1. ユーザーがエージェントにクエリを送信
      1. エージェントがReActシーケンスを開始
      1. エージェントがモデルにプロンプトを提供し、次のReActステップのいずれかとその対応する出力を生成するように要求。
        1. Question:ユーザーのクエリからの入力質問、プロンプトとともに提供されます。
        2. Thought:モデルが次に何をするべきかについての思考。
        3. Action:モデルが次に取るアクションに関する決定。
          1. ここでツールの選択が発生する可能性がある。たとえば、アクションはのいずれかになり、最初の3つはモデルが選択できる既知のツールを表し、最後は「ツール選択なし」を表します。
        4. Action Input:モデルがツールに提供する入力に関する決定(存在する場合)。
        5. Observation:アクション/アクション入力シーケンスの結果。
        6. Final Answer:モデルが元のユーザーのクエリに提供する最終的な回答。
      1. ReActループの終了
  • Functionsの例
  • DataStoreを使う例
LangChainとLangGraphを使った実装例

@Yuya Matsumura

[slide] LLMアプリケーションの Fine-tunningと蒸留を活用した改善

  • 2024年10月のOpenAI Dev Day で発表された蒸留機能を使って実際にサービスに適用している実例。あまり表に出しているところない気がする。
  • OpenAI は何も設定しなくとも自動で Prompt Caching してくれてコストもレイテンシもsaveしてくれるので便利。
  • デフォルトの蒸留機能は、OpenAIの上位モデルの出力をそのまま正解データとして下位モデルをファインチューンする。つまり、上位モデルの性能を超えることはない。
  • 出力を修正(アノテーション)したければLangSmithなりを使おうね。
  • 精度向上観点では、プロンプトエンジニアリングを十分に頑張ってからの手段というのはそう。

@Yuta Kamikawa

[blog] AI系の情報収集手法を紹介(ビジネス・開発・研究)【2025年版】


@Shun Ito

[blog] Sarashina-Embedding-v1-1B: 日本語LLMをベースにしたテキスト埋め込み(1/2)~基本編~

  • SB Intuitions TECH BLOG より
  • decoderベースの日本語特化モデルは初
  • 特徴
    • ベースモデル: 日本語と英語で構成された11.1Tトークンの学習データで事前学習された12億パラメータのLLM、Sarashina2.1-1Bをベースモデルとして使用
      • 日本語タスクでのベースモデルの性能が高い
    • アーキテクチャ: Causal maskを残したままのLlamaのdecoderにテキストを入力し、テキストの最後のトークン、つまりEOS(end of sequence)トークンの隠れ状態を入力テキスト全体のベクトルとする
    • 最大シーケンス長: 8,192トークン(OpenAI/text-embedding-3-largeと同等)
    • Prefixなし: 入力テキストに"Query: "や"Document: "などのprefixをつけなくてもOpenAI/text-embedding-3-largeを超える性能を達成
  • 性能評価
    • JMTEB(SB Intuitionsが構築・公開している日本語テキスト埋め込みベンチマーク)を利用
    • 平均スコアでOpenAI/text-embedding-3-largeを上回る
 

@qluto (Ryosuke Fukazawa)

[blog] Building effective agents \ Anthropic

 
どんなときにエージェンティックなシステムを構築するか、フレームワークとどう付き合うか、エージェンティックなシステムを構築する際に基本となるパターンは何かということについて俯瞰的に語ったガイド。
LLMスペースでの成功は、最も洗練されたシステムを構築することではありません。 ニーズに合った適切なシステムを構築することである。 シンプルなプロンプトから始め、包括的な評価によって最適化し、シンプルなソリューションでは不十分な場合にのみ、マルチステップエージェントシステムを追加します。 エージェントを実装する際には、次の3つの基本原則に従うようにしています。 - エージェントの設計をシンプルに保つこと。 - エージェントの計画ステップを明示的に示すことによって、透明性を優先すること。 - 徹底したツールドキュメンテーションとテストによって、エージェントコンピュータインタフェース(ACI)を慎重に作成すること。 フレームワークは、素早く始めるのに役立ちますが、本番環境に移行する際には、抽象化レイヤを減らし、基本コンポーネントで構築することを躊躇しないでください。 これらの原則に従うことで、強力であるだけでなく、信頼性が高く、保守可能で、ユーザから信頼されるエージェントを作成することができます。
 
PharmaXテックブログである上記ブログでも語られている通り、パターンを把握した上で、どのようにシステムを構築すべきか、完全自律型なエージェンティックなシステムはあなた・ユーザーにとって必要なのか?というのをしっかり問うてから構築にかかることが大事だと感じた
 

メインTOPIC

Devil's Advocate: Anticipatory Reflection for LLM Agents

概要

  • Devil’s Advocateは悪魔の代弁者という意味(あまのじゃく的な?)
    • AIエージェントが自らの決定や行動を事前に批判的に見直すことで、潜在的な失敗を予測し、効率的にタスクを完了する手法
    • 著者はペンシルベニア大学とGoogle DeepMind
  • 従来のAIエージェントは、基本的にAction(行動)してからReflection(反省、振り返り)
    • Actionに失敗した時に逐次的にやり直すしかない
    • 実行計画を頻繁に変更すると混乱し、安定してタスクを完了することができないことがある
      • その分無駄にコストもかかる
  • Devil’s Advocate(Anticipatory Reflection)では、AIエージェントがActionする前に「こういう結果になるのでは?」とあらかじめ結果を予測し、複数の可能性を想定させた上で代替案を作っておく手法(左)
    • 論文では、より人間に近い思考プロセスなのでは?と主張
  • 実験
    • WebArena(Web環境に近いプラットフォーム)で従来手法から3.5%の性能向上
    • 計画修正(Plan Revision)における思考回数と計画修正回数が45%削減
      • Plan Revisionは、計画が失敗した場合、実行された行動と記録を見直し、問題を特定して未来の計画を改善すること
  • 貢献
    • 適応力の向上: 予期せぬ状況に柔軟に対応できるようになった
    • 一貫性の維持: 計画の頻繁な変更が減少し、エージェントの混乱が防止された
    • 効率性の向上: タスク達成までの時間が短縮された

関連研究

  • AIエージェントとは、特定の環境下で目標を達成するために、AI自身が行動を選択して実行するシステム
  • ReAct(Reasoning & Action)
    • 「自身の行動と理由を推論すること」(Reasoning)と「その推論に基づいて行動すること」(Action)を組み合わせてユーザの指示や質問に対応する手法
    • エージェントはActionだけでも実装できるが、ReasoningしてからActionした方が精度が上がるということらしい
    • 手順
        1. Observation: 環境情報の取得
            • 環境からの状態観測(Webページの階層構造など)
            • テキストや画像の入力
            • Action後の状態の取得
        1. Reasoning: 次のタスク実行のために必要な行動と理由を推論
            • 観測情報の分析
            • 次のアクションと理由の推論
        1. Action: 行動の生成と実行
            • 具体的な行動の生成
            • 環境への反映
            • 結果の観測
    • メリット
      • シンプルな構造で実装が簡単
      • 思考プロセスがわかるので、解釈性が高い
      • 現時点の状態を最小限保持していればいいので、メモリ効率がいい
    • デメリット
      • 現時点の環境状態から次のアクションを決まるので、同じ失敗を繰り返す可能性がある。複雑なタスクだとループに陥ることもしばしば
      • 似たようなアクションばかり生成されることもあるので、複雑なタスクでの探索効率が低い
      • 長期的なタスクの進捗管理が難しく、どのタイミングでタスクが完了するかわからない
  • Planning-basedアプローチ(ReWOO, AdaPT)
    • ReActは短期間でシンプルなタスクに向いているが、複雑で長期的なタスクが苦手
    • あらかじめ自律的に計画を立てることで複雑で長期的なタスクを実行
    • 手順
        1. Task Analysis
            • タスクの理解
            • 目標状態の定義
            • 制約条件の特定
        1. Planning
            • タスクの分解(Decomposition)しサブタスクの生成
            • サブタスクの順序付け
            • 実行計画の生成
        1. Action
            • プランに基づく逐次実行
            • 進捗モニタリング
            • エラー検出
        1. Reflection
            • プランの妥当性評価
            • 必要に応じた計画修正
            • 新規プランの生成
    • メリット
      • 体系的なタスク分解が可能なので、実行されるタスクに一貫性がある
      • 計画することによってタスクの進捗管理ができるので、長期的な実行が得意
      • Reflectionを行うことで探索的に計画が立案できるので、局所解に陥りにくく、複雑なタスクへの対応
    • デメリット
      • プラン生成のオーバーヘッド
      • タスク実行に失敗し、何度も計画すると計算コストが高くなる

Devil’s Advocate

Anticipatory Reflection

  • Planningで生成したサブタスクを実行する前に、「もし失敗したらどうする?」というシナリオを想定させ、その失敗に対する代替のActionをあらかじめ準備する手法
  • 従来手法はタスク実行に失敗した場合に、Reflection(反省)を行いPlanning(計画)からやり直すが、本当にPlanningからやり直す必要あるのか?非効率では?
  • Planningのタイミングで代替案含むactionを複数生成して、一度決まった計画の中である程度やってみることでPlanning部分を効率化
  • 手順
      1. Planning
        1. 状態の観測からタスクの進捗状況を確認
        2. 過去の実行履歴から計画を作成
      1. Action Stack Initialization
        1. サブタスクに対して、メインのActionと代替案のActionをスタックに格納
        2. 状態とActionをペアにしてスタックに格納
      1. Stack-based Action Execution
        1. まずはスタックからメインのActionを取り出し実行
        2. Actionの実行結果とサブタスクの目的の整合性を評価(Alignment check)
        3. 失敗した場合、スタックに格納された代替案のActionを実行(backtracking)
        4. スタックのActionが無くなるまで、b, cを繰り返す
            • Alignment checkが通らないままスタックが空になった場合、1に戻る
      1. Anticipatory Reflection
        1. 次のサブタスクに対して、メインのActionを生成
        2. 考えうる代替案のActionを複数生成
        3. 全てのActionをスタックに格納
        4. 3に戻る
  • 例) 2022年11月に買ったフォトフレームの色はなんですか?
    • GPT-4を使ったPlanningでは5つのサブタスクが生成された
        1. My Accountをクリックして、アカウントの詳細にアクセスする
        1. Order Historyをクリックして、注文履歴を確認する
        1. 2022年11月の注文が見つかるまでページをスクロールする
        1. 2022年11月の注文詳細をクリックする
        1. フォトフレームの色の情報セクションまでページをスクロールする
  • 画像のように2022年11月の注文が複数あり、フォトフレームの注文詳細をクリックしなかった場合にその計画は失敗してやり直しになってしまう
  • 4の時点で、Anticipatory Reflectionを実行することによって、「2022年11月の注文履歴は3つ存在するのでフォトフレームの注文詳細が見つからないのでは?」と批評(Devil’s Advocate)的に予測させることによって、計画をやり直すことなく、3つの注文詳細をクリックするというActionを生成することができる
  • Anticipatory Reflectionで代替案を準備しないと、そもそも2つ目移行の注文履歴がクリックされないこともあり、探索効率が低い

実験

設定

  • WebArenaベンチマーク
    • オンラインショッピング、Eコマース管理、ソーシャルメディア、地図サービス、ソフトウェア開発プラットフォームなどの5つのWeb環境
    • 812のタスク
    • スクショもあるが、テキスト情報しか使ってない(DOM)
    • WebArenaベンチマークのタスクをGPT-4でサブタスクに分解すると以下のような分布になった
      • 大体3~9個くらいのサブタスクに分割される
  • 比較手法
    • 提案手法: AR(Anticipatory Reflection)
    • LATS(階層的なPlanning-basedアプローチ)
    • Plan + Act(Planning-basedアプローチ)

結果

  • Performance
    • 提案手法: 23.5%
    • LATS: 22.7%
    • Plan + Act: 19.8%
 
  • Efficiency
    • 計画の修正回数が45%削減(Plan Revisions)
    • 1計画あたりのAction数は大きく変わらないものの、計画の実行回数が少なくなり、効率的にタスクを完了できるようになった
 

課題と展望

課題

  • 複雑なロジックを必要とするタスク(ループ構造や再利用可能な関数が必要なもの)への対応が不十分
  • 過去の失敗からの計画修正の精度が低い

技術改善点

  • Multi-modal対応の強化
    • この論文ではテキスト情報しか使っていない
  • まだまだコスト高め
  • 自然言語ではなく、フローチャートなどの堅牢な方法による計画の記述

応用可能性

  • Computer useみたいな自律的Web操作
  • 自動運転だったり、予測的な思考能力が求められる領域
 

Devil's Advocate: Anticipatory Reflection for LLM Agents