본문 바로가기
파이썬 프로그래밍/Numpy 딥러닝

32. [CNN기초] 이미지의 합성곱 훈련 -쉬운예제(이론)-

by Majestyblue 2023. 1. 20.

 저번시간엔 image to column 이란 무엇인지, im2col 을 이용해 어떻게 이미지를 합성곱 할 수 있는지, 역전파는 어떻게 하는지 알아보았다.

 이번 시간에는 정말 쉬운 예제로 간단한 이미지를 합성곱을 이용해 어떻게 훈련할 수 있는지 알아보고자 한다.

 

이론시간을 갖는 이유는, 무작정 컴퓨터 앞에 앉아 코딩하는 것은 정말로 멍청하고 비효율적이기 때문이다. 노트를 이용하여 내용을 손을 한번 전개하면서 의사코드(psudo code)를 작성하는 과정이 정말정말 필요하다.

(그리고 이러한 노트 정리는 아이패드가 짱이다. ㅡㅡ)

 

 

1. 문제제기

아래와 같이 Input인 3×3 이미지 4장이 있다. 어느 쪽 모서리가 밝은지 주목하자. 

이를 Target인 2×2 이미지로 훈련할 수 있을까? 

 

간단하게 생각해서, Input 이미지를 stride = 1, padding = 0, filter size = 2×2 로 합성곱을 했을 때 Target이 출력되므로 합성곱 출력 결과를 Target으로 훈련하면 될 듯 하다. 

 

 

2. 순전파 과정 정의하기

순전파는 아래와 같이 정의될 수 있다. 합성곱 연산 결과 자체가 모델 예측값(pred)이 되는 구조이며, MSE를 오차함수로 사용한다.

 

 

 

훈련에 필요한 변수를 설정해 보자.

가중치W, 편향B, stride, padding, filter size, output size를 각각 설정한다. 

filter size는 가중치 shape이다.

 

 

 

 

 

Conv2D 함수는 아래와 같은 과정을 거친다. image를 column으로 변환하는 함수를 거쳐야 한다.

이미지를 column으로 바꾸어야 하고 선형 연산 후 다시 이미지로 바꾸어야 한다.

 

 

 

 

 

shape을 비교하면서 구체적으로 어떤 과정을 거치게 되는지 알아보자.

 

 

 

 

3. 역전파

역전파 과정을 살펴보자. 

역전파 과정은 순전파의 역순으로 생각해야 한다. 선형 연산 결과는 (batch, 4)임을 기억하자. 순전파에서 이를 이미지로 변환하여 (batch, 2, 2)가 되었는데 역전파에서는 반대로 가야 한다.

 

W 기울기를 구하는 과정을 잘 살펴보자. 또한 이미지 한개는 (4, 4)이고 batch개의 이미지를 1개의 필터인 (2, 2) 를 (1, 4)로 reshape하여 선형 연산을 하였으므로 (1, 4) 와 (4, 4)를 batch번 선형 연산 후 다 더해야 한다.

 

B 기울기는 아래와 같이 기존 선형 연산의 B 기울기 구하기와 동일하다.

 

 

shape에 잘 유의하여 다음 시간에 이를 직접 코드로 구현하자.