매직코드
article thumbnail

CNN은 높은 정확도를 가지고 있음

자연어를 이용해서 정확도를 더 높이려는 시도중

> 완전 연결 계층의 문제점

데이터의 형상 무시

입력 데이터가 이미지인 경우, 이미지는 3차원으로 구성된 데이터지만 1차원으로 평탄화 필요

MNIST 데이터셋(1채널, 가로 28 세로 28 픽셀)

형상을 무시하고 모든 입력 데이터를 동등한 뉴런으로 취급하여 형상에 담긴 정보를 살릴 수 없음

 

> 합성곱 계층의 특징

입력 데이터의 형상 유지

이미지도 3차원 데이터로 입력 받으며 다음 계층에도 3차원 데이터로 전달

형상을 가진 데이터를 제대로 이해할 가능성이 큼

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

 

> 합성곱 연산 - 입력 데이터에 필터를 적용

합성곱 연산을 * 기호로 표기

이미지 처리에서 말하는 필터 연산에 해당

데이터와 필터의 형상을 높이, 너비로 표기

  ex) 입력(4, 4), 필터(3, 3), 출력(2, 2)

문헌에 따라 필터를 커널이라 하기도 함

 

> 합성곱 연산 방법 - 단일 곱셈(누산)

첫번째로 필터를 적용한 경우만 보자면

(1*2) + (2*0) + (3*1) + (0*0) + (1*1) + (2*2) + (3*1) + (0*0) + (1*2) = 15

해당 셀 위치의 숫자들을 곱한 후 모두 더한 값을 출력셀에 넣는다.

여기에 편향성을 넣어주고 싶다면 필터를 적용한 이후 각 셀에 편향값을 넣어준다.

편향은 항상 숫자 한개만 존재한다.

 

> 패딩

합성곱 연산 전에 입력 데이터 주변을 특정 값으로 채우는 것으로 출력 크기를 조정할 목적으로 사용

입력데이터(4*4)에 패딩을 1만큼 적용하면 (6*6)의 크기가 된다.

여기에 필터(3*3)을 적용한다면 출력 데이터는 (4*4)가 된다.

 

합성곱은 한칸씩 옆으로 가면서 계산하기 때문에 6*6 크기에 필터가 가로로 4번, 세로로 4번 움직을 수 있어 4*4 출력이 나온다.

> 스트라이드

필터를 적용하는 위치 간격

원래 1칸씩이동하지만 스트라이드가 2라면 필터가 2칸씩 이동한다.

스트라이드 숫자가 크면 출력의 크기는 작아진다.

 

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

3차원 데이터는 입력데이터의 채널 수와 필터의 채널 수가 같아야함

채널이 여러개 있으면 출력값도 여러개 나오는데 그 모든 출력값의 합이 최종 출력값이 된다.

> 여러 필터를 사용한 합성곱

하나의 입력데이터에 필터는 여러개 적용할 수 있다.

필터를 여러개 적용함으로 다양한 출력값을 가지고 다양한 정보를 얻을 수 있다.


풀링 계층

세로, 가로 방향의 공간을 줄이는 연산

연산결과를 내가 원하는 모양으로 변경하고 싶을 때 사용

일반적으로 max값 구하는데 사용

> 특징

학습해야 할 매개변수가 없다

채널 수가 변하지 않는다

입력의 변화에 영향을 적게 받는다


CNN 구현하기

입력 데이터 특징 담아주기

입력데이터에 Conv > ReLU(0 이하는 0의값, 0 이상일경우 해당하는 값 출력) > Pooling(출력 변경하고싶으면 적용)

 

기계학습 시키기 : 반복

Affine(행렬로 변환) > ReLU(정확도 상승)

 

> 층 깊이에 따른 추출 정보 변화

합성곱 계층을 여러 겹 쌓으면 층이 깊어지면서 더 복잡하고 추상화된 정보 추출

처음 층은 단순한 엣지에 반응

다음으로 텍스처에 반응

층이 더 깊어지면 더 복잡한 사물의 일부에 반응하도록 변화

층이 깊어지면서 뉴런이 반응하는 대상이 단순한 모양에서 고급 정보로 변화하기에 사물의 의미를 이해하게됨

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!