정확도 손실 없이 뉴럴 네트워크의 99%를 제거할 수 있을까?

정확도 손실 없이 뉴럴 네트워크의 99%를 제거할 수 있을까?

여기 미디엄 글을 번역했습니다 :)

네트워크 파라미터 개수를 줄이는 것에는 다음과 같은 이점이 있다.

  1. Sparse 네트워크는 사이즈 축소뿐만 아니라 학습 속도의 장점이 있다.
    • 하드웨어 자원이 제한적인 경우(스마트폰 또는 임베디드 장비 등), 속도와 사이즈가 모델 가용 여부에 큰 영향을 미친다.
  2. 복잡한 모델은 과적합이 될 위험이 크다. 따라서, Search Space를 제한하는 것은 일반화(regularizer)의 역할을 하기도 한다.

그러나 파라미터를 줄이는 것은 단순한 작업이 아니다. 모델의 capacity를 축소시킨다는 것은 결국 정확도 감소를 불러올 수 있다. 따라서 성능과 복잡도 사이의 세밀한 균형을 맞춰야 한다.

  • Weight Pruning

모델 학습 이후에 파라미터를 줄이는 것은 가장 간단한 문제이다. 훈련 자체에는 별 도움이 되지 않는 방법이지만 추론 과정에서 계산량을 줄일 수 있기 때문이다.

파라미터(가중치)를 제거하는 과정을 보통 pruning이라고 한다. 이 용어는 Yann LeCun(외 2인) 의 Optimal Brain Damage(1990) 논문에서 찾아볼 수 있다.

그들이 제안하는 pruning 방법은 다음과 같다.

  1. 모델을 학습시킨다.
  2. 각 weight의 saliency(weight가 변화할 때 손실함수의 변화량)를 측정한다. 변화가 적을수록 해당 weight가 학습에 미치는 영향을 줄어든다.
  3. 낮은 saliency의 weight를 제거한다.(weight값을 0으로 설정하고 다음 과정을 진행)
  4. Step 1. 으로 돌아가서 pruned 모델을 재학습한다.

여기서 pruned된 weight로 학습을 계속 진행시킨다는 점이 중요하다. 논문 저자는 그렇게 하지 않을 경우, weight가 많이 제거됐을 때 loss 값이 증가한다고 말했다.

pruned된 네트워크를 재학습할 때 한 가지 문제점이 발생하다. 네트워크의 capacity가 줄어들었기 때문에 재학습이 더욱 더 어려워진다는 점이다. 이 문제점을 해결하기 위해 Lottery Ticket Hypothesis라고 불리는 솔루션이 제안되었다.

  • The Lottery Ticket Hypothesis

복권 당첨의 가능성은 매우 낮다. 예를 들어, 당신이 파워볼 게임을 한다면 티켓당 당첨 확률은 292,201,338 분의 1 정도이다. 그런데 만약에 그 티켓을 n개 산다면?

winning 확률: \(1\over292201338\)

not winning 확률: \(1-p\)

n개 티켓을 살 경우, not winning 확률: \((1-p)^n\)

즉, 적어도 하나는 winning일 확률: \(1- (1-p)^n\)

그리고 만약 n의 개수가 크다면 1과 가까울 수 있다.

이 내용을 뉴럴 네트워크와 연관지어보면 이렇다. 학습 이전에, 모델의 weight는 랜덤하게 초기화된다. 그렇다면 랜덤하게 초기화된 네트워크의 서브 네트워크가 “초기화 복원에 당첨”될 수 있을까? 이에 조나단 프랭클과 마이클 카빈은 “Lottery Ticket Hypothesis”(2018)를 언급했다.

무작위로 초기화된 밀도가 높은 뉴럴 네트워크는 최대 동일한 횟수의 반복 훈련을 받은 후 원래 네트워크의 테스트 정확도와 일치하도록 초기화된 하위 네트워크를 포함한다.

여기서 가장 중요한 문제는 최대 동일한 횟수의 training step으로 전체 네트워크와 비슷한 정확도를 달성하는 것이다. 앞서 말했듯이 이는 pruning의 가장 큰 도전이다. 모델링 능력의 감소로 인해 작은 네트워크를 훈련시키는 것은 더 어려울 수 있다.

어떻게 초기 복권 당첨자(initialization lottery winners)를 찾을 수 있을까? 존재하기는 할까? 논문의 저자들은 특정 네트워크 구조에서 그러한 서브 네트워크를 일관되게 식별할 수 있는 방법을 발견했다. 그들의 방법은 다음과 같다.

  1. 뉴럴 네트워크를 랜덤하게 초기화한다.
  2. 네트워크를 n 훈련 스탭만큼 학습시킨다.
  3. 크기가 가장 작은 k%의 가중치를 제거한다.
  4. 나머지 가중치를 임의 초기화했던 값으로 재설정한다.
  5. Step 2. 로 돌아가서 학습과 가지치기를 반복한다.

이 방법은 앞선 방법에 비해 2가지 주요 단계가 있다. 첫째는 가중치들이 단순히 크기에 의해 제거 대상이 된다는 것이고, 두번째는 가지치기된 네트워크의 가중치들이 다시 재초기화 되는 것이 아니라, 처음 초기화됐던 값으로 돌아간다는 것이다. 이것은 필수적인 단계라고 증명되었는데, 가지치기된 네트워크가 랜덤하게 재초기화되면 80% 이상 가중치가 제거 경우 훨씬 더 성능이 나빠졌다.

