-
[최적화] Learning both Weights and Connections for Efficient Neural Networks 논문 리뷰 (작성중)최적화 2023. 10. 22. 00:47반응형
들어가기 전에...
2015년
Song Han, Jeff Pool, John Tran, William J. Dally
Part of Advances in Neural Information Processing Systems 28 (NIPS 2015)
Optimal Brain Damage 이후 처음으로 pruning에 대해 제대로 다룬 논문 인 듯 하다 (제대로 찾아보진 않았지만, 1989 이후 2015까지 저명한 pruning 논문이 없음). 과연 OBD에서 어떤 방식으로 변형해서 pruning을 제안하였는지 궁금하다.
파랑색 글씨는 내가 보충한 내용 + 생각한 내용
빨강색 글씨는 아직 이해중인 내용
Abstract
신경망 모델은 많은 양의 계산 및 메모리를 요구하기 때문에 임베디드 시스템에 활용하기 어렵다. 또한 기존 네트워크는 한번 아키텍처를 설정하면, 학습과정에서는 변경할 수 없기 때문에 아키텍처를 개선해 나갈 수 없다 (아키텍처를 수정하려면, layer를 수정하고 또 다시 학습을 해야된다는 말). 본 논문에서는 이를 해결하기 위해 중요한 connection만 학습하여 정확도에 영향을 미치지 않고 신경망에 필요한 계산 및 메모리를 10배 줄일 수 있는 방법을 제안한다. 다음과 같은 3단계를 통해 rebundant connection을 pruning한다.
- 어떤 connection이 중요한지 학습하도록 네크워크 학습
- 중요하지 않은 connection pruning
- 나머지 connection의 파라미터를 미세조정하기 위해 다시 학습
실험 결과, 제안된 방법은 ImageNet dataset에서 정확도 하락 없이 AlexNet의 파라미터 수를 6,100만개에서 670만개로 9배 줄였다. 또한, 유사하게 VGG-16의 정확도 하락 없이 파라미터 수를 1억 3,800만개에서 1,030만개로 13배 줄였다.
1 Introduction
신경망은 컴퓨터 비전부터 음성인식 및 자연어 처리까지 application에서 널리 사용되고 있다.
- 1998년 Gradient-based learning applied to document recognition (LeNet-5 모델) : 0.06M (6만개) 이하의 파라미터
- 2012년 Imagenet classification with deep convolutional neural networks : 60M (6000만개)
- 2014년 Deepface: Closing the gap to human-level performance in face verification (Deepface) : 120M (1억2000만개)
- 2013년 Deep learning with cots hpc systems : 10B (100억개)
이러한 거대한 신경망은 성능은 매우 높지만, 이는 많은 메모리 및 계산 자원을 요구한다. 아래 그림 1은 45nm CMOS process에서의 기본 산술 및 메모리 연산의 에너지 비용을 보여준다.
이러한 대형 신경망은 매우 강력하지만, 그 크기는 상당한 스토리지, 메모리 대역폭 및 계산 자원을 소비합니다. 내장된 모바일 애플리케이션의 경우, 이러한 자원 요구는 엄청납니다. 그림 1은 45nm CMOS 프로세스에서 기본 산술 및 메모리 연산의 에너지 비용을 보여줍니다. 이 데이터를 통해 우리는 연결당 에너지가 메모리 액세스에 의해 지배되고 온칩 SRAM의 32비트 계수의 경우 5pJ에서 오프칩 DRAM의 32비트 계수의 경우 640pJ에 이르기까지 다양합니다 [7]. 대형 네트워크는 온칩 스토리지에 맞지 않으므로 더 비싼 DRAM 액세스를 요구합니다. 예를 들어, 20Hz에서 10억 개의 연결 신경망을 실행하려면 일반적인 모바일 장치의 전력 외피를 훨씬 넘어서는 (20Hz)(1G)(640pJ) = 12.8W가 필요합니다. 네트워크를 가지치기하는 우리의 목표는 그러한 대형 네트워크가 모바일 장치에서 실시간으로 실행될 수 있도록 하는 데 필요한 에너지를 줄이는 것입니다. 가지치기에서 모델 크기를 줄이는 것은 또한 DNN을 포함한 모바일 애플리케이션의 저장 및 전송을 용이하게 합니다.
본 논문에서는 정확도를 유지하며 네트워트 connection을 pruning하는 방법을 제안한다.
- 네트워크 학습 (네트워크의 토폴로지 학습 -> connection의 중요도 학습)
- 파라미터가 임계값보다 낮은 모든 connection 제거 (중요하지 않은 connection 제거) = 기존에 dense, fully-connected layer를 sparse layer로 변환
- 남은 connection이 제거된 connection을 대신할 수 있도록 sparse 네트워크 재 학습
(토폴로지란, 아래 그림과 같이 연속성을 가진 노드들을 의미한다.)
이때, pruning 및 재학습 단계는 네트워크의 복잡성을 줄이기 위해 반복적으로 수행될 수 있다. 이는포유류 뇌에서의 학습 과정과 매우 유사하다. 어린이의 발달 초기에서는 시냅스가 생성되다가, 이후 거의 사용하지 않는 시냅스는 pruning되어 일반적인 성인과 유사하게 된다.
(실제로 인간은 만 3세까지 뉴런과 뉴런을 연결해주는 시냅스의 수가 늘어나고, 반복과 연습을 통해 시냅스가 강화된다. 4세 이후에는 사용되지 않는 시냅스는 pruning된다.)
3 Learning Connections in Addition to Weights
본 논문의 pruning 제안 방법은 그림 2에서와 같이 총 3단계로 구성된다.
- Train Connectivity : 최종적인 파라미터 값을 학습하는 일반적인 학습과 달리 어떤 connection이 중요한지 학습한다.
- Prune Connections : 파라미터가 임계값 미만인 모든 connection을 네트워크에서 제거한다. (그림 3과 같이 dense network를 sparse network로 변환한다.)
- Train Weights : pruning된 sparse 네트워크를 다시 재 학습한다. (이 과정이 생략된다면, 정확도가 많이 하락됨)
3.1 Regularization
올바른 정규화를 선택하면 가지치기 및 재교육의 성능에 영향을 미칩니다. L1 정규화는 0이 아닌 매개변수에 불이익을 주어 0에 가까운 매개변수가 더 많아집니다. 이는 가지치기 후에 더 나은 정확도를 제공하지만 재교육 전에 더 나은 정확도를 제공합니다. 그러나 나머지 연결은 L2 정규화만큼 좋지 않아 재교육 후 정확도가 낮아집니다. 전반적으로 L2 정규화는 가장 좋은 가지치기 결과를 제공합니다. 이는 실험 섹션에서 추가로 설명합니다.
regularization은 pruning 및 재 학습의 성능에 영향을 미친다. L1 regularization은 0이 아닌 파라미터에 패널티를 주어 0에 가까운 파라미터가 더 많아지게 한다. 이는 pruning 직후 정확도는 높지만, 재학습 시 낮아지게 된다. 나머지 connection이 L2 regularization만큼 좋지 않기 때문에 재 학습 후 정확도가 낮아지게 된다. 전반적으로 L2 regularization이 가장 좋은 pruning 결과를 보였다. 이는 experiment 섹션에 자세히 설명한다.
(아래 블로그에서 regularization에 대해 자세히 설명되어 있다.)
https://light-tree.tistory.com/125
아래 글의 설명에서는 L1 regularization이 sparse model에 더 적합하다는데,,
3.2 Dropout Ratio Adjustment
매개변수가 희박해짐에 따라 분류기는 가장 유용한 예측 변수를 선택하므로 예측 분산이 훨씬 적어 과적합을 줄일 수 있습니다. 이미 프루닝으로 모델 용량이 감소했기 때문에 재교육 드롭아웃 비율은 더 작아야 합니다.
Dropout은 과적합을 방지하기 위해 널리 사용되며 (regularization도 과적합 방지를 위해 사용됨), 이는 재 학습에도 적용된다. 재 학습 중에는 모델 용량의 변화를 고려하여 dropout 비율을 조정해야 한다. dropout과 pruning의 차이는 다음과 같다.
- Dropout : 학습 중 각 파라미터는 확률적으로 삭제됨. 하지만, 추론시 다시 사용됨.
- Pruning : 한번 삭제되면, 학습 및 추론 모두에 다시는 사용되지 않음.
파라미터가 점점 sparse해짐에 따라 모델은 가장 유용한 예측 변수를 선택하므로 예측 분산이 훨씬 적어 과적합을 줄일 수 있다. 이미 pruning으로 모델 용량이 감소했기 때문에 재학습 시 droupout의 비율을 작아져야 한다.
드롭아웃 조정 수식은 다음과 같다.
$$\mathbf{C_{i}=N_{i}N_{i-1}\cdots\cdots\cdots\cdots(1)}$$
$$\mathbf{D_{r}=D_{o}\sqrt{\frac{C_{ir}}{C_{io}}}\cdots\cdots\cdots\cdots(2)}$$- $C_{i}$ : layer i에서의 connection 수
- $C_{io}$ : original network에서 layer i에서의 connection 수
- $C_{ir}$ : 재 학습 후의 네트워크에서 layer i에서의 connection 수
- $N_{i}$ : layer i에서의 neuron 수
- $D_{o}$ : original dropout 비율
- $D_{r}$ : 재학습 중 dropout 비율
3.3 Local Pruning and Parameter Co-adaptation
재학습 시, pruning된 layer를 다시 초기화하는 것보다 pruning에서 살아남은 connection에 대해 초기 학습 단계에서 파라미터를 유지하는것이 더 좋다. CNN에는 fragile co-adapted 특징 (어떤 뉴런이 다른 특정 뉴런에 의존적으로 변하는 것)이 포함되어 있다. : gradient descent는 네트워크가 처음 학습될 때 좋은 결과를 보일 수 있지만, 일부 layer를 다시 초기화하고 재학습한 후에는 그렇지 않다. 따라서, pruning된 layer를 다시 학습할 때는 파라미터를 다시 초기화하는 대신 살아남은 파라미터를 유지해야 한다. (유지하는 값이 초기 학습 전의 랜덤 초기 파라미터값인지, 아니면 pruning된 이후 남은 값인지?)
파라미터를 유지하여 pruning된 layer를 재 학습하는 것은 전체 네트워크를 통해 역전파할 필요가 없기 때문에 계산이 덜 필요하다 (파라미터 유지랑 관계가 있는,,?). 또한, 신경망은 네트워크가 깊어질수록 gradient vanishing 문제가 발생하기 쉬우므로 심층 네트워크의 pruning error를 복구하기가 어렵다. 이를 방지하기 위해 convolution layer에 대한 파라미터를 수정하고, FC layer를 pruning한 후에 FC layer만 재학습한다.
3.4 Iterative Pruning
올바른 connection을 학습하는 것은 반복적인 과정이다. pruning 이후 재 학습을 하는 것을 반복하여 최소한의 connection을 찾을 수 있다. 이는 AlexNet에서 정확성을 유지하며, 한번에 많은 pruning을 하는 것과 비교하여 5~9배 더 많은 비율의 pruning을 가능하게 한다. 매 반복마다 최상의 connection을 찾는 greedy search이다. 또한, 파라미터의 절대값을 기반으로 하여 pruning을 수행해 보았지만, 결과는 좋지 않았다.
3.5 Pruning Neurons
connection을 pruning한 후에 input connection이 0이거나 output connection이 0인 뉴런을 pruning 할 수 있다. 추가적으로, pruning된 뉴런과의 모든 connection을 제거한다. 재 학습 단계는 죽은 뉴런의 input, output connection이 모두 0이 되는 결과에 자동으로 도달한다. 이는 gradient descent와 regularization으로 인해 발생한다. input connection(또는 output connection이 0인 뉴런)은 최종 loss에 기여하지 않고 output connection(또는 input connection)에 대해 기울기를 각각 0이 된다. 정규화 항만이 가중치를 0으로 만든다. 따라서, 죽은 뉴런은 재 학습 중에 자동으로 제거된다.
4 Experiments
Caffe 모델에서 pruning을 구현하였다.
우리는 Caffe[26]에서 네트워크 프루닝을 구현하였습니다. Caffe는 각 가중치 텐서에 대한 네트워크 동작 중에 프루닝된 파라미터를 무시하는 마스크를 추가하도록 수정하였습니다. 프루닝 임계값은 품질 파라미터에 레이어의 가중치 표준편차를 곱한 값으로 선택되었습니다. 우리는 Nvidia TitanX와 GTX980 GPU에 대한 실험을 수행하였습니다.
MNIST의 Lenet-300-100, Lenet-5, 그리고 ImageNet의 AlexNet VGG-16으로 4개의 대표적인 네트워크를 pruning하였으며, pruning 전후의 네트워크 파라미터 및 정확도는 Table 1과 같다.
4.1 LeNet on MNIST
connection을 pruning한
4.2 AlexNet on ImageNet
connection을 pruning한
4.3 VGG-16 on ImageNet
connection을 pruning한
6 Conclusion
신경망 모델은 많은 양의 계산 및 메모리를 요구하기 때문에 임베디드 시스템에 활용하기 어렵다. 또한 기존 네트워크는 한번 아키텍처를 설정하면, 학습과정에서는 변경할 수 없기 때문에 아키텍처를 개선해 나갈 수 없다 (아키텍처를 수정하려면, layer를 수정하고 또 다시 학습을 해야된다는 말). 본 논문에서는 이를 해결하기 위해 중요한 connection만 학습하여 정확도에 영향을 미치지 않고 신경망에 필요한 계산 및 메모리를 10배 줄일 수 있는 방법을 제안한다. 다음과 같은 3단계를 통해 rebundant connection을 pruning한다.
본 논문에서는 적절한 connection만을 유지하여 정확도에 영향을 미치지 않고 계산 및 메모리를 개선하는 방법을 제안했다. 실제로 포유류 뇌에서 학습이 작동하는 방식에 동기부여 받아, connection에 중요도에 따라 pruning을 하여 남은 sparse 네트워크를 재학습하는 것이다.
본 논문에서 제안한 pruning 방식은 fully connected layer와 convolution layer에 모두 적용 가능하여 정확도 하락없이 connection 수를 9~13배까지도 줄일 수 있다. 이는 실시간 이미지 처리 및 모바일 시스템에 매우 유용하다.
나오기 전에...
OBD와 가장 큰 차이점은 어떤걸 pruning하느냐인것같다. OBD는 노드 자체를 0으로 만들어서, 해당 노드와의 모든 connection이 아무런 영향을 미치지 못하게끔 했는데, 본 논문에서는 노드가 아니라 connection을 제거했다. OBD에 비해 좀더 정교화되었다고 볼 수 있을 것 같다. 아닌가???????반응형'최적화' 카테고리의 다른 글
[최적화] Structural Pruning via Latency-Saliency Knapsack 논문 설명 및 구현 (0) 2024.01.16 [최적화] Ensemble Knowledge Guided Sub-network Search and Fine-tuning for Filter Pruning 논문 리뷰 (작성중) (0) 2023.10.30 [최적화] Optimal Brain Damage 논문 리뷰 (1) 2023.10.17 [최적화] Model Compression 논문 리스트 (0) 2023.10.17 [최적화] pytorch CSR 구현 (작성중) (0) 2023.10.12