1. 인공지능 이야기한다면서 이야기를 끌고 왔는데 이런 불만이 있을 수 있습니다. 실제로 어떻게 하는 것인가요?
간단한 예를 들어 보겠습니다. 이론적인 이야기를 너무 하다 보면 흥미를 잃을 수 있죠.
아래는 디지털 번호 0과 1 이미지를 5*5 해상도로 찍은 것이라고 하죠. 조금 조잡하지만. 디지털 숫자는 전자시계에도 있고, 또 알파고에서는 기보에 번호도 여기에 해당하고, 차 번호도 사실상 디지털 번호에 가깝다고 봐야 하죠.
여기서는 숫자 0과 1이라고 했지만 여러분은 갑과 을이라는 사람의 홍채 또는 지문이라 생각하셔도 됩니다. 홍채나 지문을 가지고 어떻게 사람들을 인식하는가 하는 문제라 똑같다는 이야기죠.
아래 디지털 그림 옆에 있는 숫자는 이미지를 숫자로 코딩한 것입니다. 백은 0, 흑은 1로 코딩한 것입니다. 수학에서는 0과 1로 된 차원이 5*5인 행렬입니다.
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 1 | 0 | 1 | 0 |
|
|
|
|
|
| 0 | 1 | 0 | 1 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 0 | 0 | 0 | 0 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 1 | 1 | 1 | 0 |
뉴런넷에서는 행렬로 사용하지 않습니다. 따라서 실제 분석에 들어가는 것은 1*25의 베타 모양이 됩니다. 0 번호의 경우 첫째 줄부터 쓰면 (0,01,0,0,0,1,0,1,0,0,1,0,1,0,.....), 1번호의 경우 (0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,....) 이렇게 되는 것이죠. 뉴런넷의 구조가 그렇게 되어 있어 변수 모양을 행렬 행태로 넣을 수 없습니다. 이런 한계 때문에 알파고가 사용한 CNN이 나온 것 같고요. 이건 이미지 파일의 행렬데이타가 입력층으로 들어가거든요.
그래서 처음 이런 0, 1의 표준 데이터를 만듭니다 . 그런 다음 아래와 같은 새로운 디지털 이미지가 들어왔다고 하죠. 그럼 이 새로운 디지털 이미지를 숫자 0으로 판단할 건가 아니면 숫자 1로 판단할 건가 하는 문제이죠.
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 1 | 0 | 0 | 1 | 0 |
|
|
|
|
|
| 0 | 1 | 0 | 1 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
|
|
|
|
|
| 0 | 0 | 1 | 0 | 0 |
홍채나 지문도 마찬가지죠. 새로운 홍채나 지문 이미지를 가지고 이 사람이 갑인지 아니면 을인지 아니면 갑도 을도 아닌 외부인인지 판단한다는 것이죠.
자 그럼 어떻게 판단하면 될까요? 어렵게 생각할 필요가 없습니다. 표준 0의 이미지 데이터를 행렬 A라 하고 표준 1의 이미지 데이터를 B라 하고, 새로 투입된 새로운 이미지 데이터를 C라고 하면
판단의 규칙은 간단합니다. C가 A에 가까우면 A라 판단하고, C가 B에 가까운면 B라고 판단합니다. 그럼 수학에서 나오는 두 행렬의 거리를 구하는 공식을 사용하면 바로 나오죠. 이것도 어렵게 생각할 필요없이 우리가 흔히 아는 유클리디안 거리를 사용하면 됩니다. 두 행렬의 원소의 차이를 제곱해서 더하면 됩니다.
자 그러면 조금 현실적인 문제로 들어갈 볼까요?
1) 현실에서는 디지털 숫자보다 손으로 쓰는 숫자가 많습니다. 그래서 표준적인 숫자의 이미지를 만들 수가 없습니다.
2) 디지털 숫자는 0에서 9까지만 있지만 사람 인식의 경우 수 많은 사람들이 존재합니다. 구별해야 하는 대상이 엄청나게 많습니다. 예를 들어 국민은행 같은 경우는 아마 천만이 넘는 고객을 있을 겁니다. 그래서 우선 이 천만이 넘는 고객의 홍채나 지문의 표준적인 이미지를 만들어야 하고요. 이건 별 문제가 없겠죠. 그 다음 고객이 현금인출기에서 홍채나 지문을 찍을 때마다 이미지를 스캔하여 표준적인 이미지와 비교해서 판단하면 됩니다.
문제는 다른 곳에 있습니다. 현금인출기에서 찍히는 이미지가 표준 이미지랑 똑같으면 문제가 없습니다. 이미지 해상도를 높이기만 하면 됩니다. 이건 그냥 결정론적인 문제이거든요. 그러나 현금 인출기에서 찍히는 홍채나 지문 이미지가 표준 이미지와 똑같지 않다는 것이 문제가 된다는 것이죠. 찍히는 각도에 따라 이미지가 다르고 또 지문 이미지는 앞에서 사용한 사람들의 흔적 때문에 이미지에 노이지가 많이 있다는 것이죠. 그래서 앞에서 0과 1 판단하는 것처럼 몇 사람만 분류할 때는 문제가 없는데 수 많은 사람들을 판별해서 분류할 때는 오류를 피할 수가 없습니다.
그런데 은행에서 오류가 생기면 어떻게 됩니까. 은행에서 인식은 오류가 0%가 되어야지 사용할 수 있습니다. 정확하게 인식하려면, 즉, 갑을 을이 아니고 갑이라 판단하려면 엄격하게 해야 하는데 그러면 고객을 자기네 은행 고객이 아니라고 판단할 가능성이 큽니다. 고객을 자기 은행 고객이라 판단하려면 분류 기준을 느슨하게 해야 하는데 그럼 A라는 사람을 B라는 다른 사람으로 인식하기 쉽습니다.
그래서 은행에서 실제 사용할 수 있는 것은 귀금속 보관하는 이런 종류의 서비스에서 이중의 보안을 요구하는 고객에게만 사용할 수 있습니다. 이런 종류의 문제는 각 지점에서 이런 서비스를 사용하는 사람들이 몇 명 안되기 때문에 별 문제가 없죠. 그레서 앞에서 0과 1구별처럼 인공지능이라 말하기도 창피한 방식으로도 충분합니다.
그럼 첫 번째 문제인 손으로 쓴 숫자의 경우 어떻게 할까요? 사람마다 스타일이 다르고 또 왼손잡이와 오른손 잡이와도 다르고요.
이럴 경우 사람이 쓴 0, 또는 1이라는 이미지를 모읍니다. 이건 최근에 인터넷에서 수집할 수 있다고 하네요. 이걸 빅데이타라고 하죠. 사실 컴퓨터 프로그램을 하면 가짜 0, 1 이미지를 시뮬레이션 하듯이 마구잡이로 만들어 낼 수 있습니다. 사람들이 떠드는 만큼 그렇게 대단한 효용도 아닙니다.
위의 0 이미지 데이터의 0과 1을 적당한 확률을 주어서 랜덤으로 꾸면 무궁무진한 표준 0 이미지의 변형 이미지를 만들어 낼 수 있습니다. 또 부식작용 같은 수학적인 방법을 쓰면 더욱 현실감 있는 변형 이미지도 만들어 낼 수 있고요.
하여간 0과 1에 해당하는 실제 이미지를 무지하게 많이 갖고 있다고 하죠. 그리고 새로운 이미지가 들어 왔을 때 이 이미지가 0인지 1인지 어떻게 판단할 수 있을까요? 생각하면 별로 어렵지 않습니다.
가) 0의 이미지 샘플이 만개고, 1의 이미지 샘플이 만개라고 하면 이 이미지 샘플의 평균을 내면 되겠네요. 그럼 0의 평균개념의 표준 이미지가 만들어질 것이고, 1의 평균 개념의 표준이미지가 만들어질 것이고요. 그래서 생긴 2개의 표준 평균 이미지와 새 이미지와 비교해서 거리가 가까운 쪽을 선택하면 되겠죠.
나) 0과 1의 2만개 이미지 중 새 이미지와 가장 가까운 샘플 이미지를 찾습니다. 그래서 찾은 샘플이미지가 0 이면 새 이미지를 숫자 0이라 판단하고, 1이면 새 이미지를 숫자 1로 판단한다는 것이죠. 이 방법을 “가장 가까운 이웃” 방식이라 합니다.
다) 나)의 방법은 좀 robust 하지 않죠. 유별한 샘플이 있으면 오류를 범할 확률이 있습니다. 그래서 새로운 이미지와 가까운 샘플 이미지를 하나만 찾는 것이 아니라 K개 찾아서 이 K개 샘플 이미지가 0에 속하는 것이 많으면 새로운 이미지를 0이라 판단하고 1에 속하는 것이 많으면 새로운 이미지를 1이라 판단한다는 것이죠.
라) 좀 더 고급스런 방식은 주성분 분석(Principal component)이라는 것을 이용합니다. 이건 SPSS에서 있는 요인분석(Factor)이랑 비슷합니다. 그러나 다른 분석입니다. 동전의 앞 뒷면과 같은 이론입니다. SPSS에서는 주성분 분석을 제공하지 않습니다. 요인분석에서 나오는 주성분방식은 요인분석의 요인추정값 구할 때 주성분 방식을 이용했다는 이야기입니다. 이건 나중에 시간이 나면 다시 이야기 하겠습니다.
마) 그럼 이런 간단한 방법이 있는데 왜 뉴런넷 같은 것을 사용할까요? 시간이 너무 많이 걸린다는 것이죠. 앞의 예의 2만개의 샘플 이미지와 비교를 해야 하거든요. 뉴런넷에서는 원천 이미지 데이터를 가지고 있을 필요가 없습니다. 학습과정에서 구한 연결값만 알고 있으면 됩니다. 하여간 부서의 보안을 위해 부서 사람을 인식하게 하는 정도의 인공지능은 뉴런넷을 쓰지 않고 앞에서 이야기한 표준 이미지 만든 다음 무식하게 비교하기만 해도 충분합니다.
2. 최근에 빅데이타를 많이 써서 나오는 기사가 인터넷에서 단어를 구해서 의미를 부여하는 것인데요. 주로 정치적인 것에 많이 사용하죠. 나온 기사 보면 기본적인 빈도 분석 정도인 것 같고요. 여러분이 R이라는 프로그램을 사용할 줄 아시면 이런 작업을 하실 수 있습니다. 이것도 인공지능 책에 보면 다 나옵니다.
글자 빈도 구하는 것의 최초는 아마 과학쪽이 아니라 문학쪽에서 나왔을 겁니다. 에드가 알렌 포우의 ‘황금충’인가 확실한 제목을 잘 모르겠는데요. 여기서 암호를 푸는 과정이 나옵니다. 영어에서 빈도가 가장 높은 알파벳은 뭘까요. T입니다. the에서 나온 것이죠. 그래서 암호문에서 가장 많이 나오는 알파벳을 T라고 판단하고 그 다음 나오는 것은 h와 e라고 판단한 것이죠. 그래서 이런 식으로 암호를 푸는 과정이 포우의 단편소설에서 나옵니다.
통계학에서도 문헌 검증하는 예로 가끔 나오는데 옛날에는 그냥 좀 신기하다 그런 정도로만 받아졌죠. 최근 미술 위작 문제와 같이 어떤 글이 누구 작품인가 하는 것을 판단하는 것이죠. 기본적인 단어가 나오는 빈도라든지, 아니면 어떤 단어 뒤에 어떤 단어가 많이 나온다는지 이런 조건부 확률 같은 것을 응용할 수 있죠.
하여간 현재는 기본적인 빈도 사용 같고 자의적인 해석을 하는 수준인 것 같습니다. 인공지능 책을 보면 단순 빈도 분석을 넘어 여기서도 주성분 방식을 써서 몇 개의 중요한 의미를 찾아내는 것 같습니다. 제 생각에는 주성분 분석을 한 다음 군집분석을 하면 정치적인 성향까지 분류할 수 있을 것 같고요. 물론 여기에 오류가 많이 발생할 수 있고요.
박근혜라는 단어가 많다고 새누리당 지지자가 아니잖아요, 오히려 반대죠. 그래서 여기서는 비하 형태의 단어 분석이 더 유용할 수 있을 것 같고요. 또 SNS 자주 사용하는 사람들 대상으로 정치 성향 분석이니까 이 사람들의 지지율만 가지고 판단할 수 없죠. 그러나 장기적인 추세를 판단할 수는 있겠습니다.
'인공지능관련 > 인공지능(AI)' 카테고리의 다른 글
판별분석2 (0) | 2016.08.06 |
---|---|
판별 분석1 (0) | 2016.07.25 |
엔트로피 단상 (0) | 2016.06.10 |
그럼 MCMC는 도대체 뭔가? (0) | 2016.05.13 |
mixture, Pet, neural net (0) | 2016.05.09 |