인공지능관련/인공지능(AI)

볼쯔만 머신(Boltzmann Machines)1

학위논문통계 2016. 12. 28. 01:59

 

 

1. 천경자

 

천경자 사건도 그렇고 이번 자로 세월호 의혹 제기 사건도 그렇고, 우리나라에서도 좀 전문적인 이미지 프로그램이 개발되어야 할 것 같네요.

 

한국 검찰에서 천경자씨 그림이 위작이 아니고 진품이라고 결정했죠. 오마이 뉴스에 올라온 글을 보니까 제 판단에는 위작인 것 같습니다. 오마이뉴스에 문제의 1977년 작품하고 1981년 진품의 그림이 동시에 올라왔는데 두 작품의 얼굴 비례구조가 너무 똑 같네요. 그래서 프랑스 감정기관이 1977년 작품이 1981년 작품을 위조했다고 주장하는 것이고, 미술관 측에서는 먼저 작품이 나중에 나온 작품을 어떻게 보고 위조할 수 있는가 하고 반박을 한 것이고요.

 

그래서 제가 생각하기에는 1977년 작품은 1981년 작품을 보고 위조를 하고 서류상에서 1977년 작품이라 속인 것이라 생각합니다. 동일작가의 작품이니까 작품의 화풍은 매우 비슷하겠지만 이렇게 얼굴 구성 비율이 일치하는 경우는 없는 것 같습니다. 또 천경자씨 유족이 프랑스 감정기관에 돈을 줘서 감정결과를 조작할 가능성도 별로 없어 보이고요. 위작으로 판단난다고 해서 유족에게 어떠한 경제적 실익은 없는 것 같거든요.

 

검찰이나 미술관측에서 진품이라 주장하려면 한 작가의 작품 중 얼굴 비례 대칭이 거의 똑 같은 경우가 있다는 것을 보여 줘야 할 것 같네요.

 

천경자씨는 잘 모르는 분들이 많겠지만 우리나라 여성 화가 중 아마 가장 유명한 분일겁니다. 좀 거품이 많다고 평한 분도 있고요. 고갱 그림 냄새가 많이 나죠.

 

 

 

2. 자로 동영상

 

자로라는 친구가 올린 동영상을 한번 봤는데요. 다 보지는 못하고 군데군데 봤습니다. 요새 말로 잉여력이 쩌네요. 너무 수고를 한 것 같습니다.

 

세월호에 외부 충격이 있었고 이게 잠수함 가능성이 많을 거라고 하네요. 돌아다니는 동영상 보니까 일단 외부 충격이 있었던 것은 거의 확실한 것 같고요.

 

현재로서는 잠수함이 가능성이 많다고 주장하죠. 이 잠수함이 한국 잠수함인지, 미국잠수함인지, 아니면 중국 잠수함인지 이런것 주장하는 것은 아니죠. 쓸데없이 미국 잠수함일거라는 헛소리는 좀 안했으면 좋겠습니다. 나중에 미국 잠수함이라고 밝혀져도 미국 얘들이 고의로 했겠습니까. 자기들 군사비밀을 위해 정보를 숨길 가능성이 있고, 이게 드러나면 그때 거기에 맞춰 비난하면 되죠.

 

또 고의 침몰설은 거의 근거없고요. 박근혜가 아무리 미쳤다고 해서 그 짓을 하겠습니까. 나중에 결정적인 증거가 드러나면 그때 비난해도 됩니다.

 

자로라는 친구가 파파이스를 많이 깠네요. 김어준이도 이런 건 좀 반성을 해야 합니다. 우연히 닷 나오는 파파이스 동영상을 봤는데 설득력은 있었습니다. 그러나 애초에 왜 닷을 풀고 배를 운전했는지 그 동기가 전혀 이해를 할 수가 없었고요. 그런 식으로 했다면 배 선원들이 몰랐을 가능성은 전혀 없고요. 배 선원이 전부 짜고 아이들이 다 죽였을 가능성도 없고요.

 

 

하여간 동영상의 있는 잠수함이라 추정되는 부분은 이미지로 받아서 제가 여기 블로그에 쓴 이미지 프러세싱 기법을 쓰면 좀 더 뚜렷한 모습이 나올 거라 봅니다. 화질 개선과 윤곽선 드러내기 기법을 쓴다는 것이죠. 그런데 이 방법은 포토샵에서 되지 않나요? 이미지 프러세싱 전문 프로그램이 없으면 이공계에서 많이 사용하는 matlab 모듈이 있습니다. 여기서는 이미지 파일을 숫자로 읽어 낼 수 있습니다. 그런데 우리나라에서 이 작업을 잘 하는 사람이 있는지 모르겠네요.

 

