본문 바로가기
딥러닝/밑바닥부터 시작하는 딥러닝

[밑바닥부터 시작하는 딥러닝] 7장- 합성곱 신경망(CNN)

by mintee
728x90

합성곱 신경망(CNN)

 

출처- https://bcho.tistory.com/1149

합성곱 신경망인 CNN은 이전의 앞에서 배운 신경망에 합성곱(Convolution) layer와 풀링(pooling) layer가 더 추가된 것이다. 

CNN = 신경망 + Conv layer+ Pooling layer

CNN을 사용하는 이유는 무엇일까?

앞서 배웠던 신경망은 인접하는 모든 뉴런과 결합되어 있는 신경망을 이를 '완전연결(Affine)계층'이라고 한다. 

그러나 이 완전연결계층의 문제점은 '데이터의 형상을 무시'한다는 것이다. 예를들어 형상이 (1, 28, 28)인 이미지가 있다고 할 때, 이를 한줄로 세운 1줄로 세운 784개의 데이터로 인풋값으로 집어넣었다. 그러나 이는 이미지에서 중요한 정보가 들어있는 특성을 무시할 수도 있다. 그러나 합성곱 계층은 형상을 유지할 수 있다. 이미지도 3차원 데이터로 입력받고, 다음계층에도 3차원 데이터로 전달한다. 그래서 이미지의 형상을 조금 더 잘 이해할 가능성이 높다.

- 특징맵 : 합성곱 계층의 입출력 데이터

 합성곱(Convolution) layer

 

  • 입력 데이터(x)에서 특징을 추출하는 역할
  • 특징을 추출하는 기능을 하는 필터(Filter)와, 이 필터의 값을 비선형 값으로 바꾸어 주는 활성화 함수(Activiation 함수)로 이루어짐

 

필터(Filter)

이 단계에서 이루어지는 합성곱 연산은 필터 연산이라고도 하는데 여기서의 필터는 '가중치'의 역할을 한다. 

위 그림에서 필터의 크기는 (3,3)이지만 (2,2)나 (4,4)와 같의 필터의 크기는 임의로 설정할 수 있다.

Padding

패딩 : 1

패딩은 입력데이터의 테두리를 0과 같은 수로 채우는 방법이다. 

패딩을 하는 이유는 무엇일까?

이렇게 하면 출력값의 크기를 조정 할 수 있기 때문이다. 즉 (4,4)크기의 입력 데이터에 패딩을 1 추가 하면 (6,6) 데이터가 되고 이때 출력은 (4,4)로 바뀐다.

스트라이드(stride) 

필터를 이동시키는 윈도우의 수를 말한다. 아래의 그림에서는 스트라이드를 2로 준 것이다.

입력 크기 (H,W),필터크기(FH,FW),패딩(P), 스트라이드(S)에 따른 출력크기(OH,OW)계산

블록으로 생각하기

필터의 따른 출력데이터의 계산 예시이다. 여기서 주의할 점은 입력데이터의 채널수(3개)와 필터의 채널 수(3개)가 같아야 한다는 점이다. 

채널(색상)이 여러개인 이미지를 합성곱을 수행하면 1개의 채널을 가진 출력 데이터가 나온다. 

채널 수(C), 높이(H), 너비(W)

 

인풋데이터가 RGB의 이미지로 이루어진 데이터일 경우 아래와 같이 3장, 즉 3 채널로 들어와서 3장의 필터와 합성곱을 수행하여 출력 데이터인 피쳐맵이 나오게 된다. 

그러면 합성곱 연산의 출력으로 다수의 채널을 뽑아내려면 어떻게 해야할까? 답은 필터(가중치)를 여러개 사용하는 것이다. 

위 그림과 같이 채널 수가 C인 필터를 여러(FN)개 사용하면 1장의 출력데이터가 FN개가 나오게 된다. 

편향까지 더해준 모습은 이렇게 된다. 

입력데이터는 (데이터 갯수,채널,높이,너비)로 표현한다. 

 

풀링(Pooling) 계층

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

예를 들어 2x2 최대 풀링이면 2x2 영역에서 최대값의 원소 하나로 출력 한다. 참고로 윈도우의 크기와 스트라이트의 크기는 같게 설정하는 것이 보통이다. 여기서는 2x2 크기의 스트라이트 또한 2로 한다. 3x3 이면 스트라이트도 3이다.   

  풀링계층의 특징은 아래와 같다. 

  • 학습해야 할 매개변수가 없다. 
  • 채널 수가 변하지 않는다. 
  • 입력의 변화에 영향을 적게 받는다(강건하다)

 

 im2col


   합성곱 연산 시 im2col 함수를 사용하여 4차원 데이터를 2차원 행렬로 반환해주는데 이렇게 하면 합성곱 연산이 for문으로 돌리는 것 보다 수월해진다.

728x90

댓글