
멀티모달 LLM에서 안전 인식 방향을 추출하고 훈련하여 거부 행동을 개선하면서도 정상 작업의 성능 저하를 제한하는 연구 코드입니다.
교차 모달 안전 드리프트에서의 전이 안전 인식 (EMNLP 2026 Findings)의 공식 구현입니다.
이 저장소는 Qwen3-VL 안전 인식 방향 파이프라인을 포함합니다. 유해 및 무해한 멀티모달 예시에서 거부 관련 활성화 방향을 추출하고, 양성 작업 드리프트를 제한하면서 거부 동작을 개선하는 방향을 선택하며, 선택적으로 방향별 안전 인식 벡터를 학습합니다.
현재 코드는 Hugging Face Transformers를 통해 Qwen/Qwen3-VL-8B-Instruct를 지원합니다.
.
├── artifacts/directions/ # 사전 계산된 선택 방향 및 메타데이터
├── data/csv/ # 파이프라인에서 사용하는 CSV 매니페스트
├── data/images/ # 로컬 이미지 루트 (포함되지 않음)
├── directions/ # 방향 추출 및 선택
├── models/ # Qwen3-VL 모델 및 프로세서 유틸리티
├── training/ # 안전 인식 방향 학습
├── utils/ # 활성화 후크 유틸리티
├── config.py
├── run_pipeline.py # 방향 생성 및 선택 진입점
└── requirements.txt
Python 3.10+ 및 CUDA 지원 PyTorch 설치가 권장됩니다.
git clone https://github.com/cucu220123/transfer-safety-awareness.git
cd transfer-safety-awareness
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
첫 실행 시 Hugging Face에서 Qwen/Qwen3-VL-8B-Instruct를 다운로드합니다. 머신에 충분한 GPU 메모리가 있고 모델 제공자가 요구하는 모델 이용 약관에 동의했는지 확인하세요.
저장소에는 실험에 사용된 CSV 매니페스트가 포함되어 있지만, 원본 이미지 데이터셋은 재배포하지 않습니다. 원본 데이터셋 제공자로부터 이미지를 확보하여 다음 프로젝트 상대 루트 아래에 배치하세요:
data/images/vlsafe_images
data/images/vlsbench_imgs
data/images/mmvet_images
매핑은 다음과 같습니다:
이미지 루트와 CSV 경로는 코드 수정 없이 재정의할 수 있습니다:
export VLM_HARMFUL_IMAGE_ROOT=/path/to/vlsafe_images
export VLM_HARMLESS_IMAGE_ROOT=/path/to/vlsbench_imgs
export VLM_KL_IMAGE_ROOT=/path/to/mmvet_images
export VLM_HARMFUL_CSV=/path/to/harmful.csv
export VLM_HARMLESS_CSV=/path/to/harmless.csv
export VLM_KL_CSV=/path/to/benign_vqa.csv
이미지와 매니페스트를 다운로드하거나 사용할 때 각 원본 데이터셋의 라이선스와 이용 약관을 준수하세요.
후보 방향 생성 및 검증 기반 선택을 실행하려면:
CUDA_VISIBLE_DEVICES=0 python run_pipeline.py --direction_only
이 명령은 기본적으로 분할당 128개의 학습 및 32개의 검증 예시를 사용합니다. 중간 결과는 artifacts/direction_runs/<model-name>/에 기록되며, 선택된 방향은 다음 위치에 저장됩니다:
artifacts/directions/qwen3vl_refusal_direction.pt
artifacts/directions/qwen3vl_refusal_direction_metadata.json
--model_path를 사용하여 로컬 모델 디렉토리 또는 다른 호환 가능한 Hugging Face 식별자를 지정할 수 있습니다. --skip_filter 플래그는 거부 점수 필터링 단계를 비활성화합니다.
저장소에는 기본 Qwen3-VL 체크포인트에 대한 사전 계산된 방향 아티팩트가 이미 포함되어 있으므로, 해당 아티팩트가 설정에 적합한 경우 이 단계를 건너뛸 수 있습니다.
학습은 논문 코드에서 사용된 양성 작업 및 거부 목적 함수로 선택된 방향을 업데이트합니다. 4-GPU 예시는 다음과 같습니다:
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 --master_port=29501 \
-m training.train_safety_awareness_direction \
--epochs 8 \
--batch_size 1 \
--grad_accum_steps 1 \
--lr 5e-3
학습 출력은 기본적으로 outputs/qwen3vl_safety_awareness_train/에 기록됩니다. 유용한 옵션으로는 --model_path, --direction_pt, --direction_meta, --artifact_dir, --epochs, --batch_size, --lr이 있으며, 전체 목록은 python -m training.train_safety_awareness_direction --help를 실행하여 확인할 수 있습니다.
CUDA_VISIBLE_DEVICES를 설정하고 비교 가능한 결과를 위해 동일한 모델 리비전, 입력 매니페스트 및 이미지 파일을 사용하세요.split 열이 있는 경우 해당 열을 사용하여 행을 학습/검증/테스트로 할당하고, 그렇지 않은 경우 question_id % 10을 결정적으로 사용합니다.최종 서지 정보와 논문 링크가 확보되면 논문 인용 정보가 추가될 예정입니다.
이 저장소의 코드는 MIT 라이선스로 배포됩니다. 타사 데이터셋, 이미지 및 Qwen3-VL 모델은 각각의 라이선스와 이용 약관이 적용됩니다.
| 매니페스트 | 이미지 루트 | 용도 |
|---|
qwen3vl_refusal_direction_harmful.csv | vlsafe_images | 유해/거부 측 예시 |
qwen3vl_refusal_direction_harmless.csv | vlsbench_imgs | 무해/비거부 측 예시 |
qwen3vl_kl_benign_vqa.csv | mmvet_images | KL/부작용 평가용 양성 VQA 예시 |