• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    해결됨

신경망이 깊어질수록 필터의 개수가 많아지는 이유가 있나요?

21.07.27 16:09 작성 조회수 1.15k

0

안녕하세요, 수업 잘 듣고있습니다!

Conv2D의 필터 사이즈가 32, 64, 128 로 점점 커지는데, 점점 필터 사이즈가 커지는 이유가 있나요?

제 예상으로는

* 사실 32, 32, 32도 상관없지만 관례상 필터 사이즈가 커질수록 성능이 좋기 때문 => 이것도 커널 사이즈를 (3, 3) 으로 하냐 (5, 5)로 하냐의 실험적인 문제와 동일하다

또는,

* 신경망이 깊어질수록 이미지의 추상적인 특징이 증가하기 때문에 이것을 담을 그릇이 커져야 한다.

이긴 합니다

또, 이것은 별개의 질문인데 너무 헷갈려서요..

필요한 파라미터의 개수는 kernelSize * kernerSize * filters * channel

라고 하셨는데,

INPUT ( None, 28, 28, 3) 이고

Conv2d (filters=32, kernel_size =(3, 3)) 이라면

파라미터 개수는 3 * 3 * 32 * 3 이+ 32 가 될것입니다!

근데 여기서 제 생각으로는, 인풋 채널이 3개긴 하지만,

인풋 채널 3개와 각각의 커널이 합성곱 되어서 나온 결과도 3개이고,

이 결과 3개를 더해서 하나의 행렬로 만들고, 각각의 결과는 모두

같은 필터와 곱해져서 나왔기 때문에 인풋 채널에 영향을 받는다는

내용이 머릿속으로 잘 이해가 안됩니다 ㅠㅠ 이부분도 도와주세요

답변 3

·

답변을 작성해보세요.

2

안녕하십니까, 

1. 네트웍이 깊어질수록 Conv 필터의 채널수(깊이,Depth)가 커지는 것은 예상하신 부분이 개략적으로 맞습니다.

일반적으로 Conv 필터는 이미지의 특정 패턴을 잡아내는데 사용됩니다. 초반에 위치한 Layer들은 주로 사물을 구성하는 edge나 corner와 같은 좀 더 상세한 패턴을 잡아냅니다.

하지만 이 패턴만으로 이미지를 판별하기는 부족합니다. 오히려 이러한 상세 패턴은 다양한 유형으로 존재하면서 Noise나 오버피팅(즉 학습 데이터와 굉장히 동일한 데이터 세트가 아니라 좀 더 일반적인 데이터 세트에서는 성능이 저하되는 현상)으로 적절한 이미지 분류로 동작하기는 어렵습니다. 

그래서 이들 상세화된 패턴들이 결합된 보다 일반적인 패턴(예를 들어 동그라미라던가)으로 만들어 내는데 이를 위해서 Conv 필터의 채널수를 더욱 증가 시키게 됩니다. 이게 초기 CNN을 연구하면서 필터수를 증가시키면 상세 정보는 손실되지만 보다 일반적이고 추상화된 패턴을 잡아낼 수 있다는 것이 밝혀지면서 이렇게 필터수를 증가 시키게 되었습니다. 

사실 이런 일반적인 패턴들을 뽑아내는 것이 개별적으로 상세화된 패턴을 뽑아내는 것보다 훨씬 복잡한 연산이 필요합니다. 개별적으로 상세화된 패턴을 보다 복잡하게 결합하여 보다 일반화된 패턴을 뽑아내야 하기 때문입니다. 그래서 더 많은 채널수를 가지게 됩니다. (질문을 적다 생각해보니, 나중에 개정판을 만들게 되면 이 설명을 덧붙이는 게 좋을 것 같다는 생각이 드는군요)

2. Conv 연산의 parameter 수를 구하는데 중심은 Conv 필터를 3차원으로 생각하는 것입니다. 

가령 

x = Input(shape=(28, 28, 3)) 

Conv2D(filters=32, kernel_size =(3, 3))(x) 라고 한다면 

Conv2D(filters=32, kernel_size =(3, 3))는 다음과 같은 작업을 합니다. 

먼저 3차원 Conv 필터를 만듭니다. 이때 하나의 3차원 Conv 필터는 가로와 세로가 3x3(kernel_size=(3,3) 이므로) 이고 채널수(깊이)가 3인 3x3x3 필터가 됩니다.채널수가 3인 이유는 Input shape가 28x28x3 으로 Input의 채널수가 3이기 때문에 이와 동일한 채널수를 반드시 가져야 하기 때문입니다. 

다음으로 Conv2D()의 filters=32 이므로 이러한 3차원 Conv 필터를 32개를 만들게 됩니다. 즉 형태가 3x3x3인 3차원 Conv 필터를 32개를 가지게 되므로 parameter 수는 3x3x3x32 가 됩니다(bias 까지 생각하면 3x3x3x32 + 32) 

감사합니다. 

0

2번 답변 보충 설명 드립니다.

네, 인풋의 각 채널당 적용되는 필터의 파라미터들이 모두 다릅니다.

즉 3차원 Conv 필터 3x3x3 (kernel size 3x3, channel수 3)의 파라미터들이 모두 다릅니다.

전상민님의 프로필

전상민

질문자

2021.07.29

답변 감사드립니다

0

전상민님의 프로필

전상민

질문자

2021.07.28

안녕하세요, 답변 감사드립니다.

1번 답변 이해가 잘 되었습니다.

2번 답변에 대해 보충 질문 드립니다.

```

먼저 3차원 Conv 필터를 만듭니다. 이때 하나의 3차원 Conv 필터는 가로와 세로가 3x3(kernel_size=(3,3) 이므로) 이고 채널수(깊이)가 3인 3x3x3 필터가 됩니다.채널수가 3인 이유는 Input shape가 28x28x3 으로 Input의 채널수가 3이기 때문에 이와 동일한 채널수를 반드시 가져야 하기 때문입니다. 

```

답변주신 내용에서, Conv 필터는 3x3(kernel_size) 이고 인풋 채널이 3이므로 깊이가 3이되어 3x3x3 필터가 된다고 하셨습니다. 따라서, 인풋의 1, 2, 3번째 채널은 필터의 1, 2, 3커널과 합성곱 될것입니다. 근데 이 때, 1, 2, 3 커널이 모두 동일한 값을 가지고 있지 않나요? 이 의미는 인풋의 1, 2, 3번째 채널이 필터의 1, 2, 3 커널 중 단 한개의 커널과만 합성곱 되더라도 동일한 결과가 나온다는 것입니다. 이 말은, 마치 np.dot([1, 2, 3], [3]) 을 계산하기 위해 [3]이 [3, 3, 3]으로 확장되는 것과 동일하고, 따라서 초기의 파라미터 수를 구할 때 동일한 파라미터 수가 중복되서 세지는 경우가 있는것이 아닌가하는 의문에서 질문드렸습니다. 제가 이해를 잘못하고 있는 걸까요?

* 만약 제 설명이 틀렸다면, 인풋의 각 채널당 적용되는 필터의 파라미터들이 모두 다른 것이겠지요? 그렇지만 제가 이해한 것은, 각 필터당 파라미터가 다를 뿐이지 각 커널(필터를 이루는 한개의 채널들)의 파라미터는 동일하다고 이해했습니다.

감사합니다.