ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 2강 이미지 분류 (4/4, 선형 분류기)
    AI 2021. 1. 6. 13:49

     

    우리는 KNN이 머신러닝 알고리즘의 좋은 특징을 많이 가지고 있는 걸 봤죠. 그러나 실제로 그렇게 좋지는 않습니다. 이미지에 대해선 많이 안 쓰이죠. 다음으로 얘기하고 싶은 것은 선형 분류입니다.

    선형 분류는 간단한 학습 알고리즘인데, 이건 엄청 중요합니다. 우리가 신경망 전체, 전체 합성곱 신경망을 만들도록 해 줍니다.

    신경망으로 작업을 비유로 표현해 보면 우리는 이걸 레고 블록에 비유합니다. 여러분은 신경망의 여러 컴포넌트를 가지고 있을 거고 이 컴포넌트들을 서로 붙이죠. 이런 합성곱 신경망의 큰 탑을 쌓기 위해서요. 여러 형태의 딥러닝 어플리케이션에서 가장 기초적인 빌딩 블록 (building block)이 이 선형 분류기입니다. 선형 분류기가 어떻게 동작하는지 아는 게 중요한데, 전체 신경망에 꽤 보편적으로 사용됩니다.

    이 신경망의 모듈성을 보여주는 예는 이미지 캡셔닝인데요. 미리 잠깐 얘기하자면, 이미지를 인풋으로 받아서, 이미지를 해설하는 문장을 내보내는 셋업으로 되어 있습니다.

     

    이게 동작하는 방식은, 이미지를 보는 합성곱 신경망이 있고, 언에에 대해 아는 RNN (recurrent neural network)이 있습니다. 레고 블럭처럼 이 두 개를 붙여서 이 전체를 같이 학습시킵니다. 결국  이렇 중요한 작업도 할 수 있는 멋진 시스템이 됐죠. 수업이 진행해 나가면서 우리는 이 세부 사항들을 쭉 다룰 겁니다. 이것으로 딥러닝은 레고 같고, 선형 분류기는 이 큰 망에서 일종의 빌딩 블록이다는 걸 알게 되죠.

    하지만 이건 2강 치고는 너무 흥분되는 주제라서, 우린 당분간 CIFAR 10으로 돌아가야 합니다.

    CIFAR 10은 5만 학습 예제가 있고, 각 이미지는 32 x 32 크기죠. 3가지 색 채널이 있구요. 선형 분류기에서는 KNN과 조금 다른 접근 방법을 취할 건데요.

    선형 분류기는 파라미터 모델이라고 부르는 것 중에서 가장 간단한 것 중 하나입니다. 이제 우리의 파라미터 모델은 사실 2개의 컴포넌트를 가지고 있죠. 이런 고양이 이미지를 받아서요. 이런 입력 데이타를 보통 엑스라고 씁니다. 그리고 파라미터 혹은 가중치 집합이 있죠. 보통 W라고 불러요. 그리고 우리는 함수를 쓸 건데, 데이타 X와, 파라미터 W를 받고 CIFAR 10에 있는 10개의 카테고리에 해당하는 점수를 나타나는 10개의 숫자를 내뱉죠. 그걸 해석하면, 고양이 클래스의 숫자가 크다는 것은 입력 X가 고양이일 확률을 크다는 것을 나타내는 거죠.

    KNN 셋업에서는, 파라미터가 없었죠. 그대신, 우리는 학습 데이타 전체를 가지고 있었고, 그걸 테스트시에 사용하려 했죠. 파라미터 접근방법에선, 우리는 훈련 데이타의 지식을 요약해서, 이 W에 그 모든 지식을 붙입니다. 테스트할 땐, 학습 데이타가 필요없죠. 버려도 됩니다. 그땐, 단지 W만 필요합니다. 이래서 우리 모델이 더 효율적으로 됩니다. 폰 같은 작은 기기에서도 동작할 수 있죠. 딥 러닝의 전체 이야기가 이 함수 f에 대해서 올바른 구조로 나오고 있죠. 여러가지 형태의 함수를 작성하는 것을 생각해 볼 수 있는데, 어떻게 가중치와 데이타를 여러 다른 복잡한 방법으로 어떻게 조합할 것인지에 대해서 얘기해 보죠. 이런 것들은 네트워크 아키텍처에 관련되어 있습니다.

    이 두개를 조합하는 가장 간단한 예는 아마도 둘을 곱하는 겁니다. 이게 선형 분류기죠. 우리의 x, W에 관한 f는, W 곱하기 x와 같죠. 아마도 생각할 수 있는 가장 간단한 방정식이 될 것 같습니다.

    이것들의 차수를 풀어 볼까요? 우리의 이미지는 32 x 32 x 3인 값인걸 기억하죠? 그 값을 받아서, 그걸 펼쳐서 긴 열의 벡터로 만들죠. 하나당, 3072개 항목을 가집니다. 그리고 나서 우리는 10개 클래스 점수로 만들고 싶습니다. 이 이미지에 대해서 10개 카테고리에 대한 숫자로 만들어야 하는데요. 그럴려면 우리 매트릭스 W는 10 바이 3072가 되어야 합니다. 그래서 일단 이 둘을 곱하면, 우리는 하나의 열로 된 벡터, 10 x 1, 즉, 10개의 클래스 점수를 얻게 됩니다.

    또한 전형적으로 이런 것을 볼 텐데, 우리는 바이어스 항을 넣죠. 이건 상수 벡터가 될 텐데 10개의 원소로 되어 있습니다. 학습 데이타와는 상호작용하지 않고, 대신 데이타와 무관한 선호도를 제공합니다. 즉, 다른 클래스보다 어떤 클래스가 더 좋다는 것을 의미하는 값이죠. 만약 데이타 셋이 균형잡히지 않았다면, 예를 들어 고양이가 개보다 많다면 고양이에 해당하는 바이어스 항목이 다른 것들 보다 높을 겁니다.

    이 함수가 뭘하는 지 그림으로 생각해 보면, 이 그림에서 왼쪽에는 단순한 이미지 2 x 2가 있죠. 전체 4개 픽셀입니다. 선형 분류기가 동작하는 방식은 이 2 x 2 이미지를 받아서, 4개의 항목으로 된 행 벡터 하나로 늘여 놓습니다. 이 예에서는 우리는 3개의 클래스만 사용하고 있는데, 고양이, 개, 배죠. 우리의 가중치 매트릭스는 4 x 3이 됩니다. 4개의 픽셀과 3개의 클래스니까요. 또 우리는 3개의 항목의 바이어스 벡터가 있죠. 각 카테고리에 대해 데이타에 독립적인 바이어스 항을 줍니다. 고양이 점수는 이미지 픽셀과 매트릭스의 첫번째 행의 내적 (inner product)이 되죠.  그리고 바이어스 항을 더합니다. 이렇게 보면, 선형 분류는 템플릿 매칭과 같네요. 이 매트릭스의 행들은 이미지의 템플릿에 해당합니다. 내적은 매트릭스의 행과 이미지의 열의, 이 닷 프라덕트(dot product) 계산은 클래스 템플릿과 이미지의 픽셀간의 유사성을 보여줍니다. 바이어스는 그냥, 데이타와 상관없는 스케일링 오프셋 (scaling offset)을 각각의 클래스에 제공합니다. 

    이 템플릿 매칭 관점에서 선형 분류기를 생각하면, 가중치 매트릭스의 행을 취해서 이미지로 풀어낼 수 있습니다. 그 템플릿을 이미지로 시각화하면, 이 선형 분류기가 우리의 데이타를 이해하기 위해서 뭘하고 있는지를 알 수 있죠. 이 예에서, 우리는 이미지에 대해서 선형 분류기를 훈련시킵니다. 아래 쪽에 보면, CIFAR 10에서의 10개의 클래스들에 해당하는 가중치 매트릭스에서 배웠던 그 행들이 뭔지를 시각화하고 있습니다.

    이런식으로, 이 이미지들에서 무슨 일이 일어나는지 알 수 있죠. 예를 들어, 왼쪽 아래를 보면, 비행기 클래스에 대한 템플릿이 보이는데, 이런 파란 부분들로 이뤄졌죠. 가운데 흐릿한 것 그리고 배경이 파란색인 데요. 이 비행기에 대한 선형 분류기는 아마도 파란 것들과 흐릿한 것, 그런 특징들이 이 분류자가 비행기를 더 좋아하게 만들거라는 걸 알게 해 주네요. 자동차 예를 보면, 가운데에 빨간 흐릿한 것이 보이죠. 파란 흐릿한 것이 위에 보이는데, 아마도 흐릿한 앞유리창일 거에요. 조금 이상하죠. 진짜 자동차 같아 보이진 않아요. 어떤 차도 이렇게 생기지 않았죠. 여기서 문제는, 선형 분류기는 단지 하나의 클래스에 대해서 하나의 템플릿만 배운다는 겁니다. 그래서 그 클래스가 어떻게 보이는지에 대해서 변화 (variation)이 있다면, 그 모든 다양함을, 즉 다르게 보임을 모두 평균내 버리죠. 각각의 카테고리를 인식하기 위해서 하나의 템플릿만 사용합니다. 이걸 말 분류기에서 명확히 볼 수 있는데요. 바닥에 초록색 것이 보이죠. 왜냐면 말을 보통 잔디위에 있으니까요. 자세히 보면, 2개의 머리를 가지고 있는 것 같아요. 양쪽에 하나씩요. 2개의 머리를 가진 말을 보진 못했지만, 선형 분류기는 할 수 있는 최선을 하는 거죠. 왜냐면 그건 하나의 클래스당 하나의 템플릿만 학습하게 되어 있으니까요. 신경망으로 갈 수록, 더 복잡한 모델로 갈 수록, 더 정확하게 할 수 있습니다. 왜냐면 거기엔 이런 하나의 카테고리에 대해 하나의 템플릿만 배워야 한다는 제한이 없어요.

    선형 분류기의 다른 관점은 이미지를 포인트와 고차원 공간으로 돌아가 보는 것입니다. 생각해 보죠. 각각의 이미지는 이 고차원 공간에서 점 같은 겁니다. 이 선형 분류기는 선형 결정 바운더리를 놓습니다. 하나의 카테고리와 다른 카테고리들 사이에 선형 분리선을 그리는 거죠. 왼쪽 위를 보면 비행기 훈련 이미지를 볼 수 있고, 훈련 프로세스를 거쳐, 선형 분류기는 비행기 클래스를 다른 모든 클래스와 분리하기 위해서이 파란 선을 그릴 겁니다. 훈련 프로세스를 보면 재밌는데요. 이 선들은 랜덤하게 시작해서, 데이타를 적절하게 분리하기 위해서 자리를 잡게 됩니다.

    이런 고차원 벡터 관점으로 선형 분류기를 생각하면, 어떤 문제가 있을지를 생각해 봅시다. 선형분류기에 나타날 수 있는 문제를 만들어 보기는 어렵지 않습니다. 데이타 셋에서 선형 분류기가 완전히 실패하는 예를 만들 수 있는데, 하나의 예는 왼쪽의 것입니다. 2개의 카테고리의 데이타 셋이 있다고 생각해 보죠. 이건 인공적인거지만, 파랑과 빨강의 두 카테고리가 있습니다. 파란 건 이미지의 픽셀 값이고, 0보단 큰 홀수죠. 그리고 0보다 크고 짝수면, 빨간 카테로리로 분류합니다. 실제로, 평면에서 이 다른 결정 영역 (decision region)을 그려보면, 파란 영역, 홀수의 영역이 평면에서 2사분면이 됩니다. 짝수는 다른 두 사분면이 되죠. 그래서 우리는 파랑과 빨강을 나눌 하나의 선형 라인을 그릴 수 없습니다. 이게 선형 분류기가 힘들어 하는 예죠. 이건 아마도 그렇게 인공적인 것은 아닐 겁니다. 픽셀을 세는 대신, 이미지에서 동물이나 사람 숫자가 짝수인지 홀수인지를 셀수 있죠. 이건 일종의 동등성(parity) 문제죠. 홀수와 짝수를 나누는 건 전통적으로 선형 분류기가 힘들어하는 겁니다.

    선형 분류기가 힘들어하는 다른 문제는, 멀티 모드 (multi modes) 상황입니다. 오른쪽에 보면, 파란 카테고리가 3개의 섬으로 되어 있죠. 이전 예에서 우리가 본 말처럼, 실제로 일어날 수 있는 일입니다. 픽셀 공간에서 하나의 섬이 왼쪽을 보는 말일 수 있고, 그리고 다른 하나는 오른쪽을 보는 말일 수 있죠. 이 두 데이타 섬 사이에 하나의 선형 경계를 그릴 수 있는 좋은 방법은 없습니다. 공간의 여러 영역들로 나눠져 있는 클래스 같은 멀티 모드 데이타를 갖게 되면, 선형 분류자가 어려워 하는 대상입니다.

    선형 분류기는 많은 문제가 있지만, 매우 간단하고 좋은 알고리즘이고, 쉽게 해석하고 이해할 수 있습니다.

    뭐가 선형 분류기의 함수적 형태인지 봤습니다. 그리고 이 함수적 형태는 매트릭스 벡터 곱하기인데 템플릿 매칭 아이디어에 해당하고, 하나의 템플릿으로 데이타의 카테고리를 학습하는 것에 해당하죠. 우리가 이 가중치 벡터, 즉, 학습된 매트릭스를 가지면, 그걸 사용해서 어떤 새로 학습 예제에 대해서 점수를 얻습니다. 데이타 셋에 대해 어떻게 적합한 W를 선택하는 지는 얘기하지 않았네요. 함수적 형태와 이것으로 어떤 일이 벌어지는지만 봤습니다.

    그건 다음시간에 볼 겁니다.적합한 W를 고르기 위한 알고리즘과 전략에 대해 집중할 겁니다. 이것이 우리를 손실 함수 (loss function)와 최적화로 이끌 거고, 결국은 콘브넷으로 갑니다.

    댓글

Designed by Tistory.