논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Learning Deep Architecture for AI (2)

[cite]10.1561/2200000006[/cite]

지난 번 보다 어찌 더 질이 좋지 않습니다. 양해바랍니다. 틀린 부분 지적 부탁드립니다.

2. Theoretical Advantages of Deep Architectures

어떠한 함수들은 그 구조가 너무 얕으면 제대로 표현하기가 힘듭니다. 때문에 간단하거나 얕은 구조를 사용하였을 경우 제대로된 표현이 불가능하다면 깊은 구조에서는 잘 표현할지도 모른다고 생각해볼 수 있습니다.

함수가 적은 계산 요소들을 가질 때, 즉 학습에 있어 적은 자유도를 가질 때 그 함수가 단순(compact)하다고 이야기 합니다. 따라서 대상 함수의 단순한 표현(compact representations)은 보다 높은 일반화(generalization)가 되어있다고 생각할 수 있습니다.

좀 더 명확하게는, 깊이 k를 갖는 구조에서 어떤 함수가 단순하게 표현될 수 있다고 하였을 때, 이를 깊이 k-1의 구조로 표현하려면 처음보다 지수적으로 더 많은 수의 계산 요소가 필요하게 된다고 할 수 있습니다. 감담할 수 있는 계산 요소의 수는 트레이닝에 사용할 수 있는 샘플의 수에 의존적이기 때문에, 그렇게 결정된 계산 요소의 수는 computational 할 뿐만 아니라 statistical합니다. 따라서 함수를 표현하기에 충분히 깊지 않은 구조를 사용하면 나쁜 일반화 수준을 가질 것이라고 생각할 수 있습니다.

이제 구조를 directec acyclic graph로 생각하여 봅시다. 한 노드의 입력은 다른 노드의 출력과 연결되어있거나 혹은 외부에서 들어오는 입력과 연결되어있습니다. 각 노드는 한 계산 요소와 대응합니다. 따라서 여러 계산 요소로 이루어지는 함수를 이 그래프 구조로 나타낼 수 있습니다. 또는 외부에서 들어온 입력을 계산하는 일종의 circuit으로도 생각할 수 있습니다. 계산 구조의 깊이는 그래프의 깊이와 같으며, 이는 입력 노드에서 출력 노드로의 가장 긴 길이를 말합니다. 그래프에서 사용된 계산 요소들을 모아놓은 집합도 생각할 수 있습니다.

간단한 함수 $ f(x) = x * \sin(a * x + b) $를 예로 들어봅시다. 이 함수는 덧셈, 뺄셈, 곱셈, sin 함수의 조합으로 이루어져 있어, 이들이 곧 계산 요소 집합입니다. 논문에 나온 그림을 참고하여 보면, 각 노드의 입력으로 들어가는 값은 해당 계산 요소의 계산을 통하여 출력 값으로 내놓게 되고, 이는 다시 입력으로 들어가게 됩니다. 이 함수를 표현하는 구조의 깊이는 4가 될 것입니다.

  • 만약 affine operations과 sigmoids의 조합으로 이루어진 계산을 하나의 계산 요소로 생각하여 계산 요소 집합에 넣는다면, linear regression과 logstic regression은 깊이 1, 혹은 싱글 레벨을 가질 수 있습니다.
  • 커널 머신처럼 커널 계산 $K(u,v)$ 이후 affine operations를 수행한다면, 이는 2개의 레벨로 생각할 수 있습니다. 첫 단계에서 입력 벡터 x와 $ x_i $ 사이의 $ K(x, x_i) $를 계산하고, 두번째 단계에서 affine combination $ b+ \sum_i \alpha_i K(x, x_i) $를 계산하게 됩니다.
  • 만약 artificial neuron을 계산 요소 집합에 넣는다면, 그래프는 multi-layer neural netowrks를 구성하게 될 것입니다.
  • Decision tree는 2개의 레벨을 갖는다고 볼 수 있습니다.
  • Boosting은 base learner들에 1레벨을 덧붙인 것입니다. 즉 base learner의 출력을 이용하여 voting을 하거나 linear combination을 계산한 것입니다.
  • Stacking은 meta-learning 알고리즘에 해당하는 한 레벨을 더한 것입니다.
  • 현재 알려진 뇌의 구조에 기반한다면, 인간의 시각시스템은 5~10 레벨을 갖는 깊은 구조로 생각할 수 있습니다.

