딥러닝 4

김승혁·2023년 8월 24일
0

DL

목록 보기
5/7

CNN

합성곱 신경망

1950년대 허블(Hubel)과 비셀(Wiesel)은 고양이의 시각 피질 실험에서 고양이 시야의 한 쪽에 자극
을 주었더니 전체 뉴런이 아닌 특정 뉴런만이 활성화되는 것을 발견했다. 또한 물체의 형태와 방향
에 따라서도 활성화되는 뉴런이 다르며 어떤 뉴런의 경우에는 저수준 뉴런의 출력을 조합한 복잡한
신호에만 반응한다는 것을 관찰했다. 이 실험을 통해 동물의 시각 피질 안의 신경세포(뉴런)들은 일
정 범위 안의 자극에만 활성화되는 ‘근접 수용 영역’(local receptive field)을 가지며 이 수용 영역들이 서로 겹쳐져 전체 시야를 이룬 다는 것을 발견했다.

이러한 아이디어에 영향을 받은 얀 르쿤(Yann Lecan) 교수는 인접한 두 층의 노드들이 전부 연결 되
어있는 기존의 인공신경망이 아닌 특정 국소 영역에 속하는 노드들의 연결로 이루어진 획기적인 인
공신경망을 고안해 냈다. 이것이 바로 합성곱 신경망(Convolutional Neural Network, CNN)의 등
장이다. CNN은 이미지를 인식하고 처리하는 컴퓨터 비전 분야에서 오늘날까지 인기있는 신경망 모
델이다. CNN에 입력으로 자동차 사진을 주면 자동차를 출력한다. 과연 어떻게 인식할 수 있는 것일
까?

CNN은 입력으로 받은 자동차 사진을 ‘필터링’과 ‘분류’의 과정을 거쳐 자동차라고 출력하는데 이 과
정을 멀리서 본다면 필터링 단계는 입력 받은 원본 데이터를 바로 분류하는 것보다 성능을 좋게 할
무언가를 만드는 단계라고 볼 수 있다. 이때 필터링을 거친 원본 데이터를 피처맵(feature map)이라
고 하며 필터를 어떻게 설정할지에 따라 피처맵이 달라지므로 CNN에서 학습시켜야 할 대상은 바로
이 필터가 된다.

입력 데이터인 이미지는 대게 (높이, 너비, 채널)로 구성된 3차원의 데이터로 여기서 채널이란 이미
지가 가진 색상을 표현하기 위해 필요한 적(red), 녹(green), 청(blue)을 뜻한다. 컬러 사진은 3개의
채널을 가지며 참고로 흑백 사진은 채널이 1 이므로 2차원의 데이터가 된다. 기존에 등장했던 신경
망인 완전 연결 신경망의 경우 3차원의 이미지 데이터를 학습시키기 위해 1차원으로 평면화 시키는
데 이 과정에서 이미지의 공간 정보가 유실이 된다.
이미지의 공간 정보란 말 그대로 이미지가 가지는 ‘공간적인 정보’를 말한다. 이미지를 이루는 가장
작은 단위를 픽셀(pixel)이라고 하는데 거리가 가까운 픽셀들은 서로 연관을 띠게 된다. 이는 곧 사진
에서 음영, 선, 질감 등으로 보여지며 다시 말하면 이런 픽셀들의 연관성이 이미지가 가지는 공간정
보라고 할 수 있다. CNN은 완전 연결 신경망과 다르게 입력 데이터의 원래 구조를 유지해서 입력 받
고 다음 단계로 전달할때에도 이 구조를 유지한다. 이렇게 입력 데이터의 공간정보를 잃지 않으므로
이미지 데이터를 잘 이해할수있다

합성곱 층을 이해하는 것이 핵심

곱셈과 덧셈만 알면 정말 쉬운 ‘합성곱'
이제 CNN의 첫번째 단계인 필터링 과정을 보자. 필터링은 입력 받은 이미지를 잘 분류하기 위해 이
미지에 필터를 씌워 특징을 찾는 작업이다. ‘필터를 씌우는 것’은 CNN에서 합성곱 연산이라고 하는
계산을 통해 이루어 진다. 이제 합성곱 연산을 설명해 보겠다.

