1. 여기에 나오는 이야기의 대부분은 DAvid Barber라는 사람이 쓴 Bayesian Reasoning and Machine Learning라는 책이 있는 내용입니다. 인터넷에도 돌아다니니까 검색해서 공부하셔도 될 겁니다. 그리 어려운 책은 아닙니다. 그러나 통계나 수학에 기초가 없는 분들은 상당히 어려울 수가 있고요. 제가 옛날, 그래도 벌써 20년이 다 되어가네요. 그때 산 책이 있는데 그 책에 비하여 상당히 쉬운 책입니다.
앞부분에 그래픽 이론에 대한 설명이 좀 많고요. 그래픽 이론이 잘 이해가 안되면 이 책의 앞부분을 권유하고 싶고요. 제가 이야기한 그래픽 이론은 수학에 나오는 그래픽 이론이 아닙니다.
기본적인 방법론은 예제와 함께 잘 설명되어 있는 편인데 고급 응용분야는 쉬운 예제가 별로 없어 읽어도 그리 도움이 될 것 같지는 않고요. 나중에 고급 분야에 좀 쉬운 책이 있으면 그때 다시 소개하겠습니다.
2. 주성분 분석에 대해 조금 더 이야기를 하죠.
주성분 분석이 이미지 분석에 어떻게 이용되는지 한번 알아보죠.
3*3 크기의 이미지가 있다고 하죠. 이런 이미지가 만개, 또는 십만개, 백만개 있다고 상상하고요.
위 그림의 맨 왼쪽이 원 이미지입니다. 행렬로 흰색은 0, 회색은 1로 들어가 있다고 보죠.
이 행렬 이미지를 벡터 행태로 줄 늘입니다. 그러면 우리 이미지 데이터는 (x1, x2, x3, x4, x5, x6, x7, x8, x9)=(0, 1, 0, 0, 1, 1, 0, 0, 1) 이렇게 되죠. 그럼 9차원 공간에 있는 한 점으로 변합니다. 그러나 변수는 9개입니다.
이걸 완전하지는 않지만 2개의 차원으로 표시하려고 합니다. 그게 오른 쪽에 있는 그림입니다.
y1*(0,1,1,0,0,1,1,0,0)+y2*(1,0,0,0,1,1,0,01)
이렇게 표시하려고 한다는 것이죠. 왼쪽과 오른쪽은 당연히 일치하지 않습니다. 그러나 가능하면 일치하려고 노력을 한다는 것이죠. 이 이미지 뿐만 아니고 만개, 십만개, 백만개가 있는 이미지 데이터에서 이 오차가 가능하면 적게 만드는 두 개의 벡터 이미지를 찾는 것이 목적입니다.
그럼 벌써 예상한 분도 있겠지만 이 두 개의 벡터 이미지는 만개, 십만개, 백만개가 되는 이미지 데이터의 공분산 행렬의 고유벡터를 찾으면 됩니다. 즉 오른쪽에 있는 두 개의 벡터가 고유벡터입니다. 이 고유벡터를 v1, v2라 하죠.
앞의 y1과 y2는 이 이미지 데이터가 (v1, v2)라는 새로운 간편한 두 개의 축에서의 좌표값이 됩니다.
앞의 사람의 경우와 비교 한번 할 까요. 사람의 데이터는 세 개의 변수로 되어 있다고 하죠.
(x1, x2, x3)=(키, 몸무게, 허리둘레)
이 세 개의 좌표, 또는 값이 조금 불편하다는 것이죠, 그래서 우리는 새로운 2개의 좌표로 바꿉니다.
y1=0.3*x1+0.5*x2+0.2*x3=0.3*키+0.5*몸무게+0.2*허리둘레=체격
y2=-0.5*x1+0.2*x2+0.3*x3=-0.5*키+0.2*몸무게+0.3*허리둘레=BMI
즉 (x1,x2,x3)=(키,몸무게,허리둘레) ===> (y1, y2)=(체격, BMI)
이렇게 변환을 시킨 것이죠.
마찬가지로 이미지 데이터 3*3=9개의 좌표값을 (고유벡터1, 고유벡터2)의 두 개의 좌표축을 이용해 2개의 값으로 바꿔서 표현한 것입니다.
아래 그림은 원 이미지부터 고유벡터를 잡은 수에 따라 이미지를 복원한 그림입니다.
맨 위쪽에 있는 것이 원 이미지인데 매우 선명하죠, 마지막 고유벡터를 5개를 잡아 복원한 경우의 이미지인데 화질이 매우 안 좋죠.
이런 현상은 자주 일어나는 현상입니다. 연주의 섬세한 부분까지 들어려면 우리는 그 연주 안에 들어 있는 노이즈도 감수해야 합니다. 한편 돌비 시스템 같이 이 노이즈를 없애려고 하면 연주의 세심한 면이 죽어버릴 수 있습니다. 즉 우리에게 들어오는 데이터, 즉 정보는 signal+noise 인데 이걸 완벽하게 분리하는 방법은 없습니다.
관심있는 분은 wavelet이라는 검색 한번 하시기 바랍니다.
하여간 원 이미지는 선명한 반면 각 이미지마다 변동이 제법 큽니다. 그러나 고유벡터를 적게 잡을수록 그 변동이 잦아지고 각 이미지가 거의 비슷합니다.
아래 그림은 49개에 해당하는 고유벡터에 해당하는 이미지입니다.
a는 고유벡터 이미지를 이용해 원 이미지를 복원한 것이고 b는 고유벡터에 해당하는 이미지입니다.
그래서 남자 얼굴 이미지와 여자 얼굴 이미지가 몇 십만 개 있다고 하면 원 이미지 데이터를 가지고 남자, 여자 분류하는 것이 아니고 일단 이 주성분 분석을 해서 고유벡터 이미지 좌표계로 바꿔서 남자, 여자 식별을 하자는 것이죠.
3. 많은 분들이 고유값, 고유벡터에 대한 개념에 대해서 관심이 많은데요. 이걸 제대로 이해하려면 행렬이나 선형대수에 대해서 좀 깊은 공부가 필요합니다. 여기서 자세히 쓰기는 좀 그렇고요. 제 기억에 여기 블로그 어디에 좀 적어 놓았던 것 같은데요.
앞의 글에서 타원형을 고유벡터를 축으로 좌표 전환을 하면 타원형이 좀 알기 쉽게 변합니다. 그래서 좌표전환에 대해 좀 이야기를 해보죠.
원은 기본적인 1차원 기학 물체입니다. 원은 내부는 원이 아닙니다. 그냥 원의 내부, 외부는 원의 외부 그렇게 이야기하죠. 디스크라는 용어도 있는데 지금 정확한 정의를 잊어 버렸네요. 마찬가지로 구도 구의 내부는 구가 아닙니다.
원으로 된 실을 중간에 짤라 버리면 그냥 1차원 직선이 되어 버리죠. 원에서 두 점 a, b는 중간을 짜르면 일차원 직선에서 그 거리를 그대로 유지합니다. 그래서 기본적으로 원은 1차원 물체입니다.
그러나 지구 모양의 구는 그렇지 않습니다. 기본적으로 3차원 속에 있지만 기본적으로 2차원 형태입니다. 그러나 구를 평면으로 만들 수가 없습니다. 여러분은 2차원 평면에 그려진 이상한 지구모양을 많이 봤을 겁니다. 거의 다 이상하게 생겼죠.
지구 상의 두 점 a, b를 (x, y) 이차원 공간으로 변형시키면 지구상에서는 거리를 그대로 유지시킬 수가 없습니다. 예를 들어 (경도, 위도)라는 2차원 좌표를 도입해서 지구를 그린다고 생각해보죠. 북위 90와 남위 90도는 경도가 얼마나 벌어져 있던 모두 거리가 0입니다. 북극과 남극이니까요. 지구상에서는 거리가 0이지만 (경도, 위도) 평면 좌표계에서는 거리가 0이 아니죠. 그래서 거리를 유지하면서 2차원 평면으로 그릴 수가 없습니다. 이런 걸 아마 distance preserving, metric preserving 아마 이런 말들을 쓸 겁니다.
그럼 이 지구와 같은 기학적인 물체를 어떻게 하면 2차원 공간으로 표현을 할 수 있을까요. 하나의 2차원 좌표를 도입하는 것이 아니라 여러개의 2차원 좌표를 도입하는 것입니다.
예를 들어 걸레를 만든다고 하죠, 그럼 여러개의 천 조각을 하나의 걸레로 만들려면 두 개의 천 조각을 서로 겹쳐서 꿰매어야 하죠. 즉 두 개의 천이 겹치지는 부분이 사로 다른 두 개의 평면 좌표축이 겹쳐지는 부분이고 여기서 필연적으로 좌표를 전환하는 일이 필요합니다.
그래서 GPS나 항해를 할 때 계속적으로 좌표전환하는 작업이 필요합니다.
그래서 지구를 여러 개의 평면들이 계속 꿰매진 형태로 인식합니다. 마치 옛날 장군들 갑옷에 달라 붙어 있는 갑주라고 하는 철 조각들의 모임을 생각하시면 됩니다.
이런 것을 다양체(manifold)라고 합니다. 흔히 Riemann 기하학, 또는 Riemann manifold라고 하죠. 리만이 나오면서 유클리디언 기하학이 무너지게 됩니다. 참 오랜 시간이 걸려죠. 리만은 튜링이나 볼쯔만 같이 좀 불행한 수학자죠.
아인쉬타인이 상대성 이론에 대해 머리 속에서 아이디어는 있었습니다. 그러나 이걸 수학적으로 깔끔하게 표현을 할 수가 없었습니다. 그러다가 어느 날 도서관에서 리만의 책을 우연히 보게 됩니다. 그 때 아인쉬타인이 “아! 이것다”하고 소리쳤다는 이야기가 있습니다. 이후 자신의 아이디어를 수학적으로 정리해 나갔죠. 천재는 천재를 알아본다고.
앞에서 이야기한 것은 사실 고등학교때 많이 한 작업입니다. 타원 식에서
z=a*X12+b*X1X2+c*X22
이렇게 복잡한 식으로 되어 있습니다. 이걸 다음과 같이 잘 변형하면
Y1=v11*X1+v12*X2
Y2=v21*X1+v22*X2
이렇게 좌표전환해서
z=w1*Y12+w2*Y22
와 같이 좀 편한 식으로 바꿀 수가 있습니다.
여기서 w1, w2가 고유값이 되고 v1=(v11, v12), v2=(v21, v22)은 고유벡터가 됩니다. 제가 앞에서 소개한 다변량 책을 참고하시기 바랍니다. 고등학교때 계산을 편하게 하기 위해 가르친 수학 기교안에는 상당한 심오한 걔념들이 들어 있습니다.
'인공지능관련 > 인공지능(AI)' 카테고리의 다른 글
구글 검색 알고리즘, 의미망 분석 (0) | 2016.10.28 |
---|---|
정규분포, 타원형, 구글 검색 알고리즘1 (0) | 2016.10.26 |
판별분석2 (0) | 2016.08.06 |
판별 분석1 (0) | 2016.07.25 |
인공지능1 (0) | 2016.07.04 |