'행렬'에 해당되는 글 2ATOM

  1. 2008/04/05 inureyes 차이 2
  2. 2008/03/31 inureyes 좌표축 2

차이

빚어내기/물리와 셈틀 이야기 | 2008/04/05 12:59 | inureyes

numerical optimization 수업을 수강하다보면 당연하지만 놓치는 몇가지를 다시 생각하게 된다. 인간이 바라보는 세상의 구조와 컴퓨터가 바라보는 세상의 구조가 다르다. 그렇기 때문에 아무리 수학적으로 완벽한 방법도 컴퓨터에게는 더 불완전한 방법이 될 수 있다. 컴퓨터에게 복잡한 일을 시킬 때 밑바탕이 되는 선형대수학의 경우, 인간과 기계의 시각차가 너무 커서 서로의 장점이 다른 쪽에게는 단점이 되는 경우가 많다.

갑자기 학부시절 수업 이야기 하나. Ax = b 라는 행렬 선형방정식을 기계에게 계산시키기 위하여 수많은 방법들이 고안되었다. 컴퓨터가 수를 대하는 방식에 있어어 인간과의 가장 큰 차이는 2진법을 사용하는 부분이다. 우리에게 딱 맞아 떨어지는 수가 2진법으로는 그렇지 않은 경우가 비일비재하다. 컴퓨터는 0.4를 이해하지 못한다. 소숫점 아랫 자리는 0.5, 0.25, 0.125식으로 전개가 되며, 이러한 (0.5)^n의 조합으로만 수를 표시할 수 있다. 그러니 0.4에 끝없이 가까운 수를 대응시킬 뿐이다.

컴퓨터에 수를 집어 넣으려면 round-off 문제가 있다. 컴퓨터는 수를 자세하게 표현하기 위하여 지표와 가수 (고등학교때 나오는 내용이다) 형태로 기억한다. IEEE 754 (수를 표현하는 표준 규격이다) 에 따라 single/double/quadruple precision 으로 표현하면 수를 표현할 수 있는 범위는 넓어진다. 그렇지만 영역에 따라 수를 얼마나 자세히 표현할 수 있는지의 정도가 변한다. 유효숫자의 개념을 도입하기가 굉장히 어려워지기 시작한다. 그에 덧붙여 machine epsilon도 있다. 기계가 표현할 수 있는 최소한의 수 단위인데, 이보다 작은 수는 구분할 수가 없다. machine epsilon의 경우 CPU의 종류에 따라 크기가 다르다.

그런게 있든 말든~ 하기에는 컴퓨터는 너무 민감하다. 컴퓨터를 믿고 시뮬레이션을 만든다는 것은 오차론을 공부해서 적용하지 않고 실험 데이터를 해석하는 것 만큼이나 위험한 일이다. 정수만 다루는 경우에도 굉장히 많은 문제가 발생한다. 15/5 = 3이다. 컴퓨터에 같은 계산을 시켜서 다른 수가 나오게 하기는 정말 쉽다. 얼마전 미진이1 자신이 짠 코드를 보고 "수가 다르게 나오는데 아무리 봐도 문제를 찾을 수가 없다"고 했을 때 문제가 되는 부분을 이해시키느라 고생했다. (double과 int의 타입 변환을 자주해서 일어난 문제였다. 타입 변환 과정에서는 정보가 유실되기 때문에, 계산때는 무조건 한 쪽으로 몰아놓고 해야 문제가 생길 여지가 줄어든다.) 기본적으로 컴퓨터에게 계산을 시키는 것은 정수든 실수든 엄청나게 조심해서 해야 한다.

행렬 연산으로 가면 문제가 커진다. 행렬 연산의 대부분은 '곱'과 '합'이 지배한다. 따라서 최종적인 결과값에 들어갈 수 있는 에러의 요소가 훨씬 많음을 뜻한다. 간단하게 Ax = b를 구하는 경우를 다시 한 번 보자. 정성적으로는 몇가지 문제를 피하기 위하여 A'*Ax = A'b 를 계산한다. 이 방법이 가장 정확한 답을 줘야 할텐데, 컴퓨터에게는 그렇지가 않다. 정성적으로 볼 때 수학적으로 문제가 되는 부분을 피해갈 수는 있지만, 행렬끼리 곱하는 연산이 두 번이나 더 생긴다. 한 행과 한 열을 각각 곱해서 그걸 다 더하는 과정은 생각보다 엄청나게 큰 오차 누적을 가져온다.

네트워크에서 adjacency matrix를 기본으로 spectral distribution을 구하는 경우 (그다지 효율적이지는 않지만 계산할 때 덤으로 eigenvalue 정보에서 block의 수 -island의 수- 정보를 끄집어 내 올수가 있다.) 정확한 rank를 결정하기가 어렵다. eigenvalue를 구하는 과정에서 singular value들이 제대로 처리되었는지 검사해야 한다. (SVD를 계산한 후에도 (이론적으로는 그래야 하지만) sigma matrix만으로는 바로 eigenvalue의 수를 결정할 수는 없다. SVD는 어디든 적용할 수 있다는 측면에서는 강력하지만, 오차율 면에서는 QR 방법에 미치지 못한다.)

최근의 대규모 데이터를 다루는 과정에서, 수치적 오차가 너무나 쉽게 무시되는 경우들을 생물학이나 사회학의 몇몇 연구자들이나 논문들에서 쉽게 본다. 컴퓨터를 진지하게 다루어보지 않았던 연구자들에게는 컴퓨터는 믿을 수 있는 답을 신속하게 내어주는 믿음직한 파트너겠다. 그런데 컴퓨터는 정말 쉽게 믿어서는 안된다. 숫자를 다루는 부분에서는 기적적인 도구로 보이지만, 기본적으로 정량적인 정답을 내놓지는 못한다는 부분을 깊이 이해하고 고민해야 한다.

그러고보면 불공평한 점이 있기는 하다. 사람은 수학적으로 보았을 때 '굉장히 믿을 수 없고 불안한' 컴퓨터를 일방적으로 이해해야 한다. 그래도 이해의 과정이 파국으로 끝나는 일이 적은 이유는, 적어도 서로의 차이를 인정하고 마주대하기 때문이겠다. (하지만 일방적으로 컴퓨터를 이해해야 한다.) 동시에 끊임없이 계속 수치적 방법들이 개발되는 이유는, 사람보다는 더 믿을 수 있기 때문인지도 모르겠다. -_-;

덧) 자칭 '컴도저'라는 이명박 대통령의 별명 앞에 붙은 '컴' 이 새삼스럽게 보이면 윗 글이 잘 이해 된 것이다. 대운하위로 다니는 배 용량이 20%로 줄어들든, 철거하고 다시 지어야 하는 다리수 조사 결과가 예닐곱개에서 예순일흔개가 되든, 워낙 복잡한 연산과정 속에서 누적된 '오차'에서 비롯된 '오해'일수가 있겠다. 앞으로 5년 가까이 일방적으로 이해하며 살아야 할지도 모르니 잘 준비해야 한다. 시작하자마자 욕만 먹지 말고 잘 좀 해봐라...

크리에이티브 커먼즈 라이센스
Creative Commons License
  1. 박미진씨. 연구실 후배.
2008/04/05 12:59 2008/04/05 12:59
트랙백이 없고, 댓글 2개가 달렸습니다.
ATOM Icon 이 글의 댓글이나 트랙백을 계속 따라가며 보고 싶으신 경우 ATOM 구독기로 이 피드를 구독하세요.