AI-딥러닝/실습(학습모델 비교)

데이터 셋 분석 및 학습 비교(1) - VGGNet 분석

codingmonsters 2021. 6. 12. 01:42

인공지능을 공부하면서 과연 내가 직접적으로 실습하면서 살에 와 닿게 공부할 수 있는 방법이 무엇이 있을까 찾던 중 

학습모델을 지정하고 역전파 즉, Optimizer함수를 변경하고 각 파라미터를 조정하면서 정확도를 비교 분석하는 실습을 해볼까한다.

 

내가 실습을 위해 정한 데이터셋은 MNIST에 있는 Fashion MNIST이다.

 

 

위와 같이 MNIST 데이터 셋에는 의류이미지를 흑백사진으로 "이진화"한 데이터이다. 28x28 픽셀의 이미지로 70,000개로 이루어져 있다.

 

이 데이터 셋으로 원피스는 원피스, 구두는 구두, 바지면 바지 이렇게 구분하는 것을 실습해 볼 예정이다.....

물론 책에 있는 내용인데 뭣하러 글까지 쓰냐라고 할 수 있지만

 

나는 더 나아가서 여러 모델의 정확도를 비교분석하고 정확도의 차이 그리고 배치사이즈 에포크 등 파라미터를 조정하면서 그 차이들을 미세하게 느껴보고자한다.

 

자!! 먼저 내가 사용할 학습모델을 보자!! 나는 VGGNet이라는 초창기 학습모델을 먼저 사용해보고자한다.  

오래된 VGGNet을 꺼내든 이유는 지금은 복잡한  레이어로 구성된 학습모델이 많아 한눈에 어떻게 구성되어 있는지 비교해보는 것이 어렵다.

하지만 2014년대에 이미지넷 이미지 인식 대회때 만들어져 있는 학습모델들은 대회를 통해 공개된 자료들 그리고 논문, 레이어 설명 등 자세히 설명되어 있는 것들이 많다.

그럼으로 레이어를 들여다 보기 편하다... 서론이 길었다 이제 레이어를 비교해보자

 

VGGNet의 구성을 먼저 살펴보면 다음과 같이 레이어층이 이루어져 있다.

VGGNet layer

당시 논문을 찾아보면 이 연구의 목적은 네트워크(학습모델의 레이어)의 깊이를 깊게 만드는 것이 성능에 어떤 영향을 미치는지를 확인하고자 했었다. VGG연구팀은 깊이의 영향만을 최대한 확인하고자 컴볼루션(CNN) 마스크 사이즈를 최대한 작은 3x3으로 작게 고정했다.

 

자 저 그림을 보면 A ~ E까지의 레이어가 존재한다. 총 6개의 학습모델의 구조를 만들어 성능을 비교하기 위해 저렇게 만든것인데. 맨 마지막 D, E는 16, 19층의 레이어가 존재한다.

 

자 결론 먼저 말하면 레이어의 깊이가 깊어질수록 분류에러가 감소한다고 한다. 즉, 성능이 좋아진다는 것이다.

vggnet paperlink :  https://cs231n.github.io/convolutional-networks/

 

그러면 왜 좋아질까???

 

위에서 컴볼루션(CNN) 마스크 사이즈를 최대한 작은 3x3크기로 최대한 작은 사이즈로 컨볼루션한다고 했다. 

그 이유는 다음 그림을 보면 이해가 갈것이다.

7x7 사이즈의 이미지를 5x5마스크로 필터링 -> 한차례

7x7 사이즈의 이미지를 3x3마스크로 필터링 -> 세차례

이렇게 횟수차이가 대응된다. 이렇게 여러번 필터링을 거치면 역전파시에 가중치와 파라미터의 갯수부터 차이가 나기 시작한다.

 

3x3 필터가 3개면 총 27개의 가중치를 얻지만 7x7 필터는 49개의 가중치를 얻는다.  가중치가 적다는 것은 그만큼 훈련시켜야할 파라미터의 갯수가 작아지고, 따라서 학습의 속도가 빨라지며, 동시에 층의 갯수가 늘어나면서 이미지의 특성이 더 두드러지는 특성이 점점 유용하게 작용한다. 즉, 정리하면 섬세하게 학습이 이루어진다는 것이다.

 

정리하면, 파라미터 수가 줄어든다는 것은 어떠한 정답에 가까워지는 척도인 정규화 문제를 줄일 수 있다. 하지만 단점도 존재한다.

 

FC(Fully Connected) 레이어가 세 개이기 때문에, 파리미터의 수가 많아지면, 역전파시에 Conv레이어의 중간 결과를 저장하기 때문에 메모리 공간을 많이 차지 할 수도 있다.