저는 이미지 프러세싱 책만 봤지 실제로 작업을 하지 않아서요. 지도교수랑 independent 스터디 할 때 교수가 그냥 책만 소개해줬습니다. 공부는 니들이 알아서 해라 이거죠. 이게 주제는 아니었거든요. 그리고 그 당시에는 matlab 모듈도 안 나왔고요,

 

지금 언론에 한국의 인공지능 수준이 미국에 2-3년 처진다고 나왔는데 제가 보기에는 10년 이상 쳐졌다고 봅니다. 특허 건수나 논문 수는 그렇게 중요한게 아니죠. 내용, 수준이 중요한 것이죠. 아래 소개하는 책을 쓴 사람도 필립스 연구소에 일하는 연구원입니다. 1990년에 나온 책입니다. 벌써 25년전에 일개 기업 연구소 연구원들이 상당한 수준의 책을 썼다는 것이죠.

 

 

 

3. Blotzamnn

 

오늘부터 볼쯔만 머신에 대해서도 간단히 알아 보겠습니다. 책을 보면 딥러닝 기법 중에 RBM(restricted bolzmann machines)이라는 기법이 있네요.

 

그래서 오늘은 볼쯔만 머신의 원형 모양에 대해 간단히 설명하겠습니다. 여기에 나오는 예제는

 

 

Aarts & Korst 의 “Simulated Annealing and Bolzmann Machines: A Stochastic Approach to Combinatorial Optimization and Neural Computing"

 

이라는 책에서 나오는 내용입니다. 인터넷에 검색하니까 이 책은 없네요. 관심있는 분은 주문을 해야 할 것 같고요. 이것도 20년 전에 교수가 토픽으로 간단히 이쪽 분야에 대해 소개하면서 책을 소개 해준 것이고요.

 

 

하여간 오늘 소개할 예는 디지털 숫자, 즉 전자시계에 나오는 숫자를 인식하는 방법입니다. 볼쯔만 머신의 가장 기초적인 방법입니다. 은닉층도 안 나오고 학습 방법도 안 나오는 예입니다. 그러나 이 방법을 응용하면 홍채과 지문 인식에도 이용할 수 있습니다.

 

나중에 다시 이야기 하겠지만 여러분의 피시나 핸드폰으로 자기 인증하는 문제랑 현금인출기에서 자기 인증을 하는 문제랑은 차원이 다른 문제입니다. 피시나 핸드폰에서는 “자기”와 “자기 아닌 다른 사람” 이 두 가지로 분류하면 되지만 현금 인출기에서 자기 인식은 은행 고객이 백만명이면 백만가지로 분류를 해야 합니다.

 

그래서 피시나 핸드폰은 자기 피시나 핸드폰에서 직접 인식 과정을 하면 되고 단지 이 결과만 중앙 서버에 보내 주면 됩니다. 그러나 현금 인출기는 백만명의 정보가 다 있어야 하기 때문에 은행 본사에 있는 서버에서 처리를 해야 합니다.

 

 

 

4. 전자시계 숫자 인식

 

먼저 변수를 설정하기 위해 디지털 숫자를 한번 보죠.

 

 

 

 

먼저 디지털 숫자를 백터 변수 X=(X1, x2,..., X7)로 바꾸기 위해 맨 왼쪽에 변수 설정을 했습니다.

 

볼쯔만 머신에서는 변수는 0과 1만 값을 취하는 이진변수입니다. 최근에는 여러 변형들이 나왔지만 기본 모형은 그렇습니다. 다음은 위의 정답 디지털 숫자를 변수로 코딩한 것과 각 숫자에 해당하는 결과을 적은 표입니다. 결과 Y=(Y1, Y2, ..., Y10)도 숫자가 10개 이므로 10개의 변수가 필요하고 이 변수들 역시 0과 1의 값을 갖는 이진변수입니다. 볼쯔만 이론에서는 투입인 X, 결과인 Y로 구별하지 않고 또 같이 X라는 같은 변수를 많이 씁니다. 우리의 경우 투입 7개, 결과 10개 해서 X1부터 X17까지 설정을 하는 것이죠.

 

 

