deep-learning (6)

MinGeo·2022년 8월 29일
0

deep-learning

목록 보기
6/6

오늘의 주제

오늘은 '밑바닥부터 시작하는 딥러닝' chapter 7 합성곱 신경망(CNN)에 대해서 다뤄볼 것이다.

전체 구조

CNN의 네트워크 구조는 지금까지 본 신경망과 비슷하지만, 합성곱 계층폴링 계층이 새롭게 등장한다. 이 계층들을 조합하면 CNN을 만들 수 있다.

지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있다. 이를 완전연결이라고 하며 이를 Affine 계층이라는 이름으로 구현하였다.

아래 그림은 Affine 계층을 사용하여 구성한 신경망의 에시이다.

위 그림과 같은 완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU 계층이 이어진다. 마지막 층에서는 Softmax 계층을 통해서 최종 결과를 확률 형태로 출력한다.

CNN의 구조는 다음과 같다.

완전연결 신경망과는 다르게 합성곱 계층 (Conv) 와 풀링 계층(Pooling)이 추가된다. Conv - ReLU - (pooling) 순서로 진행되지만, 출력에 가까운 층에서는 완전연결 신경망에서 사용하는 Affine-ReLU, 마지막 출력 계층에서는 Affine-Softmax 조합을 사용한다.

합성곱 계층

완전연결 계층의 문제점

완전연결 계층의 문제점은 데이터의 형상이 무시된다 라는 것이다. 입력 데이터가 이미지라고 가정했을 때, 이미지는 세로, 가로, 채널(색상)으로 구성된 3차원 데이터이다. 하지만 완전연결 계층은 3차원 데이터를 1차원 데이터로 변환하여 입력해야 한다.

이렇게 변환하게 되면 공간적 정보가 무시되며, 모든 입력 데이터를 같은 차원의 뉴런으로 취급하여 입력받기 때문에 형상에 담긴 정보를 살릴 수 없다.

하지만 합성곱 계층은 이미지를 3차원 데이터로 입력받아 형상을 유지한다. 또한 입력 받은 후에도 다른 계층에도 3차원 데이터로 전달한다. 그래서 CNN에는 이미지처럼 형상을 가진 데이터도 처리가 가능하다.

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

합성곱 연산

합성곱 연산은 이미지 처리에서 말하는 필터 연산을 의미한다.

위 그림 처럼 합성곱 연산은 입력 데이터에 필터를 적용한다. 데이터와 필터의 형상을 (높이, 너비)로 표시한다.

합성곱 연산은 필터의 윈도우를 일정 간격으로 이동해 가며 입력데이터에 적용한다. 입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 구한다. 이 계산을 단일 곱셈-누산 이라고 한다. 아래 그림은 계산 과정을 나타낸 것이다.

완전 연결 신경망에는 가중치 매개변수와 편향이 존재하는데, CNN에서는 필터의 매개변수가 그동안 우리가 사용했던 '가중치'에 해당한다. 그리고 CNN에도 편향이 존재한다.

편향은 필터를 적용한 후의 데이터에 더해진다. 그리고 편향은 항상 1X1 사이즈, 즉 하나만 존재한다. 이 값을 필터를 적용한 모든 원소에 더하는 것이다.

패딩

패딩이란, 합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값으로 채우는 기법이다. 패딩은 주로 출력 크지를 조정할 목적으로 사용한다. 4X4 입력 데이터에 3X3 필터를 적용하면 출력은 2X2로 입력보다 사이즈가 2만큼 줄어든다. 합성곱 연산을 여러번 되풀이하는 심층 신경망에서는 이 사이즈가 줄게 되면, 어느 시점에서는 출력이 1이 되어 합성곱 연산을 적용할 수가 없다. 하지만 패딩을 사용하면 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달할 수 있다.

스트라이드

스트라이드란 필터를 적용하는 위치의 간격을 의미한다. 이 크기만큼 필터를 적용하는 윈도우가 이동한다.

위에서 패딩, 스트라이드 두가지를 다뤘는데 위에서 패딩을 키우면 출력 크기가 커진다고 했다. 반대로 스트라이드 값을 키우면 출력 크기가 작아진다. 이러한 관계를 수식으로 나타내면 다음과 같다.

단, 위 식이 성립하려면 OHOW가 반드시 정수로 나눠떨어지는 값이어야 한다.

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

채널까지 고려한 3차원 데이터를 다루는 합성곱 연산의 그림은 다음과 같다.

2차원일때와 비교해보면, 채널 방향으로 특징맵이 늘어나 있다. 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해서 하나의 출력을 얻는다.

블록으로 생각하면 다소 이해가 쉽다.

위 그림은 한장의 특징 맵인 출력 데이터를 출력하는 합성곱 연산을 나타낸다. 합성곱 연산의 출력으로 다수의 채널을 내보내려면 필터를 여러개 사용하면 된다. 그림으로 나타내면 다음과 같다.

위 그림을 보면 알겠지만 필터를 FN개 적용하면 출력 맵도 FN개가 생성된다. 이 완성된 블록을 다음 계층으로 넘기는 것이 CNN의 기본 흐름이다.

합성곱 연산도 편향을 사용한다. 아래 그림은 위 연산에 편향을 추가한 모습이다.

편향은 채널 하나에 값 하나씩으로 구성된다.

배치 처리

신경망 처리에서는 입력 데이터를 한 덩어리로 묶어 배치로 처리한다. 완전연결 신경망에서는 이 배치를 이용하면서, 그중 몇가지만 골라 쓰는 미니배치 방식의 학습도 지원하도록 하였다.

합성곱 연산도 이 배치 처리를 지원한다. 각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원 데이터로 저장한다.

배치 처리를 하는 경우에는 각 데이터의 선두에 배치용 차원을 추가해주어야 한다. 위 그림에서 나타난 것 처럼 신경망에 4차원 데이터 하나가 흐를 때마다 데이터 N개에 대한 합성곱 연산이 이뤄진다. 이말은 즉 N회 분의 처리를 한 번에 수행하는 것이다.

풀링 계층

풀링은 세로, 가로 방향의 공간을 줄이는 연산이다.

위 그림은 2X2 최대 풀링을 스트라이드 2로 처리하는 과정이다. 최대 풀링 이란 최댓값을 구하는 풀링 연산이다. 2X2 영역에서 가장 큰 원소 하나를 꺼낸 후, 스트라이드 2이니까 2만큼 이동하여 다시 영역에서 가장 큰 원소 하나를 꺼낸다.

풀링 계층의 특징

학습해야 할 매개변수가 없다
풀링 계층은 합성곱 계층과 달리 학습해야 할 매개변수가 없다.
채널 수가 변하지 않는다
풀링 연산은 입력 데이터의 채널 수 그대로 출력 데이터로 내보낸다.
입력의 변화에 영향을 적게 받는다
입력 데이터가 조금 변해도 풀링의 결과는 잘 변하지 않는다.

마무리

오늘은 '밑바닥부터 시작하는 딥러닝' chapter 7의 합성곱 신경망 (CNN)에 대해 다루었다. 다음에는 마지막 chapter 8 딥러닝에 대해서 알아볼 것이다.

0개의 댓글