Programmers 인공지능 데브코스 - Week 8 Day 2 - CNN

donchanee·2021년 1월 26일
0

영상 분류

과거에는 매우 어렵고 도전적인 문제였습니다. 사람의 시각인지능력과 비슷한 CNN이 효과적으로 풀어냈기 때문에 조금 더 완화된 문제입니다.

ImageNet이라고 하는 다양한 부류에 대해 인터넷에 1500만여 장의 사진을 공개하며 CNN을 공부하는 사람이라면 다뤄보는 데이터셋입니다.

이미지데이터를 통해 CVPR이라고 하는 학회에서 ILSVRC 대회가 열립니다.

우리가 배우게 될 모델들은 거의 이 대회에서 우승한 신경망입니다.
ImageNet을 학습하면서 CNN이라고 하는 AlexNet에서부터 오류율이 훨씬 더 감소했고, 사람보다 더 잘 구분해내는 영역까지 진행이 되었습니다.

AlexNet

첫번째 컴퓨터비전 문제해결의 시발점이라고 하는 AlexNet을 살펴보면, 컨볼루션층 5개, 완전연결층 3개가 존재하는 구조입니다.

컨볼루션층은 200만개, 완전연결층은 약 6500만개의 매개변수가 존재합니다. 완전연결층(dense layer, Fully connected)에 30배나 많은 매개변수가 존재하기 때문에, 이를 줄이는 방향으로 확장하게 됩니다.

당시의 GPU의 메모리 크기때문에, GPU를 2장으로 나눠서 AlexNet을 수행했습니다. 요즘은 한장의 GPU를 사용할 수 있습니다.

AlexNet은 활성함수로 ReLU를 사용하고, 지역 반응 정규화 기법등을 적용하며 과잉적합을 방지하는 여러 규제 기법(데이터 확대-잘라내기, 반전), 드롭아웃(완전연결층에서 사용-학습 시에 연결을 끊는 것))을 적용했습니다. 그 결과 학습에 성공하게 된 것입니다. 또한, 테스트 단계에서 앙상블도 적용했습니다. 최근 딥러닝에서는 이러한 방식(앙상블)을 쓰지는 않습니다.

VGGNet

AlexNet보다 최대 2배정도 큰 컨볼루션층을 두었습니다. 약 8-16개의 컨볼루션 층을 두게 되었는데, 다른 구조는 AlexNet과 유사합니다.

VGGNet 이후의 필터들은 작은 필터(커널)을 사용하는 추세가 됩니다.

큰 크기의 커널은 여러개의 작은 크기 커널으로 분해될 수 있습니다.
이는 매개변수의 수는 줄어들면서 신경망은 깊어지는 효과가 발생합니다.

5x5의 커널을 2층의 3x3 커널로 분해해서 구현합니다.

VGGNet에서는 1x1 커널에 대한 적용 실험도 했지만, 선택되지는 않았습니다. GoogleNet에서는 적용을 했습니다.

GoogLeNet

구글에서 만든 신경망인데 핵심은 인셉션 모듈입니다. 인셉션 모듈은 필터 하나를 NIN(network in network) 구조를 확장하여 다양한 크기를 가질 수 있게 복수의 병렬적인 컨볼루션 층을 구현하는 방법입니다.

NIN 구조는 기존 컨볼루션 연산을 MLPConv로 대체합니다. 이는 비선형 함수를 활성함수로 포함하는 MLP를 사용하여 특징 추출에 유리하게 됩니다. NIN은 전역 평균 풀링이라는 것을 사용합니다. 구글넷 이후의 신경망은 VGGNet의 완전 연결층을 대신하여 전역 평균 풀링을 사용합니다.

전역 평균 풀링을 사용하면 매개변수의 수가 0개가 나옵니다. VGGNet은 위 사진과 같이 완전연결인만큼 매개변수가 엄청 많게 되는데, 이를 개선한 방법이 전역 평균 풀링입니다.

인셉션 모듈은 마이크로 네트워크로 MLPConv 대신 네 종류의 컨볼루션 연산을 사용해 다양한 특징을 추출합니다. 1x1 컨볼루션을 사용하여 차원을 축소합니다.

매개변수가 있는 층은 22개, 없는 층 (풀링)은 5개로 총 27개의 층이 존재합니다. 구글넷은 덜 센시티브해서 학습이 비교적 잘 됩니다.

보조분류기를 사용해서 원분류기+보조분류기 오류역전파 결과를 결합하여 경사 소멸 문제를 완화했습니다.

ResNet

잔류(잔차) 학습(residual learning)이라는 개념을 이용하여 성능 저하를 피하면서 층 수를 대폭 늘리는 방법입니다.

기존에 층이 많아질수록 복잡해서 정확도가 떨어지는 문제가 발생했고, 전체보다 부분부분 학습을 시켜보자는 개념입니다.

원래의 신경망은 입력이 들어가면 2개의 레이어층을 통과하여 결과를 내보이는 플레인한 컨볼루션에서, 얕은 네트워크가 여러개 있는 형식으로 바꿔보는 것이 잔류 학습입니다. 일반적인 인풋자체에서 잔차라고 하는 개념에 따라 변화를 만들게 하는 것으로 이해하면, 조그만 블록을 학습하고 부분부분 학습시키겠다는 것이 잔류 학습입니다.

각각의 residual block만 - 얕은 신경망 만 학습을 시키겠다는 생각입니다.

지름길 연결- skip function을 두는 이유는 깊은 신경망도 최적화가 가능해집니다. 단순 구조만 변경하고, 덧셈 연산만 증가하므로 매개변수 수에도 영향이 없고, 연산량의 증가도 미비합니다. 또한 깊어진 신경망으로 인해 정확도를 개선이 가능합니다.

또한, 경사 소멸 문제를 해결할 수 있습니다.

분류 문제 성능 포화

ResNet 까지 오면서 사람보다 성능이 더 좋아져서, 문제가 소멸되어 더 이상 성능 향상에 의미를 찾지 못하고 객체 인식등의 문제로 옮겨가게 되었습니다.

생성 모델

현실에 내재한 데이터의 발생 분포를 알아내기는 어렵기 때문에, 이를 모방하는 모델의 확률 분포를 암시적으로 표현하는 것입니다.

GAN의 목표는 Generator가 만들어내는 샘플을 Discriminator가 구별하지 못하는 수준까지 학습하는 것입니다.

0개의 댓글