이전에 우리는 지도학습에 대해 얘기했다. 양성 또는 음성이라고 레이블(label)된 데이터를 불러와보자.
이 데이터는 양성 종양인지 또는 악성 종양인지를 나타낸다. 지도학습에서는 명시적으로 어떤게 양성인지 악성인지, 소위 말하는 정답
이 주어져 있다.
비지도 학습에서는 데이터가 좀 더 다르게 주어진다.
어떤 레이블도 갖고 있지 않거나, 모두 같은 레이블을 갖고 있거나, 또는 아예 레이블이 없다. 그래서 우리에게 주어진 데이터집합으로 우리는 무엇을 할지, 또 각 데이터가 무엇인지 알 수 없다. 대신 "이런 데이터가 있는데, 이걸로 어떤 구조를 찾을 수 있나요?"라고 물을 수 있다. 위와 같은 데이터 집합에서 비지도 학습 알고리즘은 두 가지 다른 클러스터(cluster)
로 되어있다고 할 수 있다.
위와 같이 이렇게 두 가지 클러스터로 묶을 수 있다. 비지도 학습 알고리즘은 이 데이터를 두 가지 서로 다른 클러스터로 구분 지을 수 있다. 그래서 이것을 클러스터링 알고리즘이라고 부른다. 그리고 이 알고리즘은 많은 곳에서 사용되고 있다.
구글 뉴스에서 클러스터링 알고리즘을 사용하고 있다. 여기에서 구글 뉴스를 확인할 수 있다. 구글 뉴스가 하는 일은 웹에서 매일 수만, 수천 가지의 새로운 기사를 찾고, 그 기사를 연관성 있는 것끼리 묶는 것이다. 그래서 같은 토픽의 기사들이 묶여서 한 데서 볼 수 있도록 할 수 있다. 최근 네이버 뉴스도 마찬가지이다. 아래와 같이 말이다.
클러스팅 알고리즘과 비지도 학습 알고리즘은 다른 많은 문제에서도 활용된다.
데이터 센터, 즉, 거대한 컴퓨터 클러스터를 보고 어떤 기기들끼리 주로 같이 일하는지 알아내려고 할 때, 만약 그 기기를 같이 두면 데이터 센터를 더 효율적이게 만들 수 있다.
이 외에도 소셜 네트워크 분석의 친구 추천, Market segmentation(고객의 정보를 보고 자동적으로 세분화된 시장을 찾아내고, 고객들을 세분화된 시장 안으로 묶어 넣어서 자동적으로 그리고 더욱 효율적으로 세분 시장에서 판매와 영업을 동시에 할 수 있음), 천문학 데이터 분석에 사용된다.
칵테일 파티에 가서 파티룸 가득 사람들이 앉아서 모두 동시에 이야기 하는 걸 상상해보자.이러면 중첩되는 목소리가 많다. 동시에 얘기를 해서 얘기를 듣기도 힘들다.
말하는 사람이 2명 있다고 하자. 그리고 방에는 마이크도 두 개 있다고 하자.
이 마이크들은 말하는 사람들로 부터 다른 거리에 있기 때문에, 아래와 그림과 같이 각 마이크는 말하는 두 사람의 목소리의 서로 다른 조합을 녹음하게 된다. 1번 화자는 1번 마이크에서 좀 더 크게 들릴 수 있고, 2번 화자는 2번 마이크에서 더 크게 들릴 수 있다. 각 마이크는 두 목소리가 조합되어 중첩된 것을 녹음한다.
이렇게 녹음 된 것을 칵테일 파티 알고리즘이라고 불리는 비지도 학습 알고리즘에게 주고, "이 데이터에서 구조를 찾아내줘!"라고 말하게 되면 어떻게 될까? 알고리즘은 이 두 음성녹음을 들어보고 이것이 두 음성녹음이 더해져서, 또는 합쳐져서 우리가 가진 녹음이 되는 것 같다고 할 것이다. 나아가 두 개의 음성 소스를 분리해 낼 것이다!
이런 오디오 처리를 해내려면 엄청나게 많은 코드를 쓰거나, 오디오를 처리해주는 C++, Java 라이브러리를 가져와야할 것 같다. 사실 이 알고리즘은 한 줄의 코드로 가능하다. 이 한 줄의 코드를 만들기 위해 연구자들이 긴 시간이 걸리긴 했다. 그래서 쉽다고 말하는 건 아니지만, 적당한 프로그래밍 환경을 사용하면 많은 학습 알고리즘들을 간단히 프로그래밍 할 수 있다.
[W, s, v] = svd((repmat(sum(x.*x,1), size(x, 1), 1).*x)*x');
svd
함수는 특이값 분해(singular value decomposition)의 약자인데, 선형대수학의 과정 중 하나로 Octave에 내장되어 있다.
이것이 우리가 수업에서 Octave
를 사용해야 하는 이유이다. 무료 오픈소스 소프트웨어인데, Octave
나 Matlab
같은 도구를 사용하면, 많은 학습 알고리즘을 단지 몇 줄의 코드로 구현할 수 있다. 학습하기에도 정말 용이하다. 이미 실리콘밸리의 많은 회사에서도 프로토타입을 위해 정말 많이 사용하고 있다. 나중에 Octave
사용법을 알아보자.