- ๐ Project Resilience & Pacing: ์๊ฐ ๊ทน๋ณต ๋ฐ ์ฐ์ฐ ํ์ด์ค ์กฐ์ ์ถ๋ก ๋ชจ๋ธ
๐ Project Resilience & Pacing: ์๊ฐ ๊ทน๋ณต ๋ฐ ์ฐ์ฐ ํ์ด์ค ์กฐ์ ์ถ๋ก ๋ชจ๋ธ
Repository: yonommy0328/ConnectAI-C1-0.8B (Base: Qwen/Qwen3.5-0.8B)
๋ณธ ๋ชจ๋ธ์ ์ธ๊ฐ์ด ์ด๋์ ํตํด **"์ด์ ์ ํ๊ณ๋ฅผ ๋ํํ๋ฉฐ ์ฑ๊ณต ๊ฒฝํ์ ๋ฌด์์(์ต๊ด)์ ๊ฐ์ธ"**ํ๊ณ , **"๊ตฌ๊ฐ๋ณ๋ก ์ฒด๋ ฅ์ ์๋ฐฐ(Pacing)"**ํ๋ฏ, ์๊ฐ ๊ทน๋ณต(Self-Surpassing & Resilience)๊ณผ ๋์ ์ฐ์ฐ ์์ฐ ํ ๋น(Adaptive Pacing) ๋ฉ์ปค๋์ฆ์ Policy์ ๋ด์ฌํํ ํ์ธํ๋/๊ฐํํ์ต(RL) ๊ณ ๋ํ ๋ชจ๋ธ์ ๋๋ค.
๐งญ ํต์ฌ ์ฒ ํ ๋ฐ ์ํคํ ์ฒ (Objective & Architecture)
1. ๐ ์๊ฐ ๊ทน๋ณต ๋ฐ ํ๋ณตํ๋ ฅ์ฑ (Self-Surpassing & Resilience)
- 3๋จ๊ณ ์๊ฐ ์์ ๊ถค์ (Self-Correction Trajectory) ๋ด์ฌํ:
Attempt 1: ์ต์ด ๋์ถ๋์์ผ๋ ์ฃ์ง ์ผ์ด์ค๋ ํ๊ณ๊ฐ ์๋ ์ด๊ธฐ ์ง๊ด์ ์ ๊ทผCritique & Reflection: "์ด์ ์ ๋ด ๊ธฐ์ค(Baseline)์์๋ A๋ผ๋ ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด B ์ ๊ทผ๋ฒ์ผ๋ก ์์ ํ๋ค."Resolution: ์คํจ ์์ธ์ ์์ ํ ๋ถ์ํ์ฌ ์ฑ๊ณต์ ์ด๋์ด๋ธ ์์ฑํ ํด๊ฒฐ์ฑ
- ์กฐ๊ธฐ ํฌ๊ธฐ(Early Quitting) ๊ทผ์ : "ํด๊ฒฐํ ์ ์์ต๋๋ค", ๋ง๋ค๋ฅธ ๊ธธ์์ ๋นํฉํ๊ฑฐ๋ ํ๊ฐ์ ๋ด์ง ์๊ณ ๋๊น์ง ๋ฐฑํธ๋ํนํ์ฌ ์ ๋ต์ ๋ณต์ํด๋ด๋ ์ ์ฑ ์ฒด์งํ.
2. โก ๋์ด๋๋ณ ๋์ ์ฐ์ฐ ํ์ด์ค ์กฐ์ (Adaptive Pacing)
- Low (ํ์ง | Budget โค 60 tokens): ๋ถํ์ํ ์ฌ์ ์ฒด์ธ(CoT) ์์ด ์ง์ ์ ์ด๊ณ ๋น ๋ฅธ ๊ฒฐ๋ก ๋์ถ.
- Medium (์๋งํ ์ธ๋ | Budget ~150 tokens): ํต์ฌ ์กฐ๊ฑด๊ณผ ์ ์ฝ ์ฌํญ์ ๊ฒ์ฆํ๋ ๊ท ํ ์กํ ์ฐ์ฐ.
- High (๊ฐํ๋ฅธ ์ค๋ฅด๋ง | Budget 350~600 tokens): ์๋์ ์ผ๋ก
<thought>๋ธ๋ก์ ์ ๊ฐํ๋ฉฐ ๊ฐ์ค ๊ฒ์ฆ, ๋ฐ๋ก ํ์ธ, ์ฃ์ง ์ผ์ด์ค ๋ถ์ ๋ฐ ์๊ฐ ์์ ๊ถค์ ์ ๊ฑฐ์น๋ ์ฌ์ธต ์ฌ๊ณ (Test-time Compute) ์ง์ค ํฌ์ .
3. ๐ฏ ๊ฐํํ์ต(RL) ๋ณด์ ์ฒด๊ณ (Advantage & Pacing Reward)
- Advantage over Baseline:
$$A(s, a) = R(s, a) - V(s)$$
- ๋ชจ๋ธ์ ์ง์ ์ฒดํฌํฌ์ธํธ($\pi_{t-1}$)์ ๊ธฐ๋ ์ฑ๋ฅ $V(s)$ ๋๋น ์๊ฐ ์์ ์ฑ๊ณต ์ ๋์ ์์ ์ด๋๋ฐดํฐ์ง ๋ฐ ๋ณด๋์ค ๋ถ์ฌ.
- ์กฐ๊ธฐ ํฌ๊ธฐ ๋ฐ ํ๊ฐ ์๋ต ์ ๊ฐ๋ ฅํ ์์ ํจ๋ํฐ ๋ถ๊ณผ.
- ์ฐ์ฐ ํจ์จ ๋ณด์ (Efficiency & Pacing Reward):
$$\text{Reward} = \text{Accuracy} - \alpha \cdot \max(0, \text{Tokens Used} - \text{Optimal Budget})$$
- ์ฌ์ด ๋ฌธ์ ์์ ํ ํฐ ๋ญ๋น ์ ๊ฐ์ , ๊ณ ๋๋ ๋ฌธ์ ์์ ์ถฉ๋ถํ ์ฌ๊ณ ํ ํฐ ์๋ชจ ํ ์ฑ๊ณต ์ ๊ฐ์ฐ์ ๋ถ์ฌ.
๐ ์ข ํฉ ์ฑ๋ฅ ๋ฒค์น๋งํฌ (Evaluation Benchmark)
| ํ๊ฐ ์งํ (Metric) | 0. Zero-shot Baseline | 1. SFT (์ง๋ํ์ต) | 2. RL (Resilience & Pacing) | ๋น๊ณ |
|---|---|---|---|---|
| ์ข ํฉ ์ ๋ต๋ฅ (Accuracy) | 32.0% | 81.0% | 91.5% | ์ ์์ญ ์ต๊ณ ์ ํ๋ |
| ์๊ฐ ๊ทน๋ณต ํ๋ณต๋ฅ (Resilience Rate) | 12.0% | 78.0% | 94.0% | ์ฃ์ง ์ผ์ด์ค ์๊ฐ ์์ ์ฑ๊ณต๋ฅ |
| ์ฐ์ฐ ํ์ด์ค ์ค์์จ (Pacing Compliance) | 45.0% | 82.0% | 93.2% | ๋์ด๋๋ณ ์ต์ ์์ฐ ์ค์ |
| ์กฐ๊ธฐ ํฌ๊ธฐ์จ (Early Quitting Rate) | 28.0% | 4.0% | 0.0% | 100% ๋๊ธฐ ์ ์ง (ํฌ๊ธฐ 0๊ฑด) |
๐ป ์ฌ์ฉ ๋ฐฉ๋ฒ (Quick Start)
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
base_model_name = "Qwen/Qwen3.5-0.8B"
adapter_id = "yonommy0328/ConnectAI-C1-0.8B"
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_name,
torch_dtype=torch.float32,
device_map="auto"
)
model = PeftModel.from_pretrained(base_model, adapter_id)
# ์์ 1: ๊ณ ๋๋ ์ฃ์ง ์ผ์ด์ค ์ง๋ฌธ (Deep Resilience Pacing)
prompt = """[Difficulty: High]
์ํฉ: 50๋ง์ ์๋น์ B2B ์ค๋ฌด ๋ถํธ์บ ํ ๊ตฌ๋งค 48์๊ฐ ๋ง์ ๋ชจ๋ ์์ค์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ ๊ณ ๊ฐ์ด '๊ฐ์๊ฐ ๊ธฐ๋์ ๋ค๋ฅด๋ค. ์ ์ก ํ๋ถํ์ง ์์ผ๋ฉด ์ปค๋ฎค๋ํฐ์ ๋ถ๋งค ์ด๋์ ๋ฒ์ด๊ฒ ๋ค'๊ณ ํ๋ฐํจ.
์ง๋ฌธ: ํ์ฌ์ ์ง์ ๊ฐ๋ฅ์ฑ๊ณผ ๋ฒ์ ๊ท์ ์ ์งํค๊ธฐ ์ํ ์ต์ ์ ์์ฌ๊ฒฐ์ ์?"""
messages = [
{"role": "system", "content": "๋น์ ์ 'Project Resilience & Pacing' ์ ์ฑ
์ด ์ฒดํ๋ ์ต๊ณ ์ ์์ฌ๊ฒฐ์ AI์
๋๋ค."},
{"role": "user", "content": prompt}
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
outputs = model.generate(input_ids, max_new_tokens=512, temperature=0.3)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Created by yonommy0328 ยท Built with Project Resilience & Pacing Framework