2023. 5. 3. 15:52ㆍDeep Learning
Learning both Weights and Connections for Efficient Neural Networks
Song Han, Jeff Pool, John Tran, William J. Dally
Abstract
신경망은 계산 집약적이고 메모리 집약적이므로 임베디드 시스템에 배포하기가 어렵습니다.
또한 기존 네트워크는 학습이 시작되기 전에 아키텍처를 수정합니다; 결과적으로 학습은 아키텍처를 개선할 수 없습니다.
이러한 한계를 해결하기 위해, 우리는 중요한 연결만 학습하여 신경망의 정확성에 영향을 주지 않고 신경망에 필요한 저장 및 계산을 몇 배로 줄이는 방법을 설명합니다.
우리의 방법은 3단계 방법을 사용하여 중복 연결을 제거합니다.
먼저, 우리는 어떤 연결이 중요한지 학습하기 위해 네트워크를 학습시킵니다.
다음으로 중요하지 않은 연결을 정리합니다.
마지막으로 네트워크를 재학습하여 나머지 연결의 가중치를 미세 조정합니다.
ImageNet 데이터 세트에서 우리의 방법은 정확도 손실 없이 AlexNet의 매개 변수 수를 6100만 개에서 670만 개로 9배나 줄였습니다.
VGG-16을 사용한 유사한 실험에서 총 매개변수 수가 13배 감소하여 1억 3천 8백만 개에서 1억 3천 30만 개로 다시 정확도 손실 없이 감소할 수 있음을 발견했습니다.
1 Introduction
신경망은 컴퓨터 비전 [1]에서 음성 인식 [2] 및 자연어 처리 [3]에 이르는 응용 분야에서 어디에나 존재하게 되었습니다.
우리는 시간이 지남에 따라 증가한 컴퓨터 비전 작업에 사용되는 컨볼루션 신경망을 고려합니다.
1998년 Lecun et al. 은 손으로 쓴 숫자를 분류하기 위해 1M 미만의 매개 변수를 가진 CNN 모델 LeNet-5를 설계한 반면, 2012년 Krizhevsky et al. [1]은 60M 매개 변수로 ImageNet 대회에서 우승했습니다.
딥페이스는 120M 매개변수로 분류된 인간 얼굴 [5], Coates et al. [6]은 네트워크를 10B 매개변수로 확장했습니다.
이러한 대규모 신경망은 매우 강력하지만 크기는 상당한 스토리지, 메모리 대역폭 및 계산 리소스를 소비합니다.
임베디드 모바일 애플리케이션의 경우 이러한 리소스 수요가 급증합니다.
그림 1은 45nm CMOS 프로세스에서 기본 산술 및 메모리 작업의 에너지 비용을 보여줍니다.
이 데이터에서 우리는 연결당 에너지가 메모리 액세스에 의해 지배되며 온칩 SRAM의 32비트 계수에 대한 5pJ에서 오프칩 DRAM의 32비트 계수에 대한 640pJ까지의 범위를 확인할 수 있습니다 [7].
대규모 네트워크는 온칩 스토리지에 적합하지 않으므로 더 비싼 DRAM 액세스가 필요합니다.
예를 들어, 20Hz에서 10억 개의 연결 신경망을 실행하려면 DRAM 액세스에만 (20Hz)(1G)(640pJ) = 12.8W 가 필요합니다, 이는 일반적인 모바일 장치의 전원 엔벨로프를 훨씬 초과합니다.
pruning 네트워크의 목표는 이러한 대규모 네트워크를 실행하는 데 필요한 에너지를 줄여 모바일 장치에서 실시간으로 실행할 수 있도록 하는 것입니다.
pruning을 통한 모델 크기 감소는 또한 DNN을 통합하는 모바일 애플리케이션의 저장 및 전송을 용이하게 합니다.
이 목표를 달성하기 위해 원래 정확도를 유지하는 방식으로 네트워크 연결을 pruning하는 방법을 제시합니다.
초기 학습 단계 후에 가중치가 임계값보다 낮은 모든 연결을 제거합니다.
이 pruning은 완전히 연결된 조밀한 레이어를 희소 레이어로 변환합니다.
이 첫 번째 단계에서는 네트워크 토폴로지를 학습합니다 - 중요하지 않은 연결을 학습하고 중요하지 않은 연결을 제거합니다.
그런 다음 희소 네트워크를 재학습하여 나머지 연결이 제거된 연결을 보완할 수 있습니다.
pruning 및 재학습 단계는 네트워크 복잡성을 더욱 줄이기 위해 반복적으로 반복될 수 있습니다.
실제로, 이 학습 과정은 포유류의 뇌[8][9]에서와 마찬가지로 가중치 외에도 네트워크 연결을 학습하는데, 여기서 시냅스는 어린이가 발달한 첫 몇 달 동안 생성되고, 이후 거의 사용되지 않는 연결의 점진적인 pruning을 수행하여 일반적인 성인 값으로 떨어집니다.
2 Related Work
신경망은 일반적으로 과도하게 매개 변수화되며, 딥러닝 모델에 대해 상당한 중복성이 있습니다 [10].
이로 인해 계산과 메모리가 모두 낭비됩니다.
중복성을 제거하기 위한 다양한 제안이 있었습니다: Vanhouke et al. [11]은 8비트 정수(vs 32비트 부동소수점) 활성화로 고정점 구현을 탐구했습니다.
Denton et al. [12]은 매개 변수의 적절한 낮은 순위 근사치를 찾고 정확도를 원래 모델의 1% 이내로 유지하여 신경망의 선형 구조를 활용했습니다.
유사한 정확도 loss로, Gong et al. [13]은 벡터 양자화를 사용하여 심층 convnet을 압축했습니다.
이러한 근사 및 양자화 기술은 네트워크 pruning과 직교하며, 추가 이득을 얻기 위해 함께 사용될 수 있습니다 [14].
fully connected 레이어를 전역 평균 풀링으로 대체하여 신경망의 매개 변수 수를 줄이려는 다른 시도가 있었습니다.
Network in Network 아키텍처[15] 및 GoogleLenet[16]는 이 아이디어를 채택하여 여러 벤치마크에서 SOTA 결과를 달성합니다.
그러나 transfer learning, 즉 ImageNet 데이터 세트에서 학습된 피쳐를 재사용하고 fully connected 레이어만 미세 조정하여 새 작업에 적용하는 것은 이 접근 방식에서 더 어렵습니다.
이 문제는 Szegedy et al. [16]에 의해 지적되었으며 transfer learning을 가능하게 하기 위해 네트워크 맨 위에 선형 레이어를 추가하도록 동기를 부여합니다.
네트워크 pruning은 네트워크 복잡성을 줄이고 과적합을 줄이기 위해 사용되었습니다.
pruning에 대한 초기 접근 방식은 편향된 가중치 감소였습니다 [17].
Optimal Brain Damage [18] 및 Optimal Brain Surgent [19] 네트워크를 pruning하여 loss 함수의 Hessian을 기반으로 연결 수를 줄이고 이러한 pruning이 가중치 감소와 같은 크기 기반 pruning보다 더 정확하다고 제안합니다.
그러나 2차 미분은 추가 계산이 필요합니다.
HashedNets [20]는 해시 함수를 사용하여 연결 가중치를 해시 버킷으로 임의로 그룹화하여 동일한 해시 버킷 내의 모든 연결이 단일 매개 변수 값을 공유하도록 함으로써 모델 크기를 줄이는 최근의 기술입니다.
이 기술은 pruning을 통해 유용할 수 있습니다.
Shi et al. [21] 및 Weinberger et al. [22]에서 지적한 바와 같이 희소성은 해시 충돌을 최소화하여 해시 피쳐를 더욱 효과적으로 만듭니다.
HashedNets은 pruning과 함께 사용하여 매개 변수를 훨씬 더 효율적으로 절약할 수 있습니다.
3 Learning Connections in Addition to Weights
우리의 pruning 방법은 그림 2와 같이 3단계 프로세스를 사용하며, 이 프로세스는 일반적인 네트워크 학습을 통해 연결을 학습하는 것으로 시작됩니다.
그러나 기존의 학습과 달리, 우리는 가중치의 최종 값을 학습하는 것이 아니라, 어떤 연결이 중요한지를 배우고 있습니다.
두 번째 단계는 저중량 연결을 잘라내는 것입니다.
가중치가 임계값 미만인 모든 연결은 네트워크에서 제거되며, 그림 3과 같이 조밀한 네트워크를 희소 네트워크로 변환합니다.
마지막 단계는 네트워크를 재학습하여 나머지 희소 연결에 대한 최종 가중치를 학습합니다.
이 단계는 매우 중요합니다.
제거된 네트워크가 재학습 없이 사용될 경우 정확도에 상당한 영향을 미칩니다.
3.1 Regularization
올바른 정규화를 선택하면 pruning 및 재학습 성능에 영향을 미칩니다.
L1 정규화는 0이 아닌 매개 변수를 처벌하여 0에 가까운 더 많은 매개 변수를 생성합니다.
이것은 pruning 후에 재학습 전에 더 나은 정확도를 제공합니다.
그러나 나머지 연결은 L2 정규화보다 좋지 않아 재학습 후 정확도가 떨어집니다.
전반적으로 L2 정규화는 최상의 pruning 결과를 제공합니다.
이에 대해서는 실험 섹션에서 자세히 설명합니다.
3.2 Dropout Ratio Adjustment
Dropout [23]은 과적합을 방지하기 위해 널리 사용되며, 이는 재학습에도 적용됩니다.
그러나 재학습 중에는 모델 용량의 변화를 고려하여 탈락률을 조정해야 합니다.
dropout에서 각 매개 변수는 학습 중에 확률적으로 삭제되지만 추론 중에 다시 표시됩니다.
pruning에서 매개 변수는 pruning 후 영원히 삭제되며 학습과 추론 모두 동안 돌아올 기회가 없습니다.
매개변수가 희박해지면 분류기가 가장 유용한 예측 변수를 선택하므로 예측 분산이 훨씬 적어 과적합이 줄어듭니다.
pruning은 이미 모델 용량을 감소시켰기 때문에 재학습 dropout 비율은 더 작아야 합니다.
정량적으로, C_i를 레이어 i의 연결 수, 원래 네트워크의 경우 C_io, 재학습 후 네트워크의 경우 C_ir, N_i를 레이어 i의 뉴런 수라고 합니다.
드롭아웃은 뉴런에서 작동하고 C_i는 N_i와 4차적으로 다르기 때문에, 식 1에 따르면, 매개 변수를 pruning한 후 드롭아웃 비율은 식 2를 따라야 합니다, 여기서 D_o는 원래 드롭아웃 비율, D_r은 재학습 중 드롭아웃 비율을 나타냅니다.
3.3 Local Pruning and Parameter Co-adaptation
재학습 동안, pruning된 레이어를 다시 초기화하는 것보다 pruning에서 살아남은 연결에 대한 초기 학습 단계의 가중치를 유지하는 것이 더 좋습니다.
CNN에는 취약한 공동 적응 피쳐가 포함되어 있습니다 [24]: 그레이디언트 강하는 네트워크가 초기에 학습될 때 좋은 솔루션을 찾을 수 있지만 일부 레이어를 다시 초기화하고 재학습한 후에는 그렇지 않습니다.
따라서 제거된 레이어를 재학습할 때는 다시 초기화하는 대신 생존 매개 변수를 유지해야 합니다.
보존 가중치로 시작하여 제거된 레이어를 재학습하면 전체 네트워크를 통해 역 전파할 필요가 없기 때문에 계산이 덜 필요합니다.
또한, 신경망은 네트워크가 깊어질수록 vanishing gradient 문제[25]를 겪기 쉬우며, 이는 심층 네트워크에 대한 pruning 오류를 복구하기 어렵게 만듭니다.
이를 방지하기 위해 CONV 계층에 대한 매개 변수를 수정하고 FC 계층을 pruning한 후에만 FC 계층을 재학습하고 그 반대의 경우도 마찬가지입니다.
3.4 Iterative Pruning
올바른 연결을 학습하는 것은 반복적인 과정입니다.
pruning 후 재학습은 한 번의 반복이며, 이러한 여러 번의 반복 후 최소 연결 수를 찾을 수 있습니다.
이 방법은 정확도를 잃지 않고 단일 단계 공격적 pruning에 비해 AlexNet에서 pruning 속도를 5배에서 9배로 높일 수 있습니다.
각 반복은 최상의 연결을 찾는다는 점에서 탐욕스러운 검색입니다.
또한 절대값을 기반으로 확률적으로 pruning 매개 변수를 실험했지만, 이는 더 나쁜 결과를 낳았습니다.
3.5 Pruning Neurons
연결을 제거한 후 입력 연결이 0이거나 출력 연결이 0인 뉴런을 안전하게 제거할 수 있습니다.
이 pruning은 pruning된 뉴런에 대한 모든 연결을 제거함으로써 더욱 진행됩니다.
재학습 단계는 죽은 뉴런이 0 입력 연결과 0 출력 연결을 모두 갖는 결과에 자동으로 도달합니다.
이는 그래디언트 하강 및 정규화로 인해 발생합니다.
입력 연결이 0인 뉴런(또는 출력 연결이 0인 뉴런)은 최종 loss에 영향을 주지 않으므로 출력 연결(또는 입력 연결)에 대해 그래디언트가 각각 0이 됩니다.
정규화 항만 가중치를 0으로 적용합니다.
따라서, 죽은 뉴런은 재학습 동안 자동으로 제거될 것입니다
4 Experiments
우리는 Caffe [26]에서 네트워크 pruning을 구현했습니다.
Caffe는 각 가중치 텐서에 대해 네트워크 작동 중에 제거된 매개 변수를 무시하는 마스크를 추가하도록 수정되었습니다.
pruning 임계값은 품질 매개변수에 레이어 가중치의 표준 편차를 곱한 값으로 선택됩니다.
Nvidia TitanX 및 GTX980 GPU에 대한 실험을 수행했습니다.
우리는 네 가지 대표적인 네트워크를 제거했습니다: MNIST의 Lenet-300-100 및 Lenet-5, ImageNet의 AlexNet 및 VGG-16.
pruning 전과 후의 네트워크 매개변수와 정확도는 표 1에 나와 있습니다.
4.1 LeNet on MNIST
먼저 LeNet-300-100 및 LeNet-5 네트워크를 사용하여 MNIST 데이터 세트를 실험했습니다[4].
LeNet-300-100은 각각 300개와 100개의 뉴런이 있는 두 개의 숨겨진 레이어가 있는 fully connected 네트워크로 MNIST에서 1.6%의 오류율을 달성합니다.
LeNet-5는 두 개의 컨볼루션 레이어와 두 개의 fully connected 레이어가 있는 컨볼루션 네트워크로 MNIST에서 0.8%의 오류율을 달성합니다.
pruning 후, 네트워크는 원래 네트워크의 학습 속도의 1/10로 재학습됩니다.
표 1은 pruning을 통해 이러한 네트워크에서 12배의 매개 변수가 절약된다는 것을 보여줍니다.
네트워크의 각 레이어에 대해 테이블은 원래 가중치 수(왼쪽에서 오른쪽), 해당 계층의 활성화를 계산하는 부동 소수점 작업 수, 0이 아닌 활성화의 평균 백분율, pruning 후 0이 아닌 가중치의 백분율 및 실제로 필요한 부동 소수점 작업의 백분율을 보여줍니다.
흥미로운 부산물은 네트워크 pruning이 시각적 어텐션 영역을 감지한다는 것입니다.
그림 4는 LeNet-300-100의 첫 번째 fully connected 레이어의 희소성 패턴을 보여주며, 매트릭스 크기는 784x300입니다.
28x28 입력 픽셀에 해당하는 28개의 밴드, 각 밴드의 폭 28개가 있습니다.
0이 아닌 파라미터를 나타내는 그림의 색상 영역은 이미지의 중심에 해당합니다.
숫자는 이미지의 중앙에 기록되므로 중요한 매개 변수입니다.
그래프는 왼쪽과 오른쪽에 희소하며 이미지의 위쪽과 아래쪽에서 덜 중요한 영역에 해당합니다.
pruning 후, 신경망은 이미지의 중심을 더 중요하게 생각하고 주변 영역에 대한 연결은 더 심하게 pruning됩니다.
4.2 AlexNet on ImageNet
우리는 1.2M 학습 예제와 50k 검증 예제를 가진 ImageNet ILSVRC-2012 데이터 세트에서 pruning의 성능을 추가로 검토합니다.
우리는 5개의 컨볼루션 레이어와 3개의 fully connected 레이어에 걸쳐 6,100만 개의 매개 변수를 가진 AlexNet Caffe 모델을 참조 모델로 사용합니다.
AlexNet Caffe 모델은 57.2%의 1위 정확도와 80.3%의 5위 정확도를 달성했습니다.
원본 AlexNet은 NVIDIA Titan X GPU에서 학습하는 데 75시간이 걸렸습니다.
pruning 후 전체 네트워크는 원래 네트워크의 초기 학습 속도의 100분의 1로 재학습됩니다.
pruning한 AlexNet을 재학습하는 데 173시간이 걸렸습니다.
pruning은 모델을 반복적으로 프로토타입화할 때 사용되지 않고 모델이 배치 준비가 되었을 때 모델 축소에 사용됩니다.
따라서 재학습 시간은 걱정할 필요가 없습니다.
표 1은 정확도에 영향을 미치지 않고 AlexNet을 원래 크기의 1/9로 제거할 수 있으며 계산량을 3배 줄일 수 있음을 보여줍니다.
4.3 VGG-16 on ImageNet
AlexNet에 대한 유망한 결과와 함께 동일한 ILSVRC-2012 데이터 세트에서 더 큰 최신 네트워크인 VGG-16[27]도 살펴보았습니다.
VGG-16은 훨씬 더 많은 컨볼루션 레이어를 가지고 있지만 여전히 fully connected 레이어는 3개뿐입니다.
유사한 방법론에 따라, 우리는 표 5에 나타난 바와 같이 가중치 수를 크게 줄이기 위해 컨볼루션 레이어와 fully connected 레이어를 공격적으로 제거했습니다.
우리는 pruning과 재학습을 다섯 번 반복했습니다.
VGG-16 결과는 AlexNet의 결과와 마찬가지로 매우 유망합니다.
네트워크 전체가 원래 크기의 7.5%(13배 더 작음)로 축소되었습니다.
특히, fully connected 두 개의 가장 큰 레이어는 각각 원래 크기의 4% 미만으로 제거될 수 있습니다.
이러한 감소는 (학습 중 배치 처리와 달리) 이미지 간에 fully connected 레이어의 재사용이 거의 없는 실시간 이미지 처리에 매우 중요합니다.
5 Discussion
정확도와 매개변수 수 사이의 균형 곡선은 그림 5에 나와 있습니다.
더 많은 매개 변수를 제거할수록 정확도가 떨어집니다.
우리는 5개의 트레이드 오프 라인을 제공하기 위해 반복 pruning과 함께 재학습을 사용하거나 사용하지 않고 L1 및 L2 정규화를 실험했습니다.
실선과 점선을 비교하면 재학습의 중요성은 분명합니다: 재학습을 받지 않으면 정확도가 훨씬 빨리 떨어지기 시작합니다.
원래 연결의 1/10이 아니라 원래 연결의 1/3이 됩니다.
재학습 없이도 정확성을 잃지 않고 연결 수를 2배로 줄일 수 있는 "free lunch"를 제공하는 반면 재학습을 통해 연결 수를 9배로 줄일 수 있다는 점이 흥미롭습니다.
L1 정규화는 더 많은 매개 변수를 0에 가깝게 밀어내기 때문에 pruning(파란색 및 보라색 점선) 직후 L2보다 더 나은 정확도를 제공합니다.
그러나 노란색 선과 녹색 선을 비교하면 값을 0으로 더 밀어내는 데 아무런 이점이 없기 때문에 L2가 재학습 후 L1을 능가한다는 것을 알 수 있습니다.
한 가지 확장은 pruning을 위해 L1 정규화를 사용하고 재학습을 위해 L2를 사용하는 것이지만, 이것은 두 단계 모두에 대해 L2를 사용하는 것에 그치지 않았습니다.
한 모드의 파라미터는 다른 모드에 잘 적응하지 못합니다.
가장 큰 이점은 반복 pruning(단일 원이 있는 빨간색 실선)를 통해 얻을 수 있습니다.
여기서 우리는 pruning되고 재학습된 네트워크(원이 있는 녹색 실선)를 가져다가 다시 pruning하고 재학습합니다.
이 곡선의 가장 왼쪽 점은 8배로 pruning된 80%(5배 pruning)의 녹색 선의 점에 해당합니다.
9배의 정확도 loss는 없습니다.
10배가 되어야 정확도가 급격히 떨어지기 시작합니다.
두 개의 녹색 점은 원래 모형보다 약간 더 나은 정확도를 달성합니다.
우리는 이러한 정확도 향상이 네트워크의 올바른 용량을 찾는 pruning으로 인해 과적합이 감소하기 때문이라고 생각합니다.
CONV 및 FC 레이어는 모두 제거할 수 있지만 감도가 다릅니다.
그림 6은 네트워크 pruning에 대한 각 레이어의 민감도를 보여줍니다.
그림은 매개 변수가 레이어별로 제거됨에 따라 정확도가 떨어지는 방법을 보여줍니다.
CONV 레이어(왼쪽)는 fully connected 레이어(오른쪽)보다 pruning에 더 민감합니다.
입력 이미지와 직접 상호 작용하는 첫 번째 컨볼루션 레이어는 pruning에 가장 민감합니다.
우리는 이 민감도가 입력 레이어가 3개의 채널만 가지고 있기 때문에 다른 컨볼루션 레이어보다 중복성이 적기 때문이라고 추측합니다.
민감도 결과를 사용하여 각 레이어의 임계값을 찾았습니다: 예를 들어, 가장 작은 임계값이 첫 번째 컨볼루션 레이어인 가장 민감한 레이어에 적용되었습니다.
제거된 레이어를 희소 행렬로 저장하면 저장 오버헤드가 15.6%에 불과합니다.
절대 인덱스가 아닌 상대 인덱스를 저장하면 FC 레이어 인덱스가 사용하는 공간이 5비트로 줄어듭니다.
마찬가지로 CONV 레이어 인덱스는 8비트로만 표시할 수 있습니다.
pruning 후 AlexNet 및 VGGNet의 스토리지 요구사항은 액세스하는 데 훨씬 더 많은 에너지가 필요한 오프칩 DRAM 대신 모든 가중치를 칩에 저장할 수 있을 정도로 작습니다(표 1).
우리는 희소 계산에서 범용 하드웨어의 한계를 고려하여 희소 DNN에 특화된 고정 기능 하드웨어를 위한 pruning 방법을 목표로 하고 있습니다.
그림 7은 pruning 전과 pruning 후의 가중치 분포 히스토그램을 보여줍니다.
가중치는 AlexNet의 첫 번째 fully connected 레이어에서 얻은 것입니다.
두 패널의 y축 척도가 다릅니다.
가중치의 원래 분포는 꼬리가 빠르게 떨어지는 0을 중심으로 합니다.
거의 모든 매개변수는 [-0.015, 0.015] 사이입니다.
pruning 후에는 큰 중앙 영역이 제거됩니다.
네트워크 매개 변수는 재학습 단계에서 자체적으로 조정됩니다.
그 결과 매개변수가 바이모달 분포를 형성하고 [-0.025, 0.025] 사이에서 x축 전체에 걸쳐 더 확산됩니다.
6 Conclusion
우리는 올바른 연결을 찾아 정확도에 영향을 미치지 않고 신경망의 에너지 효율과 저장을 개선하는 방법을 제시했습니다.
포유류 뇌에서 학습이 작동하는 방식에 의해 부분적으로 동기 부여된 우리의 방법은 어떤 연결이 중요한지 학습하고 중요하지 않은 연결을 pruning한 다음 남아 있는 희소 네트워크를 재학습함으로써 작동합니다.
우리는 ImageNet에서 AlexNet과 VGGNet에 대한 실험을 강조하여 fully connected 레이어와 컨볼루션 레이어를 모두 제거하여 정확도를 잃지 않고 연결 수를 9배에서 13배까지 줄일 수 있음을 보여줍니다.
따라서 실시간 이미지 처리를 위한 메모리 용량 및 대역폭 요구사항이 줄어들기 때문에 모바일 시스템에 쉽게 배치할 수 있습니다.
'Deep Learning' 카테고리의 다른 글
Faster Segment Anything: Towards Lightweight SAM for Mobile Applications (0) | 2024.10.15 |
---|---|
Deep Generative Filter for Motion Deblurring (0) | 2024.01.02 |
Segment Anything (0) | 2023.04.12 |
Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (0) | 2022.11.08 |
[딥러닝] Multi-variable linear regression (0) | 2021.01.02 |