밑바닥부터 시작하는 딥러닝 - 7장

Jajuna_99·2022년 9월 12일
0

7장 합성곱 신경망(CNN)

이미지 인식 분야의 근원이라고도 할 수 있는 신경망이다.

전체 구조

여태껏 만들고 실험해본 (대부분의) 신경망들은 완전연결(fully-conneted, 전결합)이라 하고, Affine 계층이라고 했다. -> 이제 CNN 신경망은 여기에 합성곱 계층(convolutional layer)과 풀링 계층(pooling layer)이 추가된다.

  • 합성곱은 공학과 물리학에서 쓰이는 수학적 개념이다.
    • "두 함수 중 하나를 반전(reverse), 이동(shift)시켜가며 나무지 함수와의 곱을 연이어 적분한다."

위에 말했던 완전연결 신경망(Affine) 계층 뒤에 ReLU 혹은 Sigmoid 함수를 붙여 한 층을 만들고, 마지막 층에는 Softmax 계층으로 확률을 출력했었다.

이제 CNN에서는 합성곱 계층 -> ReLU -> Pooling 계층 순으로 층을 구성한다.

  • 풀링 계층은 생략하기도 한다.
  • 합성곱 계층은 Affine으로 구성할 수도 있다.
  • 마지막층은 똑같이 소프트맥스로 확률을 출력한다.

합성곱 계층

우선, 합성곱 신경망완전연결 계층으로 만든 신경망보다 뛰어난 이유보다 설명해야겠다.

  • 데이터의 형상이 무시 된다는 것이다.
    • 이미지는 통산 가로, 세로, 채널(색상)로 구성된 3차원 데이터인데, 완전연결 계층은 이 데이터를 1차원 데이터로 평탄화해서 학습한다는 것이다.
    • 이 3차원 형상에서 오는 중요한 정보들(공간적으로 가까운 픽셀은 값이 비슷하다, RGB의 각 채널은 서로 관련되어 있다. 등)을 무시한다는 뜻이다.
  • 하지만, 합성곱 계층은 3차원 데이터를 유지한 채로 입력받고, 전달한다. 그래서 (비교적) 다차원 데이터를 제대로 (가능성이 있는)이해한다.

합성곱 연산에 대한 내용은 (p.230)에 자세히 나와있다. 설명을 자세히 해놔도 미래의 내가 읽고 이해할 수 없을 것 같다.
그래도 간단히 설명하자면, 입력 데이터에 필터(커널)을 곱하고, 윈도우를 일정 간격으로 이동해가며 스캔해 곱의 합을 구하는 것이다. -> 이를 단일 곱셉-누산(fused multiply-add, FMA)라고 한다.

  • 패딩, padding : 데이터 사방에 지정한 픽셀만큼 특정 값을 채우는 기법 -> 출력 크기를 조정하는 목적으로 사용한다. (연산 때마다 작아지는 크게 만들려고)

  • 스트라이드, stride : 필터를 적용하는 윈도우의 이동 칸 수 -> 칸 수를 맞춰야 되는 등 제약 사항이 있다. (p.234)

3차원 이상에 데이터의 합성곱 연산에서는 입력 데이터 차원 수에 필터 개수를 맞춰야 한다. -> 이에 데이터들을 블록으로 생각하고 계산하라고 한다. (블럭 선의 크기를 변수에 대입해서 계산한다.)

배치 처리를 위해 차원을 하나 늘려서 계산하는 방법도 간단하게 설명해준다. (p.239)

풀링 계층

풀링은 세로, 가로 방향의 공간을 줄이는 연산이다. 최대 풀링, 평균 풀링 등이 있다. -> 패딩과 대비되는 계층이겠다.

풀링 계층의 특징

  • 학습해야 할 매개변수가 없다. (최댓값, 평균값을 구하는 것이니)
  • 채널 수가 변하지 않는다. (채널마다 독립적으로 계산하기 때문)
  • 입력의 변화에 영향을 적게 받는다. (강건하다)

합성곱/풀링 계층 구현하기

순전파만 구현하고 역전파는 알아서 만들어보라고 하신다...! (p.247)

솔직히 이 부분에서는 설명이 잘 와 닿지 않는 부분이 꽤 있다.

CNN 구현하기, CNN 시각화하기

위에서 설명한 것처럼, ReLU를 활성화 함수로, 합성곱 계층, Affine 계층, 풀링 계층, 소프트맥스 계층 등을 구현하고 MNIST 데이터셋을 시험 해보고 각 층의 가중치를 시각화 구현한 부분이다. (p.250)

대표적인 CNN

LeNet

  • 1998년에 제안된 손글씨 숫자 인식 네트워크
  • 책에서 소개해준 현대 CNN과 비교했을 때 다른 점은, ReLU대신 Sigmoid를 썼고, 풀링 계층 대신에 중간에 서브샘플링으로 중간 데이터 크기를 줄였다.
  • 1998년에 제안된 이론치고 바뀐점이 크게 없단 점이 주목할만 하다.

AlexNet

  • 2012년에 발표된 신경망, CNN 열풍을 이끈 주역으로 아주 유명하다.
  • LeNet과 달라진 점은 풀링 계층과 완전연결 계층을 거쳐 결과를 출력한다.
  • 또 추가된 사항은, LRN(local response normalization)이라는 국소적 정규화를 실시하는 계층과 드롭아웃을 사용한다는 것이다.

이와 더불어 위에 이론들을 실현할 수 있게 해준 대량의 데이터인 빅데이터와 여러 하드웨어들 특히 병렬 계산에 특화된 GPU가 보급된 것이 크겠다.

요약

여태껏 배운 내용들을 한곳에 모아 조립해 완성시킨, 거기에 새로운 개념을 추가한 내용이다. 이 전 장들을 잘 따라왔다면 이번 장 또한 어렵지 않게 이해할 것이라 생각한다.

일단 본인은 나중에 무조건 복습해야 될 것 같다...

profile
Learning bunch, mostly computer and language

0개의 댓글