그래프의 깊이는 허용하는 계산 요소의 종류에 따라 달라지기는 하지만, 여러 깊이를 갖는 다른 그래프로 변환할 수 있습니다. 이론상으로는 절대적인 레벨의 수가 중요한 것이 아니라, 함수를 상대적으로 잘 표현하기 위해 얼마나 많은 레벨이 필요한지가 중요하다고 연구되어있습니다.

2.1 Computational Complexity

깊은 구조가 갖는 장점은 circuits의 계산 복잡도에서 오는 것으로 알려져 있습니다. 결론부터 이야기하자면, 깊은 구조를 통하여 단순하게 표현할 수 있는 함수가 있을 때, 이 함수를 불충분한 깊이의 구조로 표현하려면 굉장히 큰 구조를 가져야 한다는 것입니다.

얕은 구조의 한계를 알아보기 위한 간단한 예로 논리 circuits을 생각할 수 있습니다. 모든 Boolean 함수는 논리 게이트로 구성된 2개의 레이어로 구성할 수 있습니다. 만약 깊이를 2단계로 제한을 한 상태에서 Boolean 함수를 구성하려고 한다면, 이 Boolean 함수를 표현하기 위해서는 필요한 논리 게이트의 수가 입력 크기에 지수적으로 늘어나게 된다는 연구가 있습니다. 비슷한 현상은 다항식 크기를 갖는 논리 게이트 circuit에서도 발생합니다.

이 예제를 기계 학습과도 연관지을 수 있습니다. 대부분의 Boolean 함수들은 linear threshold unit 계산 요소을 통해 만들어집니다.

$$f(x) = 1_{w'x + b \geq 0}$$

$ w $$ b $는 파라미터입니다. 이러한 계산 요소를 사용하여 구성한 Boolean 함수는 마치 마치 Multi-layer neural networks와 비슷합니다.

머신러닝에서 보통 사용되는 알고리즘들은 깊이가 1, 2, 3인 구조를 띄고 있는데 이것은 너무 얕은 구조일까요? 답을 이야기하자면, 일반적으로 사용될 수 있는 적절한 깊이는 없으며, 함수는 그 목적에 따라 각각 최소한의 깊이를 필요로 한다는 것입니다. 따라서 우리는 학습 알고리즘을 만들기 위해 구조가 깊이를 얼마로 결정할지 고민을 할 수밖에 없습니다.

2.2 Informal Arguments

앞에서 언급했듯, 깊은 구조는 highly varying function을 간단하게 표현할 수 있습니다. 만약 표현에 적절하지 않은 구조를 사용하면 그보다 큰 크기를 가지게 되어버리고 맙니다. 이 highly vayring function을 지역적으로 piecewise approximation을 하려고 한다면 아주 많은 조각들이 필요할 것입니다.

깊은 구조는 많은 계산들의 조합으로 이루어지지만, 어떤 경우라도 깊이가 2인 큰 크기의 구조로 다시 표현될 수 있습니다. 이 때, 크기는 작지만 깊은 구조의 circuit은 얕고 큰 크기의 circuit을 효과적으로 factorization하여 표현한 것으로 볼 수 있습니다.

계산 요소를 재구성하면 표현의 크기를 줄여 좋은 효율을 얻을 수 있습니다. 단적인 예로, k차 다항식을 깊은 구조로 표현하고자 한다면, 효율적인 구조로 홀수 층에서는 각 미지수를 곱하고 짝수 층에서는 그 결과를 더하는 2k 층의 구조로 표현할 수 있습니다. 만약 같은 함수는 단 2개의 깊이를 안에서 표현한다고 한다면, 각 미지수의 곱셈을 하기 위하여 매우 많은 계산 요소가 필요할 것입니다. 이처럼 어떤 계산을 공유하는 환경에서는 깊은 구조가 더욱 큰 장점을 가지게 됩니다. 즉, 함수를 더욱 간단하게 표현할 수 있는 것입니다.

그 동안의 내용을 다시 정리해보자면,

  1. 깊이 k로 간단하게 표현할 수 있는 함수는 그보다 적은 깊이를 사용할 경우 더 많은 계산 요소를 사용하여야 한다.
  2. 트레이닝 샘플에 따라 어떤 계산 요소를 사용할지 선택되는 일도 있기 때문에 통계적 효율의 관점에서도 구조의 깊이를 결정하는 일은 매우 중요합니다. 이러한 개념은 non-parametric learning 알고리즘을 풀고자 할 때 얕은 구조 알고리즘의 단점으로 나타납니다.

Add a Comment Trackback