
메모리 없는 지속 학습 프레임워크로, mode connectivity-based interpolation을 사용하여 악성코드 분류를 수행합니다. EMBER 및 Androzoo 데이터셋에서 class-incremental 및 domain-incremental 시나리오를 지원합니다.
Zahra Asadi*, Haeseung Jeon*, Sohyun Han, Md Mahmuduzzaman Kamol, Se Eun Oh, Mohammad Saidur Rahman†
*동등한 기여를 한 저자. †교신 저자.
[!NOTE] 이 문서는 FreeMOCA: 메모리 없는 악성 코드 분석을 위한 지속적 학습 논문의 공식 구현입니다.
FreeMOCA는 다음 과정으로 작동합니다:
전체 과정은 낮은 손실 매니폴드 위에 있는 연결된 솔루션 체인을 구축하여, 치명적 망각을 크게 줄입니다.
FreeMOCA는 두 개의 대규모 악성코드 데이터셋인 EMBER와 Androzoo로 평가되었습니다. 데이터셋 출처:
데이터셋을 다운로드하여 다음 디렉토리에 설정하세요:
FreeMOCA/data/
├── AZ_Class
│ ├── AZ_Class_Test.npz
│ └── AZ_Class_Train.npz
│
├── AZ_Domain
│ ├── 2008_Domain_AZ_Test_Transfo...
│ ├── 2008_Domain_AZ_Train_Transfo...
│ ├── 2009_Domain_AZ_Test_Transfo...
│ └── ...
│
├── EMBER_Class
│ ├── XY_test.npz
│ └── XY_train.npz
│
└── EMBER_Domain
├── 2018-01
├── 2018-02
├── 2018-03
└── ...
이 저장소는 두 가지 지속적 학습 시나리오를 지원합니다:
다음 명령을 실행하세요:
conda create -n freemoca python=3.9
conda activate freemoca
pip install -r requirements.txt
# EMBER Class-IL
cd ./FreeMOCA_Class/EMBER_Class
CUDA_VISIBLE_DEVICES=0 python main.py --train_data /path/to/data --test_data /path/to/data
# AZ Class-IL
cd ./FreeMOCA_Class/AZ_Class
CUDA_VISIBLE_DEVICES=0 python main.py --train_data /path/to/data --test_data /path/to/data
# EMBER Domain-IL
cd ./FreeMOCA_Domain/EMBER_Domain
CUDA_VISIBLE_DEVICES=0 python main.py --data_root /path/to/data/directory
# AZ Domain-IL
cd ./FreeMOCA_Domain/AZ_Domain
CUDA_VISIBLE_DEVICES=0 python main.py --data_root /path/to/data/directory
하이퍼파라미터에 대한 더 자세한 설정은 부록 A. FreeMOCA 공통 인수를 확인하세요.
하이퍼파라미터나 실험 설정을 조정하려면 다음 인수를 사용하세요:
| 인수 | 설명 |
|---|---|
--init_classes | 작업 0에서의 클래스 수 |
--epochs | 작업당 에폭 수 |
--batchsize | 배치 크기 |
--lr | 학습률 |
--momentum | SGD 모멘텀 |
--weight_decay | 가중치 감쇠 |
--lambda_min | 최소 보간 가중치 |
--lambda_max | 최대 보간 가중치 |
인수의 기본 설정을 변경하려면 arguments.py 파일을 확인하세요.
저장소는 다음과 같은 표준 기준 모델에 대한 실험을 지원합니다:
다음 명령으로 실행할 수 있습니다:
cd /path/to/experiment/directory
CUDA_VISIBLE_DEVICES=0 python none.py --arugment_you_want
CUDA_VISIBLE_DEVICES=0 python joint.py --arugment_you_want
그리고 다음 이전 연구들:
기준 모델은 다음 명령으로 실행할 수 있습니다:
# CLeWI for EMBER-Class
cd ./baselines/CLeWI
CUDA_VISIBLE_DEVICES=6 python main.py --model="clewi" \
--dataset="seq_ember" --n_tasks=11 \
--lr=0.001 --buffer_size=500 --n_epochs=50 \
--seed=42 --optim_wd=0.0 --optim_mom=0.0 \
--batch_size=512 --sub_dataset="ember"
# CLeWI for AZ-Class
cd ./baselines/CLeWI
CUDA_VISIBLE_DEVICES=6 python main.py --model="clewi" \
--dataset="seq_ember" --n_tasks=11 \
--lr=0.001 --buffer_size=500 --n_epochs=50 \
--seed=42 --optim_wd=0.0 --optim_mom=0.0 \
--batch_size=512 --sub_dataset="az"
# WSC for EMBER-Class
cd ./baselines/WSC
MODEL_NAME=wsc_20_ember
python main.py --config=./exps/wsc_memory/$MODEL_NAME.json
# WSC for AZ-Class
cd ./baselines/WSC
MODEL_NAME=wsc_20_az
python main.py --config=./exps/wsc_memory/$MODEL_NAME.json
# GR for EMBER-Class
cd ./baselines/GR_EWC_LwF_iCaRL_EMBER
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=EMBER --tasks=11 --replay=generative --metrics --logger_file gr --scenario=class
# GR for AZ-Class
cd ./baselines/GR_EWC_LwF_iCaRL_AZ
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=ANDROZOO --tasks=11 --replay=generative --metrics --logger_file gr --scenario=class
# EWC for EMBER-Class
cd ./baselines/GR_EWC_LwF_iCaRL_EMBER
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=EMBER --tasks=11 --ewc --lambda=50 --metrics --logger_file ewc --scenario=class
# EWC for AZ-Class
cd ./baselines/GR_EWC_LwF_iCaRL_AZ
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=ANDROZOO --tasks=11 --ewc --lambda=50 --metrics --logger_file ewc --scenario=class
# LwF for EMBER-Class
cd ./baselines/GR_EWC_LwF_iCaRL_EMBER
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=EMBER --tasks=11 --replay=current --distill --metrics --logger_file lwf --scenario=class
# LwF for AZ-Class
cd ./baselines/GR_EWC_LwF_iCaRL_AZ
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=AZ --tasks=11 --replay=current --distill --metrics --logger_file lwf --scenario=class
# iCaRL for EMBER-Class
cd ./baselines/GR_EWC_LwF_iCaRL_EMBER
CUDA_VISIBLE_DEVICES=1 python main.py --data_set=EMBER --tasks=11 --icarl --budget=2000 --metrics --logger_file=icarl --scenario=class
# iCaRL for AZ-Class
cd ./baselines/GR_EWC_LwF_iCaRL_AZ
CUDA_VISIBLE_DEVICES=0 python main.py --data_set=ANDROZOO --tasks=11 --icarl --budget=2000 --metrics --logger_file=icarl --scenario=class
# TAMiL for EMBER-Class
cd ./baselines/TAMiL_EMBER
CUDA_VISIBLE_DEVICES=0 python main.py
# TAMiL for AZ-Class
cd ./baselines/TAMiL_AZ
CUDA_VISIBLE_DEVICES=0 python main.py
# MalCL for EMBER-Class
cd ./baselines/MalCL_EMBER
CUDA_VISIBLE_DEVICES=0 python main.py --train_data /path/to/data --test_data /path/to/data