그러나 이 방법에 중요한 한계점이 있다. 첫째로, 이 방법은 아주 큰 규모의 구조나 문제에서는 잘 작동하지 않는다. 논문에서는 더 복잡한 데이터셋과 더 깊은 네트워크 구조에서는 이 방법이 초기 복권 당첨자를 식별하지 못한다고 언급했다.

일반적으로 spartcity와 accuracy간의 트레이트오프를 달성하는 것은 어려운 문제다. 실제로 이 문제는 State-of-art가 계속해서 변화되고 있는 매우 활발 연구 분야이다.

이 방법론이 큰 진전을 이루긴했지만, 가장 중요한 문제를 해결하지 못했다. 가지치기된 서브 네트워크들의 재학습이 여전히 요구된다는 점이다. 놀랍게도, 이 문제는 ‘전체 문제를 뒤집어’ 해결했다. (Surprisingly, this was solved by turning the entire problem upside down.)

Weight Agnostic Neural Networks

이떄까지는 커다란 신경망에서 시작해서 그것을 반복적으로 다듬어 압축시켰다. 그러나, 반대 논리의 대안적 접근법이 있다: 가지치기 대신, 최소한의 구조로 시작해서 점진적으로 추가할 수 있다.

아담 가이어와 데이비드 하의 최근 논문(Weight Agnostic Neural Networks)의 출발점이었다. 최소한의 구조를 갖는 네트워크를 얻는 것 외에도, 그들은 더 야심찬 목표를 가지고 있었다. ‘결과로 만들어지는 네트워크들이 무작위 가중치를 가지고도 좋은 성능을 발휘해야 한다’는 것이다. 앞서 보았듯이, 가중치 제거 방법의 가장 큰 약점은 가지치기된 서브 네트워크들을 훈련시키기 어렵다는 것이었다. 그러나, 이런 식으로 하면 이후의 훈련이 더이상 필요 없을 것이다.

본질적으로, 그들의 방법은 가능한 네트워크 공간에서의 점진적인 탐색이다. 이전의 방법에 비해, 그들의 탐색은 단순함과 가중치에 구애받지 않는 특성을 선호한다.

  1. 하나의 상위 네트워크에 내장될 수 있는 최소 신경 네트워크 한 세트를 만든다. 이 시점에서는 가중치의 값은 없고 연결만 있다. 기본적으로, 각 네트워크는 상위 아키텍처에서 가지치기된 것과 동일하다.
  2. 공유된 가중치 집합을 사용하여 네트워크를 테스트한다. 여기서 가중치를 공유하는 것이 중요하다. 왜냐하면 이것이 가중치에 구애받지 않는 구조를 선호하도록 탐색을 강제하기 때문이다.
  3. 성능과 복잡도에 따라 네트워크의 순위를 매긴다. 가중치가 네트워크 간에 공유되었기 때문에 성능도 가중치 agnostic 역량을 반영한다.
  4. 상위에 랭크된 네트워크들을 임의로 수정하여 새로운 네트워크를 만든다.
  5. 획든한 네트워크를 사용하여 Step 2.로 이동한다.

이것으로, 그들은 무작위 가중치로 잘 작동하는 구조들을 발견할 수 있었다. 이것은 꽤 인상적인 결과다. 이 방법은 단지 손으로 쓴 숫자 인식만이 아니라 몇 가지 기계학습 테스크에도 효과가 있었다. 그들은 폴 밸런싱(pole balancing)과 카트 레이싱(cart racing)과 같은 몇 가지 연속적인 제어 문제(continuous control problems)에 대해 최소 가중치 agnostic 아키텍처를 설계할 수 있었다.

지금까지, 이 방법은 훈련을 필요로 하지 않고 최소한의 아키텍처를 찾는 방법을 가장 근접하게 제시했다. 하지만, ImageNet 분류와 같이 더 복잡한 작업의 경우 정확한 가중치 agnostic 네트워크를 찾는 것은 여전히 해결되지 않았다.

요약

  1. 모델 정확도뿐만 아니라, 실제 production 환경에서의 속도와 사이즈도 고려해야 한다.
  2. 복잡한 모델을 production 환경에 맞게 가중치를 가지치기해서 모델의 사이즈를 줄일 수 있겠지만, 말처럼 간단하진 않다.
  3. 모델의 정확도를 잃는 것과 모델의 용량이 줄어든 상태에서 재학습을 해야한다는 문제점이 있다.
  4. 지금까지 두가지 가중치 가지치기 방법과 보완적 구조 탐색 방법에 대해서 살펴봤다.
  5. 그러나 이 또한 모든 문제를 해결해주진 못했고, Weight pruning은 여전히 활발히 연구중인 분야이다. [추가로] 텐서플로와 파이토치와 같은 딥러닝 프레임워크에서도 pruning 방법을 제공한다.

읽을거리1:Introducing the Model Optimization Toolkit for TensorFlow
읽을거리2:TensorFlow Model Optimization Toolkit — Pruning API