코딩하는 해맑은 거북이

[딥러닝] CNN (Convolutional Neural Network) 본문

AI

[딥러닝] CNN (Convolutional Neural Network)

#CJE 2022. 12. 31.
본 게시물의 내용은 'CNN 첫걸음(부스트캠프 AI Tech)' 강의를 듣고 작성하였다.

 

Convolution 연산 이해하기

지금까지 배웠던 다층신경망(MLP)은 각 뉴런들이 선형모델과 활성함수로 모두 연결된 (fullyconnected)구조이다.

각 성분 \(ℎ_i\) 에 대응하는 가중치 행 \(W_i\) 이 필요하고, 만일 i 가 바뀌면 사용되는 가중치도 바뀐다.

가중치 행렬의 크기와 학습시켜야 하는 파라미터 갯수가 커지게 된다.

 

그러나, convolution 연산은 커널(kernel)이라는 고정된 가중치 행렬을 사용하고

고정된 커널을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조이다.

중요한 특징은 입력벡터 x를 모두 다 활용하는 것이 아닌 커널 사이즈 k 만큼 추출하고 움직여가면서 사용하는 것이다.

만일 i가 바뀌면 활성화 함수와 커널을 제외하고 convolution 연산이 입력벡터 x 위에서 움직여가면서 적용된다.

가중치 행렬로 고정된 커널을 사용하기 때문에 파라미터 갯수를 많이 줄일 수 있다.

>> 커널을 사용한 convolution 연산은 선형변환의 한 종류에 속함

 

 

Convolution 연산의 수학적인 의미는 신호(signal)를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것이다. 참고자료

정의역이 연속일때 - 적분, 불연속일때 - 급수
CNN에서 사용하는 연산은 엄밀히 말하자면 +를 사용한 cross-correlation이다.

전체공간에서는 +, -는 중요하지 않기 때문에 cross-correlation과 convolution을 똑같이 성립되었음.

엄밀히 말하면 cross-correlation 이지만,  역사적으로 convolution이라 불러왔음.

 

 

커널은 정의역 내에서 움직여도 변하지 않고(translation invariant) 주어진 신호에 국소적(local)으로 적용한다.

- 파란색 : 신호

- 빨간색 : 커널

- 검은색 : 결과

- 노란색 : 국소적으로 적용되는 연산

파란색 신호에 해당하는 함수를 검은색으로 정보를 확산, 추출, 감소시키는 연산을 convolution이 수행한다.

 

 

영상처리에서 Convolution

커널의 종류에 따라 경계처리, 노이즈, 블러처리 등 다양한 영상처리 기법이 적용된다.

https://setosa.io/ev/image-kernels/

 

Image Kernels explained visually

An image kernel is a small matrix used to apply effects like the ones you might find in Photoshop or Gimp, such as blurring, sharpening, outlining or embossing. They're also used in machine learning for 'feature extraction', a technique for determining the

setosa.io

 

 

다양한 차원에서의 Convolution

Convolution연산은 1차원뿐만 아니라 다양한 차원에서 계산 가능하다.

데이터의 성격과 종류에 따라서 사용하는 커널이 달라진다.

음성, 텍스트 같은 1차원 데이터는 1D-conv를 사용하는 경우가 많다.

흑백 영상 같은 2차원 데이터나 컬러 영상 같은 3차원 데이터는 각각이 사용되는 convolution의 종류가 달라지게 된다.

중요한 점은 차원이 높아진다 하더라도 i, j, k의 위치가 바껴도 커널 f의 값은 바뀌지 않는다는 것이다.

 

 

2차원 Convolution 연산 이해하기

1D-conv 연산에서는 입력벡터 상에서 커널을 한 칸씩 이동하는 것과 달리

2D-conv 연산은 입력행렬 상에서 커널을 x, y 방향으로 한 칸씩 이동하면서 선형모델과 합성함수가 적용되는 구조이다.

 

입력 크기를 (H, W), 커널 크기를 (\(K_H\), \(K_W\)), 출력 크기를 (\(O_H\), \(O_W\))라 하면 출력 크기는?

출력 크기 계산 방법

 

 

(마치 3차원 입력 같은) 채널이 여러개인 2차원 입력(ex. RGB데이터)의 경우 2차원 Convolution을 채널 개수만큼 커널을 만들어서 적용한다고 생각하면 된다.

즉, 각각의 채널 개수 만큼 2차원 입력들을 분리한 상태에서 채널 개수 만큼 커널을 만든 다음에,

이 커널들을 각각의 2차원 입력에 Convolution 연산을 적용한 후, 이 값들을 더해줘서 2차원 Convolution을 수행한다.

 

 

 

텐서를 직육면체 블록으로 생각하면, 

2차원 입력에서 채널이 여러개인 즉, 3차원 입력으로 2차원 Convolution을 수행할 때, 커널도 채널이 여러개인 텐서로 생각해볼 수 있다.

그럼 2차원 Convolution을 수행한 결과, 출력은 채널이 1개로 나온다.

 

만약 출력이 여러개 채널을 가지게 하고싶다면 어떻게 Convolution 연산을 수행하면 될까?

>> 커널의 개수를 원하는 출력 채널 개수 만큼 만들면 된다!

즉, 출력의 채널의 \(O_C\)개 만큼 만들고 싶다면 3차원 커널의 개수를 \(O_C\)개 만큼 만들면 된다.

 

 

 

Convolution 연산의 역전파 이해하기

Convolution 연산은 커널이 모든 입력데이터에 공통으로 적용되기 때문에 역전파를 계산할 때도 convolution 연산이
나오게 된다.

수식적으로 보면 Convolution 연산에 해당하는 변수 x에 미분을 해도 , 똑같이 convolution 연산이 나온다.

 

5개의 값을 가지는 입력벡터, 3개의 커널로 이루어진 1D-conv를 생각해보자.

입력의 차원이 5개, 커널의 차원이 3개이므로 출력의 차원은 3개(5-3+1)가 된다.

Convolution 연산

Convolution 연산을 수행한 후에 손실함수에서 loss값을 계산한 후에 각 출력벡터에 각 미분값이 전달되었다고 하자.

입력벡터의 x3는 아래 그림과 같이 출력벡터에 적용된 가중치값이 3개 있었다.

역전파 단계에서 다시 커널을 통해 그레디언트가 전달된다.

각각의 커널들은 똑같이 O3가 x3에 대해서 w1을 통해 그레디언트를 전달했기 때문에,

w1를 통해서 전달되었던 δ3는 w1으로 배당이 된다. 그리고 w1 대신 x3를 곱해서 δ3x3가 w1의 그레디언트가 된다.

 

역전파

 

'AI' 카테고리의 다른 글

인공지능(AI) 기초 다지기 (9)  (0) 2023.03.06
[딥러닝] RNN (Recurrent Neural Network)  (0) 2022.12.31
딥러닝 기초 다지기 (4)  (0) 2022.12.26
딥러닝 기초 다지기 (3)  (0) 2022.12.25
딥러닝 기초 다지기 (2)  (0) 2022.12.25
Comments