CNN(Convolutional Neural Network)

김기범·2022년 10월 3일
0

Deep Learning

목록 보기
2/3

합성곱 신경망(Convolutional Neural Network)

합성곱 신경망이란?

  • 시각적 이미지 분석에 가장 일반적으로 사용되는 인공신경망의 한 종류로, 입력 미지로부터 특징을 추출하여 입력 이미지가 어떤 이미지인지 클래스를 분류함
  • 이미지 및 비디오 인식, 추천 시스템, 이미지 분류, 의료 이미지 분석 미 자연어 처리에 응용됨

  • 일반 신경망 ANN의 경우, 이미지 전체를 하나의 데이터로 입력하기 때문에 이미지의 특성을 찾지 못하고 이미지의 위치가 약간 변경되거나 왜곡된 경우 올바른 성능을 기대할 수 없음 -> 데이터의 형상이 무시됨
  • CNN은 이미지를 하나의 데이터가 아닌, 여러 개로 분할하여 처리함
    -이미지가 왜곡되더라도 이미지의 부분적 특성을 추출할 수 있어 올바른 성능을 낼 수 있음
  • 자동차의 경우 자동차를 쪼개서 각 부분의 특징을 추출

https://huangdi.tistory.com/12
대부분의 내용 참고

CNN 전체 구조

ANN과 CNN이 특별히 다른 점은
CNN에는 합성곱 계층 Convolutional layer풀링 계층 Pooling layer 이 새롭게 등장한다는 점이다.

지금까지 본 신경망은 입접하는 계층의 모든 뉴런과 결합되어 있다. 완전 연결 fully-connected라고 하고, 완전히 연결된 계층을 Affine 계층이라고 한다.(다층 퍼셉트론과 비슷한 개념)

완전연결 계층(Affine 계층)으로 이루어진 네트워크이 예

완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 같은 ReLU/Sigmoid 계층이 이어져 있다.

CNN으로 이루어진 네트워크의 예: 합성곱 계층과 풀링 계층이 새로 추가됨

CNN에서는 앞서 말했던 새로운 층인 '합성곱 계층 Conv'과 풀링계층 Pooling'이 추가된다. 그리고 출력에 가까운 층에서는 이전 신경망과 같이 'Affine-Softmax' 조합을 그대로 사용한다.

완전연결계층의 문제점

완전연결 계층을 사용하면 데이터의 형상이 무시된다.
입력 데이터가 이미지인 경우를 예로 들어보자.
이미지는 통상 세로, 가로, 채널(색상 rgb값)의 3차원 데이터 형상으로 공간적 정보를 담고 있다. 완전연결 계층에 입력할 때 3차원 데이터를 평평한 1차원 데이터로 평탄화하여 각 계층을 지나게 한다. 따라서 3차원 속의 의미를 갖은 본질적 패턴은 무시하게 되고 모든 입력 데이터를 같은 차원의 뉴런으로 취급하여 형상에 담긴 정보를 살릴 수 없는 것이다.

앞서 설명한 것 처럼 CNN은 입력데이터로 받은 3차원의 데이터를 그대로 다음 계층으로 전달하기 때문에 올바른 성능을 보일 수 있는 것이다.

합성곱 계층

CNN에서는 합성곱 계층의 입출력 데이터를 특정 맵 feature map이라고 한다. 합성곱 계층의 입력 데이터를 입력 특징 맵 input feature map, 출력 데이터를 출력 특징 맵 output feature map이라고 한다.

- 합성곱 연산

합성곱 계층에서는 합성곱 연산을 처리한다. 합성곱 연산은 이미지 처리에서 말하는 필터 연산을 가리킨다.
여기서 알아야 하는 주요 단어는 필터(커널), 윈도우(Window), 단일 곱샘-누산(fused multiply-add, FMA)정도가 있다.

합성곱 연산의 계산 순서

합성곱 연산에서는 입력 데이터에 필터를 적용한다.
위 그림의 경우 데이터와 필터의 형상을 (높이Height, 너비Width)로 표현할 때, 입력은 (4, 4), 필터는 (3, 3), 출력은 (2, 2)로 표기할 수 있다.

합성곱 연산은 위 그림 처럼 핕러의 윈도우를 일정 간격으로 이동해가며 입력 데이터에 적용한다. 입력롸 필터에서 대응하는 원소까라 곱하고 그 총합을 구한다. 이 계산을 단일 곱샘-누산이라 한다.

  • CNN에서의 필터의 매개변수가 가중치에 해당한다.
    합성곱 연산의 가중치와 편향까지 고려하면 아래와 같이 계산할 수 있다.

합성곱 연산의 편향: 필터를 적용한 원소에 고정값(편항)을 더함

- 패딩 Padding

합성곱 연산 수행 전 입력 데이터 주변을을 특정 값 (예를 들어 0)으로 채우는 것을 패딩이라 한다.

