Skip to content

srt-tkyk/FORGE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FORGE

Feedback-Oriented Reward & Gaussian Estimation

人間のランク評価という「弱い教師信号」だけから、最適な実験条件を最小回数で導き出す。


背景

製造業・材料開発の現場では、新しい素材やプロセス条件を探索するとき、2つの根本的な壁に直面する。

実験コストの壁。
温度・圧力・配合比率といった操作パラメータの組み合わせは連続的で無限に存在するが、実験は時間・コスト・材料の面で非常に高価である。やみくもに試すことは許されない。

評価の非定量性の壁。
工業製品の品質(質感、光沢、強度感)は「目で見てわかる」ものであり、数字に落とせないことが多い。熟練技術者が「これはA品、これはB品」とランク付けすることが、現場における唯一の現実的な評価手段である。

この2つの壁が同時に存在するため、従来の機械学習や数値最適化手法はそのまま適用できなかった。


目的

「人間のランク評価」という弱い教師信号だけから、最適な実験条件を自動提案するシステムを、最小実験回数で構築する。

FORGEは以下の2つの推論器を、クローズドループの中で同時に育成する。

推論器 役割
Reward Model h(C, A) ランク評価(A/B/C)の背後にある連続的な「真の良さ」を推定する
Surrogate Model f(C, A) 任意の条件・操作量に対して、スコアの予測値と不確実性を返す

そして能動学習(Active Learning)によって「次にどの実験をすれば、最もシステムが成長するか」を計算し、人間の認知的コストも含めた総実験コストを最小化する。


課題と解決アプローチ

課題1: ランクの定量化(Ordinal Qualitative Bottleneck)

A > B > C には順序があるが、「AとBの差」と「BとCの差」は等間隔ではない。単純な数値変換では情報が歪む。

解決: 順序回帰(Ordinal Regression)によって、ランクの背後に潜む連続スコア(潜在変数)を確率モデルとして推定する。

課題2: 条件の汎化(Cold Start Problem)

初期データは条件のバリエーションが数種類しかない。見たことのない条件に対しても予測できる汎化が必要である。

解決: 条件を記述子ベクトルに変換し、特徴量空間上での「知識の転移」を実現する。

課題3: 連続空間での探索

操作量が連続値であるため、全パターンを試すことは不可能。内部で数理最適化ソルバーを走らせる必要がある。

解決: scipy.optimize.differential_evolution により、操作量の物理的な制約範囲内でグローバル最適解を探索する。

課題4: 外挿領域の不確実性(Extrapolation Risk)

データがない領域では予測が不安定になる。予測値だけでなく「その予測がどれだけ信頼できるか」を定量化しなければ、誤った実験を提案してしまう。

解決: ガウス過程回帰(Gaussian Process)により予測値 μ と不確実性 σ を同時に出力し、獲得関数(UCB/EI)で探索と活用のバランスを制御する。


システムアーキテクチャ

┌─────────────────────────────────────────────────────────┐
│   D = { (C_i, A_i, S_i, H_i, Ŷ_i) }  ← DataStore      │
└───────────────────┬─────────────────────────────────────┘
                    │
       ┌────────────┴─────────────┐
       ▼                           ▼
┌─────────────┐          ┌──────────────────┐
│ Reward Model│          │ Surrogate Model  │
│ h(C,A) → Ŷ │          │ f(C,A) → (μ, σ) │
│             │          │                  │
│  Ordinal    │  Ŷ を付与│  Gaussian        │
│  Regression │ ────────▶│  Process (GP)    │
└─────────────┘          └────────┬─────────┘
                                   │ μ, σ
                          ┌────────▼─────────┐
                          │ Acquisition Func │
                          │ α = UCB / EI     │
                          │ argmax over A    │
                          └────────┬─────────┘
                                   │ 次の実験提案 (C*, A*)
                          ┌────────▼─────────┐
                          │  Human Feedback  │
                          │  実験 → S → H入力│
                          └──────────────────┘
                                   │ データ追加
                                   └──────────▶ D を更新 → ループへ

最適化フロー

Phase 0  初期化          スキーマ定義・既存データのインポート
   ↓
Phase 1  Reward Model   ランクH → 潜在スコアŶ へのマッピング
   ↓
Phase 2  Surrogate      ŶをもとにGPモデルを学習・更新
   ↓
Phase 3  提案生成        獲得関数を最大化し次の実験条件 (C*, A*) を算出
   ↓
Phase 4  人間評価        実験 → 観測S → ランクH を入力 → Dに追加
   ↓
   └────────────────────────────────────────── Phase 1 へ戻る

クイックスタート

# インストール
pip install -e .

# スキーマ定義(初回のみ)
python -m forge init --config config/default.yaml

# データインポート
python -m forge import --file path/to/data.csv

# ループ実行(Phase 1 → 2 → 3 → 人間入力待ち)
python -m forge loop --condition "temp=250,pressure=1.2"

# 現状サマリー
python -m forge status

技術スタック

Python 3.11+
├── mord          順序回帰 (Reward Model)
├── gpytorch      ガウス過程 (Surrogate Model)
├── scipy         最適化ソルバー (Acquisition)
├── click         CLI
└── rich          コンソール表示

ディレクトリ構成

forge/
├── CLAUDE.md
├── REQUIREMENTS.md
├── README.md
├── config/
│   └── default.yaml
├── data/
│   ├── schema.yaml
│   └── dataset.csv
├── models/
│   ├── reward_model.pkl
│   └── surrogate_model.pt
├── forge/
│   ├── cli.py
│   ├── data/
│   ├── models/
│   ├── optimization/
│   └── loop/
└── tests/

変数定義

記号 名称 説明
C Condition 前提環境・素材特性。制御不可。記述子ベクトルとして入力。
A Action 温度・圧力・比率など。自由に制御できる連続値パラメータ。
S State 実験後の生の観測結果(質感・画像・波形など)。
H Human Feedback 人間によるランク評価(例: A/B/C)。唯一の教師信号。
Ŷ Latent Yield ランクの背後にある連続スコア。Reward Modelが推定。
μ, σ 予測平均・不確実性 Surrogate Modelの出力。獲得関数の入力となる。

About

Human-in-the-Loop Bayesian optimization system that learns from ordinal human feedback (A/B/C ranks) to propose optimal experiment conditions with minimal trials.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages