hyeonzzz's Tech Blog

[Andrew Ng] 딥러닝 4단계 : 1. 합성곱 신경망 네트워크 (CNN) 본문

Deep Learning/Basics

[Andrew Ng] 딥러닝 4단계 : 1. 합성곱 신경망 네트워크 (CNN)

hyeonzzz 2024. 2. 5. 11:23

1. 컴퓨터비전 (Computer Vision)

컴퓨터비전 : 이미지와 비디오를 처리해 유의미한 정보를 추출하는 인공지능 기술

 

 컴퓨터비전의 종류

  • Image Classification - 고양이인지 아닌지 분류한다

  • Object Detection - 차를 식별한다. 한개가 아니라 여러개의 차를 식별할 수 있다

  • Neural Style Transfer -두가지 스타일의 그림을 섞어서 새로운 그림을 생성해낸다

 

 Deep Learning on large images

저해상도의 이미지) 고양이 이미지의 크기는 64 * 64 이지만 r, g, b 때문에 3을 곱한다. 따라서 이미지 크기는 12288이 된다

 

고해상도의 이미지) 다루게 될 이미지가 더 큰 이미지인 경우에도 같은 이유로 3백만의 크기를 갖는다

 

만약 3백만개의 입력값이 있다면 x는 3백만의 차원을 가진다

첫 은닉층에서 1000개 정도의 은닉 유닛이 있다고 했을 때,

전체의 가중치 w^[1]의 행렬이 fully connected network를 사용한다면 1000 * 3,000,000 의 크기를 가진 행렬이 된다

(여기서 3백만 = 3m)

 

 이미지 크기가 커 변수의 수가 많을 때 문제점

  1. overfitting을 방지하기 어렵다
  2. 계산과 메모리의 요구사항이 많이 든다

 

이미지의 크기에 대한 해결책으로 나온 것이 합성곱 연산!!

 

 

2. 모서리 감지 (Edge detection) 예시

어떻게 이미지의 모서리를 감지할 수 있을까?

 

 컴퓨터가 이미지를 감지하는 과정

컴퓨터는 이미지의 세로선(vertical edges)을 감지하고 가로선(horizontal edges)을 감지해 이미지를 detect한다

 

 합성곱 연산(Convolution operation)을 이용한 Edge detection 과정

이미지는 (높이 x 넓이) 로 표현할 수 있다

합성곱 연산은 아래 그림과 같이 진행된다. 왼쪽 이미지는 원래 이미지, 중앙에 있는 3 x 3 행렬은 filter(kernel)이다. 각각의 원소곱 후 전부 더해준다

그후 다음 스텝으로 필터(커널)을 한칸 이동하여 합성곱 연산을 진행한다. 이렇게 이미지의 밑부분까지 진행하여 최종 4 x 4 의 새로운 행렬을 만들어 낸다

※ 프로그래밍할때는 * 대신 ConvForward라는 함수, 텐서플로에서는 tf.nn.conv2d, 케라스에서는 Conv2d 함수 이용

 

 Vertical edge detection

수직 윤곽선은 어떻게 탐지 할 수 있었을까?

 

위 그림의 왼쪽이미지에서 10과 0 사이의 경계선이 수직 윤곽선이다.

3 * 3 filter에서 왼쪽 편에는 밝은 픽셀이 있고, 가운데는 중요하지 않고, 오른쪽에는 어두운 픽셀이 있다

filter를 통과해 합성곱 연산을 하게 되면 밝은 부분이 중앙으로 나타난다. 이는 원래 이미지의 경계선에 해당하는 부분이다

 

비록 크기가 안맞고 검출된 경계선이 조금은 두껍지만 이는 원래 이미지가 작아서 그런것!!

더 큰 이미지를 이용한다면 꽤나 정교하게 수직 경계선을 찾을 수 있다!

 

 

3. 더 많은 모서리 감지 (Edge detection) 예시

 

양과 음의 윤곽선의 차이, 서로 다른 밝기의 전환 알아보기

저번 영상

  • 왼쪽은 밝고 오른쪽은 어두운 6 x 6 크기의 이미지
  • 세로 윤곽선 검출기 필터와 합성곱 연산을 하게 되면 가운데의 세로 윤곽선을 찾아낼 수 있었다.
  • 이미지를 뒤집어서 왼쪽이 어둡고 오른쪽이 밝아서 10 들이 이제는 오른쪽에 있고 0 은 왼쪽 -> 동일한 필터로 합성곱 -> -30 을 얻게 된다.
  • 전환되는 순서가 바뀌었기 때문에 30 역시 뒤집힌 것이다, -30 으로 말이다.
  • 두 종류의 차이를 신경쓰지 않는다면 결과 행렬에 절대값을 씌워줘도 된다. 하지만 이 필터는 밝은 곳에서 어두운 곳으로 가는 것과 그 반대의 경우의 차이를 나타내 줍니다.

 

 

3 x 3 크기의 수직 필터

  • 세로 윤곽선을 검출해냅니다.
  • 왼쪽이 상대적으로 밝고 오른쪽이 상대적으로 어두운 부분

3 x 3 크기의 수평 필터

  • 위쪽이 상대적으로 밝고 아래쪽이 상대적으로 어두운 것

아래 예시

  • 10 이 왼쪽 위와 오른쪽 아래에 있고 이걸 이미지로 나타낸다면, 0 으로 표시된 부분은 어두울 것이고 왼쪽 위와 오른쪽 아래는 밝게 표현될 것
  • 결과에서 30 이라는 수가 나온 이유는 3 x 3 영역에서 확실히 위쪽의 픽셀이 밝고 아래쪽은 어두워이다. 강한 양의 윤곽선을 찾은 것
  • -30 이라는 수는 이 부분에 해당합니다. 아래쪽이 밝고 위쪽에 어두워서 음의 윤곽선이 되는 것
  • -10 같은 어중간한 값이 나온 이유는 필터가 그 부분에서 왼쪽에 있는 양의 윤곽선과 오른쪽에 있는 음의 윤곽선 모두를 인식해서 두 개가 섞여서 이런 중간 크기의 값이 나온 것
  • 하지만 만약 이미지가 1000 x 1000 의 이런 바둑판 같은 이미지였다면 이런 중간값이 상대적으로 작아서 눈에 띄지 않을 것이다. 그래서 서로 다른 필터는 세로 또는 가로의 윤곽선을 검출해낸다.

 

 

어떤 필터를 사용해야 할까?

1. 소벨 필터

  • 그래서 1 2 1 0 0 0 -1 -2 -1 을 사용
  • 중간 부분의 픽셀에 더 중점을 둔다. 그래서 더 선명해 보인다.

2. Scharr 필터

  • 3 10 3 과 -3 -10 -3 을 사용
  • 세로 윤곽선 검출을 위한 것이고 90 도 회전하게 되면 가로 윤곽선 검출이 된다.

9 개의 숫자를 일일이 고를 필요가 없을 수 있다

스스로 학습하게 두고 9 개의 숫자를 아예 변수로 설정한 다음 역전달 형식으로 학습된 9개의 숫자가 6 x 6 이미지와 3x3 필터가 합성곱을 했을 때 좋은 윤곽선 검출기의 역할을 하게 하는 것입니다. 가로 세로 윤곽선 뿐만 아니라 43 도나 70 도 혹은 73 도 기울어진 윤곽선이나 원하는 어떤 형태의 윤곽선도 검출할 수 있을 것이다.

 

 

4. 패딩 (Padding)

 

합성곱 신경망을 변형하는 한 방식 - 패딩

이전의 영상에서 봤던 것은 6 x 6 이미지를 가지고 3 x 3 필터의 합성곱 연산으로 4 x 4 의 행렬을 얻었습니다. 왜냐하면 3 x 3 필터에서는 6 x 6 행렬에 맞는 위치가 4 x 4 개가 있기 때문이죠. 여기에서 필요한 계산은 n x n 이미지를 f x f 필터로 합성곱을 한 결과는 n - f + 1 x n - f + 1 입니다. 이 예시에서는 6 - 3 + 1 은 4 가 되어서 4 x 4 의 결과 이미지를 얻게 되죠.

 

이 방법의 두 가지 단점

1. 합성곱 연산을 할 때마다 이미지가 축소된다

6 x 6 이미지가 4 x 4 가 되었죠. 만약 이 작업을 여러 번 반복한다면 이미지가 굉장히 작아질 것입니다. 

2. 가장자리의 픽셀을 보면 결과 이미지에 단 한 번만 사용된다

가장자리나 모서리에 있는 픽셀은 그만큼 결과 이미지에 덜 사용되는 것입니다. 가장자리 근처의 정보들은 거의 날려버리게 되는 것이죠.

 

두 개의 문제를 모두 해결하기 위해서는 합성곱 연산을 하기 전에 이미지를 덧대는 것입니다. 

1 픽셀만큼 가장자리에 더해주는 것입니다. 그렇게 되면 이제 6 x 6 이미지가 아닌 8 x 8 이미지가 되는 것이죠. 이제 8 x 8 이미지를 3 x 3 필터와 합성곱을 하면 6 x 6 이미지를 얻게 됩니다. 기존의 크기를 유지하게 된 것이죠.

0을 덧대는 것이 일반적인데 만약 p 가 패딩의 양이라면 이 경우에는 p 는 1 입니다. 그래서 결과 이미지는 n + 2p - f + 1 x n + 2p - f + 1 입니다. 이 경우에는 6 + 2 - 3 + 1 과 반대에도 똑같이 하면 6 + 2 - 3 + 1 은 6 입니다. 그래서 6 x 6 이미지를 얻게 되고 기존의 크기를 유지할 수 있죠.

 

이렇게 함으로써 버리는 건 아니지만 가장자리의 정보를 덜 가져오는 일을 줄일 수 있게 됩니다. 지금 보여준 패딩은 1 픽셀 만큼의 크기이고 원한다면 2 픽셀도 가능합니다. 또다른 경계를 덧대주면 더 많은 픽셀도 가능하죠.

 

 

패딩을 얼마 만큼 할 것이냐 - 유효 합성곱동일 합성곱

1. 유효 합성곱

: 패딩이 없는 것

n x n 이미지를 f x f 필터와 합성곱을 해서 n - f + 1 x n - f + 1 크기의 결과 이미지가 나오게 됩니다. 이전 영상에서 봤던 예시에 해당하는데 6 x 6 이미지를 3 x 3 필터와 합성곱을 해서 4 x 4 의 결과가 나왔습니다.

 

2. 동일 합성곱

: 패딩을 한 뒤 결과 이미지의 크기가 기존 이미지와 동일

n x n 이미지에 p 픽셀 만큼 패딩을 더한다면 결과 이미지의 크기는 n + 2p - f + 1 x n + 2p - f + 1 가 되죠. 만약 n + 2p - f + 1 이 n 이 되어서 결과의 크기가 기존의 크기와 같게 하려면 이 식을 풀면 되는데 n 은 양변에서 소거되고 p 에 대한 식으로 풀면 p 는 (f - 1) / 2 가 됩니다. 만약 f 가 홀수라면 이런 식으로 p 를 설정하면 결과가 이미지의 크기가 기존의 이미지와 같아질 수 있습니다. 그래서 예제에서 필터의 크기가 3 x 3 이었을 때 결과와 입력 크기를 같게 해주는 패딩의 크기가 (3 - 1) / 2 = 1 이 되는 것이죠.

 

일반적으로 컴퓨터 비전에서 필터의 크기 f 는 홀수입니다. 컴퓨터 비전에서는 짝수의 필터를 거의 볼 수 없습니다. 두 가지 이유가 있는데

1. 만약 f 가 짝수라면 패딩이 비대칭이 됩니다. f 가 홀수일 때만 합성곱에서 동일한 크기로 패딩을 더해줄 수 있고, 짝수면 왼쪽과 오른쪽이 서로 다르게 패딩을 해줘야 하죠.

2. 홀수 크기의 필터가 있으면 3 x 3 이나 5 x 5 의 경우에는 중심 위치가 존재합니다. 컴퓨터 비전에서는 구별된 하나의 픽셀이 있어서 중심 픽셀로 부르고 필터의 위치에 사용하는 것이 좋죠.

 

컴퓨터 비전 문헌들을 보면 3 x 3 필터가 매우 일반적이고 5 x 5 나 7 x 7 도 사용되죠. 이후에는 1 x 1 필터와 그 용도에 대해 다뤄볼 것입니다. 하지만 일반적으로는 홀수의 필터를 사용하기를 권장합니다. 비록 짝수의 f 를 사용해도 괜찮은 성능을 보여주지만 컴퓨터 비전의 관습에 따라 저는 주로 홀수의 f 를 사용합니다.

 

이렇게 해서 패딩을 더한 합성곱 연산에서 패딩의 양을 정해줄 때 p 의 값을 정해줘도 되고 또는 유효 합성곱이라 p 를 0 으로 두어도 되고 또 동일 합성곱이어서 결과 이미지가 입력과 크기가 같도록 패딩을 설정해줄 수도 있습니다.

 

 

5. 스트라이드 (Stride)

 

스트라이드 합성곱

스트라이드를 2 - 파란 박스를 한 칸이 아닌 두 칸 옮기는 것

만약 n x n 이미지를 f x f 필터로 합성곱을 하고 p 의 패딩과 스트라이드 s 를 가지면 이 경우에는 s 2 가 되는데 결과의 크기는 n + 2p - f / s + 1고 반대도 똑같죠. 이 예시에서는 7 + 0 - 3 / 2 + 1 4 / 2 + 1 = 3 입니다 그래서 3 x 3 행렬이 나오는 것이죠. 만약 이 분수꼴이 정수가 아니라면 내림을 해줍니다.  

 

 

요약해보면 n x n 이미지를 f x f 필터로 합성곱할 때 패딩 p 와 스트라이드 s 가 있을 때 결과 행렬의 크기는 이렇게 된다.

 

 

교차상관과 합성곱

일반적인 수학책에서 정의하는 합성곱은 요소들을 곱하고 더하는 계산 전에 한 가지 과정이 더 있는데 6 x 6 행렬과 3 x 3 필터를 합성곱 하기 전에 가로축과 세로축으로 뒤집어 줍니다.

여기서 정의한 합성곱 연산은 이 미러링 과정을 생략한 것입니다. 그래서 지금까지 하고 있던 연산의 과정은 합성곱 대신 교차상관으로 불리지만 딥러닝에서는 그냥 관습적으로 합성곱이라고 부릅니다. 요약하자면 많은 딥러닝 관련 문헌들을 읽어보면 대부분의 사람들은 뒤집는 과정을 생략한 채로 이것을 합성곱 연산이라 부릅니다.

신호 처리 분야에서는 유용하지만 심층 신경망의 분야에서는 큰 소용이 없기 때문에 미러링 과정을 생략하는 것이 코드를 단순화 할 수 있고 신경망의 작동에도 아무런 문제가 없습니다.

 

 

6. 입체형 이미지에서의 합성곱

3D 입체형의 합성곱

  • 흑백이 아닌 RGB 이미지라면 6 x 6 x 3 (3은 세 개의 색상 채널) (높이x너비x채널)
  • 필터 또한 3 x 3 x 3의 크기를 가진다
  • 이미지의 채널 수 = 필터의 채널 수
  • 결과 이미지는 4 x 4이다.

 

 

이미지 : 6 x 6 x 3

필터 : 3 x 3 x 3 (이미지와 필터 크기의 마지막 숫자가 일치)

 

3 x 3 x 3 필터를 단순화시켜서 삼차원의 정육면체로 나타낸다. 각각의 숫자를 빨강, 초록, 파랑 채널에 해당하는 수와 곱해준다. 다음 값을 얻기 위해서는 이 정육면체를 한 칸 옮겨서 다시 27 개의 숫자를 각각 곱해준다.

 

이것으로 무엇을 할 수 있을까요?

1. 빨간색 채널의 윤곽선을 검출하려 한다면

  • 첫 번째 필터는 1 1 1 0 0 0 -1 -1 -1
  • 초록색 채널 부분은 모두 0
  • 파란색 채널도 전부 0

이 세 가지가 합쳐져서 3 x 3 x 3 필터를 이루게 된다면 빨간색 채널의 세로 윤곽선을 검출하게 될 것입니다.

 

2. 세로 수평선이 어떤 색이던 관계 없다면

  • 세 채널 모두에 1 1 1 0 0 0 -1 -1 -1이 있으면 되죠. 두 번째 방식으로 숫자를 설정하면 모든 색의 윤곽선을 검출하는 3 x 3 x 3 윤곽선 검출기가 되고 이 숫자에 다른 값을 넣음으로써 다른 특성들을 검출할 수도 있습니다.

컴퓨터 비전의 분야에서는 입력 이미지와 필터가 동일한 수의 채널을 가져야 합니다.

이론적으로 하나의 필터가 빨간색이나 초록색 또는 파란색의 채널 단 하나만 보는 것도 가능합니다. 

 

 

세로 윤곽선만 찾으려는 것이 아니라 세로와 가로 윤곽선 모두거나 45도 혹은 70도 기울어진 윤곽선을 찾으려 한다면? 다시 말해 여러 개의 필터를 동시에 사용하려면?

전 슬라이드에서 두 번째 오렌지색 필터 - 가로 윤곽선 검출기를 추가해봅시다. 첫 번째 필터와의 합성곱은 4 x 4의 결과를 내놓고 두 번째 필터와의 합성곱은 또 다른 4 x 4의 결과를 내놓습니다.

6 x 6 x 3의 이미지를 두 개의 3 x 3 x 3 필터와 합성곱한 결과로 두 개의 4 x 4 행렬을 얻고 둘을 합쳐서 4 x 4 x 2의 부피를 얻게 되고 여기서 2는 두 개의 필터를 의미합니다.

 

그래서 요약해보면 만약 n x n x n_c(채널의 수)의 크기를 가진 입력 이미지가 있다면 결과는 (n - f + 1) × (n - f + 1) × n_c' 인데 n_c'는 사용한 필터의 개수입니다.

 

입체형에서의 합성곱의 장점

- 세 채널의 RGB 이미지에 적용 가능하다

- 가로와 세로 윤곽선처럼 두 개의 특성 또는 10개, 128개 혹은 수 백개의 특성들을 검출할 수 있고 그 결과는 검출하고자 하는 특성의 수만큼 채널을 가지게 된다.

 

※ 용어

채널의 수 = 3D 입체형의 깊이

채널 = 필터의 마지막 크기

 

 

6. 합성곱 네트워크의 한 계층 구성하기

이전 영상에서 3D 입체형을 두 개의 필터와 합성곱을 하는 법을 살펴보았습니다.

먼저 첫 번째 필터와 합성곱하여 하나의 4 x 4 의 결과가 나왔고 두 번째 필터와 합성곱하여 또다른 4 x 4 의 결과가 나왔습니다.


합성곱 신경망 계층으로 만들기 위해 마지막으로 할 일은 각각에 편향을 더해주는 것

  • 이 수는 실수여야 합니다. 
  • 파이썬 브로드캐스팅을 통해서 16 개의 요소에 동일한 수를 더해주고 ReLU 비선형성을 적용하면 4 x 4 의 결과가 나옵니다
  • 모두 쌓게 되면 4 x 4 x 2 의 결과가 되고 합성곱 신경망의 한 계층이 됩니다 합성곱 신경망의 한 층이 됩니다

 

<합성곱이 아닌 표준 신경망의 한 계층으로 연결시키기>

전파의 바로 전 단계

  1. z[1] = w[1]a[0] 에 a[0] 는 x 와 같고
  2.  z[1] = w[1]a[0] + b[1]에 비선형성을 적용해줌으로써
  3. a[1] 곧 g(z[1]) 을 얻습니다

이 예시에서 입력 이미지 6x6x3이 a[0] (실제로는 x)에 해당하고 필터는 w[1] 과 유사한 역할을 가지고 있습니다. 그래서 마치 일차 함수를 계산하듯이 이 4 x 4 행렬을 얻는 합성곱 연산이 w[1] 에 a[0] 를 곱하는 것과 유사합니다.
그리고 편향을 더해주는 부분은 z[1]과 유사하고 비선형성을 적용해주면 된다.
이것이 합성곱 신경망의 한 계층을 형성하는 것이다.

  • 예시에는 두 개의 필터가 있기 때문에 4 x 4 x 2 의 결과가 나왔다
  • 만약 10 개의 필터가 있다면 4 x 4 x 10 크기의 결과 행렬이 나올 것이다. 그것이 a[1] 이 된다.

 


< Number of Parameters 계산>
만약 10 개의 필터가 있고 각각 3 x 3 x 3 크기로 신경망의 한 계층에 있다면 이 층은 몇 개의 매개변수를 가질까요?
각각의 필터는 3 x 3 x 3 의 크기로 27 개의 변수를 가집니다. 또 편향을 더해줘야 합니다. 이것을 B 라는 변수라고 하면 총 28 개의 변수를 가지게 되죠
10 개의 필터가 존재하기 때문에 28 에 10 을 곱하면 280 개의 변수를 가지게 됩니다
한 가지 좋은 점은 입력 이미지의 크기가 어떻게 되던지 변수의 수는 280 개로 여전히 고정되어 있다는 것입니다.

이것이 과대적합을 방지하는 합성곱 신경망의 한 성질입니다


<합성곱 계층을 설명하는 표현 요약>

 

 

7. 간단한 합성곱 네트워크 예시

첫번째 층

37 = 39 + 2*0 - 3 / 1 + 1

 

마지막 층

1960개의 숫자들을 하나의 긴 벡터에 넣고 softmax나 로지스틱 회귀 함수에 넣어서 최종 예측을 한다.

 

합성곱 신경망을 디자인 하는 일

: 필터의 크기나 스트라이드나 패딩 또는 필터의 개수 같은 하이퍼파라미터를 선택하는 과정

 

신경망이 깊어질수록 이미지의 크기는 줄어들고, 채널의 수는 늘어나는 경향을 가진다.

 

 

8. 풀링(Pooling)층

1. Max pooling

각각의 출력은 해당 부분에서의 최대값이다.

한 특성이 필터의 한 부분에서 검출되면 높은 수를 남기고 검출되지 않는다면 작은 수로 남는다.

f와 s가 고정된 값이기 때문에 경사 하강으로 학습할 수가 없다.

하이퍼파라미터 : f = 2 / s = 2

 

이전과 동일하게 n + 2p - f / s + 1 공식을 이용해 출력 크기를 구할 수 있다.

3차원 입력일때 입력크기가 5 x 5 x 채널의 수 라면 출력은 3 x 3 x 같은 수의 채널 이 된다.

 

2. Average Pooling

각각의 출력은 해당 부분의 평균값이다.

 

신경망에서는 최대 풀링이 평균 풀링보다 훨씬 많이 사용된다.

 

<요약>

최대풀링에서는 패딩을 거의 사용하지 않는다.

한가지 유의할 점은 풀링에서는 학습하는 변수가 없다.

 

 

9. CNN 예시

 

CNN 예시32 x 32 x 3 의 RGB 이미지가 있다고 해봅시다. 손글씨를 인식할 때 7 이라는 글자가 32 x 32 의 RGB 이미지에 있고 0 부터 9 사이의 숫자 중에 그것을 알아내려 합니다. 

 

LeNet-5 사용------------------------------------------ Layer1보통 가중치가 있는 층만 신경망의 층의 개수에 포함시키기 때문에 풀링층은 CONV층에 묶인다.[CONV1]

  • 32 x 32 x 3 의 입력에서 첫 번째 층이 5 x 5 필터와 1 의 스트라이드 그리고 패딩은 사용하지 않을 때 6 개의 필터를 사용한 출력은 28 x 28 x 6 이 됩니다. 
  • 6 개의 필터와 편향을 적용하고 ReLU 비선형성을 적용하면 CONV1 의 출력이 됩니다.

[POOL1]

  • 2 x 2 크기의 필터와 2 의 스트라이드를 사용하게 되면 높이와 너비의 값을 절반으로 줄어들게 만듭니다
  • 14 x 14 x 6 이 됩니다

------------------------------------------ Layer2

[CONV2]

  • 5 x 5 필터를 사용해서 f = 5 가 되고 스트라이드는 1 이고 패딩은 없습니다
  • 16 개의 필터가 있다고 하면 10 x 10 x 16 크기의 출력입니다.

[POOL2]

  • f = 2, s = 2 의 최대 풀링은 높이와 너비를 절반으로 만들어서 5 x 5 x 16 의 크기를 가집니다
  • 5 x 5 x 16 은 400 입니다
  • POOL2 를 펼쳐서 400 x 1 의 백터로 만들어 줍니다

------------------------------------------ Layer3

[FC3]

  • 400 개의 유닛을 가지고 120 개의 유닛을 가진 층을 만듭니다.

[FC4]

  • 120 개의 유닛을 가지고 84 개의 유닛을 가진 층을 만듭니다.
  • 그러면 소프트맥스 유닛에 적용 가능한 84 개의 열 번호가 생깁니다.
  • 이것은 10 개의 출력을 가진 소프트맥스가 됩니다

기본적인 구조) 합성곱 층 -> 풀링층 -> 완전연결층 -> 소프트맥스층

 

  • 최대 풀링 층은 변수가 따로 없다.
  • 합성곱층이 상대적으로 적은 변수를 가진다.
  • 신경망의 대부분의 변수는 완전연결층에 있다.
  • 활성값의 크기는 신경망이 깊어질수록 점점 감소한다. 너무 빠르게 감소한다면 성능이 좋지 않을 수 있다.

효율적인 신경망을 어떻게 구축할지 좋은 직관을 얻는 방법은 여러 구체적인 예를 살펴보는 것이다.

 

 

10. 왜 합성곱을 사용할까요?

완전 연결 층 대신 합성곱 층을 사용할 때 두 가지의 이점

1. 변수 공유

2. 희소 연결

 

32 x 32 x 3 크기의 이미지가 있다고 해봅시다. 6 개의 5 x 5 필터를 사용하면 28 x 28 x 6 크기의 출력을 얻게 됩니다.
32 x 32 x 3 = 3,072 고 28 x 28 x 6 = 4,704 입니다. 만약 신경망을 형성할 때 3,072 개의 유닛을 한 층에 두고
4,704 개의 유닛을 다음 층에 둔 다음 각각의 뉴런들을 모두 연결하면 가중치 행렬의 변수의 개수는3,072 x 4,704 개가 되고 1400만 개 정도가 됩니다. 만약 이 이미지의 크기가 1000 x 1000 이었다면 가중치 행렬이 실행 불가능할 정도로 커질 것입니다.

합성곱 층의 변수의 개수를 한 번 살펴보면 각 필터는 5 x 5 이어서 25 개의 변수를 가지고 편향 변수를 더하면 필터 당 26 개의 변수를 가지게 됩니다. 그리고 6 개의 필터가 있기 때문에 총 변수의 개수는 156 개가 되죠. 그래서 합성곱 층의 변수의 수가 여전히 작게 유지됩니다.

 

합성곱 신경망이 이렇게 적은 변수를 가지는 두 가지 이유

1. 변수 공유

만약 세로 윤곽선을 검출하기 위해 3 x 3 필터를 사용하게 된다면 동일한 3 x 3 필터를 모든 위치에 사용할 수 있습니다. 각각의 특성 검출기의 값은 입력 이미지의 여러 위치에서 동일하게 사용할 수 있습니다. 윤곽선 같은 하급 속성에도 적용되고 눈이나 고양이 같은 것을 인식하는 상급 특성에도 적용이 됩니다.
2. 희소 연결

맨 오른쪽의 0은 입력의 3 x 3 영역에만 영향을 받습니다. 이 출력값은 36 개의 입력 중 9 개와만 연결되어 있죠. 나머지 픽셀 값들은 이 결과값에 아무런 영향을 주지 않습니다.


그래서 이 두가지 방법으로 신경망의 변수가 줄어들어서 작은 훈련 세트를 가지게 하고 과대적합 또한 방지할 수 있습니다.

<고양이 인식기를 구축하는 하나의 신경망 훈련>

x 는 이미지이고 y 는 이진 레이블 혹은 k 개의 클래스 중 하나이며 합성곱 신경망 구조를 사용하기로 했다고 합시다. 이미지에서부터 시작해서 합성곱과 풀링 층을 가지고 완전 연결 층 뒤에는 소프트맥스 출력값인 y 의 예측값입니다. 
합성곱 신경망과 완전 연결 층은 w 라는 변수를 가지게 되고 편향 b 를 가지는데 변수의 설정으로 비용 함수를 찾을 수 있게 됩니다. 무작위로 w 와 b 를 초기화함으로써 비용 J 를 계산할 수 있습니다. 신경망의 훈련 세트에 대한 예측의 손실의 합을 m 으로 나눈 것이죠.
그래서 이 신경망을 훈련시키기 위해서는 경사 하강이나 모멘텀 경사 하강이나 RMSprop 이나 다른 알고리즘을 사용해서 변수를 최적화할 수 있습니다. 비용 함수 J 를 줄이기 위해서 말이죠.
그리고 이것이 가능하다면 굉장히 효율적인 고양이 인식기나 다른 검출기를 만들 수 있습니다.