CS/ML DL

딥 러닝: 합성곱 신경망(Convolution Neural Network, CNN)

연수구 주정뱅이 2021. 7. 18. 14:12

합성곱(Convolution)은 과거부터 컴퓨터 비전(Computer Vision, CV) 분야에서 많이 쓰이는 이미지 처리 방식으로 계산하는 방식은 아래와 같다. 합성곱은 입력데이터와 필터의 각각의 요소를 서로 곱한 후 다 더하면 출력값이 된다. element-wise 방식이라고도 한다.

 

출처: https://ce-notepad.tistory.com/14 , 스파르타코딩클럽 가장 쉽게 배우는 머신러닝

 

1*2 + 2*0 + 3*1 + 0*0 + 1*1 + 2*2 + 3*1 + 0*0 + 1*2 = 15이다.

 

이렇기 때문에 4x4(입력 데이터) * 3x3(필터) = 2x2(결과)가 나온다.

 

출처: Gradient-Based Learning Applied to Document Recognition, Yann LeCun, 7p

 

Input 데이터를 convolution 연산을 한다. 이렇게 뽑아낸 feature map들의 차원을 축소시켜 핵심을 뽑아낸다(subsampling). 이후 convolution, subsampling을 반복하여 차원을 줄인다. 이를 fully connected layer(MLP)로 연결한 후 output을 얻으면 좋은 결과가 나온다.

 

 

 

CNN에서 사용하는 용어들을 알아보자. 대표적으로 Filter, Stride, Padding이 존재한다.

 

 

출처: https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

 

위의 그림에서 5x5 Input(파란색)이 Filter를 거치면 3x3 feature map(하얀색)을 뽑아낼 수 있다. 이때 필터(filter 또는 kernel)의 크기는 3x3(어두운 파란색)이다.

또한, filter가 오른쪽 한칸씩 이동하기 때문에 이를 Stride는 1이다. Stride는 '보폭'이라는 뜻이 있으므로 의미를 연상해보자.

 

 

이렇게 filter를 거치는 연산을 하면 5x5 input이 3x3 output으로 바뀌어 사이즈가 줄어들게 된다. 이때 output의 사이즈를 input의 사이즈와 동일하게 줄어들지 않게 하려면, input data에 패딩(padding 또는 margin)을 주어 데이터를 처리해준다.

 

출처: https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

 

위의 그림에서는 점선으로 표현된 데이터가 모두 0으로 가득차 있는 padding이다.

 

 

위에서는 하나의 필터를 사용했지만 여러개의 필터를 사용하면 CNN의 성능을 높일 수 있다. 아래의 그림에서는 입력과 출력이 다음과 같다.

  • 입력 이미지 크기: (10, 10, 3) [가로, 세로, 채널]
  • 필터의 크기: (4, 4, 3)
  • 필터의 개수: 2
  • 출력 특성 맵의 크기: (10, 10, 2)

출처: https://stackoverflow.com/questions/42883547/intuitive-understanding-of-1d-2d-and-3d-convolutions-in-convolutional-neural-n

 

 

출처: 스파르타코딩클럽 가장 쉽게 배우는 머신러닝