머신러닝에서의 정부호 커널과 재생 커널 힐베르트 공간
정의 1 2
인풋 공간input space $X \ne \emptyset$ 이 정의역이고 공역이 복소수의 집합 $\mathbb{C}$ 인 사상 $f: X \to \mathbb{C}$ 들로 이루어진 함수들의 공간 $\left( H , \left< \cdot , \cdot \right> \right) \subset \mathbb{C}^{X}$ 가 힐베르트공간이라 하자.
재생 커널 힐베르트 공간
- 픽스된 하나의 데이텀datum $x \in X$ 에 대해 다음과 같이 함수 $f \in H$ 를 취해주는 범함수 $\delta_{x} : H \to \mathbb{C}$ 를 $x$ 에서의 (디랙) 평가 범함수(Dirac) Evaluation Functional at $x$라 한다. $$ \delta_{x} (f) := f (x) $$
- 모든 $x \in X$ 에서 평가 범함수 $\delta_{x}$ 가 연속이면 $H$ 를 재생 커널 힐베르트 공간rKHS, Reproducing Kernel Hilbert space라 하고 $H_{k}$ 와 같이 나타내기도 한다.
- 함수 $k : X \times X \to \mathbb{C}$ 가 다음 두 조건을 만족하면 $H$ 의 재생 커널reproducing Kernel이라 한다.
- (i): 표현자representer: 모든 $x \in X$ 에 대해 $$ k \left( \cdot , x \right) \in H $$
- (ii) 재생 성질reproducing Property: 모든 $x \in X$ 과 모든 $f \in H$ 에 대해 $$ \left< f , k \left( \cdot , x \right) \right> = f(x) = \delta_{x} (f) $$ 특히 모든 $x_{1} , x_{2} \in X$ 에 대해 다음이 성립한다. $$ k \left( x_{1} , x_{2} \right) = \left< k \left( \cdot , x_{2} \right), k \left( \cdot , x_{1} \right) \right> $$
정부호 커널
- 인풋 공간 $X \ne \emptyset$ 에서 힐베르트공간 $\left( H , \left< \cdot , \cdot \right> \right)$ 로의 사상 $\phi : X \to H$ 을 피쳐 사상feature map이라 하자. 이러한 맥락에서, $H$ 를 피쳐 공간feature이라 부르기도 한다.
- $\left( H , \left< \cdot , \cdot \right> \right)$ 의 내적 $\left< \cdot , \cdot \right> : H \times H \to \mathbb{C}$ 에 대해 다음과 같이 정의된 함수 $k : X \times X \to \mathbb{C}$ 를 커널kernel이라 한다. $$ k \left( x_{1} , x_{2} \right) := \left< \phi \left( x_{1} \right) , \phi \left( x_{2} \right) \right> $$
- $m$개의 데이터data $\left\{ x_{1} , \cdots , x_{m} \right\} \subset X$ 에 대해 다음과 같은 행렬 $K \in \mathbb{C}^{m \times m}$ 을 커널 $k$ 의 그램 행렬gram matrix라 한다. $$ K := \left( k \left( x_{i} , x_{j} \right) \right)_{ij} $$
- $k$ 의 그램 행렬이 양의 정부호 행렬이면 $k$ 을 양의 정부호 커널positive Definite Kernel이라 한다. 다시 말해, 모든 $\left\{ c_{1} , \cdots , c_{m} \right\} \subset \mathbb{C}$ 에 대해 다음을 만족하는 그램 행렬을 가지는 커널 $k$ 을 양의 정부호 커널이라 한다. $$ \sum_{i=1}^{m} \sum_{j=1}^{m} c_{i} \bar{c_{j}} K_{ij} \ge 0 $$
설명
쉽지 않은 내용이지만 최대한 쉽게 풀어 썼으니 차근차근 읽어보도록 하자.
데이터 과학에서 힐베르트 공간의 의미
- 힐베르트 공간은 내적이 정의되는 완비 공간이다. 일반적으로 수학에서 내적이라고 하는 것은 굳이 의미부여를 하지 않고 그냥 몇가지 조건을 만족시키는 이변수 스칼라 함수지만, 머신러닝에서 굳이 연관을 짓자면 유사도를 측정measure of Similarity한다는 개념이 될 수 있다. 실제로 두 문서 간에 단어의 빈도를 비교하는데 쓰이는 코사인 유사도 역시 내적을 쓰고, 또 다른 무식한 예로써 세개의 벡터 $$ A := \left( 3, 0, 1 \right) \\ B := \left( 4, 1, 0 \right) \\ C := \left( 0, 2, 5 \right) $$ 가 있다고 한다면 누가 보아도 $A$ 와 $B$ 가 유사하고 $C$ 와는 이질적이다. 그러나 이는 아직 직관적인 추론이고, 내적을 통해서 계량화 하면 다음과 같다. $$ A \cdot B = 12 + 0 + 0 = 12 \\ A \cdot C = 0 + 0 + 5 = 5 \\ B \cdot C = 0 + 2 + 0 = 2 $$ 단순히 내적의 절대값이 크거나 작은 것을 보았을 뿐이지만, ‘딱 봐도 그렇잖아’보다는 훨씬 데이터를 잘 설명하고 있다.
- 정의에서 인풋 공간이라고 부르는 $X$ 에는 별다른 가정이 없음에 주목하라. 실제 필드에서 우리는 어떤 안 좋은 데이터를 다룰지 보장할 수가 없다. 예를 들어 $X$ 가 사진이나 문서 데이터라면 사진끼리 내적을 한다든가 문서끼리 내적을 한다는 게 말이 안 된다.
- Q. $X$ 가 흑백사진의 집합이라면 사진을 행렬로 보고 픽셀마다의 값으로 내적을 하면 되지 않을까?
- A. 그러면 되고, 그게 바로 피쳐 사상 $\phi : X \to H$ 이다. 이 때 $H$ 는 직사각형 $[a,b] \times [c,d]$ 에서 정의된 함수들의 공간이 된다.
- 이렇게 생각해보면, 커널의 존재 그 자체가 이미 ‘다루기 쉽지 않은 데이터’를 우리가 잘 아는 공간으로 데려온 것이나 마찬가지다.
- 위에서 언급한 내적의 의미가 전부 말이 안 될지라도, 내적 공간이면 놈 공간이고 거리 공간이므로 우리가 상식적으로 있어야 한다고 여기는 대부분의 가정들이 성립한다. 내적 $\left< \cdot , \cdot \right>$ 에 의해 놈 $$ \left\| f \right\| := \sqrt{ \left< f , f \right> } $$ 이 유도되며, 놈 $\left\| f \right\|$ 에 의해 메트릭 $$ d (f,g) = \left\| f -g \right\| $$ 가 유도된다.
- 이런 저런 이유 다 떠나서 수식을 전개하다보면 내적이 필요해지는 경우가 있다. 관련된 예를 여기에 다 적으면 너무 산만해지므로 생략한다. ‘서포트 벡터 머신’ 포스트의 커널 트릭 단락을 참고하라.
왜 함수공간인가? 이렇게까지 어려워야하나?
수학이라고 하는 것이 사용된 거의 대부분의 응용들은 ‘우리가 원하는 함수’를 찾는 일이다.
- 인터폴레이션은 주어진 데이터의 사이를 채우는 다항함수를 찾는다.
- 통계적 회귀분석은 데이터를 가장 잘 설명하는 직선을 찾는 기법이다. 그 직선은 선형함수다.
- 딥러닝은 그걸 잘 못하겠어서 활성화 함수 같은 걸 때려넣고 비선형 함수를 근사시키는 기법이다.
- 푸리에 변환은 함수를 삼각함수의 선형결합으로 나타내는 변환이다.
이런 예를 하나하나 들자면 끝이 없다. 다시 머신러닝으로 돌아와서, 우리가 함수공간을 생각하는 이유는 우리가 찾으려는 것이 함수기 때문이다. 우리는 그 꼴이 명시적explicit이진 않을지라도 우리가 관심있는 것을 넣으면input 우리가 원하는 결과가 나오는return 함수를 원한다. 예를 들어 숫자가 적힌 사진을 넣었을 때 그것의 숫자를 돌려준다든가, 개인정보를 넣으면 대출을 상환할 수 있는 확률을 계산해준다든가 하는 등의 함수다. 이렇게 쓸만한 함수가 단순할 리가 없는데, 그나마 비교적 우리가 잘 알고 있는 함수들의 합 같은 것으로 찾길 원한다. 상상하길, 건강 진단 결과 데이터 $x$ 를 받아서 얼마나 건강한지 계산해주는 함수를 $f$ 라 한다면 $$ f( \cdot ) = \sum_{k=1}^{m} \alpha_{k} \phi_{k} \left( x_{k} \right)(\cdot) $$ 와 같이 유한히 많은 $\phi_{k} (x) (\cdot)$ 를 기저basis로 가지는 $f$ 를 찾길 바라는 것이다. 특히 $\phi (x) = k (\cdot , x)$ 에 대해 어떤 $f$ 를 찾을 수 있다는 명제가 바로 표현자 정리다.
표현자 정리: 재생 커널 힐베르트 공간에서 학습데이터에 적합한fitted 임의의 함수는 표현자들의 유한한 선형결합으로 나타낼 수 있다.
요약하자면, 머신러닝(특히 서포트벡터머신의 맥락)에서 우리가 찾고 싶은 것이 결국 함수기 때문에 그들이 있는 함수공간에 대해 탐구하는 것은 필연적이다.
물론 수학적인 증명이 없다고해서 돌아가지 않는 프로그램은 이 세상에 존재하지 않는다. 필연적인 공부라고 해서 모두에게 필수적이지는 않다. 수학 전공자가 아니라면 아주 어려운 게 정상이니 정 안 되겠다 싶으면 대충 넘어가라.
평가 함수 앞에 왜 디랙의 이름이 들어가 있나?
$$ \delta_{x_{0}} (x) = \begin{cases} 1 & , \text{if } x = x_{0} \\ 0 & , \text{if } x \ne x_{0} \end{cases} $$ 원래 디랙 델타 함수는 위와 같이 한 점에서만 값을 가지는 함수로 유명하다. 정확한 정의와 용도가 어찌되든 그 변형들은 한 점에서만 $0$ 이 아니라는 점만 지키면 대체로 디랙의 이름이 붙는다. 이해를 돕기 위한 예로써 두 함수 $f : \mathbb{R} \to \mathbb{R}$, $\delta_{x_{0}} : \mathbb{R} \to \mathbb{R}$ 과 그 내적으로써 $$ \left< f, \delta_{x_{0}} \right> = \sum_{x \in \mathbb{R}} f (x) \delta_{x_{0}} (x) = f \left( x_{0} \right) $$ 를 상상해보자. 보통 함수의 내적으로는 적분을 하지 합계가 아니라는 것도 알고 모든 $x \in \mathbb{R}$ 에 대해 덧셈을 하는 게 위험하다는 것도 알지만, 결국 그 개념과 느낌에 통하는 부분이 있음을 알 수 있다.
이러한 센스에서, $\delta_{x_{0}} (f)$ 는 위와 같은 논의를 숨기고 그냥 곧바로 그 결과인 $x_{0}$ 을 대입한 $f \left( x_{0} \right)$ 을, ‘$x_{0}$ 에서의 한 점만 얻는’ 함수인 것이다.
재생 성질이라 부르는 이유
재생 커널 힐베르트 공간의 정의를 읽어보면 상당히 흥미롭다. 보통 수학에서 ‘무슨 공간’이라고 하면 그 정의 자체를 ‘무슨’이 존재하는 공간이라고 하는데, RKHS는 뜬금 없이 ‘평가 범함수가 모든 점에서 연속인’ 힐베르트 공간으로 정의되기 때문이다.
리즈 표현 정리: $\left( H, \left\langle \cdot,\cdot \right\rangle \right)$가 힐베르트 공간이라고 하자. $H$의 선형 범함수 $f \in H^{ \ast }$와 $\mathbf{x} \in H$ 에 대해 $f ( \mathbf{x} ) = \left\langle \mathbf{x} , \mathbf{w} \right\rangle$와 $\| f \|_{H^{\ast}} = \| \mathbf{w} \|_{H}$ 을 만족하는 $\mathbf{w} \in H$ 가 유일하게 존재한다.
무어-아론샤인 정리moore-Aronsajn theorem: 양정부호 커널이 존재하면 그에 따른 RKHS가 유일하게 존재한다.
이러한 정의에 따라 RKHS는 재생 커널를 가진다는 명제조차 자명하지 않아 증명이 필요하며, 실제로는 리즈 표현 정리에 따라 RKHS에 재생 커널이 유일하게 존재함이 보장된다. 재미있는 건 반대로 재생 커널에 따른 RKHS 역시 유일하게 존재한다는 사실이다.
이제 정의에 나오는 수식을 하나하나 곱씹어보자.
원래 $k : X \times X \to \mathbb{C}$ 에서 함수 $k$ 에 넣을 수 있는 것은 $x_{1}, x_{2} \in X$ 지만, 정의에서와 마찬가지로 $x$ 를 하나 픽스해버리면 $k$ 는 사실상 $k : y \mapsto k (y,x)$ 인 $k : X \to \mathbb{C}$ 가 된다. 함수로 다루는 입장에선 한쪽 인풋을 막아버린 셈이고, $$ \left< f , k \left( \cdot , x \right) \right> = f(x) $$ 와 같은 표현은 어렵게 생각할 것 없이 그냥 두 함수 $f (\cdot) : X \to \mathbb{C}$ 와 $k \left( \cdot , x \right): X \to \mathbb{C}$ 를 내적한 것 뿐이다. “저게 $f$ 가 어떻게 나와서 밖에 있는 내적이 $x$ 랑 어떻게 돼서…” 이렇게 복잡하게 생각할 이유가 없다는 말이다. $f(x) \in \mathbb{C}$ 역시 그냥 내적의 결과니까, 공역이 복소수 집합이니까 나온 어떤 복소수에 지나지 않는다.
여기서 재생再生, Reproducing 성질이라는 것의 명명을 짚고 넘어가려고 한다. Reproduction이라는 단어 자체는 그 생성 원리에 맞게 Re-(다시,再) -produce(만든다,生)는 의미를 담고 있고, 그 첫번째 번역은 번식/생식, 두번째 번역은 복사/복제, 세번째 번역은 재생이다. 번식은 당연히 말도 안되고 복사라고 하기엔 원본이랄게 없다.
그런데 $f(\cdot)$ 와 $k (\cdot, x)$ 를 내적했을 때 $f(x)$ 를 얻는다는 말을 $f$ 가 가지고 있던 정보를 커널로써 ‘재생’한 것으로 본다면 어떨까? 우리가 시간 $t$ 에 종속된 유튜브 동영상 $y(t)$ 이라는 함수를 가지고 있다고 상상해보자. 우리는 $y$ 그 자체를 보는 게 아니라 $t$ 가 증가함에 따라 재생되는 $\left\{ y(t) : t \in [0,T] \right\}$ 자체를 보는 것이다. 이러한 비유에서, 커널 $k$ 는 $f$ 를 함수 그 자체가 아닌 함숫값을 재생시켜주는 ‘재생 커널’이라 불릴 자격이 있다.
피쳐 맵과 불편한 표기에 대해
커널과 재생 커널의 정의를 잘 살펴보면 사실 이들은 정의를 위해 서로를 필요로 하지 않는 걸 알 수 있다. 커널은 커널이고 재생 커널은 재생 커널이며, 이들이 같아지는 것은 피쳐 맵feature map이 곧 표현자representer일 때, 즉 $$ \phi (x) = k \left( \cdot , x \right) $$ 일 때다. 피쳐 맵은 그 이름에서 짐작할 수 있든 원래 데이터를 우리가 다루기 쉬운 형태로 바꿔주는 변환이며, 이러한 함수들로 어떤 함수가 표현이 된다는 것은 그 함수가 데이터에서 나오는 어떤 특징feature으로 설명된다는 말과 다름없다. 한가지 문제는 여기까지를 직관적으로 어찌어찌 이해했다고 쳐도 여전히 $k \left( \cdot , x \right)$ 과 같은 표기가 불편하며 그냥 피쳐 맵이 아닌 그들의 내적부터 시작해서 따로 정의되는 커널의 동기motive에 공감하기 어렵다는 것이다.
피쳐 맵은 $\phi : X \to H$ 이므로 그 함숫값은 $x \in X$ 에 대응되는 어떤 함수 $\lambda : X \to \mathbb{C}$ 인데, 이것이 보통 헷갈리는 게 아니다. $\phi (x)$ 를 더 정확하게 적어보면 $$ \left( \phi (x) \right) (\cdot) = k \left( \cdot , x \right) $$ 인데, 왜 이렇게까지 점 $\cdot$ 을 고수하면서 불편한 표기를 사용하는 걸까? 거의 대부분의 인간은 이렇게 안 했을 때 더 괴로워지는 예시를 볼 때 쉽게 이해할 수 있다. 앞서 언급했듯, 커널이 되었든 재생 커널이 되었든 결국 우리가 일관되게 관심을 가지는 공간은 함수 공간 $H$ 며, $H$ 의 내적은 함수의 내적이다. 먼저 어떤 함수 $f$ 가 데이터 $\left\{ x_{i} \right\}_{i=1}^{m}$ 표현자 $\phi \left( x_{i} \right)$ 들의 선형결합으로 나타난다고 해보면 $$ f (y) = \sum_{i=1}^{m} \alpha_{i} \phi \left( x_{i} \right) (y) = \sum_{i=1}^{m} \alpha_{i} \left( \phi \left( x_{i} \right) \right) (y) $$ 으로, 벌써 많이 더러워졌음을 알 수 있다. 이에 새로운 함수 $g$ 와 데이터 $\left\{ x'_{j} \right\}_{j=1}^{n}$ 을 생각해보면 $$ g (y) = \sum_{j=1}^{n} \beta_{j} \left( \phi \left( x'_{j} \right) \right) (y) $$ 이다. 한편 $f$ 와 $g$ 의 내적을 사용하지 않을거라면 내적공간을 고려할 이유가 없는데, $\left< f,g \right>$ 를 적어보면 $$ \left< f,g \right> = \sum_{i=1}^{m} \sum_{j=1}^{n} \bar{\alpha_{i}} \beta_{j} \left< \phi \left( x_{i} \right) , \phi \left( x'_{j} \right) \right> $$ 으로 쓸데없는 군더더기가 더 많다. 내적을 하기 전엔 어차피 함수공간을 다룸에 있어서 $y \in X$ 를 실제로 다룰 일도 잘 없거니와, 내적을 하고 나서는 굳이 다 아는 $\phi$ 와 내적을 계속해서 써줘야 한다. 이렇게 보고나면 $$ f (\cdot) = \sum_{i=1}^{m} \alpha_{i} k \left( \cdot , x_{i} \right) \\ g (\cdot) = \sum_{j=1}^{n} \beta_{j} k \left( \cdot , x'_{j} \right) \\ \left< f,g \right> = \sum_{i=1}^{m} \sum_{j=1}^{n} \bar{\alpha_{i}} \beta_{j} k \left( x_{i} , x'_{j} \right) $$ 과 같은 노테이션이 번거롭기만 하지는 않다는 점에 마음이 조금 움직일지도 모르겠다.
재생 커널은 양정부호다
데이터 $\left\{ x_{k} \right\}_{k=1}^{m}$ 가 주어졌다고 할 때, $k$ 가 커널이라고 하면 다음이 성립한다. $$ \begin{align*} & \sum_{i=1}^{m} \sum_{j=1}^{m} \bar{\alpha_{i}} \alpha_{j} k \left( x_{i} , x_{j} \right) \\ =& \sum_{i=1}^{m} \sum_{j=1}^{m} \left< \alpha_{i} \phi \left( x_{i} \right) , \alpha_{j} \phi \left( x_{j} \right) \right> \\ =& \left< \sum_{i=1}^{m} \alpha_{i} \phi \left( x_{i} \right) , \sum_{j=1}^{m} \alpha_{j} \phi \left( x_{j} \right) \right> \\ =& \left\| \sum_{i=1}^{m} \alpha_{i} \phi \left( x_{i} \right) \right\|^{2} \\ \ge & 0 \end{align*} $$ 앞서 언급했듯 $\phi : x \mapsto k (\cdot , x)$ 라 두면 재생 커널 $k$ 는 커널이므로 양정부호다. 이러한 커널의 양정부호성은 커널에 관련된 여러가지 성질에서 자연스럽게 등장하게 된다.
함수해석 밖에서의 커널
- (1) 보통 수학에서 커널이라고 하면 추상대수의 커널 $\ker$을 말한다. 대수구조 $Y$ 에서 $0$ 이 정의되는 경우 함수 $f : X \to Y$ 에 대해 $\ker f := f^{-1} \left( \left\{ 0 \right\} \right)$ 을 $f$ 의 커널이라고 한다.
- (2) 이러한 개념이 선형대수에서 특수화된 것이 선형변환의 커널이다.
커널이 너무 어렵다고 함수해석을 전공하지 않는 수학도에게 대뜸 커널을 물으면 십중팔구 (1)의 의미로 이해할 것이다. 당신의 백그라운드가 수학에 기반하고 있다면 당연히 (1) 정도는 알아야하고, 그렇지 않아도 (2) 정도는 알아야한다.
네임드 커널
머신러닝의 맥락에서는 다음과 같은 커널들이 알려져있다3. 이들은 언뜻 커널처럼 보이지 않지만, 커널의 합과 곱이 여전히 커널이라는 사실을 통해 유도된다.
- 리니어 커널: $$ k \left( x_{1} , x_{2} \right) = \left< x_{1} , x_{2} \right> $$
- 폴리노미얼 커널: $c \ge 0$ 과 $d \in \mathbb{N}$ 에 대해, $$ k \left( x_{1} , x_{2} \right) = \left( \left< x_{1} , x_{2} \right> + c \right) ^{d} $$
- 가우시안 커널: $\sigma^{2} > 0$ 에 대해, $$ k \left( x_{1} , x_{2} \right) = \exp \left( - {{ \left\| x_{1} - x_{2} \right\| } \over { 2 \sigma^{2} }} \right) $$
- 시그모이드 커널: $w, b \in \mathbb{C}$ 에 대해, $$ k \left( x_{1} , x_{2} \right) = \tanh \left( w \left< x_{1} , x_{2} \right> + b \right) $$
Sejdinovic, Gretton. (2014). What is an RKHS?: p7~11. http://www.stats.ox.ac.uk/~sejdinov/teaching/atml14/Theory_2014.pdf ↩︎
Schölkopf. (2001). A Generalized Representer Theorem. https://link.springer.com/chapter/10.1007/3-540-44581-1_27 ↩︎
Jakkula. (2006). Tutorial on Support Vector Machine (SVM). https://course.ccs.neu.edu/cs5100f11/resources/jakkula.pdf ↩︎