합성곱 연산의 패딩처리: 입력데이터 주위에 0을 채운다.(위 그림에선 0 생략'

패딩은 주로 출력 크기를 조정할 목적으로 사용한다. 합성곱 연산을 거칠 때마다 출력 크기가 줄어들어서 어느 순간 1이 될 수 있개 되면 더 이상 합성곱 연산을 적용할 수 없기 때문에, 이런 상황을 방지하기 위해 패딩을 사용한다.

- 스트라이드 Stride

필터를 적용하는 위치의 간격을 스트라이드라고 한다. 위에서 살펴본 모든 예에선 스트라이드가 1이었다. 스트라이드가 2인 합성곱 연산의 예로 다음의 그림을 들 수 있다.

스트라이드가 2인 합성곱 연산

스트라이드를 2로 두면 필터를 적용하는 윈도우가 두 칸씩 이동한다. 보시다시피 스트라이드르 키우면 출력의 크기가 작아진다.

출력의 크기를 조정하는 패딩, 스트라이드 사이의 관계식을 정의할 수 있다.
출력크기 (OH, OW)는 아래 식과 같다. OH와 OW는 항상 정수로 나눠떨어지도록 변수를 조정해야 한다.
딥러닝 프레임워크 중에서는 정수가 안될 경우 반올림을 하거나 에러를 내지 않고 진행하도록 구현하기도 한다.

- 3차원 데이터의 합성곱 연산

이미지와 같은 입력 데이터의 경우는 세로, 가로에 채널까지 고려한 3차원 데이터를 가진다.
이제부터는 3차원 데이터의 합성곱 연산을 알아보자.

채널 방향으로 특정 맵(입출력 데이터)이 여러 개 존재하는 경우에는 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해서 하나의 출력을 얻으면 된다. 아래의 예를 통해 직관적으로 이해할 수 있다.

3차원 데이터 합성곱 연산의 계산 순서

3차원 합성곱 연산에서는 입력 데이터의 채널 수와 필터의 채널 수가 반드시 같아야 한다. 그리고 필터의 모든 채널 크기가 같아야 한다. 필터 크기는 임의로 설정 가능하다.

- 블록으로 생각하기

3차원 합성곱 연산은 데이터와 필터를 직육면체 블록이라 생각하면 계산하기 더 쉽다. 3차원 데이터를 다차원 배열로 나타낼 때는 (채널, 높이, 너비) 순서로 쓰겠다. 데이터의 형상은 (C, H ,W)로 쓰고, 필터의 형상은 (C, FH, FW)로 쓴다.

합성곱 연산을 직육면체 블록으로 생각하는 경우

위의 예에서는 출력 데이터가 한 장의 특징 맵으로 채널이 1개입니다. 출력 채널을 여러개로 늘리고 싶다면?
합성곱 연산의 출력으로 다수의 채널을 내보내려면 필터(가중치)를 다수 사용하면 된다.

여러 필터를 사용한 합성곱 연산의 예

필터를 FN개 적용하면 출력 맵도 FN개 생성된다. 이렇게 출력 데이터를 (FN, OH, OW)의 3차원 형태로 만들면 다음 계층에서도 3차원 합성곱을 수행할 수 있다.

필터의 가중치 데이터는 4차원 데이터로 (출력 채널의 수, 입력 채널의 수, 높이, 너비) 순으로 쓴다.
이 경우에 편향을 더하려면 (FN, 1, 1)의 편향 데이터를 더해주면 된다. 채널 하나 당 편향 값 하나씩 구성한다.

- 배치 처리

배치(Batch): 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음

완전연결 신경망에서 입력 데이터를 한 덩어리로 묶어 배치로 처리하여 처리 효율을 높인다. 합성곱 연산에서도 배치 처리를 지원한다.

각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원 데이터로 저장한다.

합성곱 연산 배치 처리

각 데이터의 맨 앞에 배치용 차원을 추가하면 4차원 형상을 가진 채 각 계층을 타고 흐른다. 신경망에 4차원 데이터가 하나 흐를 때마다 데이터 N개에 대한 합성곱 연산이 일어나니, N회 분의 처리를 한 번에 수행하는 거라고 볼 수 있다.

풀링 계층

풀링은 세로, 가로 방향의 공간을 줄이는 연산이다.
아래의 예는 2 x 2 최대 풀링을 스트라이드 2로 처리하는 순서를 도식화한 것이다.

2 x 2 최대 풀링의 처리 순서 (스트라이드 2)

풀링에는 크게 2가지 연산 방법이 있다

  1. 최대 풀링 Max pooling: 풀링 영역 내의 최댓값을 구하는 연산
  2. 평균 풀링 Average pooling: 풀링 영역의 평균을 계산하는 연산

풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다.
예를 들어 윈도우가 3 x 3이면 스트라이드는 3으로 설정한다.

- 풀링 계층의 특징

  1. 학습해야 할 매개변수가 없다
  2. 채널 수가 변하지 않는다
  3. 입력의 변화에 영향을 적게 받는다

입력 데이터가 가로로 1원소만큼 어긋나도 출력이 같은 경우 존재

profile
대학생

0개의 댓글

관련 채용 정보