본문 바로가기
IT개발/AI 공부

7. AI 자동 매매) 파트 2: 학습 과정 및 결과 분석

by jusyBear 2025. 3. 28.
반응형

AI 자동 매매 시스템 개발 과정 (파트 2: 학습 과정 및 결과 분석)

이 글은 파트 1: AutoTrain(파인 튜닝) 및 데이터 준비에 이어지는 내용으로, 실제 모델 학습 과정과 결과를 다룹니다.

학습 파라미터 설정

모델 학습에 사용된 파라미터들은 AI 성능에 직접적인 영향을 미치는 중요한 요소입니다. 각 파라미터의 역할과 설정 이유를 상세히 살펴보겠습니다.

기본 학습 설정

1. 채팅 템플릿

  • 설정값: none (일반 텍스트 형식으로 학습)
  • 설명:
    • LLM을 채팅 형태로 fine-tuning할 때, 사용자/시스템 프롬프트를 어떻게 포맷팅할지 결정합니다.
    • 예: Alpaca 형식(### Instruction: {instruction}\n\n### Response:), Vicuna 형식, ChatGPT 형식 등이 있습니다.
    • "none"으로 설정한 이유: 자동 매매 시스템은 대화형 인터페이스가 아닌 데이터 기반 예측에 중점을 두기 때문입니다.

2. 혼합 정밀도(Mixed Precision)

  • 설정값: fp16 (16비트 부동소수점)
  • 자세한 비교:
정밀도 유형 비트 수 데이터 범위 주요 특징 적합한 상황
fp32 32비트 넓음 정확도 높음, 메모리 많이 사용 높은 정확도가 필수적인 경우
fp16 16비트 제한적 메모리 절반 사용, 속도 향상, overflow 위험 일반적인 학습, 메모리 제약 상황
bf16 16비트 fp32와 유사 fp32의 범위 + fp16의 효율성, 최신 GPU 필요 정확도와 효율성 모두 중요한 경우
  • fp16 vs bf16 심층 비교:
    • fp16(Float16): IEEE 754 표준의 16비트 부동소수점 형식
      • 구조: 1비트(부호) + 5비트(지수) + 10비트(가수)
      • 장점: 메모리 사용량 절반, 계산 속도 향상
      • 단점: 숫자 표현 범위가 제한되어 학습 중 gradient explosion이나 vanishing gradient 문제 발생 가능
    • bf16(BFloat16): 구글이 개발한 16비트 부동소수점 형식
      • 구조: 1비트(부호) + 8비트(지수) + 7비트(가수)
      • 장점: fp32와 동일한 범위 표현 가능, 오버플로우 위험 감소
      • 단점: 일부 최신 GPU에서만 하드웨어 지원 (A100, TPU 등)
  • 선택 이유: 하드웨어 호환성과 메모리 효율성을 고려해 fp16 선택

3. PEFT/LoRA 및 QLoRA

  • 설정값: true (전체 모델 대신 저랭크 매트릭스만 학습)
  • 개념 설명:
    • PEFT(Parameter-Efficient Fine-Tuning): 전체 모델 대신 일부 파라미터만 학습시켜 효율성 높이는 기법
    • LoRA(Low-Rank Adaptation): 가중치 행렬을 저랭크 분해하여 적은 파라미터로 효과적인 학습 가능
  • LoRA의 작동 원리:
  • 원본 가중치 행렬 W → W + ∆W 여기서 ∆W = A × B (A와 B는 저랭크 행렬)
  • LoRA vs QLoRA 비교:
특성 LoRA QLoRA
기본 모델 처리 원본 정밀도 유지 4/8비트로 양자화
메모리 효율성 중간 매우 높음
학습 가능 모델 크기 중간 규모 더 큰 모델 가능
구현 복잡성 낮음 중간
최소 필요 VRAM 16-24GB 8-12GB
  • 활용 이유: 32B 대형 모델을 제한된 GPU 리소스로 효율적으로 학습하기 위함

학습률 및 최적화 설정

1. 스케줄러

  • 설정값: adamw_torch (AdamW 옵티마이저 기반)
  • 스케줄러의 역할: 학습 과정에서 학습률(learning rate)을 동적으로 조절하여 최적화 과정을 개선
  • 주요 스케줄러 상세 비교:
스케줄러 핵심 특징 수학적 원리 장점 단점 적합한 상황
linear 선형적 학습률 감소 lr = start_lr - (start_lr - end_lr) × (current_step / total_steps) 단순하고 예측 가능 초기 빠른 학습에 비효율적 안정적 학습 필요 시
cosine 코사인 함수 형태로 감소 lr = end_lr + 0.5 × (start_lr - end_lr) × (1 + cos(π × current_step / total_steps)) 초반 완만, 중간 빠르게, 후반 완만하게 감소 파라미터 조정 필요 LLM 파인튜닝에 널리 사용
constant 일정한 학습률 유지 lr = start_lr 구현 간단, 예측 가능 후반부 불안정 가능 짧은 학습, 사전 실험
adamw_torch AdamW 옵티마이저와 연동 적응적 학습률 + 가중치 감쇠 다양한 데이터에 적응적 메모리 사용량 증가 복잡한 데이터셋
polynomial 다항식 함수로 감소 lr = end_lr + (start_lr - end_lr) × (1 - current_step / total_steps)^power 감소 곡선 조절 가능 추가 하이퍼파라미터 필요 세밀한 조절 필요 시
  • 프로젝트 변경 사항: 초기 adamw_torch에서 최종적으로 linear 스케줄러로 변경하여 안정성 확보

2. 학습률(Learning Rate)

  • 설정값: 0.0003 (3e-4)
  • 역할: 각 학습 단계에서 모델 가중치를 얼마나 크게 업데이트할지 결정
  • 선택 기준:
    • 너무 큰 값: 학습이 수렴하지 않거나 발산할 수 있음
    • 너무 작은 값: 학습이 매우 느리거나 지역 최소값에 갇힐 수 있음
    • 3e-4는 NLP 모델 파인튜닝에서 자주 사용되는 초기값

배치 및 시퀀스 설정

1. 블록 크기(Block Size)

  • 설정값: 1024 (한 번에 처리할 최대 토큰 수)
  • 시각적 이해:
  • [토큰1, 토큰2, ..., 토큰1024] → 모델 → 예측
  • 블록 크기 선택의 트레이드오프:
    • 크게 설정 (예: 2048)
      • 장점: 더 넓은 문맥 정보 활용, 장기 패턴 인식 향상
      • 단점: 메모리 사용량 2배 증가, 학습 속도 저하
    • 작게 설정 (예: 512)
      • 장점: 메모리 효율성 증가, 학습 속도 2배 향상
      • 단점: 문맥 정보 손실, 장기 패턴 인식 제한
  • 암호화폐 트레이딩 관점: 과거 n개 데이터 포인트를 보고 다음 움직임 예측하는 형태로, 적절한 문맥 범위 설정 중요

2. 배치 크기와 기울기 누적

  • 배치 크기: 5 (한 번의 학습 스텝에서 처리할 샘플 수)
  • 기울기 누적: 4 (여러 배치의 기울기를 누적한 후 가중치 업데이트)
  • 유효 배치 크기 = 배치 크기 × 기울기 누적 횟수 = 5 × 4 = 20
  • 작동 방식 시각화:
  • 배치 1 → 기울기 계산 (저장만 하고 업데이트는 안 함) 배치 2 → 기울기 계산 + 배치 1 기울기 (저장) 배치 3 → 기울기 계산 + 배치 2 누적 기울기 (저장) 배치 4 → 기울기 계산 + 배치 3 누적 기울기 (이 누적된 기울기로 모델 업데이트)
  • 설정 변화: 초기 값인 기울기 누적 1024는 극단적으로 큰 값이었으며, 4로 대폭 감소시켜 학습 효율성 크게 향상

3. 에폭(Epochs)

  • 설정값: 2 (전체 데이터셋 반복 학습 횟수)
  • LLM 파인튜닝 특성: 대형 언어 모델은 일반적으로 적은 에폭만으로도 특정 도메인에 효과적으로 적응

LoRA 상세 설정

1. 타겟 모듈(Target Modules)

  • 설정값: q_proj, k_proj, v_proj (특정 어텐션 레이어만 타겟팅)
  • 트랜스포머 모델의 핵심 컴포넌트:
모듈 이름 역할 학습 효과
q_proj (Query) 검색할 정보 정의 무엇을 찾을지 학습
k_proj (Key) 검색 대상 정보 정의 어디서 찾을지 학습
v_proj (Value) 실제 정보 값 저장 찾은 정보를 어떻게 해석할지 학습
MLP/FFN 고차원 특성 추출 복잡한 패턴 학습

타겟 모듈 선택 전략:

    어텐션 메커니즘 구조 (Q, K, V)
    +-------------+         +-------------+         +-------------+  
    | Query(Q)    |         | Key(K)      |         | Value(V)    |  
    | 벡터 생성   |         | 벡터 생성  |          | 벡터 생성  |  
    +-------------+         +-------------+         +-------------+  
            |                     |                         |  
            v                     v                         |  
            |                     |                         |  
            +---------->+---------------+                   |  
                        | Q·K^T 연산   |                   |  
                        | (유사도 계산) |                   |  
                        +---------------+                   |  
                                |                           |  
                                v                           |  
                        +---------------+                   |  
                        | Softmax       |                   |  
                        | (가중치화)    |                   |  
                        +---------------+                   |  
                                |                           |  
                                v                           v  
                                +-----------+---------------+  
                                            |  
                                      +------------+  
                                      | 어텐션 출력 |  
                                      +------------+

트랜스포머 모델에서 QKV 모듈의 학습이 미치는 영향:

타겟 모듈 학습되는 능력 계산량 영향 파라미터 수
Q_proj 검색 패턴 학습 낮음 약 33%
K_proj 키 패턴 학습 낮음 약 33%
V_proj 값 변환 학습 낮음 약 33%
전체 모델 모든 패턴 학습 매우 높음 100%
  • 최적화 선택: 어텐션 메커니즘(Q, K, V)만 학습하면 전체 모델을 학습하는 것보다 파라미터 수가 약 1/4로 감소하면서도 효과적인 성능 유지

2. LoRA 하이퍼파라미터

  • lora_r: 16 (저랭크 차원)
  • lora_alpha: 16 (스케일링 파라미터)
  • lora_dropout: 0.05 (드롭아웃 비율)

작동 원리 설명:

  • 원래 가중치 W ∈ ℝ^(d×k)를 직접 업데이트하는 대신
  • 두 개의 작은 행렬 A ∈ ℝ^(d×r), B ∈ ℝ^(r×k) (여기서 r ≪ min(d,k))을 학습
  • 최종 계산: W + ∆W = W + A×B

조정된 가중치 영향력: (lora_alpha/lora_r) × A×B


학습 과정에서의 문제점과 해결 방안

발생한 문제점

  • 학습 시간과 비용 문제: 초기 설정으로는 학습 시간이 지나치게 오래 걸리는 문제가 발생했습니다.
    • 예상 학습 시간: 3,000시간 이상
    • 예상 비용: $0.8/hour * 3,000시간 = $2,400 (약 352만원)
    • 이는 프로젝트 예산을 크게 초과하는 금액이었습니다.

해결 방안

1. 하드웨어 사양 변경

  • 변경 전: Nvidia 1xL4 · 8 vCPU · 30 GB · $0.80/hour
  • 변경 후: Nvidia A10G large · 12 vCPU · 46 GB · $1.50/hour
  • 개선 효과: 시간당 비용은 증가했지만, GPU 연산 능력 향상으로 총 학습 시간 단축

GPU 비교:
| 스펙 | NVIDIA L4 | NVIDIA A10G |
|------|-----------|-------------|
| CUDA 코어 | 7,424 | 9,216 |
| 메모리 | 24GB GDDR6 | 24GB GDDR6 |
| 메모리 대역폭 | 300 GB/s | 600 GB/s |
| 텐서 코어 | 232 TFLOPs | 149.7 TFLOPs |
| 전력 소비 | 72W | 300W |

2. 학습 파라미터 최적화

  • 학습 종료 후 생성된 training_params.json을 통해 최적화된 파라미터를 확인할 수 있었습니다.
  • 주요 변경 파라미터:

{
"model": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
"project_name": "autotrain-Batch5",
"data_path": "kor-kms/2024_second_half",
"add_eos_token": true,
"block_size": 512, // 1024에서 512로 축소
"model_max_length": 2048,
"mixed_precision": "fp16",
"lr": 0.0001, // 0.0003에서 0.0001로 조정
"epochs": 2, // 에폭 수 축소
"batch_size": 5, // 배치 크기 명시적 설정
"gradient_accumulation": 4, // 1024에서 4로 대폭 축소
"optimizer": "adamw_torch",
"scheduler": "linear", // 선형 스케줄러 사용
"chat_template": "none",
"quantization": "int4", // 4비트 양자화 적용
"target_modules": "q_proj, k_proj, v_proj", // 특정 어텐션 모듈만 타겟팅
"peft": true,
"lora_r": 16, // LoRA 랭크 설정
"lora_alpha": 16, // LoRA 알파 설정
"lora_dropout": 0.05, // LoRA 드롭아웃 설정
"unsloth": false
}

```

이러한 파라미터 최적화를 통해:

  • 블록 크기 축소: 1024 → 512로 메모리 효율성 증가
  • 기울기 누적 대폭 감소: 1024 → 4로 학습 속도 크게 향상
  • int4 양자화: 모델 크기 8배 축소, 메모리 효율성 대폭 증가
  • 타겟 모듈 최적화: 어텐션 메커니즘 핵심 부분만 학습
  • LoRA 하이퍼파라미터 조정: 모델 성능과 계산 효율성 균형 유지

이러한 변경으로 예상 학습 시간을 3,000시간에서 약 100시간으로 대폭 단축할 수 있었습니다.

3. 소형 모델 활용 검토

  • 대규모 모델(32B)의 단점: 학습 비용과 시간이 기하급수적으로 증가
  • 소형 모델 옵션:
    • 7B 파라미터 모델: 기본 모델 대비 약 1/4 크기, 학습 시간 및 비용 크게 절감
    • 14B 파라미터 모델: 중간 규모, 32B 모델 대비 절반 이하의 리소스로 학습 가능
  • 모델 크기별 리소스 소요 분석:
모델 크기 메모리 요구량 상대적 학습 시간 비용 효율성 성능 예상
7B ~12GB 1x ★★★★★ 적절한 데이터로 도메인 특화 시 우수
14B ~24GB 2x ★★★★ 복잡한 패턴 인식 가능, 비용 효율적
32B ~48GB+ 5x ★★ 가장 뛰어난 패턴 인식, 비용 비효율적
70B+ ~100GB+ 12x 범용성 뛰어나지만 특화 학습 비효율적
  • 이번 프로젝트의 선택: 32B 모델을 최적화하여 진행했지만, 향후 7B/14B 모델 검토 계획

학습 결과

학습 후 성능 평가

학습이 완료된 모델은 다음과 같은 지표로 평가할 예정입니다:

  • 실제 시장 데이터에서의 예측 정확도: 2022-2023년 데이터에 대한 예측 성능 테스트
  • 매수/매도 시점 식별 정확도: 주요 추세 전환점 예측 정확도 평가
  • 수익률 시뮬레이션 결과: 백테스트를 통한 가상 투자 수익률 계산

향후 계획

  • 실제 학습된 모델을 ollama로 돌리는 작업
  • 자동 매매 시스템과 연동하여 실시간 신호 생성 테스트
  • 다양한 크기의 모델 성능 비교 테스트
  • 더 많은 기술적 지표 및 파생상품 데이터 통합

주의사항

  • 본 글은 학습 및 연구 목적으로 작성되었으며, 실제 투자에 활용 시 발생하는 어떠한 손실에 대해서도 책임지지 않습니다.
  • 투자는 항상 본인의 책임 하에 신중하게 결정하시기 바랍니다.
  • 해당 글은 직접 작성한 내용을 AI를 통해 가다듬는 방식으로 작성되었습니다.
  • 해당 글의 예시 중 일부는 AI를 통해서 제작되었습니다.
반응형