[책을 읽고] 류쉐펑, <복잡한 세상을 이기는 수학의 힘>
공학 세계에서 방정식을 푸는 것은 어떤 용도와 관련 있는 경우가 많다.
방정식은 실제 관측 결과를 기반으로 만들어지는데, 관측은 오차를 포함하는 것이 보통이다.
그 결과, 불량 조건 연립방정식이란 것이 만들어진다.
관측값에 따라 방정식의 숫자가 조금 변할 경우, 해가 크게 바뀌는 경우를 말한다.
2개의 방정식으로 이루어진 연립 방정식의 경우, 이것은 두 직선이 거의 평행에 가까운 경우에 해당한다.
이 사실을 지적하면서, 저자는 서로 다른 의견이 많을수록(조직다양성) 해답을 찾기 쉽다고 말한다.
상당히 억지 비유이기는 하지만, 여기에서 책 읽는 것을 멈춘다면,
다음에 나오는 더욱 흥미진진한 부분을 놓치게 된다.
이 책의 특이한 점은, 수학의 교훈을 현실에 적용하라면서 사자성어나 중국 속담을 인용하는 것이다.
한 가지 사례를 더 들자면, 저자는 순회 외판원 문제에 관한 가장 직관적인 알고리즘인
K-최근접 이웃을 설명하면서, 이것이 장점을 극대화하되 단점을 통제하는 접근이라고 설명한다.
이제 재미있는 이야기를 해보자.
비밀번호가 1자리 숫자라면, 10번 찍어 1번 성공할 수 있으니 추측이 쉬운 편이다.
그런데 2자리만 되어도, 확률은 10%에서 1%로 떨어진다.
6자리라면? 10^6 분의 1이다.
이를 공간에 나타내면, 확률이 기하급수적으로 낮아지는 것을 눈으로 볼 수 있다.
1자리 비번은 10개의 직선 눈금 중 하나지만, 2자리 비번은 10*10의 2차원 공간이며,
6자리 비번은 머리에 그리기 어렵지만 어찌 상상은 되는 6차원 공간의 한 점이다.
거대한 공간에 자리한 매우 희소한 특이점인 것이다.
그런데 사실 비번만 그런 것은 아니다.
우주의 대부분은 진공이다.
따라서 지구 위의 많은 것들도 대개는 희소한 분포를 가진다.
예컨대, 사진 같은 것도 그렇다.
그래서 사진 파일을 압축하려고 하면, 일단 아무런 데이터도 없는,
즉 0인 점을 세어 압축하는 것이 1차적인 방법이다.
그런데 행렬을 사용하면, 이 방법을 조금 더 끌고 갈 수 있다.
푸리에 변환을 사용하면, 모든 파형은 여러 개의 사인(sine)파와 코사인(cosine)파의 중첩으로 전환된다.
각 주파수 성분은 진폭과 위상으로 표현된다.
결과적으로 모든 파형은 사인파와 코사인파의 중첩, 즉 행렬합으로 변환 가능한데,
이때 각 주파수 성분의 계수값은 희소하다.
즉, 대부분 계수값은 0이거나 0에 가깝다.
다시 말해, 압축 효율이 매우 높아질 수 있다는 것이다.
0에 가까운 값을 0으로 바꿔버려도, 인간의 눈이 파악할 수 없는 차이가 대부분이라서다.
중국에서 유명 공기청정기 제품이 논란이 된 적이 있다고 한다.
필터 포장을 제거하지도 않고 돌렸는데 공기질이 나아지는 수치가 표시된 것이다.
소비자들은 사기라고 격앙했지만, 공학자들은 공기질 측정 방법을 알고 있으므로 사정을 이해했다.
미세먼지 측정 방법은 다양한데, 시판되는 공청기들은 비싸고 정확한 방법이 아닌, 저렴한 광산란법을 쓴다. 문제는, 이 측정법의 오차를 줄이기 위해 알고리즘이 동원된다는 것이다.
알고리즘은 별것 아니고, 그냥 흔해빠진 다중선형회귀(linear multiple regression)식이다.
광산란을 활용한 측정값을, 가동 시간, 바람 세기 등으로 보정하는 것이다.
왜 이런 방식이 허용되느냐 하면, 저렴한 측정을 알고리즘으로 보정한 방법이
비싸고 정확한 방법(예컨대 중량법이나 베타선 흡수법)보다 오히려 더 정확하기 때문이다.
(물론 비싸고 정확한 측정법에 알고리즘을 더하면 더 정확하겠지만, 그걸 왜 안 하는지는 쉽게 짐작이 된다.)
이 알고리즘에 피드백이 동원되는 것은 당연하다. (시계열 데이터를 회귀에 안 쓸 리가...)
칼만 필터 같은 알고리즘은 예측 단계와 업데이트 단계를 거치며,
이전 상태와 새로운 측정값을 각각의 불확실성을 고려하여 최적으로 결합한다.
이를 통해 오차를 보정하면 더 정확한 값을 얻을 수 있다.
그런데 여기에서 멈추면 이 책의 저자가 아니다.
처음부터 완벽한 계획을 세운 다음 실행하는 것보다, 일단 실행하고 피드백을 보며 고쳐나가는 것이 낫다고, 그는 현실에 적용할 조언을 던져 준다. (대체 왜 자기계발서 흉내를 내는 걸까?)
여기에서도 안 멈추고, 저자는 이것이 중용이라는 둥 횡설수설하는데,
공자가 무덤에서 나와 반박할 것도 아니니 넘어가자.
서두에서 말한 불량 조건 연립방정식으로 되돌아가 보자.
사실 불량 조건이라는 불량한 이름이 붙었지만, 사실 불량한 것은 현실 그 자체다.
굳이 양자역학을 들이밀지 않아도, 관측은 불량할 수밖에 없다.
모든 관측점을 나란히 지나가는 회귀선은 사실 존재할 수 없는 것이다.
관측에는 오차가 존재할 수밖에 없으며, 오차를 줄이기 위한 추가 관측은 오차를 늘릴 뿐이다.
그래서 모든 식을 만족하는 하나의 해를 찾는 대신, (이건 수학자들이 할 일이다)
공학자들은 최소제곱법을 써서 가장 오차가 작은 해를 찾으려 한다.
그렇게 얻은 회귀식을, 다른 관측값을 통해(피드백) 보정하는 것이 보통이다.
공학자들은 사실 미분방정식도 잘 쓰지 않는다.
여러 가지 이유가 있겠지만, 도함수를 구하려면 모든 구간에서 미분가능, 즉 연속이라는 조건이 필요해서다.
현실은 그렇지 않다.
예컨대 최적값을 구한다면, 그냥 여러 숫자 넣어보면서 최적을 향해 나아가면 된다.
머신러닝에 자주 쓰이는 경사하강법 같은 것이 그런 방법이다.
컴퓨터에게 반복적이고 귀찮은 계산을 맡길 수 있는 시대라서 가능한 방법이라고 말하고 싶다.
수학이라 써놓고 사실은 알고리즘, 그것도 방법론에 관한 책이라서 낚인 느낌이지만,
흥미로운 책이었다.
이 책의 저자가 그토록 전하고 싶던 자기계발 교훈을 하나만 꼽자면,
완벽한 계획을 세우고 나서 실행하지 말고, 일단 저지른 다음 조금씩 고쳐나가라는 것이다.
프로젝트나 스타트업은 물론이고, 논문도 그렇게 쓰라는 것이다.
완벽한 계획이라는 것이 가능할까?
나는 테스트를 해보면 거의 언제나 완벽주의자 성향이라고 진단되지만,
완벽한 계획을 가지고 뭘 시작한 적은 없는 것 같다.
처음에 아무리 완벽해 보이는 계획이더라도
언제 타이슨을 만날지 모르는 것이 우리의 삶이다.
어쨌든 시작하는 게 중요하고, 고쳐나가는 것은 선택이 아니고 필수다.