딥러닝 학습방법 이해하기

Sunghoon KimSunghoon Kim
3 min read

신경망을 수식으로 분해해보자

행벡터 $O_i$는 데이터 $X_i$와 가중치 행렬 $W$ 사이의 행렬곱과 절편 $b$ 벡터의 합으로 표현된다고 가정해보자.

  • 행렬은 (1) 데이터를 모아 놓은 행렬($X$)과 (2) 데이터를 다른 공간으로 보내주는 연산자($W$) 역할이 있다.

이는 d개의 변수로 p개의 선형모델을 만들어 p개의 잠재변수를 설명하는 모델을 의미한다.

  • 화살표로 해당하는 것이 가중치 행렬 $W_{ij}$이다.

  • 화살표의 개수는 d*p개이다. 즉, 가중치 행렬의 원소가 화살표의 값을 의미한다.

주어진 데이터가 특정 클래스에 해당하는지 분류하는 문제를 풀 때는 특별한 연산자가 필요로 하다.

  • 그 중 하나인 softmax 연산자는 특정 벡터가 어떤 클래스에 속할 확률인지를 계산할 수 있어 분류문제에 자주 활용한다.

  • softmax 함수를 코드로 구현하다 보면 overflow 현상이 나타날 수 있어 np.max를 먼저 계산해준 후 지수함수(np.exp)를 적용해준다.

이렇게 선형모델의 결과물을 원하는 의도로 바꿔서 해석하고자 활성함수(activation function)을 이용한다.

  • 활성함수는 선형모델이나 어떤 행렬법을 사용하지 않는 비선형 함수이다.

  • 선형모델로 나오게 되는 출력물 각각의 원소에 활성함수를 적용한다.

  • 선형모델에서 나온 출력물을 비선형 모델로 변환시킨 벡터를 **잠재벡터(latent vector) 혹은 히든 벡터(hidden vector)**로 부른다.

  • **이런 벡터들을 뉴런(neuron)**이라고도 부르는데, 뉴런으로 이루어진 모델을 **신경망(neural network)**이라고 부른다.

  • 선형모델에서 나온 출력물에 활성함수를 한번 씌운 것이 **퍼셉트론(perceptron)**이다.

활성함수는 $\mathbb{R}$ 위에 정의된 비선형(nonlinear) 함수로서 실수 값을 입력으로 받아 실수 값을 출력한다.

  • 활성함수를 쓰지 않은 딥러닝은 선형모형과 차이가 없다.

  • 시고모이드(sigmoid) 함수나 tanh 함수는 전통적으로 많이 쓰이는 활성함수지만 딥러닝에서는 ReLU 함수를 많이 쓰고 있다.

신경망은 선형모델과 활성함수를 합성한 함수이다.

  • 다층(multi-layer) 퍼셉트론(MLP)는 신경망이 여러층 합성된 함수이다.

  • MLP의 파라미터는 L개의 가중치 행렬 $W^{1}, W^{2}, ... W^{L}$로 이루어져 있다.

  • $l=1, .., L$ 까지 순차적인 신경망 계산을 순전파(forward propagation)이라 부른다.


딥러닝 학습원리: 역전파 알고리즘

이론적으로 신경망은 모든 연속함수를 근사(Universal Approximation Theroem)할 수 있다. 하지만, 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능하다.

  • 층이 깊으면 좀 더 복잡한 함수를 근사할 수 있지만 최적화가 어려워진다.

딥러닝은 역전파(backpropagation) 알고리즘을 이용하여 각 층에 사용된 파라미터 $\{ W^{(l)}, b^{l}\}_{l=1}^L$를 학습한다.

  • 각 층에 존재하는 파라미터들의 미분을 계산(경사하강법)해서 업데이트를 진행한다.

  • 이에, 손실함수를 $\mathcal{L}$이라 했을 때 역전파는 $\frac{\partial\mathcal{L}}{\partial W^{(l))}}$ 정보를 계산할 때 사용된다.

  • 각 층 파라미터의 그레디언트 벡터는 윗층부터 역순으로 계산된다.

여기서, 연쇄법칙(chain-rule)은 합성함수 미분법의 성질을 의미한다.

합성함수를 미분할 때 꼬리에 꼬리를 물어 겉함수에서 속함수를 곱하는 과정을 거치는데 이를 chain으로 표현 것이다. (겉미분*속미분)

$$f = (x+y)^2 \rightarrow f^\prime = 2(x+y) \cdot 1$$

$$ f = { (x+y)^3 + z }^2 \rightarrow f^\prime = 2{(x+y)^3+z } \cdot 3(x+y) \cdot 1$$

  • 위 합성 함수의 미분 과정을 수식으로 표현하면 다음과 같다. 즉, z함수를 x에 대해 미분한 결과는 z함수를 y에 대해 미분한 결과와 y함수를 x에 대해 미분한 결과를 곱하여 구할 수 있다.

$$z = g(y), y=f(x)$$

$$ z = (g \circ f)(x) \rightarrow (g \circ f)^\prime(x) = g^\prime(y)f^\prime(x) $$

$$\rightarrow \frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}$$

즉, 역전파 알고리즘은 합성함수 미분법인 연쇄법칙 기반 자동 미분(auto-differentitation) 을 사용한다.


예제: 2층 신경망의 역전파 알고리즘

첫번째 층에 해당하는 $W^{(1)}$ 행렬에 대한 그레디언트 벡터를 계산해라.

먼저, 다음과 같이 $W^{(1)}$에 대한 손실 함수에 대한 미분 문제로 정의한다.

$$\nabla_{W^{1}}\mathcal{L} = (\nabla_{W^{1}}Z)(\nabla_{Z}h)(\nabla_{h}O)(\nabla_{O}\mathcal{L}) $$

$$\leftrightarrow \frac{\partial\mathcal{L}}{\partial W{ij}^1}=\sum{l, r, k}\frac{\partial\mathcal{L}}{\partial O_l}\frac{\partial O_l}{\partial h_r}\frac{\partial h_r}{\partial z_k}\frac{\partial zk}{\partial W{ij}^1}$$

이제 순서대로(위에서부터) 미분을 계산해보자. $W^{(1)}$은 행렬임으로 각 성분에 대한 편미분을 계산해야 한다.

$$\frac{\partial O_l}{\partial h_r} = W_{rl}^{2}, \; \frac{\partial h_r}{\partial z_k} = \sigma^\prime(z_k)\delta_{rk}$$

$$\frac{\partial z_k}{\partial W_{ij}^1} = \frac{\partial}{\partial W_{ij}^1}\sum_{i}x_iW_{ik}^{1} = x_i\delta_{jk}$$

즉, $W^{(1)}$에서 각 원소에 대한 그레디언트를 계산하는 식은 다음과 같다. $\delta_{rk}, \delta_{jk}$ 때문에 r=k=j만 남는다.

$$\frac{\partial\mathcal{L}}{\partial W_{ij}^1} = \sum_{l, r, k} \frac{\partial\mathcal{L}}{\partial O_l} W_{jl}^{(2)} \sigma^\prime(z_j)x_i$$


참고자료

부스트코스

Universal Approximation Theroem

역전파 손풀이

0
Subscribe to my newsletter

Read articles from Sunghoon Kim directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sunghoon Kim
Sunghoon Kim