CNN
이 나오기 이전, 이미지 인식은 2차원으로 된 이미지(채널까지 포함해서 3차원)를 1차원배열로 바꾼 뒤 FC(Fully Connected)
신경망으로 학습시키는 방법이었다.
단순 FC 방식은 위와 같이 이미지의 형상을 고려하지 않고, raw data를 직접 처리하기 때문에 많은 양의 학습데이터가 필요하고 학습시간이 길어진다. 또한 이미지가 회전하거나 움직이면 새로운 입력으로 데이터를 처리해줘야 한다. 이미지의 특성을 이해하지 못하고 단순 1D 데이터로 보고 학습을하는것이 특징이다.
이러한 방법은 이미지 데이터를 평면화 시키는 과정에서 공간정보가 손실될 수밖에 없다. 즉, 신경망이 특징을 추출하고 학습하는데 있어 비효율적이고 정확도를 높이는데 한계가 있다.
이런 단점을 보완하여 이미지의 공간정보를 유지한채 학습을 하게하는 모델이 CNN
이다.
CNN
의 가장 핵심적인 개념은 이미지의 공간정보를 유지한채 학습을 한다는 것이다.
용어를 설명하면서 CNN의 구성요소들이 어떻게 동작하는지 알아보자.
특징을 추출하는 층으로 일정 영역의 값들에 대해 가중치를 적용하여 하나의 값을 만드는 연산이 실행된다. 이때 이 가중치 행렬을 컨볼루션 필터라 부른다.
또한 가중치 필터 연산 후에 활성화 함수를 적용하여 이후 연산에 넘겨진다. 이때 CNN의 경우 대부분 ReLU 활성화 함수를 사용한다.
아래 이미지에서는 4x4 행렬의 이미지에 대해 3x3 필터를 1 스트라이드(연산마다 필터가 움직이는 칸 수)로 특징 추출하고 있다. 만약 스트라이드의 간격을 조절하면, 특징 맵의 차원을 출일 수도 있다.
각 픽셀을 모두 분리해서 보는게 아니라, 필터를 통해 주변 픽셀과의 관계나 특징을 담은 값으로 학습하기 때문에 보다 정확한 결과를 낼 수 있다. 이렇게 나온 결과 행렬을 Convolved Feature Map, 특징지도라고 한다.
이때, 합성곱 계층을 거치면서 이미지의 크기는 점점 작아지게 되어 이미지의 가장자리에 위치한 픽셀들의 정보는 점점 사라지게 된다.
이러한 문제점을 해결하기 위해 이용되는것이 패딩 (Padding)이다. 패딩은 이미지의 가장자리에 특정값으로 설정된 픽셀들을 추가함으로써 입력 이미지와 출력이미지의 크기를 같거나 비슷하게 만드는 역할을 수행한다. 아래 그림은 0 값을 갖는 픽셀을 추가하는 zero-padding을 적용한 예이며, CNN에서는 주로 zero-padding이 이용된다.
일정 크기의 블록을 통합하여 하나의 대표값으로 대체하는 연산으로 컨볼루션 층에서 출력된 특징 지도를 압축하여 특정 데이터를 강조하는 역할을 한다.
특징지도를 Max Pooling, Average Pooling 할 경우 결과 행렬
풀링 방식에는
- 블록 내의 원소들 중 최대값을 대표값으로 선택하는 Max Pooling
- 블록 내의 원소들의 평균값을 대표값으로 선택하는 Average Pooling
- 블록 내 원소의 크기를 선택 확률로 변환 후 확률에 따라 선택하는 Stochastic Pooling
등 다양한 방법이 있지만 일반적으로 CNN에서는 Max Pooling의 효율이 가장 좋아 많이 사용된다. (뉴런이 가장 큰 신호에 반응하는것과 유사, 노이즈가 감소하고 속도가 빨라진다*.*)
풀링 작업을 수행하는 풀링 계층은 아래와 같은 특징이 있다.
- 풀링은 커널안의 값에서 최대, 평균, 최소값만을 얻어내는 과정이어서 학습대상 파라미터가 없다.
- 풀링 계층을 통과하면 행렬의 크기가 감소하여 다음번 계층에서의 연산 회수나 학습해야할 파라미터 수를 줄일 수 있다.
- 풀링 계층을 통과하더라도 채널 수 (특징 맵 수)에는 변경이 없다.
flatten : 벡터로 펼쳐주는 함수