반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Archives
Today
Total
관리 메뉴

테크매니아

pruning 관련 논문 : Learning both Weights and Connections for Efficient Neural Networks 본문

카테고리 없음

pruning 관련 논문 : Learning both Weights and Connections for Efficient Neural Networks

SciomageLAB 2024. 10. 18. 00:18
반응형

이 논문은 효율적인 신경망을 위한 가중치와 연결부 학습에 대한 논문이다. NIPS 2015에서 발표되었다.
저자들은 스탠포드와 앤비디아 소속이다. 여기에 삽입된 리소스들은 다른 데서도 많이 보인다.
References를 제외하면 8장정도 이고 다단도 없고 그림도 많아서 읽기 편해 보인다.
arxiv : https://arxiv.org/abs/1506.02626

이 글은 원문을 구글 번역기와 파파고 번역기로 번역하고 해설을 추가 했습니다.
하기 내용은 논문의 취지를 사실 그대로 번역한 것이 아닙니다.

주요 관심 내용이 아닌 부분들은 임의로 생략되었습니다.

Abstract

신경망은 계산 집약적이고 메모리 집약적이어서 임베디드 시스템에 배포하기 어렵다. 또한 기존 네트워크는 훈련이 시작되기 전에 아키텍처를 수정한다. 결과적으로, 학습으로 아키텍처를 개선할 수 없다. 이러한 제한을 해결하기 위해 중요한 연결만 학습하여 정확도에 영향을 주지 않고 신경망에 필요한 저장 및 계산을 몇 배로 줄이는 방법을 설명한다. 우리의 방법은 3단계 방법을 사용하여 중복 연결을 제거한다. (1) 먼저, 우리는 어떤 연결이 중요한지 알 수 있도록 네트워크를 학습 시킨다. (2) 다음으로 중요하지 않은 연결을 정리한다. (3) 마지막으로 네트워크를 다시 훈련하여 나머지 연결의 가중치를 미세 조정합니다. ImageNet 데이터 세트에서, 우리의 방법은 정확도 손실 없이 AlexNet의 매개 변수 수를 6100만 개에서 670만 개로 9배 줄였다. VGG-16에 대한 비슷한 실험에서는 파라미터의 총 수가 13배, 1억 3천 8백만 개에서 1030만 개로 감소될 수 있으며, 정확성 손실 없이 다시 감소될 수 있다.

1. Introduction

신경망은 컴퓨터 비전에서 음성 인식 및 자연어 처리에 이르는 응용 분야에서 보편화되었다. 우리는 시간이 지남에 따라 증가한 컴퓨터 비전 작업에 사용되는 컨볼루션 신경망을 고려한다. 1998년 Lecun 등은 손으로 쓴 숫자를 분류하기 위해 1M 미만의 매개 변수를 가진 CNN 모델 LeNet-5를 설계한 반면, 2012년에 AlexNet은 60M 파라미터로 ImageNet 대회에서 우승했다.

이러한 대규모 신경망은 매우 강력하지만, 그 크기는 상당한 스토리지, 메모리 대역폭 및 계산 리소스를 소비한다. 임베디드 모바일 애플리케이션의 경우 이러한 리소스 요구는 엄청나게 커집니다. 그림 1은 45nm CMOS 프로세스에서의 기본 산술 및 메모리 작동에 대한 에너지 비용을 보여줍니다. 이 데이터를 통해 연결 당 에너지는 메모리 액세스에 의해 좌우되며, 온칩 SRAM의 32비트 계수에 대한 5pJ부터 오프칩 DRAM의 32비트 계수에 대한 640pJ까지의 범위를 확인할 수 있다. 대규모 네트워크는 온칩 스토리지에 적합하지 않으므로 비용이 더 많이 드는 DRAM 액세스가 필요하다. 예를 들어, 20Hz에서 10억 연결 신경망을 실행하려면 (20Hz)(1G)(640pJ) = 12.8이 필요합니다. DRAM 액세스 전용 - 일반적인 모바일 장치의 전원 범위를 훨씬 벗어납니다.

(전기를 많이 먹는다는 뜻인 듯)

네트워크를 정리하는 우리의 목표는 그러한 대규모 네트워크를 실행하는 데 필요한 에너지를 줄여 모바일 장치에서 실시간으로 실행할 수 있도록 하는 것이다. 푸르닝으로 인한 모델 크기 감소는 DNN을 포함하는 모바일 애플리케이션의 저장과 전송을 용이하게 한다.

