본문 바로가기

부스트캠프 AI Tech/AI_Math

[05] 딥러닝 학습방법 이해하기

신경망 Neural Network

  • 비선형모델인 신경망(neural network)
    • 선형 모델이 숨겨져있다
    • 선형모델 + 비선형 함수의 결합

선형 모델

  • O : output
  • X : input data
  • W : 가중치 행렬
  • b : y절편
  • 데이터가 바뀌면 결과값도 바뀐다
    • 출력 벡터 차원은 $d$에서 $p$로 바뀐다
  • $X$ (n x d) $\times$ W (d x p) → $O$ (n x p)
  • $x_1 \Rightarrow o_1$ 화살표는 p개

softmax

$$
softmax(o) = (\frac{exp(o_1)}{\sum_{k=1}^{p}exp(o_k)}, ...,\frac{exp(o_p)}{\sum_{p}^{k=1}exp(o_k)})
$$

  • 출력벡터 $o$에 softmax 함수를 합성하면 확률벡터가 되므로 특정 클래스 k에 속할 확률로 해석할 수 있다
  • softmax 함수는 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산
  • 분류 문제를 풀 때 선형모델과 softmax 함수를 결합해 예측
  • softmax(o) = softmax(Wx + b)
  • softmax 함수를 통해 $\textbf{R}^p$에 있는 벡터를 확률벡터로 변환할 수 있다
    • 예시: [1, 2, 0] → [0.24, 0.67, 0.09]
import numpy as np

def softmax(vec):
        # max 값 빼준다 -> overflow 방지
        # max 빼주면, 값이 [-max ~ 0]을 가지게 되고, 이는 exp에서 0 ~ 1 사이 값을 뱉는다
    denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
    numerator = np.sum(denumerator, axis=-1, keepdims=True)
    val = denumerator / numerator
    return val

vec = np.array([[1, 2, 0], [-1, 0, 1], [-10, 0, 10]])
softmax(vec)

'''
array([[2.44728471e-01, 6.65240956e-01, 9.00305732e-02],
       [9.00305732e-02, 2.44728471e-01, 6.65240956e-01],
       [2.06106005e-09, 4.53978686e-05, 9.99954600e-01]])
'''
  • 추론을 할 때는 one-hot vector로 최대값을 가진 주소만 1로 출력하는 연산을 사용하기 때문에 softmax 사용하지 않는다
    • one_hot(softmax(o)) - 사용안함, one_hot(o)로 사용한다

Activation function

  • 신경망은 선형모델과 활성함수(activation function)를 합성한 함수
    • activation function은 비선형 함수
    • 활성함수 적용할 때 다른 주소의 출력값을 고려하지 않고, 각각의 값에 적용된다 (≠ softmax)

$$
H = (\sigma(z_1), ..., \sigma(z_n)) \quad \quad \sigma(z) = \sigma(Wx + b)
$$

  • 활성함수 $\sigma$는 비선형함수로 잠재벡터 $z = (z_1, ..., z_q)$의 각 노드에 개별적으로 적용해 새로운 잠재벡터(hidden vector) $H = (\sigma(z_1), ..., \sigma(z_n))$를 만든다
  • 활성함수는 $\textbf{R}$ 위에 정의된 비선형(nonlinear) 함수로서 딥러닝에서 매우 중요한 개념
  • 활성함수를 쓰지 않으면 딥러닝은 선형모형과 차이가 없다
  • sigmoid 함수나 tanh 함수는 전통적으로 많이 쓰이던 함수지만, 딥러닝에서는 ReLU 함수를 많이 쓰고 있다
  • [상식] tanh 미분을 hyperbolic tanh이라고 한다

2-layer neural network

  • 가중치 행렬이 2개
  • 잠재벡터 $H$에서 가중치 행렬 $W^{(2)}$와 $b^{(2)}$를 통해 다시 한 번 선형변환해서 출력하게 되면, $(W^{(2)}, W^{(1)})$를 parameter로 가진 2-layer 신경망이다

multi-layer perceptron (MLP)

  • 신경망이 여러층 합성된 함수
  • 딥러닝의 기본적인 모형

  • forward propagation 순전파
    • 학습하는 것이 아니다
    • 주어진 입력 왔을 때 출력을 내뱉는 과정

층을 여러개 쌓는 이유

  • 이론적으로는 2-layer network로도 임의의 연속 함수 근사 가능
    • 이를 universal approximation theorem이라고 부른다
  • 그러나 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습 가능하다
  • 층이 깊으면 복잡한 함수도 근사 가능하다 하지만 최적화가 쉬운 것은 아니다
  • deep network → 적은 뉴런, 노드로도 복잡한 패턴 표현 가능하다
  • 층이 얇으면 필요한 뉴런의 숫자가 기하급수적으로 늘어서 넓은(wide) 신경망이 되어야한다
    • 예를 들면, VGG 같은 경우?
    • 3x3x3 = 27이 7x7 = 49보다 작다!

Backpropagation

  • 딥러닝은 역전파(backpropagation) 알고리즘을 이용해 각 층에 사용된 파라미터를 학습한다

$$
{W^{(l)},b^{(l)}}_{l=1}^L
$$

  • 손실함수를 $L$이라 했을 때 역전파는 $\sigma L/\sigma W ^{(l)}$ 정보 계산할 때 사용된다 (손실함수에 대한 미분)
  • 각 층 파라미터의 gradient vector는 윗층부터 역순으로 계산

Chain Rule

  • 역전파 알고리즘은 합성함수 미분법인 연쇄법칙 chain-rule 기반 자동 미분 auto-differentiation 사용
  • chain-rule 이란?
  • $$
    z = (x+y)^2
    \
    w = x+y
    \
    \frac{\partial z}{\partial x} = \frac{\partial z}{\partial w} \frac{\partial w}{\partial x}
    $$
  • 각 노드의 tensor 값 컴퓨터가 기억해야 미분 계산 가능하다
    • 메모리 많이 사용한다

예제: 2-layer neural network

'부스트캠프 AI Tech > AI_Math' 카테고리의 다른 글

[07] 통계학  (0) 2022.01.17
[06] 확률론  (0) 2022.01.16
[04] 확률적 경사하강법 SGD  (0) 2022.01.15
[03] 경사하강법  (0) 2022.01.15
[02] 행렬  (0) 2022.01.15