[DL-Basic 정리][CNN] CNN의 Concept

mincheol2·2022년 2월 8일
0

DeepLearningBasic

목록 보기
4/7
post-thumbnail

이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.

Convolution

CNN 에서 쓰이는 Convolution 에 대해서 알아보도록 하자.

수식으로 Convolution을 이해해보는 글도 있으니 참고하도록하자.
Convolution 연산 이해하기

Convolution in 2D Image

2D 이미지는 흑백이미지를 생각하면 된다.

기본적인 2D 이미지에서 Convolution 연산을 하는 과정을 보도록 하자.

  • K : kernal 을 뜻하는 것으로 Convolution 연산을 하는 과정에서 변하지 않는 값이다.
  • I : 2D 이미지를 행렬로 나타낸 것으로 input에 해당한다.
  • Output : 2D 이미지를 Convolution 연산한 결과이다.

Kernal은 image에 도장을 차례차례 찍듯이 움직이며 ouptut 요소들을 하나씩 계산을 하게된다.
그림으로 보면 이해가 빠르다.

Convolution 필터(Kernal) 에 따라 원본 이미지를 다음 그림들과 같이 효과를 줄수도 있다.

Convolution in RGB Image

우리가 일반적으로 접할 수 있는 이미지는 3개의 채널 Red Green Blue으로 이루어져 있다.

결과적으로 이미지는 3개의 차원을 갖는 Tensor로 나타나게 된다.

방식은 2D Image 와 큰 차이 없다.

다만 주의할 점은 Kernal 의 채널 수 (3개)와 이미지의 채널 수(r,g,b)(3개)를 꼭 맞춰줘야 한다는 점이다.

그렇기 때문에 일반적으로 이미지에 5x5 커널을 적용한다는 말은 5x5x3 커널을 적용한다는 말이다.



만약 output의 채널 을 늘리고 싶다면, 그림과 같이 커널의 개수를 여러개(늘리고 싶은 만큼) 적용하면 된다.



CNN의 구성요소 2개

  • 앞서 살펴본 Convolution 연산Pooling Layer : feature extraction 역할

  • Fully Connected layer : Decision making 역할 (특히 분류문제 에서)

최근에는 F.C를 없애거나 최소화시키는 추세이다.

parameter 개수와 관련되어 있는데, 일반적으로 ML에서 학습해야하는 parameter 가 늘어날 수록, 학습이 어렵고, 일반화 성능이 낮아진다.

그래서 CNN 은 같은 모델을 만들고 최대한 deep 하게 만들어 parameter를 줄이는 방향으로 발전하게 된다.

Layer가 많아지는데 parameter가 적어지는게 아이러니 한 것 같지만, 다음 정리에서 CNN의 발전 concept을 보고 이해해 보도록 하자.



Stride

stride 는 넓게 걷는다는 의미로 kernal이 얼만큼 이동할지에 대한 값이다.

그림은 kernal size가 3이라고 했을 때, stride = 1, stride = 2일 때의 움직임을 나타낸 것이다.



padding

가장자리(boundary)convolution 하기 위해 boundary 옆을 채워 주는 것을 의미한다.
padding 을 하지 않으면 boundary의 정보가 소실된다.

그림은3x3 kernal이 주어졌을 때 padding 을 하지 않은 것과 padding (1) 을 한 것의 차이를 보여준다.



Parameter 개수 계산하기

CNN은 대체로 이미지를 다루는데 이미지 데이터 특성상 굉장히 많은 양의 parameter를 계산하게 된다.

앞에서 언급했듯이 CNN의 발전은 Parameter 개수 를 줄이기 위해 노력하였다.

그렇기 때문에 기본적인 Parameter 개수를 계산하는 법을 알 필요가 있다.

우선 CNN 에서의 Parameter는 무엇을 일까?

기본적인 Neural Network에서 parameter기울기(w)편향(b)를 의미하는데,
CNN 에서 Parameter 는 바로 kernal을 의미한다.

따라서 우리는 Parameter 개수kernal 의 원소 수 라고 생각 할 수 있다.

Parameter 개수 를 구하는 법은 간단하다.

Parameter 개수 = kernal size input channel output channel

그림의 Parameter 개수 를 구해보면 다음과 같다.

Parameter 개수 = (3x3) x 128 x 64 = 73,726

profile
옹오옹오오오옹ㅇㅇ

0개의 댓글