2013년 7월 16일 화요일

미스코리아 얼굴들은 다 똑같다? PCA의 마법!

지난 시간에는 로봇이 움직이는 공간, Joint Space에 대해서 알아보았습니다. 이를 통해 사람은 간단한 동작을 위해서도 약 230개의 관절들 모두에 명령을 내려야한다는 것을 알았는데요... 어떤가요? 실제 여러분은 머리 속에 230개의 관절 움직임을 다 생각하며 움직이시나요?

아마 아닐 것입니다. 주로 신경쓰는 몇 개의 관절에만 주의를 기울이고 나머지 관절들은 그저 따라올 뿐이겠지요. 그렇다면 어지럽도록 많은 관절값들은 우리가 주목해야할 몇 개의 "주 관절값"과 이에 따라 결정되는 "군더더기"들로 나누어지지 않을까요? 이렇게 어지럽게 많은 데이터들을 "주된 특성"만 살리는 방향으로 압축시켜주는 방법 중 하나가 바로 PCA (Principal Component Analysis) 입니다. 이제 230개 노노~ 10개 정도만 신경써주세요!

출처 : http://gael-varoquaux.info/scientific_computing/ica_pca/


위에 나타난 약 1000개의 3차원 데이터들을 한번 살펴봅시다. 이것을 저장하려면 (x,y,z) 좌표가 1000개니까 즉, 3000개의 숫자를 저장해야하겠지요. 하지만 박스를 이리저리 돌려보면 사실 이 데이터는 거의 한 평면에 존재하는 것을 알 수 있습니다. 그렇다면 좌표축만 잘 설정한다면 z값 필요없이 데이터들을 (x, y)값만으로도 표현이 가능하지 않을까요? 그렇게 되면 2000개의 숫자로 데이터가 확 줄어들테니 말이죠!

 (만약 230개 각각의 관절값 1000개씩을 단 10개의 주축 변수로 표현할 수 있다면? 그렇게되면 230000개 → 10000개로 무려 23배의 계산량을 아낄 수 있는 것이지요!)

혹시 지루해하실까봐 최근 PCA를 이용한 재미있는 연구를 소개해드리겠습니다ㅋ UIUC의 박사과정 학생 Jia-Bin Huang은 미스코리아 대회에 출전한 20명의 얼굴이 얼마나 공통점이 많을까 PCA로 압축해보았습니다. 만약 모두 개성이 넘친다면 20개의 independent한 축으로 얼굴들이 표현되겠죠? 결과는 어땠을까요?

출처 : http://jbhuang0604.blogspot.kr/2013/04/miss-korea-2013-contestants-face.html
놀랍게도 6개의 eigenface (대표적 얼굴)이면 충분했다는 것입니다 ㅎㅎㅎ 6개의 얼굴을 적절히 조합하면 20명의 얼굴을 모두 만들 수 있다는 것이지요ㅋ 위의 그림을 보니 어떠신가요? 정말 다들 닮지않았습니까?ㅎㅎㅎ 20명이 있을 필요가 있나요~ 이 중에서 6명만 나오라고 그래요ㅋㅋㅋ

이렇듯 데이터의 압축에 쓰이는 PCA의 핵심 아이디어는 여러 방향 중 데이터가 가장 넓게 퍼져있는 방향으로 축을 잡아 표현하는 것입니다. 수학적으로 말하자면 데이터의 variance(분산)가 가장 큰 방향으로 projection(정사영)시키는 것이지요. 그렇게 20차원 데이터를 19차원 평면에 그림자를 내리고, 다시 18차원 평면에 그림자를 내리고... 이런 식으로 계속 그림자를 내리다보면 20차원이 어느새 6차원으로 줄어들게 될 것입니다. 6개로 압축할 수 있었다는 말은 6개까지는 그림자를 내리고 내리는 동안 데이터 손실이 거의 없었다는 것을 말하는 것입니다.

이것을 수학적으로 표현하자면 행렬의 eigenvalueeigenvector, 그리고 이것을 추출해내는 SVD (Single Value Decomposition) 방법과 관련이 있는데요... 이건 교과서 몇 챕터를 채우고도 남을 분량이다보니... PCA의 수식 전개에 대해서는 다음에 Advanced Topic에서 영어로(!) 다루도록 할께요~ 그럼 다음에 만나요~ :D

Forbes Burkowski, "PCA Tutorial"