본문 바로가기
공부하는 중~~/인공지능

[VGGNet] VGGNet 개념 정리

by 임대추 2020. 10. 14.

안녕하세요 대추입니다.

이번에 딥러닝에 대해 공부를 하며 VGGNet도 건드려 봤는데 사용하기전 알아두면 좋을 만한 것에 대해 정리해보고자 작성하게 되었습니다. VGGNet에는 A, A-LRN, B, C, D, E가 있는데 여기서 많이 쓰이는 VGG16(D), VGG19(E)에 대해서만 정리하겠습니다.

VGGNet의 종류

 

 

VGG16 구조

VGG16은 왜 Conv 필터의 사이즈가 3*3으로 고정되어있을까?

 필터를 거칠 수록 이미지의 크기는 줄어들게 된다. 그렇기 때문에 필터의 사이즈가 클 수록 이미지가 줄어드는 것이 빨라지고 레이어를 깊게 만들 수 없을 것이다. 그렇기 때문에 필터를 가장 작은 사이즈인 3*3으로 설정하여 레이어를 거치더라도 큰 필터보다 적게 줄어 상대적으로 레이어가 깊은 모델을 만들 수 있어 사용했을 것이라 생각한다. 이건 개인적인 생각이고 발표한 논문에 따르면 연산하여 발생하는 파라미터의 개수가 줄어드는 효과와 ReLU가 활성화 함수로 들어갈 수 있는 곳이 많아진다는 장점이 있어 사용했다고 한다.


7*7 필터의 예시로, 7*7 = 49개의 파라미터 생성

3*3 필터의 예시로, 3*3*3 = 27개의 파라미터 생성

먼저 필터의 사이즈를 작게 하므로서 얻는 장점을 설명하겠다. 참고 사진을 보면 알 수 있듯이 7*7의 레이어에 5*5의 필터를 적용하면 49개의 파라미터를 가지며 3*3의  Feature Map이 만들어지게 된다. 하지만 3*3의 필터를 3번 적용시키면 5*5의 필터와 동일한 효과를 볼 수 있을 뿐더러 파라미터의 개수도 더 적은 27개가  생기게 된다. 같은 효과를 가지지만 더 적은 파라미터를 나온다면 학습의 효율성이 좋아질 것이다. 그렇기 때문에 Conv 필터의 사이즈를 3*3으로 설정한 것이다.

(파라미터의 개수가 줄어들 수록 정규화를 할때 이점을 얻을 수 있다고 한다.)

그래서 VGG16의 모든 필터는 3*3, stride = 1으로 설정되어 있다.

 

 ReLU 활성화 함수

그리고 얻을 수 있는 이점으로 ReLU 활성화 함수가 들어갈 수 있는 곳이 많아진다는 점이 있는데 ReLU 함수는 입력이 음수라면 0을 출력하고 양수라면 입력값 그대로 나오는 함수이다. (활성화 함수에 대한 것은 나중에 공부하며 포스팅 하겠다.)

이런 함수를 적용시켜 비선형성을 가지게 하여 CNN에서 레이어를 쌓는다는 의미를 가지게 하는데 이 함수가 많아 지면 비선형성이 적용되어 레이어의 깊이가 깊어질 수록 학습의 효과를 증폭시키게 되는 것이다.

그래서 VGG16의 모든 레이어는 활성화 함수로 ReLU를 사용한다.

 

 

VGG16의 구조

이런 특징들을 가지고 적용시킨 구조는 위의 모습과 같다.

 

반응형

 

VGG19 구조

VGG 뒤에 붙은 숫자는 레이어의 개수로 VGG16은 16개의 레이어 VGG19는 19개의 레이어를 가진다.

VGG19는 레이어가 더 많은 만큼 메모리등의 자원을 많이 소모한다. 하지만 성능은 VGG16과 비슷하거나 더 떨어지는 편이라 인터넷을 조금만 둘러보더라도 VGG19의 구조에 대해 설명하는 글보다 VGG16의 글이 훨씬 많다는 것을 볼 수 있다. 그리고 구조자체도 다른 점이 없다고 봐도 될 정도이니 참고 사진을 보며 정리하도록 하겠다.

 

VGGNet의 파라미터 수, 성능

 VGG19는 가장 많은 파라미터의 수를 가지고 있고 기본적인 틀은 위에서 설명한 VGG16의 특징을 그대로 따라가고 있고 단지 Conv 레이어가 3개가 더 추가됬을 뿐이다. 또한 Tensorflow에서 Keras로 예제를 사용하고 응용할 수 있는데 부르는 방법도 "tf.keras.appplications.VGG16", "tf.keras.appplications.VGG19"로 똑같고 부를때 사용하는 인자들도 똑같다. 그렇기 때문에 VGG16 vs VGG19로 구분지어 공부할 것이 아니라 같은 모델인데 VGG19에는 이 정도가 추가된 모델이구나 정도로 이해하면 좋을 것 같다. 그리고 각 모델의 학습 과정에서도 각각 구분되는 것이아니라 업그레이드 되어갔다는 것을 확인 할 수 있다. 처음 A모델의 11레이어를 학습을 한 다음 더 깊은 모델을 학습할 때 이전 레이어들의 구조와 같기때문에 초기 값들을 이전 레이어들로 설정하고 나머지 추가된 레이어들을 학습시켜 간다고 한다. 이를 사용해 Exploding Gradient / Vanishing 문제로 인한 깊은 레이어 학습때 발생하는 문제를 해결 했다고 한다.

 

VGG19의 구조

위의 사진은 VGG19의 구조이다.

 

 

 

간단 정리

1. VGGNet은 3*3의 작은 필터를 모든 Conv 레이어에 사용하였다.

2. 작은 필터를 사용함으로써 더 많은 ReLU함수를 사용할 수 있고 더 많은 비선형성을 확보할 수 있었다.

3. VGGNet의 A~E까지 각각의 다른 모델이 아니라 학습의 단계부터 알 수 있듯, 업그레이드된 모델이다.

4. 위와 같은 특징들로 AlexNet보다 좋은 성능을 가진 모델을 만들어 낼 수 있었다.

 

반응형

댓글