※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.
Lecture 15에서는 deep learning 모델의 inference, training이 효율적으로 이뤄질 수 있도록 하는 알고리즘, 하드웨어에 대해 다루고 있다.
총 위의 4가지 방법에 대해 다루고 있다.
※ 자세한 알고리즘보다는 대략적인 개념을 소개하고 있으므로 각각의 알고리즘에 대해서는 별로도 찾아보는 것이 좋을 것 같다.
<Algorithms for Efficient inference>
먼저 효율적인 inference를 위한 알고리즘들에 대해 다루고, 총 6개의 알고리즘을 다루고 있다.
- 1. Pruning
Pruning은 '가지치기'라는 뜻 그대로 불필요한 연결이나 neuron을 제거하는 방법이다.
여기서 불필요하다는 것은 그 weight나 activation이 0에 가까워 의미가 없는 것들을 의미한다.
당연히 더 많은 parameters를 가지치기할수록 모델의 accuracy는 떨어진다.
그러나 그 정도는 생각보다 크지 않고, pruning한 모델을 다시 retrain하는 것으로 원래의 성능 정도로 복원할 수 있다.
노이즈에 의한 것이긴 하지만 본래의 모델보다 성능이 좋아지는 경우도 있다.
- 2. Weight Sharing
Weight sharing의 기본 아이디어는 quantization을 이용하는 것이다.
예를 들어,
2.09, 2.12, 1.92 -> 2.0
위와 같이 비슷한 수들을 하나의 수로 변경하는 것이다.
Training 시에는 32 bit float으로 학습을 진행하고,
학습된 weights에 대해 clurstering을 수행해 묶어주는 것이다.
이렇게 하면 훨씬 더 적은 bit수로 weights를 저장할 수 있다.
실험 결과 위 두 경우에는 4bits나 2bits까지 성능 저하가 크게 들어나지 않는 것을 확인할 수 있다.
앞서 다룬 pruning과 함께 적용할 수도 있고, Huffman encoding을 이용하는 등의 방법으로 더욱 compact한 모델로 만들 수 있다..
VGG, ResNet 등의 모델에 대해서 각종 기법을 이용한 결과 수십배로 압축하면서 accuracy는 유지할 수 있었다고 한다.
- 3. Quantization
Quantization은 앞서 다룬 weight sharing의 아이디어와 유사하다.
Weights의 통계를 이용하여 최소한의 bit수로 weights를 표현할 수 있도록 하는 방식이다.
- 4. Low Rank Approximation
하나의 convolution layer를 두 개의 layer로 나누는 방법이다. 이렇게 나누는 방법을 통해 model을 경량화할 수 있다.
위의 경우를 예시로 들면, d 개의 k x k x c 개의 filters를 d'개의 k x k x c 개의 filters와 d개의 1 x 1 x c filters로 나누어 전체 weights를 감소시킬 수 있다.
- 5. Binary / Ternary Net
2개 또는 3개의 수로만 weights를 대체하는 방법이다.
학습된 weights를 시각화해보면 위와 같다.
상당히 단순화 되었지만, 여전히 직관적으로 어떠한 역할을 수행하는 필터인지 판단이 가능한 필터들이 존재한다.
실제로 거의 full precision 모델에 가까운 정도의 error rate를 달성한 결과를 보이기도 한다.
- 6. Winograd Transformation
Convolution 연산을 matrix multiplication으로 치환하는 방법이다.
Transform 원리에 대해서는 강의에서 자세히 설명해주진 않지만, 데이터와 filter에 대해 transform을 거친 후 element-wise 곱만 수행해주면 그 결과가 convolution과 완전히 동일하게 된다고 한다.
수행할 연산의 수를 줄일 수 있다.
<Hardware for Efficient Inference>
하드웨어가 발전하거나, 연산에 최적화된 하드웨어를 설계함으로써 inference를 효율적으로 개선할 수 있다.
Google에서 설계한 TPU이다.
복잡한 구조를 다 살펴볼 수는 없지만 빨간색으로 표시된 영역의 units들을 통해 deep learning 연산을 최적화하고 있다. 대표적으로 Matrix Multiplication Unit을 통해 많은 수의 연산을 처리할 수 있다.
92T operations/second의 peak 성능을 보인다.
FLOPs/Byte의 비율이 충분히 크면 연산량은 FLOPS에 의해 결정되지만, FLOPS/Byte의 비율이 충분히 크지 못한 경우에는 memory bandwidth에 의해 성능이 좌우된다.
그러나 사용되는 deep learning 모델들의 경우 대부분 memory access에 비해 사용되는 연산량이 적다.
(memory bandwidth에 의해 성능이 제한되어 peak performance를 보이지 못한다.)
이를 해결하기 위해 불필요한 memory access와 불필요한 연산을 줄이기 위한 방법이 필요한데,
강의에서는 하드웨어를 이용한 솔루션 중 EIE(Efficient Inference Engine)를 소개하고 있다.
핵심 아이디어는 0*A = A*0 = 0 임을 이용하여 불필요한 weight 저장과 연산을 줄이는 것이다.
크기 4의 벡터와 4x8 matrix의 곱을 나타내는 에시이다.
실제 회로상으로 어떻게 처리되는지는 자세히 설명하지 않지만,
0인 값은 하나로 저장하고, 0과 곱해지는 연산은 스킵한다고 한다.
<Algorithms for Efficient Training>
Training 과정 또한 다양한 알고리즘을 통해 효율적으로 다룰 수 있다.
강의에서는 4가지 알고리즘을 소개하고 있다.
- 1. Paralleization
병렬처리를 통해 더욱 빠르게 training을 하는 방법이다.
서로 다른 환경에서 서로 다른 데이터에 대해 병렬적으로 forward 및 backward를 계산한 후, 하나의 server를 통해 parameter 업데이트를 수행하는 방법이다.
하나의 모델의 여러 부분을 서로 다른 환경에서 병렬 연산하여 더욱 빠르게 처리하는 방법이다.
추가로 hyper-parameter parallelism도 하나의 parallelism 기법이다.
Hyper parameter를 서로 다른 환경에서 다양하게 실험하면 최적 parameter를 더욱 빠르게 찾을 수 있다.
- 2. Mixed Precision with FP16 and FP32
Weight 자체는 32-bit precision으로 저장하지만, training시에 이뤄지는 연산은 16-bit로 처리하여 효율성을 높이는 방법이다.
실험 결과 성능차이가 거의 나타나지 않고, 오히려 노이즈에 의해 더욱 빠르게 수렴하는 경우도 있었다고 한다.
- 3. Model Distillation
모델의 수렴이 훨씬 빠르게 이뤄지게 하는 방법이다.
여러 개의 teacher model이 student model을 학습시키는 것으로 생각할 수 있는데,
여기서 teaching의 의미는 score를 알려주는 것이다.
Data의 label이 아니라 해당 score를 통해 학습하면 훨씬 빠르게 수렴한다고 한다.
앙상블의 결과를 바로 이용하는 것은 아니고, softened 결과를 이용한다.
Soften 정도는 T, temperatue라는 parameter를 이용한다.
- 4. DSD : Dense Sparse Dense Training
앞서 다룬 pruning을 적용한 모델을 먼저 학습하고, 어느 정도 학습이 이뤄지면 다시 re-dense를 수행한 후 학습을 계속하는 방법이다.
이렇게 학습한 모델은 더 좋은 성능을 보인다고 한다.
<Hardware for Efficient Training>
새롭게 발표된 Volta 구조에서는 딥러닝 연산에 최적화된 tensor core가 새로 추가되어, mixed precision operations를 훨씬 빠르게 처리할 수 있도록 도와준다고 한다.
'Computer Vision > cs231n' 카테고리의 다른 글
[Lec 16] Adversarial Examples and Adversarial Training (0) | 2022.02.10 |
---|---|
[Lec 14] Reinforcement Learning (0) | 2022.01.29 |
[Lec 13] Generative Models (0) | 2022.01.26 |
[Lec 12] Visualizing and Understanding (0) | 2022.01.24 |
[Lec 11] Detection and Segmentation (0) | 2022.01.24 |