[딥러닝] 딥러닝 기초(5) 합성곱(convolution) 신경망

업데이트:

딥러닝 기초(5) 합성곱(convolution) 신경망

딥러닝기초

합성곱

사실 합성곱(convolution)이라는 단어는 신호와 시스템 쪽에서 나온 말인데요, 신호와 시스템에서 쓰이는 합성곱과 인공지능쪽에서 쓰이는 합성곱이라는 단어는 정확히 일치 하지는 않습니다. 왜냐하면 신호가 처리 될 때는 메모리를 포함하지 않기 때문입니다.

위 그림의 단계별로 설명하겠습니다.

(a) 그림은 256x256 이미지라고 생각하시면 되겠습니다. 이것을 학습시킬 때는 10x10 뉴런을 이용합니다. 즉 10x10 뉴런이 아웃풋을 생성합니다. 한번 실행한 이후로 옆으로 조금 움직여서(노란색) 또 실행하게 되고요. 그 다음에 또 조금 움직여서(분홍색) 실행하게 됩니다. 결국 뉴런의 배치가 각각 다른 출력값을 만들고 출력값은 이미지의 특정위치와 연관되어 있습니다. 이것이 합성곱(convolution)의 개념입니다.

(b) (a)의 합성곱을 통해 매우 많은 점이 생성됩니다. 이 점들을 가지고 무엇을 할 수 있을까요? 우리는 인접한 값들(local neighborhood)과 비교해 최대값을 찾을 것입니다.

(c) (b)에서 찾은 최대값을 가지고 이미지를 다시 매핑한 결과입니다. 이러한 과정을 풀링(pooling)이라고 하는데요. 이 경우에는 최대값을 사용하므로 max pooling이라고 부릅니다.

(d) (c) 다음에는 특정 뉴런을 가져와서 다른 이미지에 입힙니다. 이것을 커널(kernel)이라고 하는데요. 이 커널이라는 용어도 신호와 시스템에서 가져온 용어 입니다. 보통 하나의 커널로 100번 정도 반복하는데요. 다시 말하면, 우리는 256x256 이미지를 사용했고 10x10 커널을 이용했습니다.

초기 딥러닝은 위 그림 처럼 다소 쉬운 신경망이었습니다. 위 그림에서 커널을 픽셀이라고도 하는데요. 이는 어떤 뉴런의 입력값이 될 수 있습니다. 딥러닝의 놀라운 점은 최종 결과가 함수근사자(function approximator)를 가진다는 것입니다. (그런데 왜 그런지는 아무도 모른다고 하네요 ㅠ) 여기까지 딥러닝의 기초 였습니다.


잠깐! 선형대수, 머신러닝에 대해 좀 더 자세히 알고 싶다면?

선형대수와 통계학으로 배우는 머신러닝 with 파이썬