티스토리 뷰
최근 Deep learning의 상용화가 많이 진행되면서 핸드폰과 같은 하드웨어들에서 사용하기 위해 "경량화"와 관련된 연구들이 많이 되고 있습니다.
그런 추세에 따라서 경량화에 대한 내용들을 깊게는 아니더라도 흐름에 대해서 알아보고자 정리하는 글입니다.
경량 딥러닝 기술은 크게 두가지로 나눠진다고 할 수 있습니다.
1. 알고리즘 자체를 적은 연산과 효율적인 구조로 설계하여, 기존 모델 대비 효율을 극대화 하기 위한 "경량 알고리즘 연구"
2. 만들어진 모델의 파라미터들을 줄이는 모델 압축(model compression)과 같은 기법이 적용된 "알고리즘 경량화"기술
1. 경량 딥러닝 알고리즘
경량 알고리즘 연구는 크게 세가지로 나눠질수 있습니다. 모델구조 변경, 합성곱 필터의 변경, 자동 모델 탐색 입니다.
1.1 모델 구조 변경
모델의 구조를 변경해서 경량화를 시도하려고 했던 구조를 살펴보면 대표적으로 ResNet. DenseNet 그리고 SqueezeNet을 말할 수 있습니다.
1.2 효율적인 합성곱 필터 기술
모델 구조의 변경을 통한 경량화 방법은 채널을 분리해서 학습시키면서 연산량과 변수의 개수를 줄일수 있는 연구로 확장되었습니다. 모바일넷, 셔플넷이 그 대표적인 예입니다.
1.3 경량 모델 자동 탐색 기술
최근 강화학습 방법을 적용해서 다양한 응용이 활발히 연구되고 있는 방법입니다. 모델 구조와 합성곱 필터를 설계하고 구현하는데 자동 탐색기법을 사용하는 것입니다. NetAdapt, MNAsNet이 그 대표적인 예시입니다.
2. 알고리즘 경량화
경량 딥러닝 알고리즘은 convolutional Network을 기반으로 다양한 연구가 진행 중입니다.
알고리즘 경량화는 경량 딥러닝 알고리즘과 달리 모델이 표현하는 다양한 파라미터의 크기를 줄이는데 주목적을 가지고 있습니다. 파라미터가 가지는 표현력은 가능한 그대로 유지하면서 불필요한 가중치들은 최대한 없애는 방식입니다.
대표적인 방법으로 "가중치 가지치지(Weight Pruning)" 방법이 있습니다. 딥러닝 네트워크들은 과파라미터(over-parameterization)되어 있는데 실제 영향을 미치는 가중치들을 제외한 가중치들을 0으로 설정해서 가지치기와 같은 효과를 얻을수 있습니다.
두번째 방법으로는 "양자화(Quantization)"이 있습니다. 이 방법은 일반적인 모델의 가중치들이 부동소수점 값을 갖는데, 이 값을 특정 비트 수로 줄이는 것입니다.
마지막으로는 "이진화(Binarization)"이 있습니다. 이진화 방법은 0과 1로 표현하면서 표현력은 줄이지만, 정확도의 손실은 최소로 하면서 모델의 크기를 크게 줄이는 방법입니다.
참고 자료
- ETRI, "경량 딥러닝 기술 동향"
'기계학습' 카테고리의 다른 글
[Pytorch] F.cross entropy vs nn.Cross Entropy loss (0) | 2020.02.27 |
---|---|
[Python] 데이터 셋 간단하게 나누기 (0) | 2020.02.21 |
[세팅] window10 tensorflow gpu 설치하기 (1) | 2019.08.23 |
[keras] fit vs fit_generator (1) | 2019.02.13 |
라벨링툴 공유 - labelme, VIA(VGG Image Annotatoe) (0) | 2019.02.11 |