딥러닝을 처음 들었을 때부터 이름은 알고 있던게 CNN이었다. 아무래도 vision 분야에 딥러닝이 많이 활용되고 그러다보니, 이미지 영상 인식의 혁명과도 같은 CNN은 꽤 많이 들어봤던 것 같다.
mnist 손글씨 데이터를 인식하는 CNN 실습을 진행했었는데, 개념적인 부분을 조금 더 다듬고 가고 싶어 포스팅하게 되었다.
CNN이 무엇인지, 어떤 기술들이 포함되어 있는지 살펴보자.
Convolutional Neural Networks 의 약자
convolution
전처리 작업이 들어가는 NN 모델
CNN은 기본적으로 1차원 데이터를 다루는 DNN에서 이미지를 다룰 때 발생하는 문제를 해결하기 위해 등장한 개념이다. DNN이 이미지를 다룰 수 없는 것은 아니지만, 1차원으로만 받아들이다보니 이미지 데이터의 손실이 클 수 밖에 없다는 단점이 있다.
CNN은 이미지 날 것을 그대로 받아들이기 때문에, 공간적/지역적 정보를 유지할 수 있다.
이때 CNN이 받아들이는 이미지는 쉽게 말해 픽셀로 나뉘어진 정보를 읽어들인다. 예를 들어, 2가 적혀진 이미지를 받았다면 그걸 행렬로 나누고 해당하는 한 칸이 흰색인지, 검은색인지 구분되는 숫자가 들어있게 된다.
결국, CNN의 중요한 특징은 이미지의 전체를 보기 보다 부분을 보고, 이미지 한 픽셀과 주변 픽셀들의 연관관계를 유지시키며 학습시키는 것을 목표로 한다는 것이다.
위에서 이미지를 픽셀로 부분을 본다고 했다. 그 방법을 살펴보자.
위에서처럼 노란색 필터가 이미지에서 한칸씩 혹은 엔지니어가 설정한 값만큼 이동해가면서 특징을 추출한다. 즉, Conv 필터의 의미는 특정 패턴이 있는지 박스(필터)로 훑으며 마킹하는 것이다.
그러니까, 이미지 세상에서 이 convolutional filter를 썼다는 것은 이미지에서 어떤 중요한 특징을 찾겠다 라는 의미이다.
딥러닝을 적용하기 이전에는 직접 경계선이나 특징을 찾아줬어야 했는데, 이제는 저 필터를 거쳐 찾을 수 있게 되었다.
그래서 추출된 Convolved Feature를 Activation(ex. ReLU)에 넣어서 나온 값을 통해 이미지를 새로 그리게 된다.
위에서 알 수 있지만, 필터를 거치면 이미지의 손실이 일어난다. 그러니까 귀퉁이가 잘려나간다. 그래서 사이즈 유지를 위해서 테두리에 0을 보태는 과정을 Zero padding 이라고 한다.
위에서 부분씩 보는 우리의 모델은 이미지를 너무 가까이에서 보게 된다. 사진을 매우 가까이서 보면 픽셀 단위로 깨지고 굉장히 부분만 보게 되어 무슨 그림인지 구별하기 어려울 수 있다.
그래서 처음에는 이미지 가까이에서, 점, 선, 질감 등 알 수 없는 몇가지를 배우고 조금 멀리 떨어져서 그 점들이 이어진 형태를 볼 수 있다. 그리고 점점 멀리 떨어져가면서 이미지 전체를 확인할 수 있게 된다.
이 과정이 Pooling의 원리이다. 그런데 모델 학습 할 때 직접 멀어질 수도 있겠지만, 이미지의 크기를 점점 줄이면 되지 않을까? 로 시작한다.
Pooling은 대표적으로 max와 average 방식이 있다.
간단하게 위에 사진처럼 필터로 훑은 정보들 중에 중요한 정보만 남겨서 판단과 학습을 쉽게 하고 노이즈를 줄이는 효과가 있다.
어떤 이미지를 주어 신경망을 학습 시키면, 조금이라도 형태가 달라지면 인식하지 못하는 overfitting 문제가 발생한다. 그러니까 융통성 없는 모델인 셈이다.
DropOut은 이런 상황에 융통성을 기르게 한다.
처음에 학습할 때부터 고의로 일부 정보를 누락시키거나 중간 중간의 노드를 학습하지 않게 한다.
Conv layer는 패턴들을 쌓아가며 점차 복잡한 패턴을 인식하고(conv), 사이즈를 줄여가며 더욱 추상화 해가는(pooling) 과정의 반복이다.
결국, 이 레이어에서 딥러닝에서 내가 준 지령을 수행하기 편하도록 이미지에서 특성을 찾아내는 행동을 한다.
Convolution layer를 거쳐 다시 pooling을 하고 이 과정 후에 flatten 을 거치는데,
Flatten
이란 쉽게 말해 각 세로줄을 일렬로 쭉 세워둬 벡터화 하는 것이다. 1차원으로 바꾸는 것이라 할 수 있는데, 앞서 도출된 내용은 이미지 자체가 아니라 이미지에서 뽑아낸 특성들이기 때문에 1차원이 되어도 무방하다.
그리고 나서 활성함수를 거쳐 결과물을 얻게 된다.
[딥러닝/머신러닝] CNN(Convolutional Neural Networks) 쉽게 이해하기
[딥러닝 CNN] 1. CNN이란>