본문 바로가기

Etc../인공지능 연구동향

[인공지능 연구동향] Convolutional_Neural_Netwrok_구조 사례 분석

Case Study

98 년도 LeNet - 5

  • 주 목적은 손으로 쓴 글자나 숫자를 인식하는 것
  • ConvNet을 활용하여 local receptive field, weight sharing을 적극 활용하고자 했던 사례

2012년 AlexNet

  • 8개의 layer, activation function으로 ReLu를 사용, L2규제와 weight decay 적용
  • 현재 convNet 구조에 사용되고 있는 많은 기법이 Alexnet에서 부터 사용 됨
  • 에러율이 크게 줄어듦으로 써 convNet을 파고드는 계기가 됨
  • 이후로는 좀 더 깊은 네트워크 구조를 만드는 데 초점을 맞추기 시작함.
  • 네트워크가 깊으면 깊을수록 더 많은 nonlinearity가 추가되고, 표현할 수 있는 linear region의 조합이 다채로워짐.

2014년 VGGNet

  • AlexNet의 8개의 layer층을 뛰어넘어 깊은 ConvNet을 구성하고자 함
  • Pooling 이전에 Padding을 적절히 사용해 resolution이 유지되도록 Convolutional Layer를 쌓음
  • 3 x 3커널만 사용한것이 특징 (특수한 경우에만 1x1 커널 사용)
  • AlexNet과 비교하여 더 깊은 Layer까지 들어갈 수 있어 더 많은 nonlinearity와 연산 효율성을 가질 수 있게 됨
  • 너무 깊은 layer를 쌓으면 에러가 증가함 computational complexity가 증가하여 optimization이 어려워지기 때문
  • 점진적으로 layer를 늘려나가면서 optimization을 수행하는 식으로 발전함
  • 더 깊은 ConvNet구조를 얻기 위해 optimization을 향상 시키기 위한 수많은 시도가 있었음
  • Careful initialization : dead relu와 같은 현상을 줄이기 위해 초기 weight가 가우시안 분포를 따르도록 initialization을 하는 방법을 연구함
  • Sophisticated optimization, Normalization layers , Network disign 등의 연구를 진행함

2014년 GoogleNet

  • 한가지 path로만 진행하는 것이 아니라 여러개의 path를 통해 나온 연산 결과를 concatenate하여 활용
  • 다양한 receptive filed를 반영할 수 있도록 하자는 것
  • 1x1 kernel을 적극적으로 사용. 이를 사용하지 않으면 layer가 깊어짐에 따라 layer가 기하급수적으로 증가 (channel reduction에 효과적)
  • 이후로 ConvNet에서 1x1 kernel이 많이 사용 되게 됨
  • 하지만 마찬가지로 optimization에 어려움을 겪음
  • 이를 위해 보조layer를 두는 시도를 함
  • 네트워크 중간중간에 softmax를 배치하여 gradient flow가 원활해지게 해 보았으나 네트워크가 깊어지는데 한계가 있었음
  • 이를 해결한 것이 batch normalization

batch normalization

  • Convolution layer를 통과하고 많은 dead ReLU현상이 일어나는 것은 연산결과가 대부분 0보다 작은 범위에 위치하기 때문
  • 이를 해결하기 위해 Convolution Layer를 통과할 때마다 normalization을 해주는 것이 기본 아이디어
  • 만약 모든 결괏값이 0보다 작게 나왔다면 모두 dead ReLU현상이 발생해 업데이트가 되지 않음
  • 하지만 batch normalization을 적용하면 적어도 절반은 업데이트가 되도록 함
  • 매번 normalization을 해주게 된다면 activation function의 representation power를 모두 사용할 수는 없게 됨
  • 이를 해결하기 위해 parameter로 gamma와 beta를 도입함
  • gamma : scale에 대한 파라미터
  • beta : shift에 대한 파라미터
  • 이 두개의 파라미터가 적당한 수준으로 normalize할 수 있도록 도와줌
  • gamma는 variance , beta는 mean으로 학습된다면 input을 그대로 output으로 내놓게 됨
  • 즉, 필요에 따라서 네트워크가 가지는 representation power를 batch normalization을 사용 안 한 것처럼 그대로 사용할 수 있다는 것.( initialization에 대한 의존도가 줄음)
  • 전체 데이터의 일부인 mini-batch에 기반하여 normalization을 수행하면 약간의 stochasticity(랜덤성) 을 얻게되고 이것이 일종의 regularizer로 동작하게 됨.
  • 이를 사용함으로써 더 빠르게 수렴하고 더 좋은 성능을 보이게 됨
  • 단, batch-size가 아주 작거나 특정한 네트워크 구조에서는 사용하기 어려웠음
