딥러닝은 과연 함수인가?


입력 데이터의 집합을 정의역으로 두고, 추론해야 할 정답의 집합을 공역으로 두고 두 집합의 데이터의 관계를 규정하는 함수를 파라미터로 초기화해놓고 이를 데이터셋으로부터 최적화 방식을 통해 근사해 나가는 방식, 이것이 머신러닝의 기본 아이디어라고 생각해 왔다.

그중에서도 Neural Network를 통해 구현한 딥러닝 방식의 모델은 그 어떤 복잡한 함수라도 레이어를 깊이 쌓아서 정확히 근사해 낼수 있다는 표현력으로 인해 대세로 자리잡았다.

(참고) Universal Approximation Theorem

아주 대략적으로 말해, 한개의 hidden layer에 activation function이 결합된 feed foward network는 어떤 연속함수도 근사할 수 있다는 이론이지만, 의외로 이를 정확하게 설명하는 블로그글을 찾기는 쉽지 않았다. 가장 정확한 설명을 제공하는 것은 Wikipedia인 것 같다.

https://en.wikipedia.org/wiki/Universal_approximation_theorem

그래서 우리는 딥러닝을 이용해 구현하고자 하는 함수를 근사하는 작업을 오랫동안 계속해 왔다. 혹시 이런 접근이 가지는 한계점은 없었을까? 이런 질문을 품게 되었다면 이 글을 계속 읽어봐도 좋을 것 같다.

Operator의 개념


함수(function)이 변수 x를 다른 변수 y로 맵핑(mapping)하는 개념이라고 한다면, 연산자(operator)란 함수f를 다른 함수 g로 맵핑(mapping)하는 개념이라고 볼 수 있다.

f(x) = x^2 이라면 f:2→4 f:3→9 같은 맵핑을 성립시킨다.

예를 들어 보자, 미분연산자 \nabla (역삼각형 모양 기호)를 예로 든다면,

$$ f = x^2

$$

$$ \nabla f = 2x

$$

미분연산자라는 operator는 x^2→2x 로 맵핑하는 것이다.

$$ g = sinx

$$

$$ \nabla g = cosx

$$

같은 미분연산자 operator는 sinx를 conx로 맵핑할 것이다. 이것이 연산자(operator)의 한 예이다.

Operator가 될 수 있는 것은 미분말고도 많다. 적분, 푸리에변환, 라플라스변환 등 물리학적 의미를 가지는 것도 많다. 물론 이런 것들은 analytical하게 수치계산으로도 구현 가능한 operator지만, 딥러닝으로 operator를 구현한다면 꼭 우리가 아는 operator만 구현한다는 접근은 아니다.