합성곱 연산은 CNN의 핵심원리라고 할 만큼 중요하다. 그런데, 합성곱은 곱셈과 덧셈만 이용하
면 되는 매우 단순한 작업이다. 그림과 함께 보면 합성곱 연산을 쉽게 이해 할 수 있을 것이다. 아
래의 그림을 보자.

그림에서 보다시피 합성곱 연산의 계산 순서는 왼쪽 위부터 시작한다. 필터의 크기만큼 입력데이터
의 범위를 선택하고 같은 위치에 있는 원소끼리 곱(성분 곱, element-wise product)한 후 그 값들을
모두 합(sum)한다. 이렇게 얻은 값을 해당되는 위치에 정렬하면 피처맵이 도출된다.

세개의 채널(RGB)에 적용한 컬러 이미지의 경우 (높이, 너비, 채널)의 크기를 가지며 피처맵이 도출
되는 과정은 아래의 그림과 같다.

합성곱 연산을 세개의 채널에 각각 적용한 뒤에 얻은 결과 값을 같은 위치의 원소끼리 더하기만 하
면(element-wise sum) 3차원의 컬러 이미지에 대한 피처맵을 얻을 수 있다. 이 과정을 입체적으로
보면 다음과 같다.

위 그림을 보면 원본 이미지에 필터를 한번만 적용해도 원래의 이미지 보다 절반이나 작아진 것을
볼 수 있다. 앞에서 합성곱 연산은 원본 이미지의 특징을 찾기 위해 필터를 씌우는 과정이라고 했다.
그러나 피처맵이 계속 작아져 (1,1) 사이즈가 된다면 더이상 합성곱 연산을 적용하지 못하게 된다.
이처럼 출력 크기와 관련된 문제를 보완하기 위해 등장한 기법이 바로 패딩(padding)이다. 이제 패
딩의 개념과 종류들을 다뤄볼 차례이다.

패딩(padding)

패딩(padding)의 사용은 앞에서 언급했듯이 출력 크기를 보정하기 위해 사용하며 ‘충전재’라는 의미
처럼 입력 데이터의 사방을 특정 값으로 채우는 것을 말한다. 일반적으로 특정 값은 그냥 0을 사용
하기에 제로패딩(zero padding)이라고도 한다. 아래의 사진은 (4,4)인 입력데이터에 폭이 1 pixel인
패딩을 적용하여 (6,6) 크기가 된 그림이다.

패딩을 사용하지 않으면 합성곱 연산시 입력데이터의 모든 원소가 같은 비율로 사용되지 않는다. 다
음의 그림을 보자. 아래의 그림은 위 그림의 입력데이터에서 합성곱 연산에 적용되는 원소별 횟수를
표시한 것이다.

양 끝 모서리에 위치한 원소의 연산 참여도가 가운데 위치한 원소에 비해 낮다는 것을 알 수 있다.
이는 가장자리의 정보가 다른 곳에 비해 과소평가 되었다는 것을 의미한다. 이 차이는 신경망이 깊
어져 합성곱 연산이 반복된다면 더 커지게 될 것이다. 그렇다면 원본 데이터의 모든 원소가 같은 비
율로 연산에 참여하게 하려면 어떻게 해야할까?
원소별 연산 참여 횟수를 결정하는 것은 ‘패딩’과 ‘스트라이드’이다. 스트라이드는 잠시 뒤에 설명하
고 먼저 패딩의 종류를 몇가지 소개 하겠다.

풀 패딩 (full padding)
패딩을 적용하지 않으면 즉 입력데이터 주위를 0으로 채우지 않으면 앞서 언급한 문제들이 발생한
다. 입력데이터의 모든 원소가 합성곱 연산에 같은 비율로 참여하도록 하는 패딩 방식을 풀 패딩
(full padding)이라고 한다. 위에서 등장한 (4,4)의 입력데이터와 (3,3)의 필터가 주어진 경우 풀패딩을 적용한 입력 데이터의 모습은 아래와 같다.

