Mind Forest: Beneath imaginations: 행렬 태그 글 목록https://forest.nubimaru.com/시간의 토양에 기억의 나무를 심으며2024-03-29T22:32:27+09:00Textcube 1.10.10 : Tempo primo차이inureyeshttps://forest.nubimaru.com/entry/difference-between-computer-and-human2008-04-05T13:03:58+09:002008-04-05T12:59:18+09:00<p>numerical optimization 수업을 수강하다보면 당연하지만 놓치는 몇가지를 다시 생각하게 된다. 인간이 바라보는 세상의 구조와 컴퓨터가 바라보는 세상의 구조가 다르다. 그렇기 때문에 아무리 수학적으로 완벽한 방법도 컴퓨터에게는 더 불완전한 방법이 될 수 있다. 컴퓨터에게 복잡한 일을 시킬 때 밑바탕이 되는 선형대수학의 경우, 인간과 기계의 시각차가 너무 커서 서로의 장점이 다른 쪽에게는 단점이 되는 경우가 많다.</p>
<p>갑자기 학부시절 수업 이야기 하나. Ax = b 라는 행렬 선형방정식을 기계에게 계산시키기 위하여 수많은 방법들이 고안되었다. 컴퓨터가 수를 대하는 방식에 있어어 인간과의 가장 큰 차이는 2진법을 사용하는 부분이다. 우리에게 딱 맞아 떨어지는 수가 2진법으로는 그렇지 않은 경우가 비일비재하다. 컴퓨터는 0.4를 이해하지 못한다. 소숫점 아랫 자리는 0.5, 0.25, 0.125식으로 전개가 되며, 이러한 (0.5)^n의 조합으로만 수를 표시할 수 있다. 그러니 0.4에 끝없이 가까운 수를 대응시킬 뿐이다.</p>
<p>컴퓨터에 수를 집어 넣으려면 round-off 문제가 있다. 컴퓨터는 수를 자세하게 표현하기 위하여 지표와 가수 (고등학교때 나오는 내용이다) 형태로 기억한다. IEEE 754 (수를 표현하는 표준 규격이다) 에 따라 single/double/quadruple precision 으로 표현하면 수를 표현할 수 있는 범위는 넓어진다. 그렇지만 영역에 따라 수를 얼마나 자세히 표현할 수 있는지의 정도가 변한다. 유효숫자의 개념을 도입하기가 굉장히 어려워지기 시작한다. 그에 덧붙여 machine epsilon도 있다. 기계가 표현할 수 있는 최소한의 수 단위인데, 이보다 작은 수는 구분할 수가 없다. machine epsilon의 경우 CPU의 종류에 따라 크기가 다르다.</p>
<p>그런게 있든 말든~ 하기에는 컴퓨터는 너무 민감하다. 컴퓨터를 믿고 시뮬레이션을 만든다는 것은 오차론을 공부해서 적용하지 않고 실험 데이터를 해석하는 것 만큼이나 위험한 일이다. 정수만 다루는 경우에도 굉장히 많은 문제가 발생한다. 15/5 = 3이다. 컴퓨터에 같은 계산을 시켜서 다른 수가 나오게 하기는 정말 쉽다. 얼마전 미진이<sup style="font-family:tahoma;"><a href="https://forest.nubimaru.com/entry/difference-between-computer-and-human#footnote_2041058_1" id="footnote_link_2041058_1">1</a></sup> 자신이 짠 코드를 보고 "수가 다르게 나오는데 아무리 봐도 문제를 찾을 수가 없다"고 했을 때 문제가 되는 부분을 이해시키느라 고생했다. (double과 int의 타입 변환을 자주해서 일어난 문제였다. 타입 변환 과정에서는 정보가 유실되기 때문에, 계산때는 무조건 한 쪽으로 몰아놓고 해야 문제가 생길 여지가 줄어든다.) 기본적으로 컴퓨터에게 계산을 시키는 것은 정수든 실수든 엄청나게 조심해서 해야 한다.</p>
<p>행렬 연산으로 가면 문제가 커진다. 행렬 연산의 대부분은 '곱'과 '합'이 지배한다. 따라서 최종적인 결과값에 들어갈 수 있는 에러의 요소가 훨씬 많음을 뜻한다. 간단하게 Ax = b를 구하는 경우를 다시 한 번 보자. 정성적으로는 몇가지 문제를 피하기 위하여 A'*Ax = A'b 를 계산한다. 이 방법이 가장 정확한 답을 줘야 할텐데, 컴퓨터에게는 그렇지가 않다. 정성적으로 볼 때 수학적으로 문제가 되는 부분을 피해갈 수는 있지만, 행렬끼리 곱하는 연산이 두 번이나 더 생긴다. 한 행과 한 열을 각각 곱해서 그걸 다 더하는 과정은 생각보다 엄청나게 큰 오차 누적을 가져온다.</p>
<p>네트워크에서 adjacency matrix를 기본으로 spectral distribution을 구하는 경우 (그다지 효율적이지는 않지만 계산할 때 덤으로 eigenvalue 정보에서 block의 수 -island의 수- 정보를 끄집어 내 올수가 있다.) 정확한 rank를 결정하기가 어렵다. eigenvalue를 구하는 과정에서 singular value들이 제대로 처리되었는지 검사해야 한다. (SVD를 계산한 후에도 (이론적으로는 그래야 하지만) sigma matrix만으로는 바로 eigenvalue의 수를 결정할 수는 없다. SVD는 어디든 적용할 수 있다는 측면에서는 강력하지만, 오차율 면에서는 QR 방법에 미치지 못한다.)</p>
<p>최근의 대규모 데이터를 다루는 과정에서, 수치적 오차가 너무나 쉽게 무시되는 경우들을 생물학이나 사회학의 몇몇 연구자들이나 논문들에서 쉽게 본다. 컴퓨터를 진지하게 다루어보지 않았던 연구자들에게는 컴퓨터는 믿을 수 있는 답을 신속하게 내어주는 믿음직한 파트너겠다. 그런데 컴퓨터는 정말 쉽게 믿어서는 안된다. 숫자를 다루는 부분에서는 기적적인 도구로 보이지만, 기본적으로 정량적인 정답을 내놓지는 못한다는 부분을 깊이 이해하고 고민해야 한다.</p>
<p>그러고보면 불공평한 점이 있기는 하다. 사람은 수학적으로 보았을 때 '굉장히 믿을 수 없고 불안한' 컴퓨터를 일방적으로 이해해야 한다. 그래도 이해의 과정이 파국으로 끝나는 일이 적은 이유는, 적어도 서로의 차이를 인정하고 마주대하기 때문이겠다. (하지만 일방적으로 컴퓨터를 이해해야 한다.) 동시에 끊임없이 계속 수치적 방법들이 개발되는 이유는, 사람보다는 더 믿을 수 있기 때문인지도 모르겠다. -_-;</p>
<p>덧) 자칭 '컴도저'라는 이명박 대통령의 별명 앞에 붙은 '컴' 이 새삼스럽게 보이면 윗 글이 잘 이해 된 것이다. 대운하위로 다니는 배 용량이 20%로 줄어들든, 철거하고 다시 지어야 하는 다리수 조사 결과가 예닐곱개에서 예순일흔개가 되든, 워낙 복잡한 연산과정 속에서 누적된 '오차'에서 비롯된 '오해'일수가 있겠다. 앞으로 5년 가까이 일방적으로 이해하며 살아야 할지도 모르니 잘 준비해야 한다. 시작하자마자 욕만 먹지 말고 잘 좀 해봐라...</p>
<fieldset style="margin:20px 0px 20px 0px;padding:5px;"><legend><span><strong>크리에이티브 커먼즈 라이센스</strong></span></legend><!--Creative Commons License--><div style="float: left; width: 88px; margin-top: 3px;"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" target=_blank><img alt="Creative Commons License" style="border-width: 0" src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png"/></a></div><div style="margin-left: 92px; margin-top: 3px; text-align: justify;">이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" target=_blank>크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스</a>에 따라 이용하실 수 있습니다.
<!-- Creative Commons License-->
<!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="">
<license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" />
</Work>
<License rdf:about="http://creativecommons.org/licenses/by-nc-nd/">
<permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
<permits rdf:resource="http://web.resource.org/cc/Distribution"/>
<requires rdf:resource="http://web.resource.org/cc/Notice"/>
<requires rdf:resource="http://web.resource.org/cc/Attribution"/><prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/></License></rdf:RDF> --></div></fieldset><div class="fb-like" data-href="https://forest.nubimaru.com/entry/" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div>
<div class="fb-comments" data-href="https://forest.nubimaru.com/entry/" data-width="630" data-numposts="2" data-colorscheme="light"></div><div class=footnotes><img src="/plugins/FootNote/image/dizzle/title.gif" style="margin-bottom:5px;" /><div class=footnotes_in><ol class=footnotes><li id="footnote_2041058_1">박미진씨. 연구실 후배. <a href="#footnote_link_2041058_1"><img src="/plugins/FootNote/image/dizzle/btt.gif" align="absmiddle" style="margin-left:5px;" /></a> </li>
</ol></div></div><p><strong><a href="https://forest.nubimaru.com/entry/difference-between-computer-and-human?commentInput=true#entry2041058WriteComment">댓글 쓰기</a></strong></p>좌표축inureyeshttps://forest.nubimaru.com/entry/coordinate2008-03-31T23:27:22+09:002008-03-31T23:08:25+09:00<p>데카르트가 남긴 업적은 다양하지만, 발상의 전환으로 남긴 업적은 좌표와 그에 기반한 함수의 개념이다. 모든 공간을 좌표상에 배열할 수 있다는 아이디어는 이후 다차원계와 시공간 인식에 대한 연구의 시초가 되었다.</p>
<p>좌표축과 함께 시공간에 대한 인식을 바꾼 연구는 행렬과 행렬역학이다. 그 유명한 Cleve Moler가 행렬을 표현한 말이다.</p>
<blockquote>
<p>Matrix - The mother of all data structures. The non-mathematical uses of the word 'matrix'
reflect its Latin origins in 'mater,' or mother... The word has two meanings - a representation
of a linear mapping and the basis for all our existence.</p>
</blockquote>
<p>좌표축을 정의하는 방법은 다양할 수 있다. 많은 사람에게 익숙한 직교 좌표계나 구면좌표게 등도 있지만 조금만 찾아보면 coordinate(좌표축)를 정의하는 엄청나게 많은 방법을 찾을 수 있다. 아무리 복잡하다고 하지만 그래도 분야마다 일종의 스탠다드가 존재한다. 물리학과 컴퓨터 공학 양쪽을 다루기 때문에 좌표계를 다루는 부분의 차이로 가끔 고생할 때가 있다. 본질로 들어가면, 초등학교때 잠시 다녔던 컴퓨터 학원에서부터 그 혼란이 시작되었겠다.</p>
<p>베이직에서 화면에 글씨의 위치를 정해서 출력하기 위한 명령으로, 커서의 위치를 지정하는 LOCATE라는 명령이 있다. 커서를 옮기려면</p>
<blockquote>
<p>30 LOCATE(3,45)</p>
</blockquote>
<p>식이다. 3행 45열의 좌표에 커서를 가져다 놓으라는 설명이다. 굉장히 행렬스러운 표현이며, 물리학자들에게는 별 어려움없이 받아들여질 표현이다. 그런데 화면에 UI를 그릴때를 생각해보자. 토이 라이브러리의 경우</p>
<blockquote>
<p>Canvas canvas(450, 450, "Recostruct map");
canvas.SetDomain(25, 25, 400, 400);
canvas.SetForeground("blue");</p>
</blockquote>
<p>식이다. 좌표를 정의할 때의 순서는 (가로 위치, 세로 위치) 의 set을 사용하게 된다. 따라서 여기서의 값은 일반적인 2차원 좌표계에서의 (x,y) 값에 해당된다. 웹페이지에서 각 구성 요소들의 위치를 지정하거나 크기를 지정하는 CSS 문법이나, 가상 3차원 좌표계에서 객체를 생성하는 Direct3D의 기본 명령들도 2차원 투영의 기준은 (x,y)가 된다. 행렬을 기준으로 화면에 대응을 시키는 경우, 일반적인 2차원 좌표계에 대응시키면 축은 (y,x)가 기준이 되니, 두 축을 기술하는 순서가 바뀌는 셈이다.</p>
<p>석사 입학때 면접을 보는 자리였다. 역학 면접이었는데, 문제를 주면 칠판에 바로 문제를 풀면서 기술하는 내용에 대하여 설명을 하는 식이었다. 역학은 어려움을 느끼지 않았기에 (역설적이게도 당시 가장 싫어하던 분야가 통계 물리학이었다 -_-) 칠판에 주욱 써내려가며 어려움없이 답을 냈다.</p>
<p>앞에서 전개를 보던 교수분들이 중간 과정을 따라오면서는 아무 말이 없다가, 결과를 보더니 전부 고개를 갸웃거렸다. '틀렸나?' 싶어서 다시 전개를 머릿속에서 해 보았는데, 중간에 계산이 복잡하기는 했지만 틀린 부분은 없어 보였다. 꽤 긴 적막을 깨고서 교수 한 분이 말을 꺼냈다. "답이 틀렸는데 크기는 맞고, 계산을 따라가 보았는데 틀린 곳은 없고..."</p>
<p>그러더니 한 분이 갑자기 질문을 했다. "한 번 칠판에 3차원 cartesian coordinate(직교 좌표계)를 그려봐요." 그렸다. 그러니 면접 자리의 긴장이 풀렸다. "좌표축의 방향이 일반적인 방향과 반대가 되어있군." 이후에는 평범한 이야기. 보통 좌표축을 그 방향으로는 쓰지 않는다는 이야기라거나, 결과에서 끌어낼 수 있는 생각등이 어떤 것이 있는지에 대한 질문들이었다.</p>
<p>당시에 취미 비슷하게 X11을 이용한 그래픽 출력 프로그램을 하나 만들고 있었다. 화면을 다룰때의 굉장히 일반적인 형태로 좌표축을 잡아 만들고 있었다. 가로로 x축, 세로로 y축, 화면의 심도를 z축으로 잡는다. x축과 y축을 정의하고, 깊이를 화면 밖으로 나올 수록 양의 값으로 잡았다. 그리고 개체를 그릴 때 어떤 값이든 그 좌표계의 x축과 y축에 맞게 투영해서 만들었다.</p>
<p>그게 좌표축에 혼동을 가져왔던 것이었다.</p>
<div class="imageblock center" style="text-align: center; clear: both;"><img src="https://forest.nubimaru.com/cache/thumbnail/7/1085934336.w450-h357.png" width="450" height="357" alt="coordinate"/></div>
<p>a)는 일반적으로 화면을 다룰 때의 좌표, b)는 이를 회전시킨 같은 좌표이다. c)는 행렬을 기반으로 한 좌표이고 d)는 물리학에서 일반적으로 쓰는 직교좌표계이다. E1, E2, E3는 좌표를 set 형태로 나타낼때의 순서이다. (E1, E2, E3). b)와 d)는 달라보이지만, b)를 z축 중심으로 시계방향으로 돌리면 y축의 방향이 반대로 되었을 뿐이다.</p>
<p>아무리 시간이 지나도 혼동이 줄어들지 않는다. 처음 베이직에서 LOCATE와 POINT 명령의 차이로부터의 혼동이 15년이 넘는 시간동안 끊임없이 따라온다니 대단하다. 가끔 심심하면 머릿속에서 두 좌표축을 가지고 혼자 연습을 한다.</p>
<p>단지 거울상일 뿐인데, E2를 기술하는 방향의 부호가 정반대일뿐인데 그걸로 상상해 볼 수 있는 것들이 정말 많이 바뀐다. 다른 모든 것이 동일하다고 해도 축 하나의 차이가 엄청나게 많은 변화를 가져오는 수많은 것들을 본다. 단백질 구조에서, 식물 성장의 위상 속에서, 그리고 매일 살아가는 사회 속에서도.</p>
<p>좌표축중에 단지 하나만 바뀌었을 뿐인데.</p>
<fieldset style="margin:20px 0px 20px 0px;padding:5px;"><legend><span><strong>크리에이티브 커먼즈 라이센스</strong></span></legend><!--Creative Commons License--><div style="float: left; width: 88px; margin-top: 3px;"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" target=_blank><img alt="Creative Commons License" style="border-width: 0" src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png"/></a></div><div style="margin-left: 92px; margin-top: 3px; text-align: justify;">이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" target=_blank>크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스</a>에 따라 이용하실 수 있습니다.
<!-- Creative Commons License-->
<!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="">
<license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/" />
</Work>
<License rdf:about="http://creativecommons.org/licenses/by-nc-nd/">
<permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
<permits rdf:resource="http://web.resource.org/cc/Distribution"/>
<requires rdf:resource="http://web.resource.org/cc/Notice"/>
<requires rdf:resource="http://web.resource.org/cc/Attribution"/><prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/></License></rdf:RDF> --></div></fieldset><div class="fb-like" data-href="https://forest.nubimaru.com/entry/" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div>
<div class="fb-comments" data-href="https://forest.nubimaru.com/entry/" data-width="630" data-numposts="2" data-colorscheme="light"></div><p><strong><a href="https://forest.nubimaru.com/entry/coordinate?commentInput=true#entry2041057WriteComment">댓글 쓰기</a></strong></p>