신경망을 구성하는 방법은 정말 여러가지가 있다.
이중 가장많이 쓰이는 신경망을 3가지 뽑아보자면
위의 3가지가 될텐데 오늘은 CNN에 대해서 알아보려한다.
합성곱(Convolution)은 예전부터 컴퓨터 비전(Computer Vision, CV) 분야에서 많이 쓰이는 이미지 처리 방식으로 계산하는 방식은 아래 같다. 입력데이터와 필터의 각각의 요소를 서로 곱한 후 다 더하면 출력값이 되는 형태이다.
또한 합성곱하면 항상 등장하시는 Yann LeCun교수는 딥러닝 연구원들과 이 합성곱을 어떻게 딥러닝에 활용할 수 있을까 고민하다가, 1998년에 논문을 발표하는데 그내용은
르쿤 교수가 합성곱을 이용한 이 신경망 디자인을 합성곱 신경망(CNN)이라고 명칭하였고 이미지 처리에서 엄청난 성능을 보이는 것을 증명하였다. CNN의 발견 이후 딥러닝은 전성기를 이루었다고 볼 수 있을 정도로 관심이 증가했다. 이후 CNN은 얼굴 인식, 사물 인식 등에 널리 사용되며 현재도 이미지 처리에서 가장 보편적으로 사용되는 네트워크 구조로 자리잡게 되었다.
합성곱 신경망에서 가장 중요한 개념은 합성곱 계층(Convolution layer)이라 할수 있다.
아래와 같이 5x5 크기의 입력이 주어졌을 때, 3x3짜리 필터를 사용하여 합성곱을 하면 3x3 크기의 특성맵(Feature map)을 뽑아낼 수 있다. 필터(Filter 또는 Kernel)를 한 칸씩 오른쪽으로 움직이며 합성곱 연산을 하는데요, 이 때 이동하는 간격을 스트라이드(Stride)라고 한다.
그런데 이렇게 연산을 하게 되면 합성곱 연산의 특성상 출력값인 특성 맵의 크기가 줄어들게 된다. 이런 현상을 방지하기 위해서 우리는 패딩(Padding 또는 Margin)을 주어, 스트라이드가 1일 때 입력값과 특성 맵의 크기를 같게 만드는 방법을 사용하게 된다.
위에서는 1개의 필터를 사용하여 연산을 하였지만 여러개의 필터를 이용하여 합성곱 신경망의 성능을 높일 수 있다! 그리고 이미지는 3차원(가로, 세로, 채널)이므로 아래와 같은 모양이 되는데. 이 그림에서 각각의 입력과 출력을 정리해보자면
합성곱 신경망은 합성곱 계층(Convolution layer)과 완전연결 계층(Dense layer)을 함께 사용한다.
아래는 Average pooling의 예시이다. Max pooling에서는 2x2 크기의 특성 맵에서 최대 값을 추출했다면 Average pooling은 2x2 크기의 특성 맵에서 평균 값을 추출하는 방식이다.
Max pooling과 Average pooling의 결과를 비교해보면
다시 이 그림으로 돌아와서 두 번째 풀링 계층을 지나면 완전연결 계층과 연결이 되어야 하는데 풀링을 통과한 특성 맵은 2차원이고 완전연결 계층은 1차원이므로 연산자체가 불가능하다.
따라서 우리는 평탄화 계층(Flatten layer)를 사용해서 2차원을 1차원으로 펼치는 작업을 하게 되는데. 아래는 간단하게 평탄화 계층의 동작을 설명한 그림이다.
평탄화 계층을 통과하게 되면 우리는 완전연결 계층(Dense layer)에서 행렬 곱셈을 할 수 있게되고 마찬가지로 완전연결 계층(=Dense=Fully connected) + 활성화 함수의 반복을 통해 점점 노드의 개수를 축소시키다가 마지막에 Softmax 활성화 함수를 통과하고 출력층으로 결과를 출력하게 되는 일련의 flow를 거치게 되는 것이다.
위처럼 다양한 분야에서 사용되고 있음을 알수있다!