세임 패딩 (same padding)
세임 패딩은 출력 크기를 입력 크기와 동일하게 유지한다.

스트라이드 (stride)
스트라이드는 사전적으로 ‘보폭’이라는 의미를 갖는다. 마찬가지로 입력데이터에 필터를 적용할때
를 생각해보자. 아래의 예제는 앞에서 계속 다루었던 (4,4)사이즈의 입력 데이터에 (3,3) 필터를 적
용한 예이다.

여기에 우리가 배운 세임 패딩을 적용한다면 다음과 같이 나타낼 수 있다.

패딩을 적용한 입력 데이터에 합성곱 연산을 하면 아래의 그림처럼 진행 될 것이다.

그림에서 필터가 적용되는 보폭을 보자. 지금까지는 보았던 연산들이 그러하듯 왼쪽 위부터 오른쪽
방향으로 한칸씩 전진하며 합성곱 연산이 적용된다. 즉 앞에서 본 예시는 모두 스트라이드가 1이다.
만약 스트라이드가 3이라면 세칸씩 이동하면서 필터를 적용한다. 이를 그림으로 나타내면 다음과
같다.

여기까지 입력데이터, 필터, 패딩, 스트라이드에 대해 알아보았다. 이제 여러분은 합성곱 연산의 작
동 원리와 그 결과로 얻게되는 피처맵의 크기까지 계산 할 수 있다. 지금까지 다룬 과정들은 ‘합성
곱 층’이라는 CNN의 핵심적인 계층에서 일어난다.

폴링 층

“풀링은 차원축소다”
CNN의 또 다른 구성 요소로 ‘풀링 층’이 있다. 사실 엄밀히 말하면 합성곱 층에서 최종적으로 얻은
피처맵은 렐루(ReLU) 활성화 함수를 적용해 값을 산출하여 풀링층으로 전달한다. 기존에 다루었던
신경망을 생각해보자. 한층의 노드들은 다음층의 입력으로 들어가기 전에 활성화 함수를 통과했었
다. CNN에서도 마찬가지로 합성곱 층에서 풀링층으로 넘어가는 단계에 활성 함수를 적용하며 이때
활성 함수로는 속도와 정확성이 좋은 렐루가 사용된다.

다시 본론으로 돌아와 풀링 층을 말하자면 풀링층은 피처맵의 크기를 작게만들어 신경망의 계산량
을 줄이는 기법이다. 합성곱 층의 출력으로 나온 피처맵이 풀링 층의 입력으로 들어가면 크기가 작
아져서 반환된다.

풀링은 입력 데이터의 영역별로 하나의 원소를 뽑는다. 뽑는 기준은 최대값, 최소값, 평균 값이 있으
며 이를 순서대로 최대 풀링(Max pooling), 최소 풀링(Min pooling), 평균 풀링(Average pooling)이라고 한다.

완전 연결 계층

마지막으로 다룰 CNN의 구성요소는 ‘완전 연결 계층’이다. 완전 연결 계층은 우리가 1장에서 다루
었던 신경망에서 등장한 계층으로 한 노드가 이전 층의 모든 노드와 연결 되어있는 구조이다. 우리
에게 매우 익숙한 아래의 그림을 보자. 완전 연결 계층으로 구성된 신경망이다. 완전 연결 계층에서
는 합성곱층에서 찾은 원본 이미지의 특성들을 이용해 분류의 과정을 거친다.

Image Classification

주요 이미지 분류 모형

앞서 살펴봤던 ILSVRC 대회에서 좋은 성능을 보여준 역대 CNN 기반 이미지 인식 모델들을 다시
정리해보면 다음과 같다.

1) AlexNet (2012)
2) GoogleNet (2014)
3) VGGNet (2014)
4) ResNet (2015)
5) SENet (2017)
이외에도 NASNet, MobileNet, EfficientNet 등 주요 이미지 인식 모델이 있다.
더불어, 가장 최근에는 Transformer 계열인 ViT 모형이 이미지 인식에서 가장 좋은 성능을 보여준다.

profile
어떻게 오셨나요

0개의 댓글