[PapersReview] AlexNet

jmj·2023년 11월 27일
0

PapersReview

목록 보기
2/3

Iandola, F. N., Han, S., Moskewicz, M. W., Ashraf, K., Dally, W. J., & Keutzer, K. (2016). SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size. arXiv preprint arXiv:1602.07360.

The Dataset

  1. ImageNet 데이터셋
  2. Data Preprocessing
  • 256x256 resize (이후 FC layer에서 softmax activation function으로 fully(or dense) conection으로 만들기 위해서 입력 크기가 고정되어야 함
    • 이미지의 짧은 부분을 기준으로 짧은 부분이 256이 되도록 rescale해주고, 256x256사이즈에 맞게 중앙에서 잘라냈다.
  • Normalization: row RGB pixel(이미지의 R, G, B 중에 어느 하나의 값이 커져서 영향력이 사라지는 것을 막기 위해 이미지의 R, G, B의 평균을 각 픽셀의 값에 빼줌)들을 학습

The Architecture

1. ReLu Nonlinearity

  • 일반적으로 sigmoid, tanh을 사용하지만 saturating nonlinearities를 사용하는 것보다 non-saturating nonlinearities인 relu를 사용(학습시간, error rate의 차이가 남)
    • saturating nonlinearities: vanishing gradient를 유발하는 nonlinear activation function
      • f(x)의 정의역 x가 무한대로 증가/감소되면 f(x)가 0/1되는 것
      • 둔탱이, What does the term saturating nonlinearities mean?
        	> non-saturating nonlinearity function: 입력 x가 무한대로 갈때 함수의 값이 무한대로(ReLu)
        	> saturating nonlinearity function: 입력 x가 무한대로 갈때 함수의 값이 어떤 범위내에서만 움직이는 것(sigmoid, tanh)

2. Training on Multiple GPUs

  • GTX 580GPU로는 그 당시에는 이미지를 모델하는 것에 한계가 있어서 2개의 GPU를 병렬적으로 사용했다. 그래서 특정 레이어에서만 GPU가 서로 상호작용한다.

3. Local Response Normalization -> Batch Normalization(요즘 사용)

  • ReLu의 특성상 한 뉴런의 값이 너무 커지면 주변의 다른 뉴런에게 영향을 끼치는 것을 방지하기 위해 제안됨(인접한 픽셀끼리 정규화)
  • ax,yia^i_{x,y}: (x, y)에 위치한 픽셀(뉴런)에 i번째 kernel을 적용하고 relu를 사용했을때 나온 activation value
  • n: 인접하다고 고려할 뉴런의 개수(하이퍼파라미터)
  • N: 레이어 안에 존재하는 kernel 개수
  • k, α, β: Hyperparameters

4. Overlapping Pooling

  • CNN에서는 stride=pool_size라 필터가 겹치지 않음

  • AlexNet에서는 겹치도록 stride=2, pool_size=3으로 설정

  • overlapping 풀링이 top-1, top-5 에러율을 줄이는데 좀 더 효과가 있다고 한다.

    bskyvision, [CNN 알고리즘들] AlexNet의 구조

  • 왜 이 방식을 사용했을 때 에러율이 줄어들지?
    - 중첩을 하면 더 많은 정보를 보존해서..인 것 같음

5. Overall Architecture

  • 8개의 layer로 구성, 5개: Convolutional Layer, 3개: FC Layer
  • 사진의 첫 번째 layer는 227x227x3이라고 정정됨
  • 레이어의 output 크기 계산식
    IK+2PS+1\frac{I-K+2P}{S}+1
    I: 입력 이미지의 너비(높이)
    K: 커널의 너비(높이)
    P: 패딩의 크기
    S: stride 크기
  • 한 번 풀어보는 것이 좋음.

Reducing Overfitting

1. Data Augmentation

  • 첫번째 변형: 이동/좌우반전
    - 256x256으로 변형한 이미지에서 224x224 크기의 patch를 얻어 입력으로 사용
    - Test: 224x224 patch(꼭짓점 4, 중앙의 patch 총 5개)와 horiozntal flip하여 총 10개의 patch를 뽑아내고 각 패치들에 대해서 네트워크의 softmax결과를 평균화하여 prediction을 진행한다.
  • 두번째 변형: RGB 채널의 색상강도 조절
    - 이미지의 각 RGB 픽셀에 PCA를 적용하여 평균=0, 표준편차=0.1을 갖는 가우시안 분포에서 랜덤 변수를 곱한 뒤 기존 픽셀에 더함: 원래의 라벨을 해치지 않으면서 색상의 변형을 일으키는 것이 가능

2. Dropout

  • 사용자가 지정한 확률을 근거로 특정 뉴런에 신호를 전달하지 않는 방법
    - 저자는 0.5의 확률로 설정
    - 0이된 뉴런은 forward pass, backpropagation시에 전혀 기여를 하지 않아서 뉴런간의 상호의존석을 없앤다. Test시에 모든 뉴런을 사용하지만 각각 0.5를 곱해준다.

Details of learning

  • optimizer: SGD + momentum(0.9)
  • batch size: 128
  • weight decay: 0.0005

참고

Orca0917, [논문 리뷰] AlexNet / ImageNet Classification with Deep CNN
Mountain96, [논문 리뷰] AlexNet(2012) 요약 및 리뷰
latest, AlexNet

pytorch/vision, alexnet.py

profile
개인적인 공부 정리 블로그입니다.

0개의 댓글