Lecture 6.2 - Basics of Deep Learning
CS224W Lecture 6. Graph Neural Networks (1) GNN Model
- Machine Learning as Optimization
- Gradient Descent
- Stochastic Gradient Descent (SGD)
- Back-propagation
- Non-linearity
- Multi-layer Perceptron (MLP)
- Summary
Lecture 6. Graph Neural Networks (1) GNN Model
이번 파트는 본격적으로 그래프 데이터를 위한 딥러닝을 설명하기에 앞서 딥러닝에 익숙하지 않은 사람들을 위해 딥러닝의 기본 개념을 간단하게 설명하는 부분입니다. 많은 내용을 커버하긴 하지만 딥러닝 초심자들은 CS231n과 같은 딥러닝 강의를 먼저 수강하고 오심을 추천드립니다!
Machine Learning as Optimization
먼저 간단한 지도 학습 문제를 생각해 봅시다. 지도 학습(Supervised Learning)이란 데이터에 대한 ground truth label이 존재하는 경우를 일컫는데, 다시 말해 input $x$가 주어졌을 때, label $y$를 예측하는 문제라고 할 수 있습니다. 이러한 task는 아래와 같은 식을 통해 최적화 문제로 바꾸어 해결할 수 있습니다.
위 식을 이해하기 위해 먼저 구성 요소에 대해 하나씩 짚어보겠습니다.
$\theta$ : 우리가 최적화(학습) 하려는 파라미터들
최종적으로 우리가 학습하고자 하는 파라미터 값입니다. 예를 들어 앞의 Shallow Encoder에서는 학습으로 결정되는 $|V|\times d$ 사이즈의 임베딩 look-up table이 $\theta$에 해당하겠죠.
$\mathcal{L}$ : Loss 함수
Loss 함수는 ground truth label $y$와 머신러닝 모델이 예측한 label $f(x)$의 차이를 계산하는 metric 입니다. 회귀(Regression) 문제에서 주로 사용되는 L2 loss와 분류(Classification) 문제에서 주로 사용되는 Cross entropy loss 이외에도 L1 loss, Huber loss, Hinge loss 등 다양한 loss 함수가 존재합니다. 대표적인 loss 함수인 L2 loss와 Cross entropy loss의 수식은 각각 다음과 같습니다.
L2 loss
Cross entropy loss
결국 우리가 원하는 것은 모델이 예측한 label이 정답 ground truth label에 가까워지는 것이기 때문에, 이 loss 함수 값이 작으면 작을수록 우리의 모델이 더 정확한 예측을 한다는 의미입니다.
그럼 이제 위에서 공부한 각 구성 요소를 바탕으로 다시 이 최적화 식을 해석해 봅시다. 결국 우리가 풀고자 하는 머신러닝 문제는, 정답 label $y$와 모델이 예측한 label $f(x)$의 차이를 나타내는 loss 함수를 최소화 하는 방향으로 모델 파라미터 $\theta$를 최적화하는 문제로 해석할 수 있습니다.
Gradient Descent
지금까진 두루뭉술하게만 보였던 머신러닝 문제를 동일한 의미인 최적화 문제로 재정의했습니다. 그렇다면 이 최적화 문제를 어떻게 해결해야 할까요?
(출처: https://ieeexplore.ieee.org/abstract/document/9298092)
우리는 일반적으로 Loss 함수로 convex function(볼록 함수)를 활용합니다. 이 loss 함수의 값이 작아지는 방향으로 모델 파라미터 $\theta$ 를 업데이트 하기 위해, $\theta$에 대한 $\mathcal{L}$의 기울기를 구한 후, 기울기가 작아지는 방향으로 $\theta$를 업데이트 해줍니다.
(위 그림에서 Cost를 $\mathcal{L}$, Weights를 $\theta$로 보시면 됩니다!)
이를 다시 Gradient 벡터라는 개념으로 정리해서 이야기 해보겠습니다. Gradient 벡터란 위의 식과 같이 $\theta$에 대한 $\mathcal{L}$의 편미분, 즉 기울기 값으로 구성된 벡터로써, 가장 빠르게 $\mathcal{L}$이 증가하는 방향을 나타내는 방향 도함수 벡터입니다.
💡 Gradient is the directional derivative in the direction of largest increase
일단 Gradient를 구했으면 이제 할 일은 모델 파라미터 $\theta$를 gradient의 반대방향으로, 즉 $\mathcal{L}$이 작아지는 방향으로, 반복적으로 업데이트 하는 것입니다.
위 식에서 $\eta$는 learning rate로, 한번 파라미터를 업데이트 시 얼마나 변경할 것인지 보폭을 나타내는 값입니다. 이는 학습 과정 동안 동일하게 유지할 수도 있고, 목적에 따라 계속 변하게 할 수도 있습니다. 이론적으로 모델 파라미터의 업데이트는 loss 함수의 local minimum에 도달하여 gradient가 0이 될 때까지 진행하는 것이 맞지만, 실전에서는 검증 데이터셋에서의 성능이 더 이상 증가하지 않는 기점에서 모델 파라미터 업데이트를 중단합니다.
Stochastic Gradient Descent (SGD)
Gradient Descent의 문제점
Gradient descent 방법으로 최적화 문제를 푸는 것은 이론적으론 무결하지만 현실적으로는 어렵습니다. 앞서 언급했듯이, Gradient 벡터를 계산하기 위해서는 전체 데이터에 대한 loss 값을 구해야 하기 때문에 몇십억개의 데이터를 갖는 오늘날의 데이터셋에 적용하기에는 계산적으로 무리가 있습니다.
(출처: https://www.slideshare.net/w0ong/ss-82372826)
따라서 전체 데이터셋을 작은 미니 배치로 나누어 모델 파라미터를 업데이트하는 SGD 방법이 등장하게 되었습니다. 미니 배치 마다 gradient를 구하고 모델 파라미터를 업데이트하는 것이 전체 데이터셋을 활용한 모델 업데이트 정도를 근사할 수 있기 때문이죠.
💡 SGD is unbiased estimator of full gradient
오늘날의 최적화 optimizer은 SGD의 여러 발전된 형태로써, Adam, Adagrad, Adadelta, RMSprop 등이 있습니다.
Back-propagation
지금까지 머신러닝 문제를 최적화 문제로 재정의하고, 최적화 문제를 풀기 위해 gradient를 활용해 모델 파라미터를 업데이트 하는 방법에 대해서 배웠습니다. 잘 따라오고 계신가요?
이제부터는 실질적으로 머신러닝 모델이 주어졌을 때, gradient를 계산하는 방법에 대해 알아보겠습니다. 오늘날의 머신러닝/딥러닝 모델은 아주 복잡한 형태를 가지지만, 일단 이해의 편의를 돕기 위해 가장 간단한 linear function를 예시로 설명하겠습니다.
Case 1
첫번째로 우리의 머신러닝 모델이 단순한 선형 변환 함수인 경우를 다뤄보겠습니다.
선형 변환 함수가 벡터 형태이든 행렬 형태이든 관계 없이 gradient는 이렇게 간단히 구할 수 있습니다.
Case 2
두번째로 조금 더 복잡한 형태의 모델로 확장해보겠습니다. (물론 아직 엄청 단순한 형태긴 하지만..) 이 경우에는 $W_{1}$과 $W_{2}$에 대해 모두 gradient를 구해야 합니다. 여기서 우리가 고등학교 때 배운 합성함수 미분에서의 연쇄법칙이 사용됩니다.
💡 Chain Rule (연쇄법칙)
연쇄법칙에 따라 gradient가 $\mathcal{L}$ → $f(x)$ → $W_{2}$ → $W_{1}$ 을 따라 차례로 거꾸로 흐르면서 계산됩니다. 이렇게 말단에서부터 앞쪽까지 gradient가 흘러오기 때문에 역전파(back-propagation)이라는 이름이 붙었다고 합니다.
Non-linearity
지금까지 예시로써 다뤄본 두 케이스는 사실 모두 선형 모델로써, 비선형적인 데이터를 잘 모델링할 수 없습니다. 따라서 오늘날의 머신러닝 모델은 비선형적인 활성 함수(Activation function)를 도입함으로써 이러한 문제를 해결합니다. 대표적인 비선형 함수로는 ReLU, Sigmoid 등이 있습니다.
Multi-layer Perceptron (MLP)
MLP란 한 layer마다 선형 변환과 비선형 변환이 합쳐진 가장 기본적인 형태의 머신러닝 모델이라고 볼 수 있습니다. 위 식은 MLP 한 layer을 나타내는데, layer $l$ 의 인풋으로 들어온 $x^{(l)}$에 $W_{l}$이 곱해져 선형 변환 된 후 bias 항이 더해집니다. 최종적으로 비선형 함수를 거친 아웃풋이 layer $l+1$의 인풋으로 전달됩니다. 이를 그림으로 나타내면 다음과 같습니다.
Summary
지금까지 간단하게 배운 딥러닝의 기본 개념을 정리해보고, 본격적인 오늘 강의의 주제로 넘어가겠습니다.
- 머신러닝 문제는 최적화 문제로 풀 수 있습니다.
- 모델 $f$는 간단한 선형 함수, MLP, 또는 다른 형태의 신경망일 수 있습니다. (e.g., 추후에 다룰 GNN도 가능합니다)
- 먼저 전체 데이터셋을 미니배치로 나누어 인풋 $x$으로 사용합니다.
- 순전파(Forward Propagation): $x$가 주어졌을 때 loss 함수 값 $\mathcal{L}$ 구하기
- 역전파(Backward Propagation): 연쇄법칙으로 gradient $\nabla_{\theta}\mathcal{L}$ 구하기
- SGD를 활용하여 반복적으로 모델 파라미터 $\theta$를 최적화합니다.