본문 바로가기
대학원 이야기/CS224N : NLP with Deep Learning

[CS224N] Lecture 3 - Neural Networks

by misconstructed 2020. 8. 12.
728x90

Classification setup & notation

  • $ x_i $ : inputs (d-dimension vector)
  • $ y_i $ : C개의 class 중, $ x_i $ 에 해당하는 class(label)

$$ \left\{x_i, y_i \right\}^N_{i=1} $$

Classifier

  • classification : x 값들이 주어졌을 때, y 값에 따라서 영역을 구분할 수 있는 선을 구해야 한다.
    • classifier : 영역을 구분하는 선
  • softmax, logistic regression 등의 linear classifier(선으로 두 영역을 구분)를 사용한다. 
    • softmax : 입력값을 probability distribution으로 제공한다.
    • 각 x 에 대해서 아래 정의한 $ p(y|x) $ 를 예측해야 한다.

$$ p(y|x) = \frac{exp(W_yx)}{\sum_{c=1}^Cexp(W_cx)} = \frac { exp(f_y) }{ \sum_{c=1}^C exp(f_c) } $$

  • $ f_y $ : x가 class y 에 속할 확률

Training

  • 모델의 최종 목표는 정확한 클래스를 예측하는 것(classifier 이기 때문에)이다.
    • 그러므로, 정확한 클래스에 대해서 가장 높은 probability(확률)를 제공해야 한다.
    • 그러므로, $ -logp(y|x) $ 의 값을 최소화해야 한다.
      • $ logp(y|x) $ 의 값을 최대화해야 한다.
      • $ p(y|x) $ 의 값을 최대화해야 한다.
    • log probability를 사용하는 경우 손실함수를 적용하고 계산하기 편리해진다.

Cross-entropy

  • $ p $ : true probability distribution
  • $ q $ : computed model probability
    • $ q(c) $ : our estimated model

$$ H(p, q) = - \sum_{c=1}^Cp(c)logq(c) $$

  • classification 의 경우는 특별하게 $ p = [0, 0, ..., 0, 1, 0, ..., 0 ] $ 으로 표현된다.
    • $ p(c) $ 는 올바른 클래스의 경우에만 1, 아닌 경우는 모두 0을 제공
    • 그러므로, 올바른 결과를 제공하는 경우, $ -logq(c) $ 가 결과로 제공됨
  • cross-entropy loss over full dataset : $ J(\theta) = \frac{1}{N} \sum_{i=1}^N -log( \frac{e^{f_{y_i}}} {\sum_{c=1}^C e^{f_c}}) $

Gradient descent

  • 전체 파라미터(parameter) $ \theta $ 를 각 단어들을 나타내는 word vector 들로 구성되었다고 정의하면,

\begin{bmatrix} w_1  \\ ... \\ w_n  \end{bmatrix}

  • 손실함수의 gradient는 다음과 같이 정의할 수 있다.

$$ \triangledown_{\theta}J(\theta) = \begin{bmatrix}\triangledown w_1 \\ .. \\ \triangledown w_n \end{bmatrix} $$

  • 위의 gradient 를 사용해서 W의 값을 수정한다.
    • W의 값을 수정하면, class를 구분하는 선을 움직이는 것과 같다.

Neural Network classifiers

  • 선으로만 구분(기존의 방식)하기 어려운 문제들이 생겨났다.
    • 조금 더 complicated classifier 가 필요했다. = multi-layer neural network를 사용

Neural computation

  • $ x_0, x_1, ..., x_n $ : 다른 뉴런으로부터의 입력
  • $ w_0, w_1, ..., w_n $ : 각 입력에 대한 가중치
  • $ b $ : 해당 유닛의 편향(bias)
  • $ f $ : activation function
    • non-linearity 를 제공하기 위해 사용한다.
    • $ f $ 를 사용하지 않는 경우, 아무리 많은 층을 거쳐도 최종적으로 Linear transform 이 된다.
  • 여러개의 유닛을 함께 사용해보자!
    • hidden layer를 사용해서 각각의 유닛들이 스스로 유의미한 요소를 학습할 수 있도록 한다.
      • 최종 classifier가 올바른 결정을 내릴 수 있도록 하는 요소들을 학습한다.
      • cross-entropy loss를 최소화하는 방향으로 전체 유닛을 학습한다.