이 목표를 달성하기 위해, 우리는 원래 정확도를 유지하는 방식으로 네트워크 연결을 제거하는 방법을 제시한다. 처음에 학습 단계 후에, 우리는 가중치가 임계값 보다 낮은 모든 연결을 제거한다. 이 푸르닝은 조밀하고 완전히 연결된 레이어를 sparse layer(희소 레이어)로 변환한다. 이 첫 번째 단계는 네트워크의 토폴로지를 학습합니다. 즉, 어떤 연결이 중요한지 학습하고 중요하지 않은 연결을 제거한다. 그런 다음 나머지 연결이 제거된 연결을 보상할 수 있도록 희소 네트워크를 재교육한다. 프리능 및 재학습 단계는 네트워크 복잡성을 더욱 줄이기 위해 반복될 수 있다. 사실상, 이 학습 과정은 가중치와 더불어 네트워크 연결을 학습한다. 포유류의 뇌와 마찬가지로, 시냅스는 아이가 발달한 후 처음 몇 달 동안 생성되고, 그 다음에는 거의 사용되지 않는 연결이 점진적으로 실행되며, 일반적인 성인 가치로 떨어진다.

요악하자면.... 학습 -> 쭉 보고 안(덜) 쓰는 연결(sparse layer)을 삭제 -> 재학습(반복)

2. Related Work

신경망은 일반적으로 지나치게 매개 변수화되어 있으며 딥러닝 모델에 상당한 중복성이 있다. 이로 인해 계산과 메모리가 모두 낭비된다. 중복을 없애기 위한 다양한 제안들이 있었다: Vanhoucke 외 Improving the speed of neural networks on cpus. In Proc. Deep Learning and Unsupervised Feature Learning NIPS Workshop, 2011은 8비트 정수(32비트 부동 소수점 대비) 활성화로 fixed-point 구현을 탐색했다. Denton 외 Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, pages 1269–1277, 2014는 매개 변수의 적절한 낮은 순위 근사치를 찾아 정확도를 원래 모델의 1% 이내로 유지함으로써 신경망의 선형 구조를 이용했다. Gong 외 Compressing deep convolutional networks using vector quantization. arXiv preprint arXiv:1412.6115, 2014도 비슷한 정확성을 손실로 벡터 양자화를 사용하는 압축 된 deep convnets을 연구했습니다. 이러한 근사 및 정량화 기법은 네트워크 푸르닝과 직교하며, 추가 이득을 얻기 위해 함께 사용할 수 있다.

fully connected layer를 global average pooling으로 대체하여 신경망의 매개 변수 수를 줄이려는 다른 시도가 있었다. 네트워크 아키텍처 및 GoogleLenet은 이 아이디어를 채택하여 여러 벤치마크에서 최첨단 결과를 달성합니다. 그러나, transfer learning, 즉 ImageNet 데이터 세트에서 학습한 기능을 재사용하고 fully connected layers만 fine-tuning하여 새로운 작업에 적용하는 것은 이 접근 방식에서 더 어렵다. 이 문제는 Szegedy의 Going deeper with convolutions에 의해 언급되었다. 그리고 transfer learning을 가능하게 하기 위해 네트워크 상단에 linear layer를 추가하도록 동기를 부여한다.

네트워크 푸르닝은 네트워크 복잡성을 줄이고 과적합성을 줄이기 위해 사용되어 왔다. 푸르닝의 초기 접근은 편중된 weight를 줄이는 것이였다. Optimal Brain Damage(Neural Information Processing Systems, pages 598–605. Morgan Kaufmann, 1990.)와 Optimal Brain Surgeon(Advances in neural information processing systems, pages 164–164, 1993)은 손실 함수의 Hessian을 기반으로 연결 수를 줄이기 위해 네트워크를 정리하고 이러한 정리가 weight 감소와 같은 크기 기반 정리보다 더 정확하다고 제안합니다. 그러나 2차 파생 모델은 추가 계산이 필요합니다.

