모델을 효율적이고 가볍게

eric9687·2022년 1월 17일
0

Backbone

목록 보기
8/10
post-custom-banner

모델 경량화

: 비슷한 수준의 성능을 낼때, 더 적은 파라미터와 연산량을 가질 수 있도록 설계

  • layer, network architecture,loss function optimizer hyper parameter, data에 따라서 달라질 수 있다.
  • Deep compression

    • Pruning: 불필요한 가중치를 가지는 connection을 제거. weight가 극소하다? => 출력에 영향이 적다 => 불필요
    • Quantization
    • Encoding: huffman encoding
  • Knowledge Distillation

    • 상대적으로 작은 모델이 이미 학습된 모델과 유사한 출력을 가질 수 있도록 학습.
  • Loss function, Fine tuning, optimizer, Training Techniques등등이 존재한다

  • 이러한 방법들은 이미 heavy한 모델이 학습된 후에 진행 가능.

가볍게 Design

  • 모델을 가볍게 만들고 위의 방법들을 적용하면 더 가벼운 모델을 완성 가능!
  • Convolution Layer과 Fully connected Layer
    • FC layer : 다양한 변화에 대응하기 어려움. 해상도에 비례하는 파라미터 수
    • Convolution layer: 인접 픽섹사이에 존재하는 패턴을 학습. 다양한 변화에 상대적으로 자유로움.
    • 하지만, 과도하게 복잡한 모든 패턴을 찾는 것은 그만큼 학습에 좋지않을 수 있음. 어플리케이션에 적용하기에는 모델이 너무 무거워질 수 있음. 과도한 비용, 오버피팅의 위험, 불필요한 요소들이 있을 수 있음.(불필요한 채널을 연산하는 문제)
  • Residual Connection
    : 입출력 영상에 대한 더 다양한 representation 가능
    • 성능 개선과 속도 향상
  • Dilated convolution
    • contextual information 반영할 수 있는 receptive field를 넓힐 필요가 있음.
    • 다른 receptive field를 넓히는 방법 : 커널크기 확장, 더 많은 컨볼루션 레이어의 적층 => 효과가 매우 이상적인 것은 아님.. => dilated convolution
    • 기존 컨볼루션 레이어의 stride,polling으로 발생하는 정보 손실을 줄임
    • segmentation에서 많이 쓰임
  • Point-wise Convolution
    • 1*1 conv layer
    • 입력영상에 대한 spatial feature는 추출하지 않음. 출력 영상에 대한 크기 변화없이 채널 조절 가능. => dimension reduction => 출력 채널을 줄여 연산량과 파라미터 수를 줄일 수 있다.
    • ResNet, Inception, squeezeNet
  • Grouped Convolution
    • 입력 영상의 채널들을 여러개의 그룹으로 나누어 독립적인 convolution 수행
    • 더 적은 파라미터 수와 연산량을 가진다
    • 각 그룹의 높은 correalation을 가짐
    • 그룹수를 조정하며, 독립적인 필터 그룹을 조정=>그룹수는 hyperparameter가 됨 => group이 많아 지면 오히려 성능이 줄어들수 있음.
    • 같은구조를 가지는 독립적 network로 볼 수 있게돼 의미가 없다고 보는 경우도 있음..
  • Depth-wise Convolution
    • 채널마다 따로 필터를 학습하는 방법. 각 단일 채널에 대해서만 수행되는 필터들을 사용. 각 채널 고유의 spatial한 정보.
  • Depth-wise Seperable Convolution
    • spatial feature을 찾는것과 채널간의 feature를 찾는것을 factorization
    • 연산량이 줄어들음
  • Squeezenet
    • 더 큰 feature map사용 => 성능 향상 : subsampling을 나중에
    • 너무 많은 채널은 연산량 증가 : point-wise conv로 channel reduction
    • 커널 크기가 작은 conv: 가능한 3*3conv를 1*1로 대체
    • Fire Module
      • Squeeze layer: point-wise conv로 channel reduction
      • Expand layer: 3*3conv를 1*1로 대체
    • Fire module + residual module
    • AlexNet과 비슷한 성능, 그러나 경량
  • MobileNet
    • Point-wise conv의 적극적 사용: matrix-scalr multiplication으로
    • Depth-wise Seperable conv: 계산 효율
    • Resolution과 channel size보정을 통한 모델 경량화
    • 연산량 1/9 파라미터 1/10 (Inception과 비교)
    • 모델을 줄어도 많이 떨어지지 않는 성능
  • ShuffleNet
    • MobileNet: channel이 많아지면서 cost 증가
    • 그룹을 나누고 gropued connection으로 relation을 만들어줌.(shuffle)
  • MobileNet v2
    • Inverted Residual connection
    • Bottleneck with Expansion Layer
    • Expansion Layer: 일반 conv는 채널의 수에 비례해 cost가 급격하게 증가해 bottleneck구조를 사용해 채널 reduction을 수행. 하지만 DWS conv는 채널 수에 영향을 받지 않는다. 따라서 입력단에서 channel 수를 늘려준다.=> spatial한 representation증가
profile
그러나 먼저 된 자로서 나중되고 나중 된 자로서 먼저될 자가 많으니라(마:19:30)
post-custom-banner

0개의 댓글