multilayer neural network

Named Entity recognition (NER)

Named Entity Recognition(NER) example

  • 주어진 text에 대해서 이름을 찾아서 classify 
    • 해당 이름을 people, places, organization 등으로 분류
  • task 해결 방법
    1. 각 단어에 한번씩 접근하면서 classifier를 통해 class를 할당
      • 여러개의 단어로 구성된 이름의 경우, 연속적으로 동일한 class를 부여한 경우 하나의 entity로 인식
      • 해당 방법은 실생활에서 사용하기에 한계가 있음
        • ex) "First National Bank" : 은행의 이름이 "First National Bank" 인지, "National Bank" 이고 "first"는 그냥 첫 글자라서 대문자로 명시한건지 알 수 없다.
        • 실제로 entity 인지 확인하는 과정에도 어려움이 있다.
          • ambiguous 한 단어들이 많기 때문이다.
    2. context 내에서 동작하는 word classifier를 사용
      • 인접한 단어들을 통해서 단어의 ambiguity를 해결한다.
      •  한 window 내에 위치하는 단어들의 word vector 들을 concatenate 
        • 한 word vector가 d-dimension인 경우, 새로 생성한 벡터는 5d-dimension이 된다.
      • 새로 생성된 벡터를 softmax의 입력으로 제공해서 probability를 계산한다.
        • 이전에 배운 cross-entropy loss 도 함께 사용한다.
        • 가운데 위치하는 단어가 location entity면 high score, 아닌 경우 low score를 제공
        • stochastic gradient descent 를 적용해서 $ \theta^{new} = \theta^{old} - \alpha \triangledown_{\theta}J(\theta) $ 를 계산해서 파라미터를 업데이트 한다.
      • 3-layer neural net에서 해당 task를 해결해본다.
        • 중간층을 통해서 단어들 사이의 non-linear 한 관계를 학습할 수 있다.

3-layer neural net

$ \triangledown_{\theta}J(\theta) $ 를 계산하는 방법

  • n개의 input, 1개의 output인 경우 : $ f(x) = f(x_1, x_2, ..., x_n) $

$$ \frac{\partial f}{\partial x} = \left[\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ... , \frac{\partial f}{\partial x_n} \right] $$

  • n개의 input, m개의 output 인 경우 : $ f(x) = [f_1(x_1, x_2, ..., x_n) , ... , f_n(x_1, x_2, ... , x_n)] $
    • matrix of partial derivative = Jacobian matrix

$$ \frac{\partial f}{\partial x} =\begin{bmatrix}\frac{\partial f_1}{\partial x_1}& ... & \frac{\partial f_m}{\partial x_1} \\ ... &  & ... \\ \frac{\partial f_1}{\partial x_n} & ... & \frac{\partial f_m}{\partial x_n} \end{bmatrix} $$

$$ \left(\frac{\partial f}{\partial x}\right)_{ij} = \frac{\partial f_i}{\partial x_j} $$

  • $ h = f(z) $ 일 때, $  \frac{\partial h}{\partial z} $ 를 계산하면 다음과 같다.
    • $ \frac{\partial h}{\partial z} = \frac{\partial f'(z_i)}{\partial z} $ 이므로,

$$ \frac{\partial h}{\partial z} = \frac{\partial f'(z_i)}{\partial z} = \left(\begin{array}{c} f'(z_1) & ... & 0\\ ... & & ... \\ 0 & ... & f'(z_n)\end{array}\right) = diag(f'(z)) $$

 

 

728x90

댓글