[ML Study]ch08-1 인공 신경망
본 포스팅 한빛미디어의 <혼자공부하는 머신러닝+딥러닝(박해선 저)>를 요약 정리했습니다.
합성곱
합성곱(convolution)은 입력 데이터의 특징을 추출하기 위한 연산이다. 주로 이미지 데이터를 처리하는 데 사용되고 합성곱 연산을 통해 입력 이미지에서 패턴과 특징을 감지한다.
유용한 특성만 드러나게 하는 것과 유사
특성
- 입력 데이터 전체에 가중치를 곱하는 것이 아닌 일부 데이터에 가중치를 곱한다.
- 하나의 뉴런에 1개의 출력을 내므로 몇개의 데이터를 입력하던지 output은 뉴런의 개수만큼 출력된다.
위 영상과 같이 뉴런의 개수와 총 입력데이터의 개수 만큼 출력된다.
“뉴런 == 필터 == 커널” 모두 같은 말이다.
2차원 데이터 일때는 필터를 (3,3)과 같이 사각형으로 만들어서 1차원에서 하던것과 같이 똑같이 진행합니다. 만약 총 데이터가 (4,4)였다면 필터를 이용해 연산해보면 (2,2)의 데이터가 출력되고 출력된 데이터를 특성 맵(feature map)이라고 부른다.
케라스 합성곱 층
케라스의 층은 keras.layers 패키지에 구현되어 있다.
위에서 2차원 데이터를 입력으로 하기 위한 패키지는 아래와 같이 커널(필터)의 크기를 정해주고 맨 앞은 필터의 개수를 정해주면 된다.
from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu')
패딩 및 스트라이드
입력 데이터가 (4,4), 커널이 (3,3)이면 출력값은 (2,2)가 되지만 만약 출력값이 줄어드는 것을 원하지 않고 (3,3)으로 고정되길 원한다면 입력 데이터(4,4)를 x,y 한 행씩 추가하여 (5,5)로 만들고 합성곱 층을 실행하면 된다. 추가한 행은 0이라는 값으로 패딩(padding)하여 0으로 채워주면된다. 0으로 추가되는 것이기 때문에 계산에도 영향을 끼치지 않아서 맘대로 늘려도 상관없다.
패딩 종류는 0으로 채워 넣는 세임 패딩(same padding)과 순수한 입력 배열에서만 합성곱을 하여 특성 맵을 만드는 경우인 밸리드 패딩(valid padding)이 존재한다.
keras.layers.Conv2D(필터 개수(ex. 10), kernel_size=(3,3), activation='relu', padding='same'(or 'valid'))
스트라이드(stride)는 이동 크기라고 한다. 기본으로는 1의 값이 들어가므로 한칸씩 위아래로 이동하지만 만약 이미지의 크기가 크고 특성 맵을 더 작게 줄이고 싶다면 스트라이드 값을 늘려주면된다. (만약 2로 하게되면 두 칸씩 이동)
풀링
풀링(pooling)은 합성곱 층에서 만든 특성 맵의 가로세로 크기를 중이는 역할을 수행한다. 특성 맵의 개수는 줄이지 않는다.