CNN (Convolutional neural network)

GoogLeNet(Inception-v1)이란?

왕눈임 2024. 12. 28. 18:36

cnn 모델을 기반으로 하여 

성능 개선을 위해서 여러 가지를 발전시킨 모델입니다.

 

(cnn이란?)

2024.11.19 - [CNN (Convolutional neural network)] - CNN (Convolutional neural network) 이란? (1)

2024.11.28 - [CNN (Convolutional neural network)] - CNN (Convolutional neural network) (stride, padding ,pooling)

기존 cnn 대비, GoogLeNet의 특징을 아래와 같이 정리할 수 있습니다.

 

1.vanishing gradeint 해결을 위한 Auxiliary classifier 사용

2.filter의 병렬적 사용 1x1 filter 사용

3.Factorizing convolution

 

각각 무엇인지, 하고자 하는 것은 무엇인지 정리해 봅시다.


1.Auxiliary classifier

vanishing gradient를 해결하기 위해 사용하는 외부 분류기입니다.

 

vanishing gradient란?

 

cnn도 여러 겹으로 쌓다 보면, layer가 깊어질수록 chain rule의 계산 결과가

0으로 수렴하여 gradient가 소실되는 문제가 발생합니다.

chain rule 예시

 

GoogLeNet의 구조는 아래와 같습니다.

위와 같이 cnn의 단일 layer가 계속해서 쌓여있는 구조로 이루어져 있는데

 

마지막 출력층에서만 분류기를 다는 것이 아니라

외부 분류기( Auxiliary classifier)를 중간 layer에서도 달아줍니다.

 

이렇게 하는 이유?

 

기본적으로 분류기 classifier에서는 loss 함수를 최소화하도록

역전파 계산을 통해 학습을 진행하는데

 

이때 마지막 출력층 분류기에서만 역전파 계산을 하면 깊은 layer로 인해

layer 초기에 사용된 wieght까지 chain rule로 계산을 할 때

그 값이 0에 가까워져 gradient가 소실됩니다.(gradient vanishing)

 

하지만 이렇게 중간층에서도 외부 분류기를 통해

역전파 계산을 하도록 하면

 

상대적으로 깊지 않은 layer에 대해서

gradient 계산을 미리 하여 최종 분류기에 전달되므로

gradeint 소실을 어느 정도 막을 수 있습니다.

 

그런데 이 방법에는 큰 문제점이 있습니다.

 

분류기는 mlp(multi-layer-perceptorn)로 이루어져 있습니다. 

 

mlp는 단순 layer를 겹겹이 쌓은 구조로

선형 분류 가능하도록 feature를 추출하게 학습이 이루어졌었습니다. 

 

따라서 GoogLeNet의 초반 layer에서 사용한 외부 분류기도

선형 분류가 가능해진 피쳐들을 추출하게 될 것입니다.

 

이때 이 과정이 깊은 layer를 거쳐서 출력 가능한

optimal feature들의 학습을 방해하고

강제로 선형 분류가 가능한 피쳐를 초반에 출력해 버립니다.

 

즉 optimal feature 뽑히는 걸 초반 분류기들이 방해하는 결과를 낳게 됩니다.

 

따라서 실제 분류 문제에 사용하는 최종 분류기의 성능을 방해하게 됩니다.


 

2.filter의 병렬적 사용 및 1x1 filter 사용

 

cnn에서 filter는 이전 layer에서 feature map의 특징을 요약하기 위해

사용되었습니다.

 

즉 현재 filter의 가중치 배열에 따라, 필터의 사이즈에 따라

다양한 특징을 출력할 수 있습니다.

2x2 filter의 conv연산

 

이때 다양한 특징들을 추출할수록 이미지를 잘 학습하여 최종 분류기의 성능은 

자명히 좋아질 것입니다.

 

다양한 특징들을 추출한다는 것은 --> 다양한 filter size를 사용한다는 것입니다.

 

이런 다양한 filter size를 사용하려면

각 layer마다 같은 종류의 filter를 사용하는 기존의 방식에서는 

계속해서 layer가 깊어져 연산량이 커질 수밖에 없습니다.

 

즉 다양한 size의 필터를 사용하면 feature map의 채널 개수가 계속해서 커집니다.

 

이후 채널 개수가 커진 feature map을 flatten 하여 

mlp에 넣어 분류기를 학습하게 되는데..

 

이 flatten data역시 크기가 매우 커져 연산 속도가 느려질 수 있습니다.

 

그래서 한 layer에서 다양한 특징을 추출할 수 있는 각기 다른 size의 filter를 

병렬적으로 동시에 사용하자는 것입니다.

 

이렇게 이전 layer의 feature map에

