일반화 / 특수화 (generalize / specialize)
풀리지 않는 문제를 그대로 붙들고 씨름하는 대신, 일부러 더 넓은 문제로 키우거나 더 좁은 문제로 줄여서 다루기 쉬운 형태로 갈아 끼우는 발견술. 일반화는 특정 숫자나 조건을 변수로 풀어 더 큰 집안의 문제로 만드는 일이고, 특수화는 거꾸로 극단적이거나 단순한 한 경우로 좁혀 실마리를 잡는 일이다. 둘은 반대 방향처럼 보이지만, 막힌 자리를 옆으로 비켜 푸는 한 쌍의 우회로다.
너, 이상한 경험 하나 떠올려 봐라. 시험지에 '37 곱하기 43은?' 같은 문제가 나오면 머리가 지끈거리는데, 칠판에 'a 곱하기 b'라고 적힌 공식을 외우는 건 오히려 쉬웠던 적 있지 않나. 분명히 후자가 더 막연하고 추상적인데도, 어떤 때는 그 막연한 쪽이 더 다루기 편하다. 숫자 하나하나를 붙들고 끙끙대는 것보다, 그 숫자들을 한꺼번에 품는 더 큰 그림을 잡는 게 외려 단순할 때가 있다는 것 — 이 얄궂은 사실이 오늘 이야기의 씨앗이다. 막힌 문제를 더 어렵게 만들었더니 풀렸다는, 말도 안 되는 것 같은 그 이야기.
20세기 중반, 헝가리 출신 수학자 죄르지 포여가 평생 곱씹은 수수께끼가 바로 이거였다. 그는 수학을 잘하는 일보다 '수학을 어떻게 발견하는가'에 더 매달린 사람이었다. 어떻게 사람은 한 번도 본 적 없는 문제의 길을 찾아내는가. 그가 1945년에 내놓은 얇은 책 하나가 이 물음에 답하려 했는데, 거기서 그는 묘한 역설 하나에 이름을 붙인다. 그는 그것을 발명가의 역설이라 불렀다. 더 야심 찬 계획이 오히려 더 잘 풀린다는 것. 눈앞의 작은 문제를 곧장 치려 하지 말고, 일부러 그것을 더 크고 일반적인 문제로 부풀려라 — 그러면 그 큰 문제가 더 쉬워지는 일이 자주 일어난다고 그는 적었다. 처음 들으면 헛소리 같다. 어려운 문제가 안 풀리는데 더 어려운 문제로 키우라니. 그런데 포여가 본 비밀은 이거다. 특정한 숫자 하나에는 우연한 군더더기가 잔뜩 들러붙어 있어 손잡이가 없다. 그걸 변수로 풀어 일반화하면, 비로소 문제의 진짜 뼈대가 드러나고, 그 뼈대에는 잡고 밀 손잡이가 달려 있다. 군더더기에 가려 안 보이던 길이, 추상의 높이로 한 칸 올라서는 순간 한눈에 펼쳐지는 거다. 포여가 이걸 무에서 발명한 건 아니다. 수학자들이 옛날부터 본능처럼 써 오던 손버릇에, 그가 처음으로 이름과 자리를 내어 준 셈이다.
이 일반화가 무기로 가장 화려하게 쓰인 장면을 보여 주마. 물리학자 리처드 파인먼의 이야기다. 그는 프린스턴과 MIT의 수재들이 끙끙대며 못 푸는 적분 문제를 곧잘 가로채 풀어 버리는 걸로 악명이 높았는데, 비결이 바로 이 일반화였다. 그가 자서전에서 털어놓은 바로는, 학창 시절 우즈라는 사람이 쓴 고급 미적분 책에서 학교에선 잘 안 가르치는 기술 하나를 주워 익혔다고 한다. 적분 기호 안에서 미분하는 수법. 핵심이 뭐냐. 풀어야 할 적분에 원래 없던 변수 하나를, 그러니까 알파 같은 매개변수 하나를 일부러 슬쩍 끼워 넣는 거다. 그러면 네가 진짜 풀고 싶던 그 특정한 적분은, 알파가 어떤 한 값일 때의 특수한 경우로 쪼그라든다. 즉 한 문제였던 것이 알파를 손잡이로 가진 문제들의 집안 전체로 부푼다. 이제 그 집안을 알파에 대해 미분해 더 단순한 방정식으로 바꾸고, 풀고 나서, 마지막에 알파를 원래 값으로 되돌리면 답이 손에 떨어진다. 동급생들이 학교에서 배운 표준 정공법으로 그 한 문제에 정면으로 달려들어 깨지는 동안, 파인먼은 문제를 일부러 더 크게 키워 옆문으로 들어간 것이다. 가장 어려워 보이게 만든 길이, 실은 가장 쉬운 길이었다.
그런데 포여의 발견술에는 정반대로 향하는 쌍둥이 손이 하나 더 있다. 특수화다. 일반화가 문제를 넓혀 손잡이를 찾는 거라면, 특수화는 거꾸로 문제를 끝까지 좁혀 실마리를 캐는 거다. 일반적인 명제가 막막할 땐, 일단 가장 단순하거나 가장 극단적인 한 경우부터 손으로 직접 굴려 봐라. 변의 개수가 n인 도형이 막막하면 삼각형 하나부터, 임의의 수가 막막하면 0이나 1을 넣어 보는 식으로. 끝까지 좁힌 그 작은 자리에서 패턴이 한번 잡히면, 그 패턴을 디딤돌 삼아 거꾸로 일반으로 거슬러 올라간다. 어린 학생이 1부터 100까지를 다 더하라는 숙제 앞에서, 처음과 끝을 짝지으면 101이 50쌍 나온다는 걸 알아채는 그 순간 — 그게 작은 경우를 손으로 굴려 보다 전체의 뼈대를 낚아채는 특수화의 얼굴이다. 포여가 가르친 건 결국 이 두 손을 번갈아 쓰는 법이었다. 막히면 넓혀라, 그래도 안 보이면 극단으로 좁혀 굴려 보고 다시 넓혀라.
이 오래된 손버릇은 컴퓨터 시대에 들어 생각의 가장 윗단추까지 갈아 끼우게 만들었다. 기계에게 수식을 풀리는 자동 계산 도구나, 무수한 조건을 만족시키는 답을 찾는 해결기들은, 네가 던진 그 하나의 문제를 풀지 않는다. 그것들은 네 문제를 매개변수를 가진 일반형으로 받아들인 뒤 그 집안 전체에 통하는 절차를 굴린다. 더 깊은 전환은 기계학습에서 일어났다. 거기서 가장 무서운 적의 이름이 아예 '과적합', 즉 주어진 예시 하나하나를 통째로 외워 버리는 짓이다. 좋은 학습이란 본 적 있는 데이터를 암기하는 게 아니라, 거기서 한 번도 못 본 경우에까지 통하는 일반 규칙을 뽑아내는 것 — 이 분야의 성공과 실패를 가르는 잣대 자체가 '얼마나 잘 일반화하느냐'로 못 박혀 있다. 포여가 종이 위에서 권하던 그 손동작이, 이제는 기계가 세상을 배우는 일의 정의 그 자체가 된 셈이다.
그러니 너가 어떤 문제 앞에서 도무지 첫걸음이 안 떼어지는 순간을 만나거든, 그 문제를 그대로 붙들고 더 세게 밀지 마라. 옆으로 비켜라. 숫자나 조건 하나를 변수로 풀어 더 큰 문제로 키워 손잡이를 찾거나, 거꾸로 가장 단순한 한 경우로 좁혀 손으로 굴려 패턴을 캐라. 정면이 막혔을 때 길은 위아래로 나 있다. 넓히거나, 좁혀라.