YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
- ์์น๋ณ refusal ๋ถ์
- ๊ณตํต ์์น
- ๋๊ตฌ
- ์คํ
- Figure 4: thinking๊ณผ no-thinking ๋น๊ต
- CoT ๋ฌธ์ฅ ๋ถ๋ฅ์ PDF
- Continuation variance
- ๋ฐ์ดํฐยทํ๊ฐ ์ ์
- ๊ฒฐ๊ณผ ๊ตฌ์กฐ
- Task ๋ฐ์ดํฐ์
: probe ์๋ continuation ์ธก์
- RAPO / STAIR SFT
- STAR-1K post-alignment
- ThinkSafe / RAPO post-alignment
- RECAP post-alignment
- ํ์ต ํ 2๋
ธ๋ ๋ถ์ ๋ฐ reasoning ํ๊ฐ
- ๊ณตํต ์์น
์์น๋ณ refusal ๋ถ์
๊ฐ์ ์ง๋ฌธยท์์ฑ ๊ฒฐ๊ณผยท5-fold์์ Fisher ๋ถ๋ฆฌ๋, hidden-state refusal probe,
token-only TF-IDF๋ฅผ ๋น๊ตํ๋ค. ๊ธฐ๋ณธ ๋ชจ๋ธ์ Qwen3-8B, ๋ฐ์ดํฐ๋ think_token์ด๋ค.
๊ฒฐ๊ณผ์ ์์์ ์ **../rlm_result/REPORTS.md**๋ค.
๊ณตํต ์์น
| ํ์ | ์ฝ๋ ์ด๋ฆ | ์ ์ | ๊ธฐ๋ณธ ์์น ์ |
|---|---|---|---|
t_post |
prompt_end |
๊ณต์ chat template์ ์ ์ฉํ ์ ๋ ฅ์ ๋ง์ง๋ง ํ ํฐ | 1 |
<think> |
reasoning_start |
reasoning ์์ marker์ ๋ง์ง๋ง ํ ํฐ; Harmony๋ analysis header ๋ | 1 |
| Prompt ์ ๊ทํ | prefill |
user ์ง๋ฌธ์ ์์๋ถํฐ chat template์ ์ ์ฉํ ์ ๋ ฅ์ ๋ง์ง๋ง ํ ํฐ๊น์ง | 20 |
| Reasoning trace | thinking |
์ฒซ non-whitespace body ํ ํฐ๋ถํฐ ๋ง์ง๋ง body ํ ํฐ๊น์ง ์ ๊ทํํ ์์น | 100 |
์ธ ๋ถ์์ ๊ธฐ๋ณธ๊ฐ์ **122๊ฐ ๋ถ์ ์ง์ (1 + 1 + 20 + 100)**์ด๋ค.
Prompt์ trace ๋ชจ๋ floor(linspace(start, end, N))์ผ๋ก ์ ๋์ ํฌํจํ๋ค.
N์ ๊ฐ๊ฐ PREFILL_POSITIONS=20, THINKING_POSITIONS=100์ด๋ค.
์ด๋ ์๋ก ๋ค๋ฅธ ํ ํฐ 122๊ฐ๋ฅผ ๋ปํ์ง ์๋๋ค. prefill 100%๋ t_post์ ๊ฒน์น๋ฉฐ,
์งง์ ๊ตฌ๊ฐ์์๋ ์์น๊ฐ ๋ฐ๋ณต๋๋ค. Trace 0%๋ ๊ธฐ์กด first_thinking๊ณผ ๊ฐ์ ๋ฐ๋ก ๋ํ์ง ์๋๋ค.
Template์ marker๊ฐ ์ด๋ฏธ ๋ค์ด ์์ผ๋ฉด t_post์ <think>๋ ๊ฒน์น ์ ์๋ค.
Trace๋ ์์ยท์ข
๋ฃ marker๋ฅผ ์ ์ธํ๋ค. ์ ์ฒด body ๊ธธ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฌํ ๋ถ์์ด๋ฏ๋ก online ์์ ๊ณผ ๊ตฌ๋ถํ๋ค.
Hidden state๋ ๋ง์ง๋ง transformer layer์ final normalization ์ดํ, LM head ์ง์ ๊ฐ์ด๋ค.
TF-IDF๋ ๋์ผ ์์น์ decoded token ๋ฌธ์์ด ํ๋๋ฅผ ๋ฒ์ฃผํ feature๋ก ์ฌ์ฉํ๋ค.
๋์ prefix๋ ์ ์ฒด trace๋ฅผ ์
๋ ฅํ์ง ์์ผ๋ฉฐ, ๊ณต๋ฐฑยทspecial token๋ ๋ณด์กดํ๋ค.
๋ฐ๋ผ์ ๊ณ ์ ๋ t_post/marker ํ ํฐ์ TF-IDF์๋ ์์ธก ์ ๋ณด๊ฐ ๊ฑฐ์ ์์ ์ ์๋ค.
๋๊ตฌ
์คํ ์คํฌ๋ฆฝํธ๋ ์ฉ๋๋ณ๋ก ๋๋๋ค.
| ์์น | ์ฉ๋ |
|---|---|
scripts/baseline/ |
STAR-1, ThinkSafe, RAPO, RECAP, STAIR ํ์ต ๋ฐ ํ์ต ์งํ ๊ด๋ฆฌ |
scripts/analysis/ |
๋ฐ์ดํฐ ์ค๋น, probeยทFisherยทTF-IDF, continuationยทflip ๋ถ์ ๋ฐ ๋ณด๊ณ ์ |
scripts/common.sh |
๋ ๊ฒฝ๋ก์์ ์ฌ์ฉํ๋ ๊ณตํต ์ค์ ยท๊ฒฝ๋ก ํจ์ |
์ฃผ์ baseline ์ง์
์ ์ star1_sft.sh, thinksafe_sft.sh, rapo_baseline.sh,
recap_baseline.sh๋ค. rapo_sft.sh์ stair_sft.sh๋ src/defenses/์ ๊ธฐ์กด SFT ๊ฒฝ๋ก๋ค.
์์ฐจ ํ์ต ์คํ๊ธฐ train_qwen3_baselines.py์ GPU ๊ธฐ๋ก๊ธฐ monitor_baseline_gpu.py๋
scripts/baseline/์ ์๋ค. ์๋ ๋ถ์ ๋๊ตฌ๋ ๋ชจ๋ scripts/analysis/์์ ์คํํ๋ค.
| ์คํฌ๋ฆฝํธ | ์ํ ๋ด์ฉ |
|---|---|
refusal_probe.sh |
์์ฑ โ 4๊ฐ guard ํ์ โ ๊ณตํต cohort/fold โ ํํ ์ถ์ถ โ ์์น๋ณ refusal probe ํ์ตยท์ ์ฅยทOOF ํ๊ฐ |
tfidf.sh train |
์ ์ฅ๋ ์์น๋ณ token text๋ก ๋ ๋ฆฝ์ ์ธ TF-IDF ๋ถ๋ฅ๊ธฐ ํ์ตยท์ ์ฅยทOOF ํ๊ฐ |
tfidf.sh evaluate |
์ ์ฅ๋ TF-IDF ๋ชจ๋ธ์ OOF ์์ธก ์ฌํ; ํ์ต ์์ |
fisher.sh |
๊ฐ์ cohort์ ์ ์ฅ๋ ํํ์ผ๋ก ์์น๋ณ Fisher ๊ณ์ฐ; ๋ถ๋ฅ๊ธฐ ํ์ต ์์ |
probe_metrics.sh |
์ ์ฅ๋ hidden-state probe ํ๊ฐ; ๊ธฐ๋ณธ task๋ refusal |
report.sh |
์ ์ฅ๋ ๋ถ์ JSON์ ๊ณตํต ๋น๊ตํยท๊ทธ๋ํยท๋ณด๊ณ ์๋ก ํตํฉ; ํ์ตยท์ถ๋ก ์์ |
run.sh |
fisher โ probe_metrics โ tfidf evaluate โ report ์คํ |
martingale.sh |
๊ธฐ์กด ํ๊ฐ foldยท์์น์์ continuation ์์ฑ โ 4๊ฐ guard label โ ์กฐ๊ฑด๋ถ ๋ถ์ฐ ์ถ์ ; ๊ธฐ๋ณธ ๋์์ ์ ์ฅ๋ label์ ์ธก์ ๋ง |
length_probe.sh |
๋ณ๋ ๊ธธ์ด ์คํ: ์์ฐ ์์ฑ 8ํ์ ํ๊ท body token ์๋ฅผ marker ํํ์ผ๋ก ์์ธก |
prepare_data.sh |
๊ณ ์ ๋ ์๋ณธ์ผ๋ก ๋ฐ์ดํฐ ์ค๋น |
self_jailbreak.sh |
์ ์ฅ๋ CoT๋ฅผ Mixtral๋ก ๋ฌธ์ฅ๋ณ ์๋ฏธ ๋ถ๋ฅํ๊ณ ์์ ํ์ PDF ์์ฑ |
flip_ratio.sh |
thinking/no-thinking ๊ฐ๊ฐ K=32 ์์ฑ โ ๋ค guard ํ์ โ ์ง๋ฌธ๋ณ flip PDF |
scripts/common.sh๋ ๊ณตํต ์ค์ ยท๊ฒฝ๋ก, scripts/analysis/features.sh๋ ์ถ์ถ ์ค์ ยท์บ์๋ฅผ ๊ด๋ฆฌํ๋ค.
๊ฐ refusal ๊ด๋ จ ์คํฌ๋ฆฝํธ๋ ์คํ ํ ์ข
ํฉ ๋ณด๊ณ ์๋ ๊ฐฑ์ ํ๋ค. ๋ฏธ์คํ ๋ถ์์ ๋ฏธ์๋ฃ๋ก ํ์ํ๋ค.
SUMMARY_RESULTS=0์ผ๋ก ์๋ ๋ณด๊ณ ์๋ฅผ ๋ ์ ์๋ค. run.sh๋ ๋ง์ง๋ง์ ํ ๋ฒ ํตํฉํ๋ค.
์คํ
๋ถ์ ์์กด์ฑ์ requirements.txt, HF ์ถ์ถ์ requirements-models.txt,
vLLM ์์ฑยทํ์ ์ requirements-vllm.txt๋ค. PYTHON_BIN์ ๋ถ์/์ถ์ถ ํ๊ฒฝ,
VLLM_PYTHON_BIN์ ์์ฑ/ํ์ ํ๊ฒฝ์ ์ ํํ๋ฉฐ, ์ง์ ํ์ง ์์ผ๋ฉด PYTHON_BIN์ ๋ฐ๋ฅธ๋ค.
์ ์ฅ ๋ชจ๋ธ์ ํ์ต ๋น์ scikit-learn ๋ฒ์ ์ผ๋ก ์ฝ๋๋ค.
๋ชจ๋ ์คํฌ๋ฆฝํธ๋ ํ์ผ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ ํ๋ก์ ํธ ๋ฃจํธ๋ฅผ ์ฐพ๋๋ค. ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์์ ์คํํ๊ฑฐ๋ ์ ์ฅ์๋ฅผ ์ฎ๊ฒจ๋ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ ํด๋น ์ ์ฅ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋๋ค.
| ์ค์ | ๊ธฐ๋ณธ ๊ฒฝ๋ก (ํ๋ก์ ํธ ๋ฃจํธ ๊ธฐ์ค) |
|---|---|
OUTPUT_ROOT |
../rlm_result |
RUNS_ROOT |
$OUTPUT_ROOT/runs |
ANALYSIS_ROOT |
$OUTPUT_ROOT/analysis |
REPORT_ROOT |
$OUTPUT_ROOT/reports |
DATA_ROOT |
$OUTPUT_ROOT/datasets |
SOURCE_ROOT |
baselines/lrm_safety_deliberation/data |
PROBE_ROOT |
$OUTPUT_ROOT/probes |
OUTPUT_ROOT, DATA_PATH, MODEL_PATH ๋ฑ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด๋ ํ๋ก์ ํธ ๋ฃจํธ ๊ธฐ์ค์ผ๋ก ํด์ํ๋ค.
Python์ ํ์ฑํ๋ ํ๊ฒฝ์ python์ ์ฌ์ฉํ๋ค. ๋ณ๋ ํ๊ฒฝ์ด ํ์ํ๋ฉด PYTHON_BIN๊ณผ
VLLM_PYTHON_BIN์ผ๋ก ์คํ ํ์ผ์ ์ง์ ํ ์ ์๋ค. environment.yml์๋ ์๋ฒ๋ณ ์ค์น ๊ฒฝ๋ก๋ฅผ ๊ณ ์ ํ์ง ์๋๋ค.
conda activate rlmexp
export PYTHON_BIN=python
export CUDA_VISIBLE_DEVICES=0
# ์ฒ์ ์คํ
bash scripts/analysis/refusal_probe.sh
bash scripts/analysis/tfidf.sh train
bash scripts/analysis/run.sh
# ์์ฑยท๋ผ๋ฒจยทfeature๊ฐ ์ค๋น๋ ์คํ์ 122๊ฐ ์์น ํ์ตยท๋ถ์
PREPARE_STAGES_OVERRIDE=none bash scripts/analysis/refusal_probe.sh
bash scripts/analysis/tfidf.sh train
bash scripts/analysis/fisher.sh
bash scripts/analysis/report.sh
# ์ ์ฅ๋ ๊ฒฐ๊ณผ์ ํยท์ข
ํฉ ๊ทธ๋ํ๋ง ๋น ๋ฅด๊ฒ ์ฌ์์ฑ
bash scripts/analysis/report.sh
๊ธฐ์กด 102๊ฐ ์์น์ ๊ฒฐ๊ณผ์ Fisher/Refusal Probe์ prefill 20๊ฐ ํ์ต ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด,
์ ํ์ต์ **TF-IDF prefill 20๊ฐ(5-fold ๋ชจ๋ธ 100๊ฐ)**๋ง ํ์ํ๋ค.
์๋ ๋ช
๋ น์ ํด๋น TF-IDF๋ฅผ ํ์ตยทOOF ํ๊ฐํ๊ณ , ์ ์ฅ๋ hidden probe์ ํ๊ฐ ํ์ผ๊ณผ 122๊ฐ ๋น๊ต ๋ณด๊ณ ์๋ฅผ ๋ง๋ ๋ค.
๊ธฐ์กด ์์ฑยท๋ผ๋ฒจยทfeature๋ฅผ ์ฌ์ฌ์ฉํ๋ฉฐ Fisher๋ ๊ธฐ์กด JSON์ ์ฝ๋๋ค.
POSITIONS_OVERRIDE=prefill SUMMARY_RESULTS=0 bash scripts/analysis/tfidf.sh train
POSITIONS_OVERRIDE=prefill SUMMARY_RESULTS=0 bash scripts/analysis/probe_metrics.sh
bash scripts/analysis/report.sh
run.sh๋ ์์ฑยท์ถ์ถยทํ์ต์ ์์ํ์ง ์๋๋ค. ํ์ํ ๋ชจ๋ธ์ด ์์ผ๋ฉด ์ค๋น ๋ช
๋ น์ ์๋ดํ๋ฉฐ ์คํจํ๋ค.
refusal_probe.sh๋ ํธํ๋๋ ๊ธฐ์กด ๋ชจ๋ธ์ ์ฌ์ฌ์ฉํ๊ณ ๋๋ฝ๋ ์์น๋ง ํ์ตํ๋ค.
TF-IDF๋ ์๋ฃ๋ ์์น๋ฅผ checkpointํด ์ค๋จ ํ ์ฌ๊ฐํ ์ ์๋ค.
# ๋ช
๋ น๋ง ํ์ธ: ๋ชจ๋ธ ๋ก๋ยทํ์ผ ์์ฑ ์์
DRY_RUN=1 bash scripts/analysis/run.sh
# ์ธ ๋๊ตฌ์ ๊ณตํต ์ ์ฉํ ์์น ์ ํ (๊ธฐ๋ณธ๊ฐ: prompt_end,reasoning_start,prefill,thinking)
POSITIONS_OVERRIDE=prefill bash scripts/analysis/refusal_probe.sh
POSITIONS_OVERRIDE=prefill bash scripts/analysis/tfidf.sh train
POSITIONS_OVERRIDE=prefill bash scripts/analysis/fisher.sh
# ๋ณ๋ length ์คํ๊ณผ ํ๊ฐ
bash scripts/analysis/length_probe.sh
TASKS_OVERRIDE=length bash scripts/analysis/probe_metrics.sh
MODELS_OVERRIDE, DATASETS_OVERRIDE๋ ์ผํ๋ก ๊ตฌ๋ถํ๋ค. ์ง์ ๋ชจ๋ธ์
Qwen3-8B, Olmo-3-7B-Think, Phi-4-Reasoning, GPT-OSS-20B๋ค.
์ฃผ์ ์ค์ ์ OUTPUT_ROOT, RUN_TAG, PROBE_TAG, SEED, SPLIT_SEED,
THINKING_POSITIONS=100, BOOTSTRAP=1000, PLOT_RESULTS=1, PLOT_FORMAT=pdf๋ค.
์ธ ๋ฐฉ๋ฒ์ ๋ฒ์๋ฅผ ํจ๊ป ๋ฐ๊ฟ ๋๋ POSITIONS_OVERRIDE๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ๋ณ ์ ํ์ธ FISHER_POSITIONS_OVERRIDE, CLASSIFICATION_POSITIONS_OVERRIDE,
TFIDF_POSITIONS_OVERRIDE๋ ํด๋น ์คํฌ๋ฆฝํธ์์ ๊ณตํต ์ ํ๋ณด๋ค ์ฐ์ ํ๋ค.
first_thinking์ ๊ธฐ์กด ๊ฒฐ๊ณผ ํธํ์ ์ํ ๋ณ๋ ์ ํ์ผ๋ก ์ ์งํ๋ค.
์ ์ฒด prompt baseline์ TEXT_SOURCES_OVERRIDE=prompt bash scripts/analysis/tfidf.sh train์ผ๋ก ์คํํ๋ค.
์ข
ํฉ ๋ณด๊ณ ์๋ ์ ํํ ๋ถ๋ถ ์คํ๊ณผ ๊ด๊ณ์์ด ๋ค ๊ณตํต ๋ฒ์ฃผ ์ ์ฒด๋ฅผ ๋น๊ตํ๊ณ ๋๋ฝ๋ ๋ถ์์ ํ์ํ๋ค.
Figure 4: thinking๊ณผ no-thinking ๋น๊ต
Figure 4์ think/no-think ๋น๊ต ์คํ์ bash scripts/analysis/flip_ratio.sh๋ก ์คํํ๋ค.
๊ธฐ๋ณธ ๋ชจ๋ธ์ Qwen3-8B์ด๋ฉฐ, OlmoยทPhiยทGPT-OSS๋ MODELS_OVERRIDE๋ก ์ ํํ ์ ์๋ค.
์คํฌ๋ฆฝํธ ์๋จ์์ ๋ชจ๋ธยทKยทํ ํฐ ์์ฐยท์์ฑ/ํ์ batch๋ฅผ ์์ ํ๋ฉฐ, ์คํ ์ ์ ์ฉ๋ ์ค์ ๊ณผ ์ถ๋ ฅ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
5๊ฐ ์ฃผ ํ๊ฐ ๋ฐ์ดํฐ์ 5,385๊ฐ ์ง๋ฌธ์ ์กฐ๊ฑด๋ณ K=32 ์์ฑ โ ๋ค guard ํ์ โ ์ง๋ฌธ๋ณ flip PDF๋ฅผ ๋ง๋ ๋ค.
์คํยท์ฌ๊ฐ ๋ฐฉ๋ฒ๊ณผ ์๋ณธ ๋๋น ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ค.
CoT ๋ฌธ์ฅ ๋ถ๋ฅ์ PDF
self_jailbreak.sh๋ self_jailbreak.pdf Figure 6์ ๋ฌธ์ฅ ์ฃผ์์ ์ฐธ๊ณ ํ ๋ณ๋ ๋ถ๋ฅ๋ค.
**Ethical Awareness(์ด๋ก), Self-jailbreaking(์ฃผํฉ), Starting to comply(๋ณด๋ผ),
Back-and-Forth reasoning(ํ์)**์ ํ์ํ๋ค. Projection์ด๋ source model์ forward๋ ์ํํ์ง ์๋๋ค.
๊ธฐ๋ณธ ์
๋ ฅ์ ๊ธฐ์กด Qwen3-8B / think_token / refusal ์์ฑ๋ฌธ์ด๋ฉฐ,
MODELS_OVERRIDE๋ก ๋ค๋ฅธ ๋ชจ๋ธ์ ์ ์ฅ๋ ์์ฑ๋ฌธ์ ์ ํํ ์ ์๋ค.
ํ์ ๋ชจ๋ธ์ mistralai/Mixtral-8x7B-Instruct-v0.1, B200 1์ฅ ๊ธฐ์ค BF16, ์์ํ ์์์ด๋ค.
๊ธฐ๋ณธ judge batch๋ 8, ๋ฌธ๋งฅ ํ๋๋ 32,768 tokens, ํ ๋ฒ์ ๋ถ๋ฅํ ๋ฌธ์ฅ์ 24๊ฐ๋ค.
์ต์ข
๋ต๋ณ์ ํ์ ํ๋กฌํํธ์ ๋ฃ์ง ์๊ณ ์๋ ์ง๋ฌธ๊ณผ CoT ๋ฌธ๋งฅ์ผ๋ก ๋ถ๋ฅํ๋ค.
์ ์ยท์์ยทํ์ฉ label ์ถ๋ ฅ ์ ์ฝ์ ์ฌ์ฉํ๋ฉฐ, ์ ๋
ผ๋ฌธ์ GPT-5 ํ์ ์ฑ๋ฅ์ ์ฌํํ๋ค๊ณ ๊ฐ์ ํ์ง ์๋๋ค.
# ํ์ ํ๊ฒฝ: requirements-vllm.txt + ์ถ๊ฐ ์์กด์ฑ
python -m pip install -r requirements-self-jailbreak.txt
# PYTHON_BIN / VLLM_PYTHON_BIN์ด ์๋ก ๋ค๋ฅด๋ฉด ๋ ํ๊ฒฝ์ ์ถ๊ฐ ์์กด์ฑ์ ์ค์นํ๋ค.
DRY_RUN=1 bash scripts/analysis/self_jailbreak.sh
# ๋จผ์ 5๊ฐ ์์ฑ๋ฌธ์ ๋ถ๋ฅ์ PDF๋ฅผ ํ์ธ
SELF_JAILBREAK_LIMIT=5 bash scripts/analysis/self_jailbreak.sh
# ์ ์ฒด ์
๋ ฅ์ผ๋ก ํ์ฅ: ์ด๋ฏธ ์ฑ๊ณตํ 5๊ฐ ํ์ ์ ์ฌ์ฌ์ฉ
bash scripts/analysis/self_jailbreak.sh
# ์ ์ฅ๋ ํ์ ์ผ๋ก PDF๋ง ์ฌ์์ฑ: ๋ชจ๋ธ ๋ก๋ ์์
bash scripts/analysis/self_jailbreak.sh pdf
# harmful ์ง๋ฌธ๋ง ์ ํํ๊ฑฐ๋ ๋ชจ๋ธ ๋ณ๊ฒฝ
SELF_JAILBREAK_INTENT=harmful SELF_JAILBREAK_LIMIT=20 bash scripts/analysis/self_jailbreak.sh
MODELS_OVERRIDE=Phi-4-Reasoning bash scripts/analysis/self_jailbreak.sh
์ถ๋ ฅ์ ๊ฐ run์ analysis/self_jailbreak/mixtral_instruct/ ์๋์ ์ ์ฅํ๋ค.
annotations.jsonl์ ์๋ฌธยท๋ฌธ์ฅ offsetยท๋ฒ์ฃผยทํ์ ์ํยท์๋ณธ judge ์ถ๋ ฅ์,
summary.json์ ์ ํ ๋ฒ์์ ์ฑ๊ณต/์คํจ ์๋ฅผ ๋ด๋๋ค.
pdf/์๋ ์ง๋ฌธยท์์น ํ CoTยท์ต์ข
๋ต๋ณ์ ํฌํจํ๋ ์๋ต๋ณ PDF์ index.tsv๋ฅผ ๋ง๋ ๋ค.
records/๋ ์๋ต๋ณ ์ฌ๊ฐ์ฉ checkpoint๋ค. ์
๋ ฅ ์๋ฌธ๊ณผ ์์ฑ ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝํ์ง ์๋๋ค.
๋ฌธ์ฅ๋ง๋ค ์ฃผ๋ ๋ฒ์ฃผ ํ๋๋ฅผ ํํ๋ฉฐ ๊ฒน์น๋ฉด B โ C โ A โ D ์์๋ก ์ ํํ๋ค.
๋ฏธํด๋น(O)ยทํ์ ๋ถํ์ค(U)์ ๋ฌด์์ด๊ณ , ์ฒ๋ฆฌ ์คํจ๋ ๋ณ๋๋ก ํ์ํ๋ค.
Self-jailbreaking์ ๋จ์ํ maybe/๊ต์ก ์ธ๊ธ์ด๋ ์์ ํ ๋์ ์ ์๋ง์ผ๋ก ํ์ ํ์ง ์์ผ๋ฉฐ,
Back-and-Forth๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ์ด ๋ฌธ์ฅ์ ์์ฌ ๋ฒ์ฃผ๊ฐ ์๋๋ค.
Punkt์ ๊ณ ์ ์ฝ์ด ๊ท์น์ ์ ์ฉํด ๋ฌธ์ฅ offset์ ๋ณด์กดํ๊ณ ๋ณ๋์ NLTK ๋ฐ์ดํฐ ๋ค์ด๋ก๋๋ ํ์ง ์๋๋ค.
์์ ํ CoT๊ฐ ๋ฌธ๋งฅ์ ๋ค์ด๊ฐ์ง ์์ผ๋ฉด ์๋ ์ง๋ฌธ๊ณผ ๋์ ๋ฌธ์ฅ์ ์ ์งํ ์ฃผ๋ณ ๋ฌธ๋งฅ์ ์ฌ์ฉํ๊ณ ์ด๋ฅผ ๊ธฐ๋กํ๋ค.
์ง๋ฌธ+๋์ ๋ฌธ์ฅ ์์ฒด๊ฐ ๋๋ฌด ๊ธธ๋ฉด ์๋ผ๋ด์ง ์๊ณ context_overflow๋ก ๋จ๊ธด๋ค.
์ฃผ์ ์ค์ ์ SELF_JAILBREAK_BATCH_SIZE, SELF_JAILBREAK_WINDOW_SENTENCES,
SELF_JAILBREAK_LIMIT, SELF_JAILBREAK_RECORD_ID, SELF_JAILBREAK_INTENT๋ค.
๋ณ๋ ์
๋ ฅ/์ถ๋ ฅ์ SELF_JAILBREAK_RECORDS, SELF_JAILBREAK_DIR,
๋ก์ปฌ judge๋ SELF_JAILBREAK_MODEL_PATH, snapshot ๊ณ ์ ์ SELF_JAILBREAK_REVISION์ผ๋ก ์ง์ ํ๋ค.
ํ์ ์ค์ ์ ๋ฐ๊พธ๋ฉด ์ SELF_JAILBREAK_TAG๋ฅผ ์ฌ์ฉํ๋ค. Limit์ด๋ intent๋ง ๋ฐ๊พธ๋ ๊ฒ์ ๊ฐ์ ํ์ ์ ์ฌ์ฌ์ฉํ๋ฉฐ,
annotations.jsonlยทsummary.jsonยทPDF index๋ ํด๋น ์คํ์ ์ ํ ๋ฒ์๋ก ๊ฐฑ์ ๋๋ค.
PDF ๊ธฐ๋ณธ ๊ธ๊ผด์ DejaVu Sans์ด๋ฉฐ, ๋ค๋ฅธ Unicode TTF๋ SELF_JAILBREAK_PDF_FONT๋ก ์ง์ ํ๋ค.
์๋ ํ์ ์ ์ ํ๋๋ ์ค์ ์์ฑ๋ฌธ์ ๋ํ ์๋ ๊ฒ์ฆ์ด ํ์ํ๋ค.
Continuation variance
martingale.sh๋ Refusal Probe์ TF-IDF๊ฐ ๋ชจ๋ ํ๊ฐํ ๋์ผ ์ํ ์ค ์ ํํ fold
(MARTINGALE_FOLD=0, 0~4)๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ฅ๋ 122๊ฐ token ์ขํ๋ฅผ ๊ทธ๋๋ก ์ฝ์ผ๋ฉฐ probe ์์ธก์ ์ฌ์ฉํ์ง ์๋๋ค.
Y๋ ์ต์ข
๋ต๋ณ์ ๋ํ 4๊ฐ guard์ ๊ฑฐ์ ๋ค์๊ฒฐ label์ด๋ค. ์ข
๋ฃ ์์ ์ ๋ต๋ณยทlabel๊น์ง ํฌํจํด
M_t = E[Y | x, z_1:t], V_t = Var(Y | x, z_1:t)๋ฅผ ์ถ์ ํ๋ค.
๊ฐ prefix์์ K๊ฐ continuation์ samplingํ๊ณ ๊ฐ๊ฐ์ ๋ค์ ํ์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ K=8์ด๋ค. ํ๊ท ์ refusal ๋น์จ,
๋ถํธ ๋ถ์ฐ ์ถ์ ๋์ K/(K-1) * p_hat*(1-p_hat)์ด๋ค. 95% ๊ตฌ๊ฐ์ ์ ํ ์ดํญ ๊ตฌ๊ฐ์ ๋ถ์ฐ์ผ๋ก ๋ณํํ๋ค.
MC๋ง ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค. ์ ํํ ๊ณ์ฐ์ p_t = sum_u pi_ref(u | x, z_1:t) * 1[guard(u)=refusal],
V_t = p_t*(1-p_t)๋ค. ํน์ output์ likelihood ํ๋๋ก๋ ๋ชจ๋ refusal output์ ํ๋ฅ ํฉ์ ๊ณ์ฐํ ์ ์๋ค.
ํ๋ณด ์ผ๋ถ๋ง ํฉ์ฐํ๋ฉด ๋๋ฝ๋ ํ๋ฅ ์ง๋์ด ๋จ๊ณ , ์กฐ๊ฑด๋ถ label ์์ธก ๋ชจ๋ธ์ ์ฐ๋ฉด ๋ชจ๋ธ์ ๊ทผ์ฌ ์ค์ฐจ๊ฐ ์๊ธด๋ค.
๋ค์ ํ ํฐ entropyยท1-sum(p_token**2)๋ ์์ฑ ์์ด ๊ณ์ฐ ๊ฐ๋ฅํ ๋ค๋ฅธ ์ธก์ ๋์์ด๋ค.
# ๊ธฐ๋ณธ ๋ชจ๋ธ/๊ฒฝ๋ก๋ common.sh์์ ์์. ์๋ณธ ์คํ์ ์์ฑยท๋ผ๋ฒจยท๋ ๋ฐฉ๋ฒ์ ํ๊ฐ๊ฐ ๋จผ์ ์๋ฃ๋์ด์ผ ํ๋ค.
export MARTINGALE_FOLD=0
export MARTINGALE_ROLLOUTS=8
bash scripts/analysis/martingale.sh plan # ์ํยท์ขํ ๊ฒ์ฆ, ๊ณ ์ prefix์ ์คํ๋ ์ถ๋ ฅ; ๋ชจ๋ธ ๋ก๋ ์์
bash scripts/analysis/martingale.sh generate # ํด๋น prefix์์ ๋จ์ budget์ผ๋ก continuation ์์ฑ
bash scripts/analysis/martingale.sh label # ์๋ณธ๊ณผ ๊ฐ์ 4๊ฐ guard snapshotยทํ์ ์ค์ , ์ดํ ๋ค์๊ฒฐ label ์ ์ฅ
bash scripts/analysis/martingale.sh measure # ์ ์ฅ๋ label๋ง ์ฝ์ด sample ร position ๋ถ์ฐยท์์น๋ณ ์ง๊ณ
# bash scripts/analysis/martingale.sh mc-run # ์ ๋ค ๋จ๊ณ๋ฅผ ์์๋๋ก ์คํ
PYTHON_BIN์ ๊ณํยท์ง๊ณ, VLLM_PYTHON_BIN์ ์์ฑยทguard ํ๊ฐ์ ์ฌ์ฉํ๋ค.
common.sh์ ๋ชจ๋ธยท๋ฐ์ดํฐยท๊ฒฝ๋กยทGPUยทbatch ์ค์ ์ ๋ฐ๋ฅด๋ฉฐ, ํ๋ฅ ์ reference ์ ์ฑ
์ ์๋ณธ run.json์
model snapshotยทtemperature/top-p/top-kยท์์ฑ budget์ผ๋ก ๊ณ ์ ํ๋ค. ์์ฑ ๋ฐ guard์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๋ ๊ฒ์ฌํ๋ค.
Greedy reference๋ ๋์ผ prefix์ ๋ถ์ฐ์ด 0์ด๋ฏ๋ก sampling ์คํ์ ์๊ตฌํ๋ค. Guard ์์ฒด๋ ์๋ณธ๊ณผ ๊ฐ์ด ๊ฒฐ์ ์ ์ผ๋ก ํ์ ํ๋ค.
- ๊ธฐ๋ณธ ๋ฒ์๋ ์ ํํ fold ์ ์ฒด์ 122๊ฐ ์์น๋ค.
MARTINGALE_LIMIT์ ์ ํ fold ์์ N๊ฐ ์ํ,POSITIONS_OVERRIDE๋ ์์น ๋ฒ์ฃผ๋ฅผ ์ ํํ๋ค. ์ค์ ๋ณ๊ฒฝ์MARTINGALE_TAG๋ก ๊ตฌ๋ถํ๋ค. F_t = sigma(x, z_1:t)์์ ์ ์ฒด x๊ฐ ์ด๋ฏธ ์๋ ค์ ธ ์์ผ๋ฏ๋ก prefill 20๊ฐ์ t_post๋ ๊ฐ์ ๊ฐ์ ๊ณต์ ํ๋ค. ๊ฐ์ prefix๋ฅผ ๊ฐ๋ฆฌํค๋ ์์น๋ ์์ฑยทํ์ ์ ์ฌ์ฌ์ฉํ๋ค. Prompt๋ฅผ ์๋ผ ๋ค๋ฅธ ์ง๋ฌธ์ ๋ง๋ค์ง ์๋๋ค.- Trace ์์น๋ ์๋ณธ ์ ์ฒด ๊ธธ์ด๋ก ์ ํ ์ฌํ ์ขํ๋ค. ์ continuation์๋ ์๋ณธ์ ๋ฏธ๋ tokenยท์ข ๋ฃ ๊ธธ์ด๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ์ด 100๊ฐ ์ขํ๋ฅผ stopping time์ด๋ ์ฐ์ํ 1-token step์ผ๋ก ์ทจ๊ธํ์ง ์๋๋ค.
- ๋ ๋ฆฝ์ ์ธ MC ์ถ์ ๊ฐ์ ์ฐจ์ด๋ฅผ martingale innovation์ผ๋ก ํด์ํ์ง ์์ผ๋ฉฐ Doob ๋ถํด ๊ฒ์ฆ์ ๋ณ๋๋ค.
- K๊ฐ ์ค guard label์ด ํ๋๋ผ๋ ๋๋ฝ๋๋ฉด ๊ทธ prefix์ ๋ถ์ฐ์ ๋น์ ๋๋ค. ํ์ ์คํจ๋ฅผ ๋น๊ฑฐ์ ๋ก ๋ฐ๊พธ์ง ์๋๋ค. ์์น๋ณ ํ๊ท ๊ณผ, ๋๋ฝ์ด ์๋ ๊ฒฝ์ฐ์ complete-case ํ๊ท ์ ๊ตฌ๋ถํ๋ค.
- prefix๋ณ ๊ฒฐ๊ณผ๋ฅผ atomic shard๋ก ์ ์ฅํ๋ค. ์ค๋จ ํ ์๋ฃ๋ prefix๋ฅผ ์ฌ์ฌ์ฉํ๋ฉฐ ํ ๋ฒ์ ์ ์ฒด continuation์ ๋ฉ๋ชจ๋ฆฌ์ ์ฝ์ง ์๋๋ค.
๊ฒฐ๊ณผ๋ analysis/martingale/<probe run>/<dataset>/<probe tag>/<martingale tag>/fold0_k8/์ ์ ์ฅํ๋ค.
plan.json์ ์๋ณธ ํ๊ฐยท์ ์ฑ
ยทsample IDยท์ขํ, generations/ยทguardrails/ยทlabels/๋ ์ค๊ฐ ๊ฒฐ๊ณผ,
samples.tsv๋ ์ํ๋ณ ๋ถ์ฐยท95% CI, positions.tsv๋ ์์น๋ณ ์ง๊ณ, variance.jsonยทREADME.md๋ ์์ฝ์ด๋ค.
MARTINGALE_DIR๋ก ์ถ๋ ฅ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์๋ค. ์ผ๋ฐ ๋ถ์ run.sh๋ ์ด ์ถ๊ฐ ์์ฑ ์์
์ ์คํํ์ง ์๋๋ค.
์ํ์ ์กฐ๊ฑด๊ณผ predictable quadratic variation์ Etheridge, ยง5.15โ5.16์ ์ฐธ๊ณ ํ๋ค.
๋ฐ์ดํฐยทํ๊ฐ ์ ์
think_token: harmful 2,500๊ฐ + benign 6,750๊ฐ = 9,250๊ฐ ์ง๋ฌธ. WildJailbreakยทFORTRESSยทOR-Bench-HardยทFalseRejectยทCoCoNot์ ๊ณต๊ฐ manifest์ revision/checksum์ ๊ณ ์ ํ PHTestยทORFuzzSet์ ์ฌ์ฉํ๋ค.OFFLINE=1์ ์ ์ฅ ์๋ณธ๋ง ์ฌ์ฉํ๋ค.- Refusal label์ ์ต์ข ๋ต๋ณ์ ๋ํ WildGuardยทQwen3GuardยทGranite GuardianยทGPT-OSS Safeguard์ ํ์ ์ด๋ค. 4๊ฐ ๋ชจ๋ ์ ํจํ๊ณ 3๊ฐ ์ด์ ๊ฑฐ์ ์ด๋ฉด 1, 2:2๋ฅผ ํฌํจํ ๋๋จธ์ง๋ 0, ๋๋ฝยทํ์ฑ ์คํจ๋ ์ ์ธํ๋ค. Harmful/benign์ ์ง๋ฌธ์ intent์ด๋ฉฐ ์ ๋ต label๊ณผ ๋ค๋ฅด๋ค.
- ์ง๋ฌธ๋น refusal ์์ฑ 1ํ, thinking budget 16,384, final-answer budget 1,024. Budget์ผ๋ก thinking์ ๊ฐ์ ์ข ๋ฃํ ๋ต๋ณ๋ ์ ํจํ๋ฉด refusal ๋ถ์์ ํฌํจํ๋ค.
cohort.json์ ๊ณตํต eligible IDยท์ ๋ตยทfold๋ฅผ ๊ณ ์ ํ๋ค. ๊ฐ์ raw prompt๋ ๊ฐ์ fold์ ๋ฐฐ์นํ๋ค. ์์น๋ณ feature ๋๋ฝ์ ์ค๋ฅ์ด๋ฉฐ, ๋ฐฉ๋ฒ๋ง๋ค ํ๋ณธ์ ์์๋ก ์ค์ด์ง ์๋๋ค.- Hidden probe: fold์ ํ์ต ํ๋ณธ์๋ง fitํ
StandardScaler โ PCA(์ต๋ 100์ฐจ์) โ LogisticRegression(C=0.03, class_weight=balanced). TF-IDF๋ vectorizerยทclassifier๋ฅผ fold๋ณ๋ก fitํ๋ฉฐ ๊ฐ์ Logistic Regression ์ค์ ์ ์ด๋ค. ๋ ๋ถ๋ฅ ๋ฐฉ๋ฒ์ ๊ฐ๊ฐ 122๊ฐ ์์น ร 5๊ฐ fold ๋ชจ๋ธ = 610๊ฐ ๋ชจ๋ธ์ ์ ์ฅํ๋ค. Backbone์ frozen์ด๋ค. - OOF๋ ํด๋น ์ง๋ฌธ์ ํ์ตํ์ง ์์ fold ๋ชจ๋ธ์ ์์ธก์ด๋ค. ์ ์ฒดยทharmfulยทbenign๋ณ AUROC/BAcc์ ์ง๋ฌธ bootstrap 1,000ํ์ ์์น๋ณ 95% CI๋ฅผ ๋ณด๊ณ ํ๋ค. BAcc ์๊ณ๊ฐ์ ๋ค๋ฅธ fold์ OOF ์์ธก์์ ๊ตฌํ Youden cutoff๋ค. Nested calibration์ ์๋๋ค.
- Fisher: ์ขํ๋ณ z-score ํ
||ฮผโโฮผโ||ยฒ / (tr ฮฃโ + tr ฮฃโ), population covariance(ddof=0). ๋ถ๋ฅ๊ธฐ์ ์ผ๋ฐํ ์ฑ๋ฅ๊ณผ ๊ตฌ๋ถํ๋ค. ์ ์ ๋ถ๊ฐ ์งํ๋null/โ๋ก ํ์ํ๋ค. - Length๋ ๋ณ๋ cohort๋ค. ์์ฐ ์์ฑ 8ํ ์ค ํ๋๋ผ๋ ์๋ฆฌ๋ฉด ์ง๋ฌธ ์ ์ฒด๋ฅผ ์ ์ธํ๋ค.
Target์ marker๋ฅผ ์ ์ธํ๊ณ ๊ณต๋ฐฑ์ ํฌํจํ body token ์์ ํ๊ท ์ด๋ค.
Marker ํํ์ ํ์คํ/PCA ์์ด
Lasso(alpha=10)๋ฅผ ์ ์ฉํ๊ณ MSEยทRยฒยทSpearman์ ๋ณด๊ณ ํ๋ค.
๊ฒฐ๊ณผ ๊ตฌ์กฐ
OUTPUT_ROOT ๊ธฐ๋ณธ๊ฐ์ ํ๋ก์ ํธ ์ rlm_result/๋ค. ์ ์ฅ ์์น๋ ๊ฒฐ๊ณผ ์ข
๋ฅ๋ณ๋ก ๊ตฌ๋ถํ๋ค.
์ค์ ์ ์ฅ๋ ์คํ์ ๊ฒฝ๋ก์ ์ด์ ๊ฒฝ๋ก์ ์ฐ๊ฒฐ ๊ด๊ณ๋ ../rlm_result/README.md์
../rlm_result/RESULT_LAYOUT.json, ์ข
ํฉ ๋ณด๊ณ ์๋ REPORTS.md์์ ์ฐพ๋๋ค.
rlm_result/
probes/<run>/.../default/refusal/ # hidden/TF-IDF ํ์ต ๊ฐ์ค์นยทmanifest
analysis/
fisher/<run>/.../ # ์์น๋ณ Fisher JSON/TSV/๊ทธ๋ฆผ
probe_metrics/<run>/.../ # ์ ์ฅ๋ hidden probe ํ๊ฐ
tfidf/<run>/.../ # ์ ์ฅ๋ TF-IDF probe ํ๊ฐ
flip_ratio/<run>/<tag>/ # paired think/no-think ์์ฑยทํ์ ยทASR/ORR/flip
task_mc/<run>/.../ # reasoning prefix continuation ํ๊ฐ
reasoning/<experiment>/<model>/<dataset>/ # AIME24/MATH500/HumanEval+/GPQA
baseline/<method>/<model>/<experiment>/ # ํ์ต ๊ฒฐ๊ณผ์ checkpoint
runs/<run>/<dataset>/<model>/<task>/seed42_k1/
generations.jsonl, labels.jsonl, cohort.json
features_refusal/, guardrails/, logs/
reports/analysis/<run>/.../ # summary.json, metrics.tsv, comparison.tsv, ๊ทธ๋ฆผ
reports/<report-name>/ # ์ข
ํฉ HTML ๋ณด๊ณ ์
launches/<experiment>/ # Slurm ์ค์ ยท์ํยท๋ก๊ทธยท์ฌ์์ ๊ธฐ๋ก
datasets/ # ๊ณ ์ ํ๊ฐยท๋ถ์ ๋ฐ์ดํฐ
REPORTS.md # ์ข
ํฉ ๋ณด๊ณ ์ ์ธ๋ฑ์ค
์๋ณธ ์์ฑยทfeatureยทweight๋ ์ ์งํ๋ค. ์ข
ํฉ ๋ณด๊ณ ์๋ ํ๋ณธยทfoldยทposition grid์ probe checksum์
๊ฒ์ฆํ๋ฉฐ, ๋ค๋ฅธ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ์๊ฑฐ๋ ๋๋ฝ ๊ฐ์ 0์ผ๋ก ์ฑ์ฐ์ง ์๋๋ค.
RUN_TAG๋ ์คํ, PROBE_TAG๋ probe ์ค์ ์ ๊ตฌ๋ถํ๋ค. ์ค์ ์ ๋ฐ๊ฟ ๋ ์ tag๋ฅผ ์ฌ์ฉํ๋ค.
๊ธฐ์กด tag main, jbw-rlm-star1, jbw-rlm-rapo, jbw-rlm-thinksafe์ ์ ์ฅ ํด๋ ์ด๋ฆ์
๊ฐ๊ฐ qwen3, star1, rapo, thinksafe๋ก ์ ๊ทํํ๋ค. tag ์์ฒด์ ๊ธฐ์กด manifest ๋ด์ฉ์ ๋ฐ๊พธ์ง ์๋๋ค.
RESULT_LAYOUT=legacy๋ ๊ธฐ์กด run ๋ด๋ถ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค. ๋ช
์์ ์ธ RUN_DIR๋ ๊ธฐ์กด ๋ด๋ถ ๋ถ์ ๊ฒฝ๋ก๋ฅผ
์ ์งํ๋ฉฐ, FISHER_DIR, PROBE_METRICS_DIR, TFIDF_RESULTS_DIR, SUMMARY_DIR๋ก ๊ฐ๊ฐ ์ง์ ํ ์ ์๋ค.
์ด๋ฏธ ์งํ ์ค์ธ ํ๊ฐ์ checkpoint๋ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ์งํ๋ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ค. ์ด์ ๊ฒฝ๋ก์ ์ฐ๊ฒฐ์
๋ณด๊ณ ์์ ์ฌ์์ ์ฐธ์กฐ์ ํ์ํ๋ฏ๋ก ์์๋ก ์ญ์ ํ์ง ์๋๋ค. ์ ์คํ์ ์ ๋ถ๋ฅ๋ณ ๊ฒฝ๋ก์ ์ ์ฅํ๋ค.
์ธ๋ถ ๋ฐ์ดํฐ ํ๊ฐ๋ ์ค๋น๋ records/features/labels์ ๋ํด
EVAL_SCOPE=external PROBE_DATASET=<ํ์ต dataset> bash scripts/analysis/probe_metrics.sh๋ก ์คํํ๋ค.
ํ์ต ์ง๋ฌธ๊ณผ ๊ฒน์น๋ฉด ์ค๋ฅ์ด๋ฉฐ, 5๊ฐ fold ๋ชจ๋ธ์ ํ๊ท ์์ธกยทํ๊ท cutoff๋ฅผ ์ฌ์ฉํ๋ค.
TF-IDF์ ๊ณตํต ๋น๊ต ๋ณด๊ณ ์๋ OOF ํ๊ฐ๋ฅผ ๋์์ผ๋ก ํ๋ค.
๊ฒ์ฆ: python -m pytest. ์์นยทfoldยท์บ์ยทํ์ต/ํ๊ฐ ๋ถ๋ฆฌยท๋ณด๊ณ ์ ์ฌํ์ฑ์ CPU ํฉ์ฑ ๋ฐ์ดํฐ๋ก ๊ฒ์ฌํ๋ค.
Task ๋ฐ์ดํฐ์ : probe ์๋ continuation ์ธก์
scripts/analysis/task_mc.sh๋ ๊ฐ์ prompt์ ์ถ๋ก prefix์์ ์ด์ด ์์ฑํ์ ๋์ ์ ๋ต ํ๋ฅ ์ ์ธก์ ํ๋ค.
Hidden-state ์ถ์ถ, probe ํ์ต, TF-IDF, 5-fold ์ค๋น๊ฐ ํ์ ์๋ค. ๊ธฐ๋ณธ ์ธก์ ๊ฐ์ ์ ๋ต ํ๋ฅ ยท์ด์ง ๋ถ์ฐ๊ณผ
๋จ์ thinking token ์์ ํ๊ท ยท๋ถ์ฐ์ด๋ค. TASK_REFUSAL=1์ด๋ฉด ๋์ผ continuation์ ๊ฑฐ์ ํ๋ฅ ยท๋ถ์ฐ๋ ๊ณ์ฐํ๋ค.
๋ชจ๋ธยท๋ฐ์ดํฐ์
ยท์๋ณธ ์์ฑยทMCยท์คํ ์์ ์ค์ ์ scripts/analysis/task_mc.sh ์๋จ์ ๋ชจ์ ๋์๋ค.
TASK_MODELS/TASK_DATASETS ๋ฐฐ์ด์ ํธ์งํ๊ฑฐ๋ MODELS_OVERRIDE/DATASETS_OVERRIDE ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
ํ๊ฒฝ๋ณ์๊ฐ ์ฐ์ ํ๋ฉฐ, ์คํ ์ ์ ์ฉ๋ ๋ชจ๋ธยท๋ฐ์ดํฐ์
ยทlimitยทํ๊ทธยท๊ฒฉ์ ํฌ๊ธฐยทK๋ฅผ ์ถ๋ ฅํ๋ค.
| ๋ฐ์ดํฐ ์ด๋ฆ | ๊ณ ์ ์๋ณธ | ๋ฌธํญ ์ | ์ ๋ต ์ฑ์ |
|---|---|---|---|
aime24 |
HuggingFaceH4/aime_2024 | 30 | ์ต์ข ์ ์ exact match, ์์ 0 ์ ๊ทํ |
math500 |
HuggingFaceH4/MATH-500 | 500 | Math-Verify 0.9.0 ๋์น์ฑ |
humaneval_plus |
EvalPlus HumanEvalPlus v0.1.10 | 164 | EvalPlus base + full plus ํ ์คํธ ๋ชจ๋ ํต๊ณผ |
omni_math_rule |
๊ณต์ Omni-MATH-Rule subset | 2,821 | Math-Verify 0.9.0 ๋์น์ฑ |
์๋ณธ revisionยทSHA256์ ๊ณ ์ ํ๋ค. Omni-Math-Rule์ ์ ์ฒด Omni-MATH์ ๋ค๋ฅธ subset์ด๋ฉฐ,
์ฌ๊ธฐ์๋ ๊ณตํต Math-Verify ์ฑ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ ๋
ผ๋ฌธ์ Qwen grader ์ ์์ ๋์ผํ ํ๋กํ ์ฝ์ ์๋๋ค.
์๋ณธ์ ์ค๋ณต ๋ฌธ์ ๋ ํ๋ณ ID๋ก ์ ์งํ๋ค. ์ ๋ตยทreference solutionยท๋น๊ณต๊ฐ ํ
์คํธ๋ ๋ชจ๋ธ prompt์ ๋ฃ์ง ์๋๋ค.
์ํ prompt๋ \boxed{} ์ต์ข
๋ต์, ์ฝ๋ prompt๋ import์ ํจ์ ์ ์๋ฅผ ํฌํจํ ์ ์ฒด Python ๊ตฌํ์ ์์ฒญํ๋ค.
์ํ ์ฑ์ ์ ์ต์ข
answer์ ๋ง์ง๋ง boxed ์ ๋๋ ์ซ์๋ง์ธ ๋ต์ ์ฌ์ฉํ๋ค. Thinking ์์ ์์ ์ฑ์ ํ์ง ์๋๋ค.
conda activate rlmexp
python -m pip install -r requirements-tasks.txt
export PYTHON_BIN=python
export MODELS_OVERRIDE=Qwen3-8B
export DATASETS_OVERRIDE=aime24,math500,humaneval_plus,omni_math_rule
bash scripts/analysis/prepare_data.sh
# ๋จผ์ ์์ ์ํ ์คํ: source๋ ๋ฌธํญ๋น ์์ฐ ์์ฑ 1ํ
export DATASETS_OVERRIDE=aime24
export RUN_TAG=task_pilot
export LIMIT=3 # ์๋ณธ ์์ฑ ๋ฌธํญ ์; ์ ์ฒด ํ๊ฐ๋ unset LIMIT
export TASK_LIMIT=2 # ์๋ณธ 3๊ฐ ์ค ์ 2๊ฐ๋ฅผ MC๋ก ๋ถ์; ์ ์ฒด๋ unset TASK_LIMIT
export TASK_ROLLOUTS=8
export TASK_TAG=thinking100
export TASK_REFUSAL=1 # ์ธ ์ธก์ ๋ชจ๋; ์ ๋ต/๊ธธ์ด๋ง์ด๋ฉด 0
# ๋ณ๋์ position ์ง์ ์์ด thinking์ normalized position 100๊ฐ๋ฅผ ์ธก์
bash scripts/analysis/task_mc.sh source
bash scripts/analysis/task_mc.sh plan # ๊ณ ์ prefixยทcontinuationยทguard ํธ์ถ ์, GPU forward ์์
bash scripts/analysis/task_mc.sh generate
bash scripts/analysis/task_mc.sh score
bash scripts/analysis/task_mc.sh refusal # TASK_REFUSAL=1์ผ ๋
bash scripts/analysis/task_mc.sh measure
# ๊ฐ์ ์ค์ ์ผ๋ก ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ด์ด ์คํยท์ฌ๊ฐ: bash scripts/analysis/task_mc.sh run
# ๋ช
๋ น๋ง ํ์ธ: DRY_RUN=1 bash scripts/analysis/task_mc.sh run
๊ธฐ๋ณธ ๋ถ์ ๋ฒ์๋ reasoning trace ์์ normalized thinking position 100๊ฐ๋ค.
prefill, prompt_end, reasoning_start๋ ์ ์ธํ๋ค. ์์น๋ฅผ ํ๋์ฉ ์ง์ ํ ํ์๋ ์๋ค.
๊ฒฉ์๋ j / 99 (j=0,...,99)์ด๋ฉฐ, 0%๋ ์ฒซ ๋น๊ณต๋ฐฑ thinking ๋ณธ๋ฌธ ํ ํฐ ์งํ,
100%๋ ์๋ณธ์ ๋ง์ง๋ง ๋ณธ๋ฌธ ํ ํฐ ์งํ๋ค. Thinking ์์/์ข
๋ฃ marker๋ ๊ฒฉ์์ ๋ฃ์ง ์๋๋ค.
์งง์ trace์์ ์ฌ๋ฌ ๊ฒฉ์๊ฐ ๊ฐ์ ํ ํฐ์ ๊ฐ๋ฆฌํค๋ฉด ํด๋น prefix์ continuation์ ์ฌ์ฌ์ฉํ๋ค.
Thinking ๋ณธ๋ฌธ์ด ์๋ ์๋ณธ์ ์ธก์ ๊ฐ๋ฅํ ์์น๊ฐ ์์ผ๋ฉฐ plan์ ์ ์ธ ๊ฐ์์ ๊ธฐ๋ก๋๋ค.
TASK_THINKING_POSITIONS๋ก ๊ฒฉ์ ๊ฐ์๋ง ๋ฐ๊ฟ ์ ์๋ค. TASK_POSITIONS๋ ์ด์ ๋ค์ค ์์น ์คํ์ฉ ๊ณ ๊ธ override๋ก ๋จ๊ธด๋ค.
| ์ค์ | ์ ์ฉ ๋จ๊ณ / ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
LIMIT |
source: ๋ฐ์ดํฐ์
์ N๋ฌธํญ์ ๋ํด ์๋ณธ trace๋ฅผ 1๊ฐ์ฉ ์์ฑ |
๋น ๊ฐ = ์ ์ฒด ๋ฌธํญ |
TASK_LIMIT |
plan: ์ ์ฅ๋ ์๋ณธ trace ์ค ์ N๊ฐ๋ฅผ MC ๋์์ผ๋ก ์ ํ |
๋น ๊ฐ = ์ ์ฅ๋ ์๋ณธ ์ ์ฒด |
TASK_THINKING_POSITIONS |
trace๋ณ 0~100% ๊ฒฉ์ ๊ฐ์. ํน์ token index๋ ์์ฑ token budget์ด ์๋ | 100 |
TASK_ROLLOUTS |
๊ณ ์ prefix๋ง๋ค ๋ค์ ์์ฑํ continuation ๊ฐ์ K | 8 |
GENERATION_WINDOW |
์์ฑ ์์ฒญ์ ๋ฐฐ์น ํฌ๊ธฐ. MC์์๋ ์ฌ๋ฌ prefix์ continuation์ ํฉ์ณ ์ฑ์ | 64 |
MAX_NEW_TOKENS |
์๋ณธ reasoning + final answer์ ์ด ์์ฑ budget; continuation์ ๋จ์ budget์ ์ฌ์ฉ | 16384 |
SEED / SPLIT_SEED |
์๋ณธ ์์ฑยทengine seed / MC continuation sampling seed. Task MC์๋ fold split ์์ | ๊ฐ๊ฐ 42 |
RUN_TAG |
๋ชจ๋ธยท๋ฐ์ดํฐ์ ๋ณ ์๋ณธ ์์ฑ ์คํ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ | main |
TASK_TAG |
๊ฐ์ ์๋ณธ ์๋ MC ๋ถ์ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ | default |
์๋ฅผ ๋ค์ด LIMIT=100 TASK_LIMIT=10์ ์๋ณธ 100๊ฐ๋ฅผ ์์ฑํ๊ณ ๊ทธ์ค ์ 10๊ฐ๋ฅผ ๋ถ์ํ๋ค.
TASK_LMIT์ด๋ TASK_THINKING_POSITION์ด ์๋๋ผ TASK_LIMIT, **TASK_THINKING_POSITIONS**๊ฐ ์ค์ ๋ณ์๋ช
์ด๋ค.
์๋ณธ ๊ฒฝ๋ก๋ ์ ๋ต/๊ฑฐ์ ์ฌ๋ถ๋ก ์ ๋ณํ์ง ์๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒซ rollout์ ์ฌ์ฉํ๋ฉฐ
CLI task-plan --source-rollout์ผ๋ก ๊ธฐ์กด ๋ค์ค rollout ์ค ํ๋๋ฅผ ๊ณ ๋ฅผ ์ ์๋ค.
์ ์ฒด 3,515๋ฌธํญ ร 100๊ฐ ์์น ร K=8์ ๋ชจ๋ธ๋น ์ต๋ ์ฝ 281๋ง continuation์ด๋ฏ๋ก
plan์์ ์ค๋ณต prefix๋ฅผ ์ ๊ฑฐํ ์ค์ ํธ์ถ ์๋ฅผ ๋จผ์ ํ์ธํ๋ค.
์๋ณธ๊ณผ continuation ๋ชจ๋ natural ์์ฑ์ผ๋ก ์ต์ข
๋ต๊น์ง ์์ฑํ๋ค. ์๋ณธ run.json์ ์ ์ฅ๋
model snapshotยทsampling ์ค์ ยท์ ์ฒด token budget์ ์ ์งํ๊ณ ์ด๋ฏธ ์์ฑํ prefix ๊ธธ์ด๋ฅผ ๋จ์ budget์์ ์ฐจ๊ฐํ๋ค.
MAX_NEW_TOKENS ๊ธฐ๋ณธ๊ฐ์ 16,384์ด๋ฉฐ reasoning๊ณผ final answer๋ฅผ ํฉ์น budget์ด๋ค.
์๋ณธ ์์ฑยทprefix๋น continuationยท์ฑ์ ์ ๊ฐ๊ฐ ์ ์ฅ ํ ์ฌ์ฌ์ฉํ๋ค.
์๋ณธ ์์ฑ ์ค์ (LIMIT, budget, sampling ๋ฑ)์ ๋ฐ๊พธ๋ฉด ์ RUN_TAG๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ์ ์๋ณธ์ผ๋ก MC ๋์ ์ยท๊ฒฉ์ยทsampling seedยท๊ฑฐ์ ์ธก์ ์ฌ๋ถ๋ฅผ ๋ฐ๊พธ๋ฉด ์ TASK_TAG๋ฅผ ์ฌ์ฉํ๋ค.
K๋ ๋ณ๋์ k<K>/ ๋๋ ํฐ๋ฆฌ๋ก ๊ตฌ๋ถ๋๋ค. ๊ธฐ์กด ๋ค์ค ์์น plan์ ์ฌ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ TASK_TAG๋ก plan๋ถํฐ ์คํํ๋ค.
๋ชจ๋ธ๋ณ temperatureยทtop-pยทtop-k ๊ธฐ๋ณธ๊ฐ์ src/models.py์ ์์ผ๋ฉฐ, continuation์ ์๋ณธ run.json์ ๊ฐ์ ์ ์งํ๋ค.
PYTHON_BIN์ ๊ณํยท์ํ ์ฑ์ ยท์ง๊ณ, VLLM_PYTHON_BIN์ ๋ชจ๋ธ ์์ฑ๊ณผ guard ํ์ ํ๊ฒฝ์ด๋ค.
MC ์์ฑ์ ์ฌ๋ฌ prefix๋ฅผ ๋ชจ์ GENERATION_WINDOW๋งํผ์ ์์ฒญ์ ํ ๋ฒ์ vLLM์ ์ ์ถํ๋ค.
๊ธฐ๋ณธ K=8, GENERATION_WINDOW=64์ด๋ฉด ์ต๋ 8๊ฐ prefix์ 64๊ฐ continuation์ ๋ฌถ๋๋ค.
๊ฐ ์์ฒญ์ ์ ํํ prefixยทseedยท๋จ์ budget์ ์ ์งํ๋ค. vLLM์ ์ค์ ๋์ ์คํ ์๋ KV cache ์ฉ๋์๋ ์ํฅ์ ๋ฐ๋๋ค.
์๋ฃ๋ prefix๋ ์ฆ์ ๊ฐ๋ณ shard๋ก ์ ์ฅํ๋ค. ์ค๋จ ์ ์์ง ์ ์ฅ๋์ง ์์ ๋ฐฐ์น/๋ถ๋ถ prefix๋ง ๋ค์ ์์ฑํ๋ค.
๋ชจ๋ธ ์ด๊ธฐํ ํ prefix ์งํ๋ฅ ์ ์์ํ๋ฉฐ, ๋ฐฐ์น ๋ด๋ถ์ vLLM ์งํ๋ฅ ๊ณผ ๋ฐฐ์น๋ณ ์๊ฐยท์ถ๋ ฅ token/s๋ ํ์ํ๋ค.
์ด์ prefix ํ๋์ฉ ์์ฑํ๋ ์ฝ๋์ generation.json์ ์ ๋ฐฐ์น ๋ฐฉ์๊ณผ ํธํ๋์ง ์์ผ๋ฏ๋ก
์ TASK_TAG๋ฅผ ์ฌ์ฉํ๋ค. ์๋ณธ run.json/generations.jsonl์ ๊ฐ์ RUN_TAG๋ก ์ฌ์ฌ์ฉํ๋ค.
MC ๋ฐฐ์น ํฌ๊ธฐ๋ ๊ธฐ๋กยท๊ณ ์ ํ๋ฏ๋ก ๋ณ๊ฒฝํ ๋ ์ TASK_TAG๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์ seed์ฌ๋ ๋ฐฐ์น ๊ตฌ์ฑ์ ๋ฐ๋ผ
๋ถ๋์์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ด ์ด์ ์ถ๋ ฅ๊ณผ token ๋จ์ ์ผ์น๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
์ ์ฒด ์คํ ์ ํ ๋ฐฐ์น์ ์ค์ ์๊ฐ์ ํ์ธํ๋ ค๋ฉด, rlmexp ํ๊ฒฝ์์ ๋ค์์ฒ๋ผ ์คํํ ์ ์๋ค.
์ฒซ ๋ช
๋ น์ ๊ธฐ์กด ์๋ณธ์ผ๋ก ๊ณํ๋ง ๋ง๋ค๊ณ , ๋ ๋ฒ์งธ ๋ช
๋ น์ ์ต๋ 64๊ฐ continuation์ ์์ฑํ๋ค.
TASK_TAG=batched64 DATASETS_OVERRIDE=aime24 bash scripts/analysis/task_mc.sh plan
python -m src.cli task-generate \
--directory /home/users/jongbokwon/rlm_result/main/aime24/Qwen3-8B/task/seed42_k1/analysis/task_mc/batched64/k8 \
--batch-size 64 --max-batches 1
# ๊ฐ์ ํ๊ทธยท๋ฐฐ์น ํฌ๊ธฐ๋ก ์ฌ๊ฐํ๋ฉด ์์์ ์๋ฃํ prefix๋ฅผ ๊ฑด๋๋ด๋ค.
TASK_TAG=batched64 GENERATION_WINDOW=64 bash scripts/analysis/task_mc.sh run
--max-batches๋ ์๋ ์ธก์ ์ฉ ์ค๋จ ์ต์
์ด๋ค. ์ ์ฒด ์์ฑ์ ์๋ฃํ๋ ค๋ฉด ์ด ์ต์
์์ด ์ฌ๊ฐํ๋ค.
์ด๊ธฐ ๋ฐฐ์น๋ ํน์ ๋ฌธํญ์ ์๋ถ๋ถ ์์น์ ์น์ฐ์น๋ฏ๋ก ๊ทธ ETA๋ฅผ ์ ์ฒด ๋ฐ์ดํฐ์
์ ํ์ ์คํ ์๊ฐ์ผ๋ก ํด์ํ์ง ์๋๋ค.
HumanEval+ score๋ ๋ก์ปฌ Docker ์ด๋ฏธ์ง ganler/evalplus:latest๋ฅผ image ID๋ก ๊ณ ์ ํด ์คํํ๋ค.
๋จผ์ Docker๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์์ docker pull ganler/evalplus:latest๋ฅผ ์คํํ๋ค.
์ปจํ
์ด๋๋ ๋คํธ์ํฌ ์์ด ์ฑ์ ์
๋ ฅ๊ณผ ๊ฒฐ๊ณผ ๋๋ ํฐ๋ฆฌ๋ง mountํ๊ณ , CPUยท๋ฉ๋ชจ๋ฆฌยท์๊ฐ ์ ํ์ ์ ์ฉํ๋ค.
EVALPLUS_IMAGE, CODE_TIMEOUT=3600์ผ๋ก ํ๊ฒฝ์ ์ง์ ํ๋ค. Docker๊ฐ ์๋ ์๋ฒ์์๋:
bash scripts/analysis/task_mc.sh export-code
# ๊ฒฉ๋ฆฌ๋ ์คํ ํ๊ฒฝ์ผ๋ก ์ถ๋ ฅ์ evalplus/ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ๋ฌํ ๋ค ์คํ:
HUMANEVAL_OVERRIDE_PATH=/path/evalplus/problems.jsonl \
evalplus.evaluate --dataset humaneval --samples /path/evalplus/samples.jsonl --parallel 2
# EvalPlus๊ฐ ์ ์ฅํ *_eval_results.json ๋๋ *.eval_results.json์ ์๋ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ:
EVALPLUS_RESULTS=/path/results.json bash scripts/analysis/task_mc.sh score
bash scripts/analysis/task_mc.sh measure
์ด import๋ ํ ์คํธ ๋ฐ์ดํฐ hash, task ID, sample ์์, ์ฝ๋ ๋ด์ฉ, ์๋ณธ continuation checksum์ ๊ฒ์ฌํ๋ค. ์๋ HumanEval ํ ์คํธ๋ง ํต๊ณผํ ๊ฒฐ๊ณผ๋ plus ๊ฒฐ๊ณผ๊ฐ ์๋ ํ์ผ์ HumanEval+ ์ ๋ต์ผ๋ก ์ธ์ ํ์ง ์๋๋ค.
๊ฒฐ๊ณผ๋ $ANALYSIS_ROOT/task_mc/<run>/<dataset>/<model>/task/seed42_k1/<TASK_TAG>/k8/์
README.md, metrics.json, samples.tsv, positions.tsv, thinking.{png,pdf}๋ค. TASK_DIR๋ก ๋ฐ๊ฟ ์ ์๋ค.
plan.json๊ณผ generations/, correctness/, ์ ํ์ guardrails/์ ์๋ณธ ๊ทผ๊ฑฐ๋ ๋จ๊ธด๋ค.
p_hat์ Kํ ์ค ์ ๋ต ๋น์จ์ด๋ค. ์ด์ง ๋ถ์ฐ์ ๋ถํธ ์ถ์ ๋์K/(K-1) * p_hat * (1-p_hat)์ด๋ค. ๋ฎ์ ๋ถ์ฐ์ ํญ์ ์ ๋ต๊ณผ ํญ์ ์ค๋ต ๋ชจ๋์์ ๋ํ๋๋ฏ๋ก ์ ๋ต ํ๋ฅ ์ ํจ๊ป ๋ณธ๋ค. K=8์ ๊ตฌ๊ฐ์ ๋์ ์ ์๋ค.- ์์ฐ ์์ฑ์ด budget์ ๊ฑธ๋ ค ๋ต์ ์์ฑํ์ง ๋ชปํ๋ฉด ํด๋น ์ ์ฑ
ํ์ ์คํจ๋ก ์ฑ์ ํ๋ค.
์ฑ์ ๊ธฐ ์ค๋ฅยท๋ฏธ์คํ์ ๋ฏธ์ธก์ (
null)์ด๋ฉฐ ์ค๋ต์ผ๋ก ์นํํ์ง ์๋๋ค. Prefix๋ณ ์ดํญ CI๋ ์ง๋ฌธ ๋ชจ์ง๋จ์ CI๊ฐ ์๋๋ค. - ๋จ์ thinking ๊ธธ์ด๋ marker๋ฅผ ์ ์ธํ body token ์๋ค. ํ continuation์ด๋ผ๋ ๊ธธ์ด๊ฐ censoring๋๋ฉด
๋ฌด์กฐ๊ฑด๋ถ ํ๊ท ยท๋ถ์ฐ์
null์ด๋ฉฐ ๊ด์ธก๋ complete-case ํ๊ท ์ ๋ณ๋๋ก ๊ธฐ๋กํ๋ค. - ์ ๊ทํ ์์น๋ ์๋ณธ trace์ ์ ์ฒด ๊ธธ์ด๋ก ์ ํ ์ฌํ ์ขํ๋ค. ์ continuation์๋ ์๋ณธ์ ๋ฏธ๋ tokenยท์ข ๋ฃ ๊ธธ์ด๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. 100% ์์น์์๋ ์๋ณธ์ ์ข ๋ฃ marker๋ฅผ ๊ฐ์ ๋ก ์ด์ด ๋ถ์ด์ง ์์ผ๋ฏ๋ก ์๋ก์ด thinking์ด ๋ ์ด์ด์ง ์ ์๋ค.
- ์ด ์ธก์ ์ ๊ณ ์ ๋ ์์ฑ ์ ์ฑ ์์์ ์ฑ๊ณต ํ๋ฅ ์ด๋ค. Hidden-state linear decodability, ๊ฐ ๊ฒฝ๋ก์ ๋ถ์ฐ ๋จ์กฐ ๊ฐ์, ์ธ๊ณผ์ ๊ฒฐ์ ์์ , martingale innovation ๋๋ Doob ๋ถํด๋ฅผ ์ ์ฆํ๋ ์งํ๋ ์๋๋ค.
๊ธฐ์กด refusal_probe.sh, length_probe.sh๋ ์ ๋ฐ์ดํฐ ์ด๋ฆ์ DATASETS_OVERRIDE๋ก ์ ํํ ์ ์๋ค.
Refusal probe์๋ ๋ ํด๋์ค๋ณ๋ก ๋
๋ฆฝ ์ง๋ฌธ์ด ์ต์ 5๊ฐ ํ์ํ๋ค. ์ผ๋ฐ task์์ ๊ฑฐ์ ์ด ๋ถ์กฑํ๋ฉด ํ์ต์ด ๋ถ๊ฐ๋ฅํ์ง๋ง,
์ continuation ๊ฒฝ๋ก๋ ํ ํด๋์ค๋ง ๊ด์ธก๋์ด๋ ๋น์จ๊ณผ CI๋ฅผ ๊ณ์ฐํ๋ค. ๊ธฐ์กด run.sh๋ probe ํ๊ฐ ๊ฒฝ๋ก์ด๋ฉฐ task MC๋ task_mc.sh๋ก ์คํํ๋ค.
RAPO / STAIR SFT
baselines/lrm_safety_deliberation์ ํ์ต ์ฝ๋๋ฅผ src/defenses/๋ก ๋ณต์ฌํ ๋ค ํ์ฌ ํ๊ฒฝ์ ๋ง์ถฐ ์์ ํ๋ค.
RAPO์ 2๋จ๊ณ ์์ฑ + TRL full SFT, STAIR์ Accelerate + LoRA ํ์ต ๋ฐฉ์์ ์ ์งํ๋ค.
์คํ ์คํฌ๋ฆฝํธ๋ scripts/baseline/rapo_sft.sh, scripts/baseline/stair_sft.sh์ด๋ฉฐ, ๋ฐ์ดํฐยท์์กด์ฑยท์คํยท์ฌ๊ฐ ๋ฐฉ๋ฒ์
src/defenses/README.md์ ์ ๋ฆฌํ๋ค.
STAR-1K post-alignment
baselines/STAR-1์ src/baseline/star-1๋ก ๋ณต์ฌํ์ฌ ๋ค ๋ชจ๋ธ์ ์ ์ฒด ํ๋ผ๋ฏธํฐ SFT๋ฅผ ์ง์ํ๋ค.
๊ธฐ๋ณธ ์คํ์ DeepSpeed ์๋ Accelerate/DDP์ด๋ฉฐ, ์๋ณธ UCSC-VLAA/STAR-1 1,000๊ฐ๋ฅผ ๊ณ ์ revision์ผ๋ก ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ ์ค๋นยท๊ฒ์ฆยทํ์ต์ scripts/baseline/star1_sft.sh๋ก ์คํํ๋ค.
์ฌ์ฉ๋ฒ๊ณผ ๋ณธ๋ฌธยท๋ถ๋ก ํ์ธ ๊ธฐ๋ก์ ์ฐธ๊ณ ํ๋ค.
ThinkSafe / RAPO post-alignment
src/baseline/thinksafe๋ ๋ชจ๋ธ๋ณ ์๊ธฐ ์์ฑยทWildGuard ํํฐยทLoRA CE/KL ํ์ต,
src/baseline/rapo๋ two-pass ์์ฑยทfull SFTยทGRPO๋ฅผ ์ ๊ณตํ๋ค. ๋ค ๋ชจ๋ธ์ ์ง์ํ๋ฉฐ ๊ธฐ๋ณธ ์คํ์ DeepSpeed๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
์ง์
์ ์ scripts/baseline/thinksafe_sft.sh, scripts/baseline/rapo_baseline.sh๋ค.
ThinkSafe ์ฌ์ฉ๋ฒ, RAPO ์ฌ์ฉ๋ฒ,
๋
ผ๋ฌธ๋ณ ๋ฐ์ดํฐยท์ค์ ์ฐจ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
RAPO SFT 800๊ฐ ์
๋ ฅ์ ์ค๋น๋์๊ณ , SafeChain๊ณผ WildJailbreak train์๋ HF ๋ฐ์ดํฐ์
๋ณ ์ ๊ทผ ํ์ฉ์ด ํ์ํ๋ค.
RECAP post-alignment
src/baseline/recap์ ์๋ณธ ์์ค๋ฅผ upstream/์ ๋ณด์กดํ๊ณ , Qwen3-8B์ ๋จ์ผ GPU BF16
full-parameter DAPO ํ์ต๊ณผ vLLM ์์ฑ์ ์ ๊ณตํ๋ค. ์ง์
์ ์ scripts/baseline/recap_baseline.sh๋ค.
๋ฐ์ดํฐยท์ ์ฒด ์คํยท๋จ๊ณ๋ณ ์ฌ๊ฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
DRY_RUN=1 RECAP_STAGE=all bash scripts/baseline/recap_baseline.sh Qwen3-8B
ํ์ต ํ 2๋ ธ๋ ๋ถ์ ๋ฐ reasoning ํ๊ฐ
scripts/analysis/post_recap_gh200_2nodes.sbatch <experiment-root>๋ ํ๋์ Job ID๋ก
GH200 ๋
ธ๋ 2๊ฐ์ ๋
ธ๋๋น GPU 4๊ฐ๋ฅผ ํ ๋นํ๋ค. ํ๊ฐ ๋
ธ๋์ GPU 0/1/2/3์ ๊ฐ๊ฐ
GPQA Main/MATH500/AIME24/HumanEval+๋ฅผ ๋งก์ STAR-1, RAPO, RECAP, ThinkSafe, Qwen3-8B๋ฅผ ์์ฐจ ํ๊ฐํ๋ค.
๋ถ์ ๋
ธ๋์ GPU 0์ RECAP flip_ratio.sh, GPU 1์ RECAP
refusal_probe.sh โ fisher.sh โ tfidf.sh train โ tfidf.sh evaluate โ probe_metrics.sh๋ฅผ ์คํํ๋ค.
๋ถ์ ๋
ธ๋์ ๋๋จธ์ง GPU 2๊ฐ์๋ ์์
์ ๋ฐฐ์นํ์ง ์๋๋ค.
ํ๊ฐ์ 20๊ฐ ๋ชจ๋ธยท๋ฐ์ดํฐ์
์กฐํฉ์ด ๋ชจ๋ ์๋ฃ๋๋ฉด scontrol update ... NodeList=<๋ถ์ ๋
ธ๋>๋ก
ํ๊ฐ ๋
ธ๋์ ํ ๋น์ ๋ฐ๋ฉํ๋ค. batch coordinator๋ ๋ถ์ ๋
ธ๋์ ๋์ด ๋ถ์ ์์
์ ๊ณ์ ์ ์งํ๋ค.
๋จ์ผ ๋
ธ๋ ์คํ๊ธฐ scripts/analysis/post_recap_gh200_4gpu.sbatch๋ single_node_roles์ ๋ฐ๋ผ
GPU 0์์ flip ratio, GPU 1์์ probe ๋ถ์์ ์คํํ๊ณ GPU 2/3์ ๋ฏธ์๋ฃ ํ๊ฐ๋ฅผ ๋ฐฐ์นํ ์ ์๋ค.
evaluation_models๋ก ์ฌ๊ฐํ ๋ชจ๋ธ์ ์ง์ ํ๋ฉฐ ๊ธฐ์กด ์๋ต์ ์ฌ์ฌ์ฉํ๋ค. ํ worker์ ์ค๋ฅ๊ฐ
๋ค๋ฅธ GPU์ ๋
๋ฆฝ ์์
์ ์ค๋จ์ํค์ง ์๋๋ค. analysis_max_model_len์ผ๋ก ๋ถ์ context๋ฅผ
๋ชจ๋ธ ์ง์ ๋ฒ์ ๋ด์์ ์ง์ ํ๋ค. ๊ธฐ์กด ์์ฑ ๊ธฐ๋ก์ context๋ฅผ ๋ฐ๊ฟ ๋๋ ์๋ณธ๊ณผ ์คํ ์ด๋ ฅ์ ๋ณด์กดํด์ผ ํ๋ค.
๋ชจ๋ธ ๊ฒฝ๋ก, ๋ถ์ ๋์, GPU๋ณ ๋ฐ์ดํฐ์
๋ฐฐ์น๋ ๊ฒฐ๊ณผ ๋๋ ํฐ๋ฆฌ์ experiment.json์ ๊ณ ์ ํ๋ค.
๊ธฐ๋ณธ ๋ถ์์ 9,250๋ฌธํญ์ด๋ฉฐ flip ratio๋ ๊ธฐ์กด K=32 ์ค์ ์ ์ ์งํ๋ค.
Reasoning ํ๊ฐ๋ GPQA Main 448๋ฌธํญ, AIME24 30๋ฌธํญ, MATH500 500๋ฌธํญ, HumanEval+ 164๋ฌธํญ์ ์ฌ์ฉํ๋ค.
GPQA Diamond 198๋ฌธํญ๋ ์ ํ ๊ฐ๋ฅํ๋ค. ๋ฐ์ดํฐ ์ค๋น์ --gpqa main๊ณผ manifest์ ๋ฐ์ดํฐ์
๋ชฉ๋ก์ ์ผ์น์ํจ๋ค.
AIME24๋ ๋ฌธํญ๋น 16ํ ์์ฑ์ ํ๊ท pass@1์ด๊ณ , ๋๋จธ์ง๋ ๋ฌธํญ๋น 1ํ ์์ฑ์ด๋ค.
๋ชจ๋ ๋ชจ๋ธ์ ์๋ณธ Qwen3 tokenizer/chat template, thinking ํ์ฑํ, temperature=0.6, top-p=0.95,
top-k=20, ์ด ์ถ๋ ฅ 32,768-token budget์ ๋์ผํ๊ฒ ์ ์ฉํ๋ค. ๊ฐ์ thinking ์ข
๋ฃ๋ ์ ๋ต ๊ธฐ๋ฐ ์ฌ์์ฑ์ ์๋ค.
GPQA๋ ๊ณ ์ ๋ ์ ํ์ง ์์์ ์ต์ข
๋ฌธ์, AIME24๋ ์ ์ exact match, MATH500์ ๊ธฐ์กด Math-Verify๋ก ์ฑ์ ํ๋ค.
HumanEval+๋ EvalPlus 0.3.1์ base ๋ฐ ์ ์ฒด plus ํ
์คํธ๋ฅผ ๋คํธ์ํฌ์ ํ์ผ์์คํ
์ด ๊ฒฉ๋ฆฌ๋
Bubblewrap ํ๊ฒฝ์์ ์คํํ๋ฉฐ, ํ
์คํธ hash์ ์์ฑ ์ฝ๋์ ์ผ์น ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
์๋ต๋ณ ์์์ ์ ์ฅ์ผ๋ก ์ค๋จ ์ ์ฌ๊ฐํ๋ค. 24์๊ฐ ์ ํ ์ ์๋ ์์
์ ์ฌํ์ํ๋ฉฐ,
์ค์ ์ค๋ฅ๋ ๊ธฐ๋ก ํ ์ข
๋ฃํ์ฌ ์์ธ์ ํ์ธํ ์ ์๋ค. workers/, logs/, stages/์ ์งํ ์ํ๊ฐ ๋จ๋๋ค.
reasoning-results.csv์ reasoning-results.json์๋ ๋ชจ๋ธ๋ณ ์ ์, ์ถ๋ ฅ ๊ธธ์ด, budget ์ด๊ณผ ๋น์จ,
์๋ณธ Qwen3 ๋๋น ์ ์ ์ฐจ์ด ๋ฐ ๋ฌธํญ ๋จ์ paired bootstrap 95% ๊ตฌ๊ฐ์ ๊ธฐ๋กํ๋ค.
ํต๊ณ์ ์ผ๋ก ์ ์ํ ํ๋ฝ์ด ์๋ค๋ ์ฌ์ค๋ง์ผ๋ก ์ฑ๋ฅ ๋๋ฑ์ฑ์ ํ์ ํ์ง ์๋๋ค.