합성곱 신경망(Convolution Neural Network)?

post

지난 시간에는 신경망을 통한 학습 과정 중 오차 역전파(Back-propagation)에 대해서 알아보았습니다. 간략히 설명하자면, 오차 역전파는 가중치를 수정하기 위한 신경망의 역방향 진행입니다.

이번 포스팅에서는 신경망의 발전된 형태인 합성곱 신경망(Convolution Neural Network)에 대해서 알아보겠습니다.

합성곱 신경망은 이름과 같이 '합성곱' 작업이 들어가는 신경망을 의미합니다. 따라서 합성곱 신경망을 이해하려면 합성곱(convolution)이 무엇인지 알아야 합니다.

Convolution

고양이는 특정 물체나 패턴마다 다른 부분의 뉴런이 반응한다.

합성곱 신경망이 개발된 계기가 있는데요, 개발자들은 고양이가 어떤 것을 보는지에 따라 뇌 자극 부위가 달라지는 것을 보고 아이디어를 얻었다고 합니다.

​그에 따라 인공지능이 이미지 전체를 보는 것이 아닌 부분을 보는 방법을 고안해냈습니다. 여기서 말하는 '부분'을 Filter라고 합니다. 필터는 이미지의 부분 부분을 이동하는데, 이 때 한 번 움직일 때 이동하는 거리를 Stride라고 합니다. 위의 경우는 Filter가 한 칸씩 움직이니, Stride는 1입니다.

 

Filter는 주어진 이미지를 이동할 때마다 임의의 가중치(Weight)를 곱하여 새로운 값을 만들어냅니다. 이 과정을 합성곱(convolution)이라고 합니다. 인공지능은 합성곱을 반복하면서 적절한 가중치를 찾아냅니다. 그러나 합성곱을 진행하면 할수록 이미지는 크기가 줄어든다는 단점이 있습니다. Padding은 이러한 현상을 해결하기 위해서 사용하는 기법입니다.

Padding

Padding 기법은 합성곱을 수행하기 전에 주어진 이미지를 '0'으로 둘러싸는 작업입니다. 그 결과로 이미지는 가장자리가 손실되지 않고 원본을 유지할 수 있습니다. 필요없는 데이터를 붙이는 것은 계산량을 증가시키지만, 그로 인해 얻는 이득 때문에 보통은 Padding 기법이 사용됩니다.

Pooling

Pooling은 합성곱을 설명할 때 빠지지 않고 언급되는 기법입니다. 합성곱과 Pooling을 번갈아가면서 수행하는 VGGNet이 가장 대표적인 합성곱 신경망 모델이기 때문에, 이를 예시로 들어 설명하겠습니다.

Pooling에는 해당 Filter 영역에서 가장 큰 값을 추출하는 Max와 평균 값을 추출하는 Average 등 그 외에도 여러 종류가 있습니다. 여기서는 Max Pooling이 예시로 사용되었습니다. 위 그림에서는 (2x2) 크기 filter에 stride를 2로 지정하여 Max Pooling을 진행하였습니다. 결과를 보면 각 영역에서 가장 큰 값이 출력된 것을 확인할 수 있습니다.

Pooling 기법은 입력 데이터의 크기가 축소되고 학습하지 않기 때문에 계산비용이 줄어든다는 장점이 있습니다.

결과적으로 합성곱 신경망은 Convolution을 다양하게 겹친 신경망이고 그 보조적 수단으로 Pooling을 사용하며 원본 이미지의 특징을 추출해냅니다. 이것을 보통 특징추출(Feature Extraction)이라고 합니다. 추출된 특징은 최종적으로 분류(Classification) 과정을 거쳐 출력됩니다. 합성곱 신경망의 큰 그림을 살펴보면 위 그림과 같습니다.

오늘은 합성곱 신경망을 이해하기 위해 필요한 주요 기법들에 대해서 알아보았습니다.

Get Started Today
with datamaker.

high_five