[IBM course #5] Deep Learning with PyTorch
신경망 (Neural Net)
기본 신경망 구조 : 1개의 은닉층(2 뉴런)을 가진 신경망 구조
입력 → Linear → Sigmoid → Linear → Sigmoid → Threshold (이진 분류용)
- 활성화 함수: Sigmoid 사용 (출력값: 0~1)
- PyTorch 구현 방법: nn.Module 또는 nn.Sequential 활용
- 모든 연산은 행렬 곱 기반으로 처리
- Forward 패스에서 입력 벡터의 shape 변화 추적 가능
이진 분류 학습
손실 함수: nn.BCELoss() (Binary Cross Entropy Loss)
최적화 함수: Adam 사용
입력: 2D 벡터
출력: 0 또는 1 (Sigmoid 통과 후 threshold 적용)
은닉층 뉴런 수 증가의 효과
뉴런 수 증가 → 모델 표현력 증가
복잡한 경계 표현 가능
Sigmoid × weight의 누적 조합으로 다양한 형태의 decision boundary 생성
이 때,
너무 적은 뉴런 → underfitting (단순한 분류 경계)
너무 많은 뉴런 → overfitting (복잡한 경계, 일반화 어려움)
⇒ 해결책
- Validation set 활용
- Regularization (예: Dropout)
- 데이터 양 증가
다중 클래스 분류 (Multiclass Neural Network)
출력층: 클래스 수만큼 뉴런 생성 (예: MNIST → 10개) → 각 뉴런은 그 클래스의 점수
출력층 활성화 함수 없음 (Softmax는 CrossEntropyLoss 내부 처리됨)
예측: 출력 중 가장 큰 값을 갖는 뉴런의 index → argmax
구현 방식: nn.Module, nn.Sequential 둘 다 가능
역전파(backpropagation) & Gradient 문제
연쇄법칙(chain rule)을 이용한 gradient 계산
PyTorch에서는 .backward() 호출로 자동 계산
Vanishing Gradient 문제
네트워크 깊어질수록 gradient가 작아짐
특히 sigmoid, tanh 사용 시 심각
⇒ 해결 방법:
활성화 함수 변경 (ReLU)
BatchNorm, 초기화 기법 등 활용
주요 활성화 함수
| 함수 | 출력 범위 | 장점 | 단점 |
| Sigmoid | [0, 1] | 확률 해석 가능 | Gradient 소실 문제 |
| Tanh | [-1, 1] | Zero-centered | Gradient 소실 문제 |
| ReLU → 해결책으로 자주 사용 | [0, ∞] | 빠른 수렴, Gradient 유지 | Dead neuron 가능성 있음 |
ReLU, Tanh > Sigmoid (loss 감소 및 accuracy 향상)
Dropout - 과적합 방지를 위한 Regularization 기법
- 훈련 시: 뉴런을 무작위로 꺼서 다양한 경로 학습 (Bernoulli 확률 분포 기반)
- 평가 시: 모든 뉴런 사용
- PyTorch: nn.Dropout(p) (일반적으로 p=0.2~0.5. p 클수록 더 많은 뉴런 drop)
→ .train() 시 활성, .eval() 시 비활성 - 효과 : 모델 일반화 성능 향상 + Validation 정확도 개선
- 주의 :
- CNN에서는 convolution layer에는 잘 사용하지 않음
→ dropout을 통해 뉴런을 무작위로 끄게 되면, convolution 결과의 공간 패턴(위치 정보)를 무너뜨릴 수도 있으며, 보통 batch nomalization을 사용하는데, 이로 인해 dropout이 없어도 약간의 regulartization 효과 발생. - RNN에서는 variational dropout*이 대안
- CNN에서는 convolution layer에는 잘 사용하지 않음
* Variational Dropout : "시퀀스 전체에 동일한 dropout mask를 적용"해서 시간적 일관성을 유지하려는 dropout 방식
Weight Initialization - 가중치 초기화 중요성과 방법
모든 뉴런 동일 초기화 및 업데이트 → 학습 실패
PyTorch 기본 초기화는 (-1/√Lin, +1/√Lin) 범위
권장 기법 :
Xavier: tanh에 적합
He: ReLU에 적합 (variance를 고려하여 초기화)
초기화 범위가 너무 크거나 작아도 → gradient vanishing 발생 가능
Momentum을 사용한 Gradient Descent 개선
기본 GD 문제: Saddle point, local minima에서 빠져나오기 어려움
해결법:
이전 gradient를 활용한 속도(velocity) 도입 (PyTorch: SGD(momentum=0.5) 등으로 설정 가능)
비유: 공의 위치, 속도, 가속도처럼 이해하면 쉬움
Batch Normalization - 학습 속도 및 안정성 향상
각 미니배치 기준으로 평균, 표준편차 계산 → 정규화 (평균 0, 표준편차 1)
이후에 scale(γ), shift(β) 파라미터 학습 추가 적용
효과 :
Gradient 방향 정렬 → 더 빠른 수렴
Vanishing gradient 완화
Dropout 없이도 성능 향상 가능
PyTorch: nn.BatchNorm1d(# 뉴런 수) 사용
.train() 시 batch 통계 사용, .eval() 시 전체 통계 사용
'🥇 certification logbook' 카테고리의 다른 글
| [Coursera/IBM course #7] Data preparation for LLMs (8) | 2025.07.26 |
|---|---|
| [Coursera/IBM course #7] 생성형 AI (Generative AI) (5) | 2025.07.23 |
| [Coursera/IBM course #6] Capstone Project 메모 (3) | 2025.07.20 |
| [Coursera/IBM course #5] Convolution 연산 기본 개념 (4) | 2025.07.19 |
| [Coursera/IBM course #5] Softmax (0) | 2025.07.13 |
| [Coursera/IBM course #4] Linear Regression Prediction (0) | 2025.06.14 |
| [Coursera/IBM course #4] Dataset (0) | 2025.06.07 |
| [Coursera/IBM course #4] Tensors (2) | 2025.06.07 |