해결 방안
  • *layer normalization *: normalization의 방향을 channel쪽으로 바꿈

  • Instance normalization : 아주 작은 단위로 normalization 수행, style transfer와 같이 이미지의 style 정보나 구조적 정보를 활용하는데 사용

  • Group normalization : 위 두 방법의 중간. 좋은 성능을 보여주긴 했지만 적절한 group size를 hyperparameter로 설정해 주어야한다는 한계가 있음


2015년 ResNet

  • residual connection/ skip connection이라 불리는 아이디어가 더해진 형태
  • 깊은 네트워크의 학습을 위해 batch normalization의 도움을 받고 residual connection을 통해 optimization을 원활하게 하고자 함

Residual Connection

  • 네트워크가 깊어지면 깊어질수록 over-fitting이 아닌 optimization문제로 학습이 잘 되지 않았음
  • 기본 아이디어는 네트워크가 깊어진다 하더라고 낮은 layer의 학습 결과가 잘 전달이 되도록 하는 것
  • 여러 Layer를 거쳐서 결과가 0이 된다고 해도 각 층마다 학습된 결과를 조금이라도 반영하게 함
  • Backpropagation도 상대적으로 원활해지고 gradient를 전달하는 것도 더 원활해짐
  • ResNet은 residual connection과 bottleneck구조를 활용해 152개의 layer까지 성능 감소 없이 쌓을 수 있음
  • bottleneck 구조 : 1x1 conv로 channel 수를 줄이고 연산을 한 다음 다시 1x1 conv로 channel을 키우는 것

DenseNet

  • ResNet에서는 Residual connection이 바로 다음 layer로 연결되어 사용되고, feature map끼리 더해주는 형태였음
  • DenseNet은 그 후의 layer에까지 연결되어 사용되고, feture map을 concatenate하여 붙여줌
  • feature 재사용의 의미가 강함. 깊은 layer에서도 feature를 다시 한번 더 직접적으로 사용될 수 있게 함

2017년 Squeeze-and-excitation Network

  • feature가 global context를 반영할 수 있도록 함
  • 특정 feature map에 대헤 channel별로 global average pooling을 하면 1x1xC 형태를 가지게 됨
  • 여기에 각 값을 sigmoid에 통과시키면 0~1의 값을 가짐
  • 이를 원래의 feature map에 가중치로 사용하면 global context를 반영할 수 있게 됨



효율적인 네트워크 구조를 만들기 위한 시도들

Depthwise convolution

  • complexity를 줄이고자 하기 위함
  • input channel 당 feature map이 나오지만 채널 간 정보활용이 용이하지 않음
  • 그래서 pointwise convolution 즉, 1x1 convolution을 depthwise convolution연산의 output채널에 적용함
  • Inverted bottleneck 구조 : 기존 bottleneck 구조의 inverted 버전, 채널을 늘렸다가 연산 수행 후 줄임
  • conv연산 전에 채널을 축소시키면 많은 정보 손실이 있을 수 있어 채널을 늘리고 depthwise conv연산을 사용함

MNasNet

  • neural architecture search를 위한 네트워크, Depthwise separable convoultion과 inverted bottleneck을 사용하여 효율적인 네트워크 구조를 생성하고자 함

EfficientNet

  • 위의 방법에 휴리스틱한 접근 방식 사용

이외에도

  • depth scaling : Layer의 갯수를 늘림
  • width scaling : channel 수를 조절
  • resolution scaling : input이미지의 해상도를 높임
  • ResNet은 depth scaling 관점, mobileNEtV2같은 경우 width scaling 관점
  • 보통 하나의 요소만을 고려하는데 efficientNet은 세가지 요소를 고르게 조합하여 성능과 효율성을 둘다 높임
  • 일반적으로 pre-training된 모델을 가지고 우리의 목적에 맞춰 fine-tuning하여 사용하는데 이를 transfer learning이라고 함.
  • convnet은 object의 translation에 대해 문제 없지만 rotation과 같은 다른 종류의 transformation에는 취약함
  • 이러한 문제를 해결하기 위해 data augmentation을 사용하여 scale이나 rotation에 강건하게 함




참고 : K-MOOC 인공지능 연구동향 - 중앙대학교 김영빈 교수님