물론 통계학에서는 범주가 10개 이면 이진화할 때 9개의 변수만 필요합니다. 이건 (0,0,0,0,0,0,0,0,0)도 사용하기 때문인데 이건 볼쯔만 머신에서는 안 좋은 방법입니다. 하여간 통계학에서는 10개 변수로 하면 다중공선성 문제가 생겨 아예 계산이 안됩니다.

 

 

이 변수를 뉴런이라 생각하시면 됩니다. 이 변수가 1의 경우 on, 0인 경우 off라고 생각하시면 됩니다.

 

숫자

투입

결과

X1

X2

X3

X4

X5

X6

X7

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y8

Y9

Y10

0

1

1

1

0

1

1

1

1

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

0

0

0

0

2

1

0

1

1

1

0

1

0

0

1

0

0

0

0

0

0

0

3

1

0

1

1

0

1

1

0

0

0

1

0

0

0

0

0

0

4

0

1

1

1

0

1

0

0

0

0

0

1

0

0

0

0

0

5

1

1

0

1

0

1

1

0

0

0

0

0

1

0

0

0

0

6

0

1

0

1

1

1

1

0

0

0

0

0

0

1

0

0

0

7

1

0

1

0

0

1

0

0

0

0

0

0

0

0

1

0

0

8

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

1

0

9

1

1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

1

 

숫자 0이 들어오면 결과 Y=(1,0,0,0,0,0,0,0,0,0)와 같은 출력으로 나와야 하죠. 숫자 0의 투입은 X=(1,1,1,0,1,1,1)입니다. 네 번째 변수 X4만 0이고 나머지 변수 X들은 모두 1이죠.

 

위의 표준 투입 숫자와 X변수 코딩이 일치 하는지 한번 보시고요. 결과 Y에서 숫자 0이라 판단할 때는 결과 변수 Y가 (1,0,0,...,0)이라고 나올 때입니다. 만약 결과 Y가 (0,1,0,...,0)이라고 나오면 숫자 1이라고 판단한다는 것이죠.

 

일반적으로 (Xi, Xj)를 연결(connection)이라 합니다. 여기서 X는 우리의 경우 결과 X, Y도 포함합니다. 즉 (Xi, Xj)도 될 수 있고 (Xi, Yj)도 될 수 있고, (Yi, Yj)도 될 수 있습니다. 즉 두 개의 뉴런의 쌍을 연결이라 합니다.

 

그런데 이 연결의 경우 두 뉴런의 값이 모두 1이면 이 연결이 활성화되었다고 하고 그렇지 않으면 비활성화 되었다고 합니다. 즉 Xi*Xj=1이면 (Xi, Xj)는 활성화 되었다고 하고 아니면 비활성화 되었다고 합니다.

 

여기 이 디지털 숫자 문제에서는 투입간의 연결, 결과간의 연결은 없고 오로지 투입과 결과 즉 (Xi, Yj)간의 연결만 있다고 전제합니다.

 

 

우리는 이 연결에 연결의 힘, 강도, 가중치를 줘 이 합을 가능하면 크게 했을 때 올바른 분류가 되어야 합니다. 이 연결 강도를 Sij라고 표시를 하죠.

 

 

즉 Sij > 0 이면 우리가 해결해야 하는 문제에 바람직한, Sij < 0이면 바람직하게 못한 것으로 생각합니다. 또 Sij > 0 이면 이 연결 (Xi, Xj)는 촉진하는(excitatory), 만약 Sij < 0 이면 이 연결을 억제하는(inhibitory)리고 이야기합니다.

 

그래서 우리의 표준 숫자 X와 정답 Y간의 모두 연결을 생각한 다음 여기에 연결의 정도, 가중치 Sij 값을 준 다음 이걸 모두 합한 결과가 최대가 합니다. 즉

 

E=Σ(Sij*Xi*Yj)

 

가 최대가 만들때 분류가 잘 되어야 합니다. 이 E를 물리학에서는 에너지라고 합니다.

 

Aarts와 Korst 책에서는 처음에는 이 연결 가중치를 일일이 연구자가 직접 입력하는 예를 보여 줍니다. 뒷부분에서는 이걸 일일이 입력하는 것이 아니라 인공지능에 나오는 학습방법으로 구하는 방법에 대한 소개가 나옵니다. 학습방법은 나중에 의미가 있으면 소개하겠습니다.

 

 

 

4. Sij 값 주기

 

그럼 어떻게 하면 이 Sij 값을 줄 수 있을가요

 

숫자 0이 들어오면 결과 Y=(1,0,0,0,0,0,0,0,0,0)이 출력으로 나와야 하죠, 숫자 0의 투입은 X=(1,1,1,0,1,1,1)입니다. 네 번째 변수 X4만 0이고 나머지 변수 Xi들은 모두 1이죠. 간단한 법칙은 (X,Y)=(1,1)이면, 즉 활성화 된 연결이면 이 연결 가중치는 Sij >0, (X, Y)=(1,1)이 아니면, 비할성화 된 연결이면 연결 가중치 Sij < 0, 즉 음수 값을 주면 됩니다.

 

이 책에서는 다음과 같은 연결 가중치를 줬습니다.

 

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y8

Y9

Y10

X1

70

-84

84

84

-140

84

-210

140

60

84

X2

70

-84

-210

-210

105

84

84

-105

60

84

X3

70

210

84

84

105

-210

-210

140

60

84

X4

-420

-84

84

84

105

84

84

-105

60

84

X5

70

-84

84

-210

-140

-210

84

-105

60

-210

X6

70

210

-210

84

105

84

84

140

60

84

X7

70

-84

84

84

-140

84

84

-105

60

-210

 

약간의 법칙이 눈에 보이죠. 즉 (X, Y)=(1,1)이면 양의 값을 설정하고 또 이런 경우가 많으면 낮은 수의 양을 값을 줍니다. (X,Y)=(1,1)이 아닌 경우도 마찬가지입니다. 음수를 주되 그 경우가 많으면 값의 비중을 낮게 둡니다. 하여간 이 Sij 값을 주는 공식 비슷한 것이 책에 소개 되어 있습니다. 그리고 세로로 가중치를 합하면 숫자 8인 경우를 제외하면 모두 0이 됩니다.

 

그래서 결과가 어떻게 나오는지 한번 볼까요. 결과는 Y9에서 책과 조금 다릅니다. 문제를 간단하게 하기 위해 조금 디테일 한 부분을 제가 언급을 안했습니다. 이 결과 어떻게 구할 수 있을가요. 그냥 두 행렬을 곱하게(행렬 product)하면 됩니다. 즉 투입행렬*연결 가중치 행렬 하면 됩니다. S와 R에서 명령문 한 줄 치면 됩니다.

 

 

숫자

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y8

Y9

Y10

0

420

84

-84

-84

-105

-84

-84

105

360

-84

1

140

420

-126

168

210

-126

-126

280

120

168

2

-140

-126

420

126

-210

-168

-168

-35

300

-168

3

-140

168

126

420

35

126

-168

210

300

126

4

-210

252

-252

42

420

42

42

70

240

336

5

-140

-126

-168

126

35

420

126

-35

300

126

6

-140

-126

-168

-168

35

126

420

-280

300

-168

7

210

336

-42

252

70

-42

-336

420

180

252

8

0

0

0

0

0

0

0

0

420

0

9

-140

168

-168

126

280

126

-168

210

300

420

 

위 표의 숫자가 뭘 이야기 하냐면 먼저 첫줄을 보죠. 우리가 0이라는 디지털 숫자를 보면 뇌의 10개 뉴런에서는 값이 첫 번째 줄이 됩다는 것입니다. 1이라는 숫자를 보면 뇌의 10개 뉴런의 값이 두 번째 줄이 된다는 것이고요. 그럼 각 줄에서 제일 큰 값이 어떤 경우이죠. 대각선에 있는 값이 전부 420이고 각 줄에서 가장 큰 값이 되죠. 그래서 가장 큰 값을 1로 하고 나머지 값들을 0으로 하면 정확하게 우리가 맞춰야 하는 정답값이 된다는 것이죠. 즉 표준 데이터가 오면 100% 제대로 숫자를 인식한다는 것입니다.

 

 

 

 

5. 실제 상황

 

그래도 뭘 하는지 좀 가물가물하죠. 표준 데이터가 아닌 실제 현실에서 생기는 데이터가 들어왔을 때 문제를 하번 보죠 예를 들어 피시나 스마트폰에서 본인 인증하는 문제를 한번 생각해보죠. 여러분의 먼저 자기 지문이나 홍채를 먼저 입력합니다. 즉 표준 데이터로 들어가는 것이죠.

 

