머신러닝은 방정식을 푸는 수치적 방법론의 일종이라고 할 수 있다.
방정식(方程式)은 "정해진(程) 규칙(方, 방향, 방법)에 따라 풀어가는 식(式)"으로 정해진 방법을 따라가면 우리가 모르는 미지수가 무엇인지 찾을 수 있게 된다. 영어로는 equation이라고 쓰는데, 이건 양 쪽이 같다는 것을 의미한다. 무엇인지는 아직 모르지만 미지수가 포함된 왼쪽의 식과 오른 쪽의 식이 같아지게 두고, 그 다음부터 이런 저런 규칙을 적용하다보면 미지수를 찾을 수 있다.
가장 간단한 방정식은 이런 식으로 적을 수 있다.
"5에 몇을 더하면 7이 되는가?"
이를 수식으로 표현하면 다음과 같다.
5 + ☐ = 7
처음에는 알지 못하는 수, 즉 미지수를 네모, 세모, 동그라미 등으로 표현한다.
그리고 이런 도형들이 익숙해지고 나면 x, y, z 같은 영어 알파벳을 사용한다.
그러다가 로마자가 부족해지면 그리스 문자 α, β, γ 같이 요상하게 생긴 문자들도 사용한다.
간단한 수준의 방정식은 사칙연산(+−×÷)으로도 충분히 풀 수 있지만,
이런 저런 계산법을 배우면서 방정식은 조금씩 복잡해진다.
처음에는 미지수, 그러니깐 숫자 하나를 알아나는게 목표였다면,
조금씩 방정식이 복잡해지다보면 숫자 하나가 아니라 함수를 알아내는게 목표가 되기도 한다.
함수(函數) "하나의 입력(input)에 대해 하나의 출력(output)을 대응시키는 규칙/관계"이다. 함수는 "수(數)를 담는 상자(函)"라는 의미를 가지는데, 어떤 수(입력)를 넣으면 정해진 규칙에 따라 결과(출력)를 내어주는 상자 같은 존재라는 의미이다. 마치 동전을 하나 넣고 돌리면, 무언가 캡슐 같은 것이 튀어나오는 동전뽑기 같은 셈이다. 동전 뽑기는 똑같은 동전을 넣어도 어떤 캡슐을 얻게 될지 모르지만, 함수는 입력값에 따라 어떤 출력값이 나오는지가 정해져있다.
함수는 영어로 function이라고 하는데, 이 단어는 라틴어 function(수행, 작동)을 어원으로 가지고 있고, "기능"이라는 의미를 가지고 있다. 즉, 어떤 역할이나 작용을 수행하는, 무언가를 넣으면 무언가의 역할/작용을 해서 결과를 내놓는 기능이라는 의미라고 이해할 수 있다.
미지수 하나를 구하는 방정식을 풀면 숫자 하나를 알아낼 수 있지만,
함수를 구하는 방정식을 풀면 어떤 규칙을 알아내게 된다.
그러니깐 우리가 세상의 어떤 규칙 예를 들어 자동자가 빠르게 달리면 기름을 얼마나 더 많이 소비하는지, 광고비를 얼마나 쓰면 매출이 얼마나 늘어나는지 등의 규칙을 알고 싶다면 함수를 찾아내는 방정식을 풀어야 한다. 즉 방정식을 푸는 일은 세상의 규칙을 풀어내고 예측하는 일이다.
방정식을 푸는 이런 저런 규칙을 적용해서 방정식을 푸는 방법을 해석적 방법(analytical method)이라고 한다.
5 + ☐ = 7
앞서 예로 들었던 이 방정식에 대해서, ☐의 값을 구하기 위해 양 변에 5를 빼주고 ☐ = 2라는 결론을 얻었다면 이는 해석적 방법에 따라 방정식을 풀었다고 할 수 있다.
그런데 만약에 방정식을 푸는 방법을 모르겠고, 어찌되었든 ☐의 값만 구하면 된다고 해보자. 그러면 ☐에 값을 하나씩 대입해볼 수 있다. 예를 들어 1을 대입해보면 왼쪽은 6이 나와서 등식이 성립되지 않는다. 그렇지만 2를 대입하면 등식이 성립하기 때문에 ☐ = 2라고 결론을 내리는 식이다.
방금 예로 든 경우에는 운이 좋게도 두 번 밖에 시도하지 않고서 정답을 찾아냈지만, 방정식이 복잡해지면 무한정 아무 값을 넣어볼 수는 없는 일이다. 이럴 때에 사용하는 방법이 바로 수치적 방법(numerical method) 이다. 수치적 방법은 '정확한 공식을 몰라도', 값을 조금씩 바꾸며 점점 답에 가까워지도록 하는 계산법이다.