HashedNets은 해시 함수를 사용하여 연결 가중치를 해시 버킷으로 임의로 그룹화 하여 모델 크기를 줄이는 (논문 쓰던 당시의)최신 기술입니다. 따라서 동일한 해시 버킷 내의 모든 연결이 단일 매개 변수 값을 공유합니다. 이 기술은 푸르닝의 이점을 얻을 수 있다. HashedNets은 더 나은 매개 변수 절약 효과를 제공하기 위해 푸르닝 작업과 함께 사용될 수 있다.

# 3. Learning Connections in Addition to Weights

우리의 푸르닝 방법은 그림 2에서 설명한 것처럼 3단계 프로세스를 사용하며, 이는 정상적인 네트워크 훈련을 통해 연결을 학습하는 것으로 시작한다. 그러나 기존의 학습과 달리, 우리는 Weights 의 최종 값을 학습 하는게 아니라, 어떤 연결이 중요 한 지를 학습하고 있다.

두 번째 단계는 low-weight 연결부를 제거하는 것입니다. weights가 임계값 보다 낮은 모든 연결은 네트워크에서 제거되며, 그림 3에서와 같이 조밀한(dense) 네트워크를 희소(sparse) 네트워크로 변환한다. 마지막 단계는 네트워크를 재학습하여 나머지 sparse connections(희소 연결)에 대한 최종 weights를 학습한다. 이 단계는 매우 중요하다. 재학습 없이 폐기된 네트워크를 사용할 경우 정확도에 상당한 영향을 미친다.

3.1. Regularization

올바른 정규화를 선택하면 푸르닝 및 재학습의 성능에 영향을 미칩니다. L1 정규화는 0이 아닌 매개 변수에 패널티를 줘서 0에 가까운 더 많은 매개 변수를 생성한다. 이것은 푸르닝 후 재학습 전에 더 나은 정확도를 제공한다. 그러나 나머지 연결부는 L2 정규화보다 좋지 않으므로 재교육 후 정확도가 떨어진다. 전반적으로 L2 정규화는 최상의 푸르닝 결과를 제공한다. 이는 실험 섹션에서 자세히 설명합니다.

3.2. Dropout Ratio Adjustment

드롭아웃은 over-fitting(과적합)을 방지하기 위해 널리 사용되며, 이는 재학습에도 적용된다. 그러나 재학습 중에는 모델 용량의 변화를 고려하도록 드롭아웃 비율을 조정해야 합니다. 드롭아웃에서 각 매개변수는 학습 중에는 떨어질 가능성이 높지만, 추론 중에 돌아올 것이다. 푸르닝에서 파라미터는 푸르닝이 끝난 후 영원히 삭제되며 학습과 추론 중 모두 돌아오지 않는다. 모수가 희박해지면 분류기는 가장 유용한 예측 변수를 선택하게 되므로 예측 분산이 훨씬 적어 over-fitting (과적합)이 감소한다. 푸르닝은 이미 모델 용량을 줄였기 때문에 재학습 Dropout 비율은 더 작아야 한다.

정량적으로, Ci는 계층 i의 연결 수, Cio는 원래 네트워크 연결 수, Cir은 재 학습 후 네트워크 연결 수, Ni는 계층 i의 뉴런 수 하고 한다. Dropout은 뉴런에 작용하고 Ci는 Ni에 따라 2차 적으로 변화하므로, 방정식 1에 따르면, 매개 변수를 푸르닝 한 후 Dropout 비율은 원래 Dropout 비율을 나타내는 수식 2를 따라야 한다. 여기서 Do는 원래 Dropout 비율을 나타내며, Dr은 재학습 중 Dropout 비율을 나타낸다.

수식이 나오니까 또 어려워 집니다..
수식1 = i 레이어의 연결 수 = i레이어의 뉴런 수 * 이전 레이어의 뉴런 수
이건 당연히.. 이전 레이어 뉴런 수와 현재 레이어의 뉴런 수를 곱한 것이 레이어 연결 수가 됩니다.
예를 들어 1번 레이어 뉴런이 200개고, 2번 레이어 뉴런이 300개라면, 2번 레이어의 연결 수는 60,000개가 됩니다.

수식2 = 재학습 중 Dropout 비율 = 원래 Dropout 비율 * root(재 학습 후 네트워크 뉴런 수 / 원래 네트워크 뉴런 수)

3.3. Local Pruning and Parameter Co-adaptation

