CNN...

CNN은 사실상 현재 deep learning이 있게 큰 공헌을 한 요소라고 생각한다.

CNN이 있었기에 computer vision에 엄청난 기여를 했고 그 기여가 인정되어 많은 사람들이 deep learning의 세계로 들어갔으니까 말이다.

내가 이해하는 기본 구조는 이렇다. 기존의 MLP에 filter (kernel이라 불리우는)가 추가 된 것이라고 본다.

따라서 training을 시키면 이 filter가 원하는 형태로 수렴하게 되는 것이다.

이를테면 시계열 데이터에 CNN을 적용하여 training을 시킨다고 하면, 원하는 답이 시계열의 average를 원하는지 아니면 기울기를 필요로 하는지에 따라 계산과정에서 이 filter가 최적의 모양으로 수렴해가게 된다.

이것은 그림이나 숫자를 인식할 때 그 그림이나 숫자에서 인식에 영향을 미치는 중요한 부분을 extract하는 능력을 심어넣은 것이나 다름없다.

일단 입력데이터에 특정 dimension의 digital filter를 걸어서 이를테면 blur (대략적인 분위기만 인식) 혹은 Enhance (특정부분에 대한 섬세한 분석)해서 원하는 결과를 얻게 될 것이기 때문이다.

학습하는 과정에서 MLP 뿐 아니라 kernel까지 한꺼번에 backpropagation에 참여시켜 학습시키게 되므로 이것이 가능해지는 것이다.

그러니까, MLP를 이용하여 어떤 분석/인식의 목적을 수행하기 위하여 일종의 전처리를 위한 digital filter가 필요한데, CNN은 kernel이라고 불리운 filter를 MLP와 합쳐놓고 그걸 모두 학습과정에서 최적화하게 만들어놓은 것? 이라고나 할까?

padding이라는 것을 하게 되어있는 것 자체가 여기에 filtering의 목적이 있음을 알 수 있다. (digital) filter에는 적어도 어느 개수 이상의 값이 들어와 있어야 예상되는 응답을 낼 수 있는데, padding을 하지 않으면 경계부분들은 사실상 버려지는 셈이 된다.