다양한 size의 filter를 병렬적으로 conv 연산을 하여 

 

각각의 feature map을 모두 더해 최종 feature map을 계산합니다.

 

그런데 filter의 size가 달라지면 기본적으로 convolution 연산 결과 이후 형성되는

feature map의 size 역시 모두 달라집니다.

 

따라서 conv 연산을 할 때에 stride 및 padding을 조절하여 

생성되는 feature map size를 동일하게 한 후 concat 연산하여

 

최종 feature map을 구성하는 식으로 filter의 병렬적 연산 구조를 갖출 수 있습니다.

stride 및 zero padding

 

이때 다양한 특징을 추출하기 위해 사용하는 여러 size의 filter로

1X1 size filter 역시 사용하게 됩니다.

 

이 1X1 filter가 convoultion 연산 결과 후 생성되는 

feature map의 채널 개수를 줄일 수 있습니다.

 

왜 그럴까요?

 

기존의 cnn에서 convoultion 연산 구조를 살펴봅시다.

 

위에서 볼수 있듯 다음 feature map의 채널 개수

이전 layer의 feature map의 채널 개수와 상관없이 

 

오로지 conv 연산에 사용하는 filter의 채널 개수에 의존합니다.

(feature map의 채널 개수 3개, filter의 채널 개수 5개 --> 결과 채널 개수 5개)

 

따라서 현재 채널 개수가 144개였다면 1X1 filter를 36개 사용 시

이 필터의 채널 개수인 36개의 채널로 결과를 축약하게 됩니다.

 

또한 1X1 filter는 conv 연산할 때에

당연하게도 이전 layer의 feature map 모든 영역에 대해 conv 연산을 하게 됩니다.

 

즉 전체 영역에 걸쳐 연산을 하며, 채널 개수를 원하는 만큼 작게하기에,

전체 데이터를 요약하는 역할을 수행할 수 있게 됩니다.

 

가령 채널 144개를->72개의 채널로 결과를 축약하고 싶다면 

1X1 fileter를 36개 사용하여 전체 데이터를 36개의 채널로 요약하고

나머지 36개의 채널만큼 다양한 size의 filter로 구성하여

다양한 size의 filter를 하나의 layer에서 병렬적으로 사용할 수 있게 됩니다. 


3.factorizing 

이렇게 다양한 filter size를 한 layer에서 병렬적 conv를 진행할 때에

5X5 filter로 conv 연산하는 경우를 생각해 봅시다.

5X5 filter conv

 

위에서 보듯 5X5 feature map에 5X5 filter를 한번 적용하면 바로 1X1 결과로 계산이 됩니다.

 

하지만 위와 같이 3X3 filter를 2 layer에 거쳐 두 번 적용하여 같은 결과를 얻을 수도 있습니다.

 

즉 아래와 같이 모든 연산을 바꿀 수 있습니다.

이렇게 하는 이유

 

우선 filter에 사용되는 weight 개수가 적어집니다.

 

5X5 filter에 사용되는 weight 개수는 25개 

3X3 filter를 두 번 사용한 weight 개수는 18개로

weight의 개수가 적어져 연산량이 줄어듭니다.

 

또한 비선형을 풀 수 있게 됩니다.

 

cnn에서 다음 layer로 넘어가는 conv 연산은

기본적으로 선형성을 만족하는 계산입니다.

 

선형대수학에서 아래의 수식을 만족한다면 선형성을 만족한다고 정의합니다.

즉 이것을 conv 연산에 적용해보면 

conv는 선형임을 알 수 있습니다.

 

즉 conv 연산만으로는 이미지 데이터 자체의 비선형성을 풀 수 없다는 뜻입니다.

 

따라서 factorizing 연산을 통해 아래와 같이 layer를 쌓게 되면 

이런 이미지 자체의 비선형성을 풀 수 있게 됩니다.

factorizing

layer를 쌓는 게 왜 비선형을 푸는 것인지..

 

mlp에서도 선형 분류 불가능한 data에 대해 layer를 쌓으면 

그 문제가 해결되는 것을 알 수 있었습니다.

2024.10.15 - [인공신경망] - MLP(multi-layer perceptron)

 

MLP(multi-layer perceptron)

우선 단층 인공 뉴런에 대해서 먼저 살펴봅시다 간단한 선형 관계식을 생각해 봅시다. (일반적인 class 분류에 활용되는 분류 직선)   주어진 식에서 x는 입력 데이터를 뜻하며 w는 예측직선에

tmddn0512.tistory.com

 

따라서 layer가 깊어질수록, 신경망의 구조가 복잡할수록 

데이터 자체의 비선형을 잘 풀어낼 수 있게 됩니다.