이후부터 여러분이 본인 인증을 하려고 피시나 스마트에 다시 지문이나 홍채를 찍습니다. 그러면 처음 표준데이타랑 비슷하지만 똑같지는 않습니다. 위치가 조금 다르거나 아니면 카메라 렌즈나 센서에 기름등 오물질이 묻을 수가 있죠. 그래서 표준데이타랑 조금 다른, 즉 약간의 노이즈가 들어간 여러분의 지문이나 홍채를 볼 때 이때는 결과에 1로 나와 인증을 하고, 다른 사람이 여러분 피시나 스마트 폰에 지문이나 홍채를 찍으면 0으로 결과가 나와 인증을 거부해야 합니다.

 

책에 있는 예를 두 개만 들어 보겠습니다.

 

 

 

 

첫 번째의 경우는 Y4와 Y6이 모두 똑같은 값으로 가장 높은 값이 나왔습니다. 즉 숫자 3이나 숫자 5로 판단한다는 것이죠. 즉 첫 번째 그림에서 위의 왼쪽에 선을 그으면 5가고 되고 오른쪽 위에 선을 그으면 3이 되죠. 그래서 3인지 5인지 판단하기 힘듭니다.

 

두 번째 경우 Y5일 경우가 315로 가장 큰 값이 나왔습니다. 즉 숫자 4로 판단한다는 것이죠.

 

 

그럼 이런 문제를 이렇게 굉장히 복잡하게 할 필요가 있을까요? 그건 현실에서 어떤 문제인가에 따라 달라집니다. 피시나 스마트 폰에서 지문이나 홍채인식을 할 때 위의 방법을 사용하지 않고 앞에서 소개한 무식한 방법을 사용해서 별 문제가 없으면 이 무식한 방법이 훨씬 좋은 방법이라는 것이죠. 가장 무식한 방법은 표준데이타 값과 실제 들어오는 현실 데이터 값과 차이가 거의 없으면 1, 즉 인증하고 값의 차이가 크면 0, 즉 인증을 거부하면 됩니다.

 

그러나 위의 방법이 훨씬 좋은 방법인 것은 확실합니다. 왜냐하면 디지털 숫자의 이미지 모양까지도 어느 정도 고려를 한다는 것이죠. 한번 생각을 해보시기 바랍니다.

 

 

 

 

6. 진짜 Boltzmann 머신

 

얼핏 보면 볼쯔만 머신이 굉장히 간단한 것 같죠. 실제는 그렇지 않습니다.

 

앞에서 각 뉴런(변수 X, Y)은 0과 1의 값을 갖고, 0이면 off, 1이면 on으로 설정한다고 했는데 실제 각 뉴런 0과 1을 결정하는 것이 매우 복잡합니다.

 

책에 보면(페이지 121)

 

k(u) = F(Σ(Sij*k(v))

 

로 되어 있습니다. 즉 뉴런 u의 상태가 0인지 1인지(k(u))를 결정하는 것은 u와 연결된 v 뉴런들의 연결강도를 합해서 결정됩니다. 그러나 u와 연결된 뉴런 v의 상태 k(v)는 또 다시 v와 연결된 다른 뉴런들이 상태에 의해 결정되고요. F는 어떤 함수이고요. 뉴런 u에 연결된 다른 뉴런들을 u의 네이버후드, 즉 이웃이라 합니다.

 

즉 볼쯔만 머신은 각 뉴런이 0과 1의 값을 갖는데 각 뉴런의 값은 이에 뉴런에 연결된 다른 뉴런의 값에 의해 상호의존적으로 결정된다는 것입니다. 그래서 계산하기가 매우 골치 아프고 Markov Field의 성격을 지니고 있습니다.

 

그래서 simulated annealing 같은 고급 수치해석 기법을 써서 해결하려고 합니다.

'인공지능관련 > 인공지능(AI)' 카테고리의 다른 글

연관분석2  (0) 2017.03.01
연관분석1  (0) 2017.02.15
이미지 프러세싱과 딥러닝의 cnn 관계  (0) 2016.12.19
HMM2, 도둑 위치 추적  (0) 2016.11.02
이미지, 군집분석, 압축, VQ(vector quantization)  (0) 2016.11.01