재학습 동안, 푸르닝 계층들을 다시 초기화하는 것보다 푸르닝에서 살아남은 연결에 대한 초기 훈련 단계의 가중치를 유지하는 것이 더 낫다. CNN에는 취약한 공동 적응 기능이 포함되어 있다: gradient descent(경사 하강)는 네트워크가 처음에 훈련되었을 때 좋은 해결책을 찾을 수 있지만, 일부 계층을 다시 초기화하고 다시 훈련한 후에는 찾을 수 없다. 따라서 우리가 폐기된 계층을 재교육할 때, 우리는 그것들을 다시 초기화하지 말고 남아있는 매개 변수를 유지해야 한다.

네트워크 푸르닝은 예측 성능의 저하 없이 9배에서 13배 까지의 매개 변수를 절약할 수 있다.

유지된 weights로 시작해서 정리된 계층을 다시 학습하려면 전체 네트워크를 통해 back propagate(역전파)될 필요가 없기 때문에 계산이 덜 필요하다. 또한 신경망은 네트워크가 깊어질수록 사라지기 쉬운 그레이디언트 문제를 겪기 쉬우며, 이로 인해 심층 네트워크의 프루닝 오류를 복구하기가 더 어려워진다. 이를 방지하기 위해, 우리는 CONV 계층에 대한 매개 변수를 고정하고 FC 계층을 정리한 후에만 FC 계층을 재학습하고 그 반대도 마찬가지이다.

3.4. Iterative Pruning

올바른 연결을 배우는 것은 반복적인 과정이다. 재학습에 따른 프루닝은 한 번의 반복으로, 그러한 반복 후에 최소 숫자 연결을 찾을 수 있다. 정확성 손실 없이 이 방법은 한 단계 공격적인 프루닝과 비교하여 AlexNet에서 프루닝 속도를 5배에서 9배까지 높일 수 있다. 각각의 반복은 우리가 최고의 연결을 찾는다는 점에서 탐욕스러운 검색이다. 우리는 또한 절대값을 기반으로 확률적으로 프루닝 매개 변수를 실험했지만, 이는 더 나쁜 결과를 낳았다.

3.5. Pruning Neurons

연결 프루닝 후, 입력 연결이 0이거나 출력 연결이 0인 뉴런은 안전하게 정리될 수 있다. 이 프루닝은 프루닝된 뉴런에 대한 모든 연결부를 제거함으로써 더 나아진다. 재학습 단계는 죽은 뉴런이 0 입력 연결과 0 출력 연결을 모두 갖는 결과에 자동으로 도달한다. 이 문제는 경사 하강 및 정규화로 인해 발생한다. 0개의 입력 연결(또는 0개의 출력 연결)을 갖는 뉴런은 최종 손실에 기여하지 않고, 각각 출력 연결(또는 입력 연결)에 대해 0의 기울기를 유도한다. 정규화 항만 가중치를 0으로 밀어낸다. 따라서, 죽은 뉴런은 재학습 중에 자동으로 제거될 것이다.

4. Experiments

우리는 카페에서 네트워크 푸르닝을 구현했다. 카페는 각 weight 텐서에 대해 네트워크 작동 중에 폐기된 매개 변수를 무시하는 마스크를 추가하기 위해 수정되었다. 푸르닝 임계값은 레이어 가중치의 표준 편차에 곱한 품질 매개 변수로 선택된다. 우리는 엔비디아 타이탄X와 GTX980 GPU에 대한 실험을 수행했다.

우리는 이미지넷의 AlexNet 및 VGG-16과 함께 MNIST의 Lenet-300-100 및 Lenet-5의 네 가지 대표적인 네트워크를 푸르닝 했다. 푸르닝 전후의 네트워크 파라미터와 정확도는 표 1에 나타나 있다.

4.1. LeNet on MNIST

(각 데이터셋에서 어느정도 성능이 나왔다는 내용. 생략합니다.)

4.2. AlexNet on ImageNet

(각 데이터셋에서 어느정도 성능이 나왔다는 내용. 생략합니다.)

4.3. VGG-16 on ImageNet

(각 데이터셋에서 어느정도 성능이 나왔다는 내용. 생략합니다.)

5 Discussion

