딥러닝 모델의 증가에 따른 문제점
1. Model size
: 모바일 환경에서 모델이 클수록 데이터 전송 및 업데이트가 어려워지며, 많은 메모리를 차지하여 배터리 소모가 증가한다.
2. Speed
: 대규모 모델을 학습하고 추론하는데 시간이 오래걸려서 연구자와 개발자의 생산성을 저하시킨다.
3. Energy Efficient
: 딥러닝 에너지 소모는 대부분 메모리 접근에서 발생하며, 대형 모델일수록 더 많은 에너지가 필요하다.
Algorithm-Hardware Co-Design(효율적인 딥러닝을 위한 방법)
앞선 문제들을 해결하기 위해서 알고리즘이나 하드웨어를 변경할 필요가 있다.
Algorithm-Hardware Co-Design은 딥러닝의 연산 효율을 개선하기 위해 알고리즘과 하드웨어의 특성을 동시에 고려하여 설계하는 방식입니다. 이는 CPU, GPU 뿐 아니라, FPGA와 ASIC 같은 특화된 하드웨어까지 포함하여 최적화할 수 있다.
- Algorithms for Efficient Inference (예측 효율성을 위한 알고리즘):
- 딥러닝 모델이 실시간으로 예측할 때 연산 속도와 메모리 사용을 줄이는 알고리즘적 방법
- Algorithms for Efficient Training (훈련 효율성을 위한 알고리즘):
- 모델 학습 과정에서 연산 효율을 높이기 위한 알고리즘적 방법
- Hardware for Efficient Inference (예측효율성을 위한 하드웨어):
- 예측 과정에서 에너지 효율을 높이기 위한 하드웨어적 최적화 방법
- Hardware for Efficient Training (훈련 효율성을 위한 하드웨어):
- 모델 훈련 과정에서 빠른 연산과 낮은 에너지 소비를 목표로 하는 하드웨어 최적화 방법
Algorithms for Efficient Inference (예측 효율성을 위한 알고리즘)
1. Pruning(가지치기)
: 신경망의 일부 연결을 제거하여 모델을 경량화하는 기법이다. 네트워크에서 중요도가 낮은 가중치를 가지는 연결을 제거하고, 남은 부분만을 가지고 예측을 수행하도록한다. 이렇게 하면 연산량이 줄어들고 메모리 사용이 감소하여 추론 속도가 향상된다.
AlexNet과 같은 모델에서 Pruning을 통해서 불필요한 가중치를 10배 줄이면서 정확도 손손 없이 모델을 경량화했다.
위의 사진처럼 40퍼센트의 가중치를 제거했을 때는 정확도 손실이 없지만 비율이 늘어날수록 정확도는 떨어지는 것을 알 수 있다.
2. Weight Sharing(가중치 공유)
: 가중치 공유는 비슷한 값의 가중치를 묶어서 하나의 값을 공유하도록 하는 방식이다. 이를 통해서 가중치 저장 공간을 줄이고 메모리 사용 효율을 높인다.
AlexNet 모델에서 Conv 레이어의 가중치를 여러 클러스터로 묶어 각 클러스터가 동일한 값을 공유하게 할 수 있다.
가중치 행렬에서 유사한 값을 가지는 가중치들을 클러스터로 그룹화하여 가중치를 압축하고 메모리 사용량을 줄일 수 있다.
3. Quantization(양자화)
: 가중치와 활성화 값을 표현할 때 비트 수를 줄이는 방식이다. 일반적으로는 32bit로 표현되는 가중치 값을 8(16)bit로 줄여서 저장하고 연산하게 된다. 이를 통해 메모리 사용량을 줄이고 연산속도를 높일 수 있다.
16까지 가는 경우 메모리 사용량은 줄어들지만 정확도는 거의 유지하는 것을 확인할 수 있다. 하지만 8로 가는경우 정확도가 현저히 떨어지게 된다. 따라서, 적당한 양자화가 필요하다.
4. Low Rank Approximation (저차 근사)
: 행렬을 저차원으로 근사하여 모델의 복잡도를 낮추는 기법이다. 네트워크의 가중치 행렬을 저차원의 행렬로 분해하여 연산량과 메모리 사용을 줄인다.
CNN의 Conv 레이어에서 필터의 가중치 행렬을 저차원으로 근사로 표현하여 연산량을 절감할 수 있다.
5. Binary and Ternary Networks (이진 및 삼진 신경망)
: 가중치 값을 두 개(이진)나 세 개(삼진)의 값으로 제한하여 연산량을 줄인다. 예를 들어, 가중치를 +1과 -1만 가지도록 이진화하여 메모리와 계산 복잡성을 줄인다.
일반적인 네트워크에서는 가중치가 연속적인 값으로 존재하지만, 이진 네트워크에서는 가중치를 단순화하여 필요한 연산량을 크게 줄일 수 있다.
6. Winograd Convolution (위노그라드 변환)
: 컨볼루션 연산을 최적화하는 방법으로, 곱셈 연산의 수를 줄이는 방식이다. CNN의 컨볼루션 레이어에서 많은 연산이 발생하는데, 위노그라드 변환을 사용하면 더 적은 곱셈 연산으로 같은 결과를 낼 수 있다.
Algorithms for Efficient Training (훈련 효율성을 위한 알고리즘)
1. Parallelization (병렬화)
- 데이터 병렬화: 여러 데이터 샘플을 동시에 처리하여 훈련 속도를 높임. 다수의 GPU나 TPU를 통해 큰 배치 사이즈로 훈련할 때 유리하다.
- 모델 병렬화: 네트워크를 여러 장치로 나눠서 처리. 복잡한 네트워크의 경우 모델의 일부를 분할해 각기 다른 프로세서에 할당한다.
2. Mixed Precision Training (혼합 정밀도 훈련)
- FP16과 FP32 혼용: 16비트와 32비트의 부동소수점을 병행하여 사용함으로써 메모리 사용량을 줄이고 연산 속도를 높인다. 모델의 특정 가중치는 FP16으로 훈련하고, 정밀도가 필요한 부분은 FP32로 유지하여 성능과 효율성을 동시에 추구한다.
3. Model Distillation (모델 증류)
- 큰 모델의 복잡한 지식을 작은 모델에 전이시키는 기법. 큰 모델(Teacher)에서 예측 확률을 기반으로 작은 모델(Student)이 학습함으로써 더 작고 효율적인 모델을 생성한다.
4. DSD Training (Dense-Sparse-Dense 훈련)
- Dense Phase: 초기에는 밀집(dense) 모델로 학습을 시작하고, 이후 가지치기를 통해 희소(sparse) 모델로 전환하여 모델을 정규화한다.
- Sparse Phase: 모델이 가지치기된 희소 상태에서 학습을 진행하여 중요한 가중치를 남기고 불필요한 가중치를 제거한다.
하드웨어 관련 부분은 현재 하드웨어가 2017년과는 다르게 발전했기 때문에 들어야하는지 의문이 들어서 생략했다. 추후 교수님께 여쭤보고 추가할 예정
'CVLab > cs231n (2017)' 카테고리의 다른 글
Lecture 16: Adversarial Examples and Adversarial Training (1) | 2024.11.01 |
---|---|
Lecture 14: Deep Reinforcement Learning (1) | 2024.11.01 |
Lecture 13: Generative Models (0) | 2024.11.01 |