[논문리뷰]Back to Simplicity: How to Train Accurate BNNs from Scratch?

Back to Simplicity: How to Train Accurate BNNs from Scratch?

author: Joseph Bethge∗, Haojin Yang∗, Marvin Bornstein, Christoph MeinelHasso Plattner Institute, University of Potsdam, Germany

paper: https://arxiv.org/pdf/1906.08637.pdf

code: https://github.com/hpi-xnor/BMXNet-v2

핵심정리: BNN을 train할 시에 어떠한 방법을 써야 Accuracy를 보존할 수 있을까? 에 대한 연구

Introduction

메모리 사용과 추론 속도를 높이기 위한 2가지 접근법이 존재

  • compact network design(e.g. SqeezeNet,MobileNets,ShuffleNet)
  • avoiding the common usage of full-precision floating point weights and activations

이 논문은 아래 방법 그 중에서도 binary weight와 activation을 사용하는 BNN을 다룬다.

BNN Pros & Cons

Pros
Cons
  • BNN 32배 의 메모리 효율성과 58배의 cpu에서의 속도 증가를 보였다.
  • Xnor,bitcount의 연산을 사용하여 연산 효율성을 증가 시켰다.
  • 정확도가 일정 부분 낮아 질 수 밖에 없다(기존에는 이를 quantization error를 줄여 해결하는데만 초점을 맞추었다.)
  • real-valued network(floating point 를 사용하는 VGG,resnet 등)를 이용할 수 있지만 이것이 BNN에 적합한지 확신할 수 없다.

Study on Common Techniques

1.Implementation of Binary Layers

  • Activation 함수로 sign함수를 사용
  • gradients의 문턱값이 넘을시에 clip
sign function
sign function forward & backward

2.Scaling Methods

  • binary convolutions 는 full-precision convolutions 에 비하여 성능이 좋지 못하다
  • 원인 중 일부는 값의 표현범위가 크지 않지 때문, 이를 증가 시켜 성능을 향상시키고자 하는 방법
  • x ∗ w ≈ binconv(sign(x), sign(w)) · K · α
  • α 는 채널당 평균 가중치 절대값,
  • K는 모든 입력채널의 평균 피쳐들의 절대값

3.Full-Precision Pre-Training

  • full precision model을 이용하여 먼저 트레이닝을 하여 총 학습 시간에 이점을 둔다.

4.Backward Pass of the Sign Function

  • sign fun은 미분 불가능 => piecewise-linear 로 근사(clip)
  • 성능상 문제가 있으므로 개선한 approsign사용
approxsign function backward

Study on Common Techniques

cifar10 results
imagenet results

Scaling과 approxsign은 train에서 큰 도움을 주지 못한다.

pretrain역시 도움을 주지 못한다.
batchnorm을 사용하기 때문에 scale은 성능에 하락을 가져온다.

Golden Rules for Training Accurate BNNs

  • 네트워크의 rich information을 충분히 유지
  • 모든 real-value network가 BNN에 부적절.
  • Bottleneck 구조는 BNN에서 부적절.
  • full-precision downsampling layer의 사용을 제고
  • shortcut connect을 사용
  • 네트워크를 깊게만드는거보다 feature map을 키우는 것이 좋다.
  • 이전에 논의된 scaling factor,approsign,FP pretrain은 필수적이지 않다.

Background

  • information density 가 float point 에 비하여 이론적으로 32배 낮음
  • 그렇기 때문에 성능향상을 위하여 네트워크의 information flow를 증가시켜야함
    • shortcut connect을 최대한 많이 사용(이것은 이전 네트워크의 information flow를 전달할 수 있기 때문)
    • Bottleneck 구조를 제거(이 구조는 파라미터를 감소시켜 BNN에서 information flow를 감소시킨다)
    • 중요한 특정 레이어를 binary에서 full precision으로 변경(첫번째,마지막,다운샘플링) information flow가 급격하게 변경되거나 shortcut 으로 이전 정보를 받을 수 없는곳

ResNetE

Golden Rules for Training Accurate BNNs을 단순하게 따라 ResNet 18 base bottlenect 제거, shortcut 추가만으로 충분한 성능을 보임

BinaryDenseNet

  • Concat으로 이전 레이어를 재사용하여 information flow를 보존을 잘 할꺼라고 생각
  • bottlenect 구조만 ResnetE처럼 바꾸었는데 결과가 좋지 못함
기존의 densenet 구조
  • binary layers의 representation capacity 가 제한되었을꺼라 가정
  • growth rate parameter k 와 blocks의 크기를 조절(연산량 증가&정확도 등가)
  • downsampling에서 2개의 옵션을 사용(연산량 감소)
    • 1번째 옵션: 순서를 1×1-Conv→AvgPool에서 MaxPool→ReLU→1×1-Conv로 바꿈
    • 2번째 옵션:full-precision(with high reduction) -> binary(with low reduction)
c에서 maxpool을 사용하여 연산량을 줄이는 것을 볼 수있다.

Experiments

댓글을 남겨주세요~