정확도와 파라미터 수 사이의 트레이드 오프 곡선은 그림 5에 나와 있습니다. 더 많은 파라미터가 제거될수록 정확도는 떨어진다. 우리는 5개의 트레이드-오프 라인을 제공하기 위해 반복 프루닝과 함께 재학습을 포함하거나 포함하지 않고 L1 및 L2 정규화를 실험했다. 실선(재학습 했을 때)과 점선(재학습 안했을 때)을 비교하면 재학습의 중요성은 분명합니다. 재학습이 없으면 정확도가 훨씬 더 빨리 떨어지기 시작합니다. 원래 연결부의 1/10보다는 1/3이 더 빨리 떨어집니다. 재학습이 없어도 정확성을 잃지 않고 연결의 2배를 줄이는 '꽁짜 점심'을 하는 한편, 재교육으로 연결도 9배 줄일 수 있다는 점이 흥미롭다.

가로축 : 정리된 Parametes, 세로축 : 정확도)
상위 5개 정확도의 파라미터 감소 및 손실에 대한 트레이드-오프 곡선.
재학습 없이 연결을 학습할 때는 L1이 L2보다 성능이 우수한 반면,
재학습 할 때는 L2 정규화가 L1보다 성능이 우수하다.
반복적인 푸르닝은 최상의 결과를 제공합니다.

L1 정규화는 더 많은 매개 변수를 0에 가깝게 밀어내기 때문에 프루닝(파란색 및 보라색 선) 직후 L2보다 더 나은 정확도를 제공한다. 그러나 노란색 선과 녹색 선을 비교한 결과, L2가 재학습 후 L1보다 성능이 우수하다는 것을 알 수 있다. 한 가지 extension은 프루닝에는 L1 정규화를, 재훈련에는 L2 정규화를 사용하는 것이지만, 이는 단순히 두 단계 모두에 L2를 사용하는 것에 그치지 않았다. 한 모드의 파라미터가 다른 모드에 잘 적응하지 못합니다.

가장 큰 이득은 반복적인 프루닝(고체 원이 있는 빨간 선)에서 온다. 여기서 우리는 정리된 네트워크 및 재학습된 네트워크(원 모양의 녹색 실선)를 가져와서 다시 정리하고 재교육한다. 이 곡선의 가장 왼쪽 점은 녹색 선의 80%(5배 프루닝)에서 8배까지 프루닝된 점에 해당한다. 9배는 정확도가 저하되지 않습니다. 10배는 돼야 정확도가 급격히 떨어진다.

두 개의 녹색 점이 원래 모델보다 약간 더 나은 정확도를 달성한다.. 우리는 이러한 정확도 향상은 네트워크의 적절한 용량을 프루닝하여 과적합성을 감소시키기 때문이라고 믿는다.

AlexNet의 CONV 계층(왼쪽)과 FC 계층(오른쪽)에 대한 정리 민감도.

.CONV 계층과 FC 계층은 모두 제거될 수 있지만, 민감도는 다르다. 그림 6은 네트워크 프루닝에 대한 각 계층의 민감도를 보여준다. 그림은 계층별로 매개 변수가 제거될 때 정확도가 떨어지는 방법을 보여준다. CONV 레이어(왼쪽)는 FC 레이어(오른쪽)보다 프루닝에 더 민감하다. 입력 이미지와 직접 상호작용 하는 첫 번째 컨볼루션 레이어는 프루닝 작업에 가장 민감하다. 우리는 이 감도가 입력 계층이 3개의 채널만 가지므로 다른 컨볼루션 계층보다 중복성이 낮기 때문이라고 의심한다.

입력 레이어쪽이 조금만 프루닝 해도 정확도가 떨어지진다.
입력 레이어는 3개 채널이라 중복되는게 없으니 프루닝 하면 정확도가 떨어지는 걸로 해석하고 있다.
(반면 깊게 위치한 CONV4, CONV5는 불필요한, 안쓰는, 중복된, 0으로 채워진 연결이 많아서 프루닝에 효과적인듯)

폐기된 계층을 희소 행렬로 저장하면 스토리지 오버헤드가 15.6%에 불과합니다. 절대 인덱스가 아닌 상대 인덱스를 저장하면 FC 계층 인덱스가 차지하는 공간이 5비트로 줄어듭니다. 마찬가지로, CONV 계층 지수는 8비트만 사용하여 나타낼 수 있다.

반응형