티스토리 뷰
[Day 38] 모델 경량화 - 4
1. 강의 복습 내용
모델 경량화 - 4
앞서, Day 37에서는 모델 경량화 기법 중, 가지 치기(Pruning)에 대해서 알아보았다.
Day 38에서는 모델 경량화 기법 중에서 양자화(Quantization), 지식 증류(Knowledge Disitillation)에 대해서 알아볼 것이다.
1. 양자화 (Qunatization)
신경망 모델에서 사용하는 파라미터는 모두 완전정밀도 타입(FP32)을 사용하고 있다. 이렇게 큰 비트너비를 가진 파라미터는 연산을 함에 있어서 부담으로 작용할 수 밖에 없다. 아무리 병렬연산을 하더라도 말이다.
신경망 모델에서의 모든 파라미터는 추정되어 나온 근사값이기 때문에 32Bit로 표현하는것은 비효율적이라고 생각할 수 있다. 따라서 32Bit를 K-bit(0<K<32)의 작은크기로 만든다면 보다 계산이 빨라질 것이다. 물론 표현할 수 있는 값의 범위가 줄어들기 때문에 정확도의 손실(Trade off)로 이어지게된다.
1.1) 실수의 2진수 표현 방법
실수의 2진수 표현 방식은 크게 두 가지로 나뉜다.
고정 소수점 표현(Fixed Point), 부동 소수점 표현(Floating Point)으로 나타낼 수 있다.
먼저 정수 부분은 똑같이 2진수로 변환하여 표현하면 되고, 소수 부분은 2진수로 표현하는 방식이 다르다.
*) 고정 소수점 표현(Fixed Point)
부호 비트로 +, -을 표현하고, 정수부는 똑같이 정수를 2진수로 변환하며 소수부도 마찬가지로 소수를 2진수로 변환하여 정수는 뒤에서부터 소수부는 앞에서부터 채우면 된다.
*) 부동 소수점 표현(Floating Point)
고정 소수점 표현처럼, 정수부 따로 소수부 따로 2진수 변환하여 바로 사용하는 것이 아니라, 한번 더 정규화 과정을 거친다.
즉, 1.xxxx... * 2^n 의 표현 (정수부에 1이 남도록)으로 바꾸어 표현한다.
다시 말해 정수부에 1만 남을 때까지 소수점을 왼쪽 (*정수부가 0일 경우엔 오른쪽. 아래에서 다시 설명) 으로 이동 시키고 이동한 칸 수만큼 n 자리에 집어넣으면 된다.
예를 들어서 위에서 봤던 111.101을 정규화하면 1.11101 * 2^2가 된다.
1.2) 양자화 (Quantization) 방법론
양자화 방법론은 크게 학습모델을 획득하는 과정(Quantization-aware training)에서 적용이 될 수 있으며, 이미 학습이 완료된 모델(Post-training)을 양자화 하는 방법론 2가지가 존재한다.
전자의 경우에는 학습시간의 절약이 큰 이점이 될 수 있으며, 후자의 경우에는 기존에 학습이 완료된 Pre-Trained Model이 많이 존재함으로 전자의 경우보다 적용하기 쉬워 범용적으로 사용할 수 있다는 점이다.
양자화의 대상이 되는 값은 모델에 사용되는 모든 파라미터가 가능하지만 일반적으로 가중치, 활성화출력, 기울기 3가지가 대상이 되고있다. 이중에서 기울기와 관련해서는 1)분포가 일정하지 않고 2)극단적인 경우가 발생하며 3)양자화 오류로 인한 수렴불가와 같은 이슈가 존재하여 양자화 대상으로 크게 고려가 되고 있지 않는 추세이다.
2. 지식 증류 (Knowledge Distillation)
기존에 학습이 잘 완료된 크기가 큰 딥러닝 모델(Teacher Model)과 아직 학습이 되지 않은 작은 크기의 딥러닝 모델(Student Model)이 있다.
큰 딥러닝 모델(Teacher Model)은 작은 크기의 딥러닝 모델(Student Model)에게 지식(Knowledge)을 가르쳐 줄 수 있지 않을까? 라는 것으로부터 출발한다.
그리고 크기가 큰 모델(Teacher Model)을 상대적으로 크기가 작은 모델(Student Model)로 큰 모델의 퍼포먼스를 어느정도 발휘할 수 있다면, 이것 또한 경량화를 달성했다 라고 볼 수 있을 것이다. (= 경량화 카테고리에 지식 증류가 존재하는 이유)
2.1) What is Knoweldge(지식)?
위에서, Teacher Model이 Student Model에게 지식을 가르쳐준다는 아이디어에서 비롯된 지식 증류(Knowledge Distillation)에서, 가르쳐주는 지식이 무엇일까?
지식 증류는, Pre-trained된 모델의 Backbone과 Weight를 가져와 Task를 수행하기 위해 뒷 단에 레이어를 새로 달거나 Fine-tuning 하는 방식과는 다르다. 즉 Pre-trained Model을 활용한 Transfer Learning은, 이미 기 학습된 Weight를 가져와 활용하는 것이고 Knowledge Transfer(지식 증류)은 기본적으로 Teacher Model의 Output을 따라하도록 훈련되는 것이므로 엄연히 다르다. 또한 지식 증류에서는 Teacher Model과 Student Model의 아키텍쳐는 달라도 상관이 없다. 하지만 Transfer Learning에서는 Pre-trained Model의 Weight를 활용하기 위해서는 기본적으로 그 Model의 아키텍쳐와 같아야 Weight를 활용할 수 있다.
따라서, 아주 간단히 말하면 Knowledge Transfer에서 Knowledge란, Teacher Model의 Output을 나타낸다.
2.2) 지식 증류(Knowledge Distillation) 방법
앞서 말한 바와 같이, Dataset을 가지고 Student Model로만 학습하는 것보다, Dataset과 Teacher Model의 Knowledge를 전수받으며 학습하는 것이 더 좋은 결과를 얻는다.
Loss 함수는 Teacher Model과 Student Model의 distillation loss와 Student Model과 ground truth의 Cross-Entropy loss의 합으로 이루어져있다.
2. 피어 세션
1. 강의에 대한 토의
Further Question
지식 증류에서의 Loss 함수 구성 (왜 두 개의 Loss 합인가?)
Knowledge Distillation vs Transfer Learning
양자화 vs Pruning
2. 각자의 P-Stage 계획, 마음 가짐 공유
3. Conclusion
이제 U-Stage도 끝나간다..
그동안 배웠던 수 많은 내용들을 다시 곱씹어보며, P-Stage에서 활용할 계획을 세워야 겠다.
또 마찬가지로, P-Stage에 임하기전에 경진 대회를 통해 워밍업을 한다 생각하고 재미있게 하고 있다.
'부스트캠프 AI Tech > 학습정리' 카테고리의 다른 글
부스트캠프 AI Tech P-Stage 총 정리 (0) | 2021.07.06 |
---|---|
[Day 37] 모델 경량화 - 3 (0) | 2021.03.17 |
[Day 36] 모델 경량화 - 2 (0) | 2021.03.16 |
[Day 35] 모델 경량화 - 1 (0) | 2021.03.15 |
[Day 34] Computer Vision (CV) - 5 (0) | 2021.03.12 |
- Total
- Today
- Yesterday
- 백준
- 코딩테스트
- ResNet
- pandas
- Vision AI 경진대회
- DACON
- 다이나믹프로그래밍
- 백트래킹
- 부스트캠프 AI Tech
- 브루트포스
- 데이터핸들링
- Unet
- 네트워킹데이
- 알고리즘
- 그리디
- P-Stage
- AI 프로젝트
- 데이터연습
- Data Handling
- 이분탐색
- python
- cnn
- 공공데이터
- 동적계획법
- C++
- dfs
- Unet 구현
- NLP 구현
- DeepLearning
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |