ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 5강 합성곱 신경망 (3/3, 콘브넷 그 외, ConvNet Etc.)
    AI 2021. 2. 27. 13:13

    여기 합성곱 계층 예가 있는데, 딥 러닝 프레임워크인 토치 (Torch)에서의 예입니다. 지난 수업에서 이런 딥러닝 프레임워크로 들어가서 각 레이어의 정의를 볼 수 있다고 했죠. 거기엔 포워드 패스와 백워드 패스가 각각의 계층에 대해 구현되어 있습니다. 여러분은 공간의 (spartial) 합성곱이 이것들 중의 하나가 된다는 것을 볼 수 있고, 이것이 받아 들이는 argument가 디자인 선택이 된다는 것을 알 수 있습니다. 여러분의 입력과 출력 크기 뿐만 아니라 커널 (kernel) 넓이, 커널 크기, 패딩, 이런 것들이 다 해당됩니다.

    다른 프레임워크인 카페 (Caffe)를 보면, 매우 비슷한 것을 볼 수 있죠. 여기서는 여러분의 망을 정의하고 있고, 프로토 텍스트 파일에서 계층의 디자인 선택을 정의합니다. 여러분은 합성곱 계층에 대해 볼 수 잇고, 카페에 대한 출력 숫자, 필터 숫자도 있고, 뿐만 아니라 커널 크기와 스트라이드 등도 볼 수 있죠.

    만약 여러분이 합성곱 계층을 뇌 뉴런 시각으로 보면, 지난시간에 뉴런을 봤던 것과 비슷하죠. 우리가 가진것 은 모든 공간 위치에서 우리는 필터와 이미지의 특정 부분과 내적을 하고 거기서 숫자 하나를 얻습니다.

    이건 이런 종류의 내적을 하는 같은 아이디어인데요. 입력을 받아서 이 w로 가중치를 주는데, 여러분의 필터의 값이고, 이 가중치는 연접이죠. 그리고 값을 하나 얻습니다. 여기서 가장 큰 차이는 여러분의 뉴런이 지역 연결 (local connectivity)이라는 겁니다. 전체 입력에 연결되는 대신, 그건 단지 여러분의 이미지의 지역 영역을 공간적으로 보고 있습니다. 그래서 그건 지역 영역을 보고 이 뉴런이 여러분의 이미지에서 얼마나 많이 각 공간 위치에서 트리거 (trigger) 되는지를 얻는 것입니다. 그래서 이제 여러분은 공간 구조를 유지할 수 있고, 이후 계층의 이런 종류의 활성 지도 위에서 추론을 할 수 있습니다.

    용어에 대해 잠깐 얘기하면, 우리는 5 x 5 필터가 있는데, 이걸 뉴런에 대한 5 x 5 수용장 (receptive field)라고 부를 수 있습니다. 왜냐면 수용장은 뉴런이 받아 들이는 시각의 입력장이니까요. 그것이 여러분들이 이것에 대해 듣게 될 또 다른 흔한 용어입니다. 다시 우리가 지역 위치에 대해 슬라이드하는 이 5 x 5 필터는, 같은 가중치 집합이고, 같은 파라미터를 공유한다는 것을 기억해야 합니다.

    우리는 이 출력에서 얻는 것은 이 볼륨이 될거라고 얘기했고 공간적으로, 예를 들어 28 x 28이라면, 우리의 필터 숫자는 깊이죠. 예를 들어, 5개의 필터로 우리가 얻는 것은 이 3차원 그리드 (grid)고, 그건 28 x 28 x 5죠. 그래서 만약 활성 볼륨의 하나의 공간 위치에서 필터가 지나가면서 이 5개 모든 뉴런의 깊이를 통과하는 것을 보면, 이걸 해석하는 방법은 그것들이 모두 입력 볼륨의 같은 영역을 보고 있다는 겁니다. 하지만 그들은 다른 것들을 찾고 있는 것이죠. 그것들은 다른 필터들인데, 이미지의 같은 공간 위치에 적용된 것입니다.

    다시 한번 상기시키기 위해, 앞에서 얘기한 완전 연결 계층과 비교해 보죠. 그 경우엔 우리의 활성 혹은 출력에서 각각의 뉴런을 보면, 뉴런의 각각은 전체 펼쳐진 출력에 연결되어 있습니다. 그래서 그런 전체 입력 볼륨을 봤죠.

    지금과 비교해 보면 지금은 각각이 지역 공간 영역만 봅니다.

    우리는 이 합성곱 계층이 어떻게 생겼는지에 대한 많은 세부사항들을 봤는데, 이제 간단히 이 전체 합성곱 망을 형성하는 다른 계층에 대해서도 보겠습니다.

    다시 기억해 보면, 우리는 합성곱 계층이 있고, 가끔씩 풀링 계층이 중간에 들어가 있고, 뿐만아니라 비선형성도 있죠.

    풀링 계층이 하는 일은 그 표현을 더 작고 더 관리하기 쉽게 만드는 것입니다. 앞어서 어떤 사람이 질문해서 얘기했었는데, 왜 우리가 표현을 더 작게 만들고 싶냐는 질문이었죠. 다시 말하면 그것이 더 적은 것을 가지면, 마지막에 여러분이 갖는 파라미터 숫자에도 영향을 줄 거고 뿐만 아니라, 주어진 영역의 변화를 없애죠 (do some invariance). 풀링 계층이 하는 건 정확히 다운샘플링하는 것이죠. 입력 볼륨을 받아들여서, 예를 들면 224 x 224 x 64요, 공간적으로 이걸 다운 샘플링합니다. 결국 여러분은 112 x 112를 얻죠. 중요하게 봐야 할 건 깊이는 그냥 놔둔다는 겁니다. 우리는 오직 공간에 대해서만 풀링하죠. 그래서 여러분의 입력 깊이의 숫자가 여러분의 출력 깊이의 숫자와 같습니다. 예를 들면, 이걸 하는 가장 흔한 방식은 최대 (max) 풀링이죠.

    이 경우 우리의 풀링 계층은 역시 필터 사이즈를 갖고 있고, 이 필터 크기는 우리가 풀링하는 영역이 될 겁니다. 이 경우, 우리가 2 x 2 필터가 있다면 이걸 슬라이드할텐데, 스트라이드는 2를 가지고 있죠. 이 필터를 가지고 우리의 입력 볼륨에 대해 슬라이드 합니다. 우리가 합성곱에 대해서 했던 것과 정확히 같은 방식으로요. 그러나 여기서는 내적을 하는 대신에, 그 영역의 입력 볼륨의 최대값을 취합니다. 만약 우리가 빨간 값들을 봤다면 그것의 값은 6이죠. 최대니까요. 녹색을 보면 그건 8일거고 그다음 3과 4를 갖는 겁니다.

    이 풀링 계층에 여러분의 디자인 선택이 있고, 여러분은 입력 볼륨, W x H x D를 받아서 그다음 여러분의 하이퍼파라미터를 정하죠. 여러분의 필터 사이즈 디자인 선택 혹은 풀링하려는 공간 정도에 대해서요. 뿐만 아니라 어려분의 스트라이드에 대해서도요. 그리고 합성곱을 위해 앞서 사용했던 방정식을 이용해 다시 여러분의 출력 볼륨을 계산합니다. 그 방정식은 여기서도 적용이 됩니다. 그래서 우리는 W 전체 크기 - 필터 크기 / 스트라이드 + 1을 갖죠.

    주목할 다른 점은 풀링 계층에 대해서는 일반적으로 사람들이 0 패딩을 사용하지 않습니다. 그이유는 바로 다운샘플링을 하려고 하니까요. 그래서 여기엔 구석에 필터를 적용하는 것과 같은 문제가 없습니다. 그리고 필터의 일부가 입력 볼륨에서 떨어지는 문제도 없구요. 풀링에 대해서는 이런 것을 걱정할 필요가 없고 우리는 그냥 바로 다운샘플링합니다. 풀링 계층에 대한 흔한 세팅은 필터 크기는 2 x 2나 3 x 3이고 스트라이드는 2 x 2죠. 또한 2 x2 풀링을 할 수도 있죠. 필터 크기가 3 x 3이라도요. 앞에서 누가 질문했던 것 같은데, 실제에서는 2 x 2로 하는 것이 흔합니다.

    이제 우리는 이 합성곱 계층에 대해서 얘기했고, 렐루 (ReLU) 계층은 우리가 지난시간에 얘기했던 기본 (base) 신경망에서 봤던 것과 같죠. 우리는 이것을 사이 사이에 넣고 우리는 다운샘플링을 하고 싶을 때, 풀링 계층을 가끔씩 넣습니다. 마지막으로 제일 뒤에 완전 연결 계층을 갖고 싶죠. 이건 앞에서 봤던 완전 연결 계층과 정확히 일치합니다. 이 경우 이제 우리는 합성곱 망의 출력을 가지고 , 마지막 계층에서 우리는 어떤 볼륨을 갖죠. 어떤 넓이 x 높이 x 깊이가 있을 겁니다. 이 모든 것을 가지고 이것을 길게 늘립니다. 그럼 이제 우리는 우리가 바닐라 (vanilla) 신경망을 위해 사용했던 것과 같은 일종의 1차원 입력을 가지죠. 그리고 그위에 우리는 이 완전 연결 계층을 적용합니다. 이제 우리는 이 합성곱 지도 출력의 모든 것에 대한 연결을 가집니다. 그래서 앞서서는 공간 구조를 보존했는데, 최종 계층의 끝에서는 우리는 이것을 모두 합쳐서 우리가 앞서서 가지고 있던 이 모든 것에 대해 사실 추론을 하고 싶은 겁니다. 그것으로부터 얻는 것은 앞에서 처럼 점수죠.

    마지막으로, 여러분들이 이 콘브넷 훈련하는 데모를 봤으면 합니다. 안드레 카파씨 (Andrej Karpathy)가 만들었는데, 이 수업을 처음 만든 사람이죠. 그가 이 데모를 만들었는데, 이걸로 여러분들이 CIFAR-10에 대한 콘브넷을 훈련시켜볼 수 있습니다. 우리가 앞서 본 10개 클래스로 된 데이타셋이죠. 이 데모에서 좋은 점은 이것이 사실 이 필터들의 각각이 어떻게 생겼는지 플로팅 (plotting)해준다는 겁니다. 활성 지도가 어떤지도 보여주고요. 앞에서 본 이미지 일부는 이 데모에서 가져온거죠. 가서 한번 이것저것 해보면, 이 활성 지도가 어떻게 생겼는지 감을 잡을 수 있을 겁니다. 한가지 알아둘 건 보통 첫번째 계층의 활성 지도들은 여러분들이 해석할 수 잇습니다. 왜냐면 그것들은 입력 이미지에다가 바로 연산하는 것이니까요. 그래서 템플릿이 의미하는 바를 알 수 있는거죠. 더 높은 수준 계층으로 가면, 그게 뭘 의미하는지 이해하기가 매우 어려워 집니다. 그래서 대부분에 대해서는 해석하기 어려우니 무슨일이 벌어지는지 이해하지 못한다고 걱정하지 마세요. 그러나 전체 흐름과 어떤 출력이 나오는지 보기에 여전히 좋습니다.

    cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

     

    ConvNetJS CIFAR-10 demo

     

    cs.stanford.edu

    요약하면 오늘 우리는 합성곱 신경망이 어떻게 동작하는지 봤고, 어떻게 합성곱과 풀링 계층이 쌓여지는지고 그 뒤에 완전 연결계층이 오는지 봤죠. 더 작은 필터와 더 깊은 아키텍처로 가려는 트렌드가 있는데, 나중에 이것들에 대한 사례 연구에 대해 더 얘기할 겁니다. 또한 풀링과 완전 연결 계층 전체를 없애려는 트랜드가 있습니다. 그래서 그냥 매우 깊은 합성곱 계층을 가지는 거죠. 나중에 이 모든 것에 대해서 얘기할 겁니다. 그리고 전형적인 아키텍처는 이렇게 생겼습니다. 앞에서 봤듯이, 콘브, 렐루로 N개의 단계가 있고, 가끔씩 풀링이 뒤에 나오죠. 이 전체가 몇 번 반복되고, 그다음 앞서 봤듯이 완전 연결 렐루 계층이 나옵니다. 한두개 혹은 몇 개가 올 수 있고 그다음 여러분의 클래스 점수를 위한 소프트맥스 (softmax)가 오죠. N으로 가질 수 있는 전형적인 숫자는 5까지 입니다. 여러분은 콘브, 렐루, 풀 시퀀스의 꽤 깊은 계층을 가질 거고, 그다음 보통 끝에 2개의 완전 연결 계층을 가질 겁니다. 그러나 우리는 여기에 도전하는 ResNet, GoogleNet 같은 더 새로운 아키텍처를 보고 꽤 다른 종류의 아키텍처도 볼 겁니다.

    댓글

Designed by Tistory.