728x90

Classification setup & notation
- xi : inputs (d-dimension vector)
- yi : C개의 class 중, xi 에 해당하는 class(label)
{xi,yi}Ni=1
Classifier
- classification : x 값들이 주어졌을 때, y 값에 따라서 영역을 구분할 수 있는 선을 구해야 한다.
- classifier : 영역을 구분하는 선
- softmax, logistic regression 등의 linear classifier(선으로 두 영역을 구분)를 사용한다.
- softmax : 입력값을 probability distribution으로 제공한다.
- 각 x 에 대해서 아래 정의한 p(y|x) 를 예측해야 한다.
p(y|x)=exp(Wyx)∑Cc=1exp(Wcx)=exp(fy)∑Cc=1exp(fc)
- fy : 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)=−C∑c=1p(c)logq(c)
- classification 의 경우는 특별하게 p=[0,0,...,0,1,0,...,0] 으로 표현된다.
- p(c) 는 올바른 클래스의 경우에만 1, 아닌 경우는 모두 0을 제공
- 그러므로, 올바른 결과를 제공하는 경우, −logq(c) 가 결과로 제공됨
- cross-entropy loss over full dataset : J(θ)=1N∑Ni=1−log(efyi∑Cc=1efc)
Gradient descent
- 전체 파라미터(parameter) θ 를 각 단어들을 나타내는 word vector 들로 구성되었다고 정의하면,
[w1...wn]
- 손실함수의 gradient는 다음과 같이 정의할 수 있다.
▽θJ(θ)=[▽w1..▽wn]
- 위의 gradient 를 사용해서 W의 값을 수정한다.
- W의 값을 수정하면, class를 구분하는 선을 움직이는 것과 같다.
Neural Network classifiers
- 선으로만 구분(기존의 방식)하기 어려운 문제들이 생겨났다.
- 조금 더 complicated classifier 가 필요했다. = multi-layer neural network를 사용
Neural computation
- x0,x1,...,xn : 다른 뉴런으로부터의 입력
- w0,w1,...,wn : 각 입력에 대한 가중치
- b : 해당 유닛의 편향(bias)
- f : activation function
- non-linearity 를 제공하기 위해 사용한다.
- f 를 사용하지 않는 경우, 아무리 많은 층을 거쳐도 최종적으로 Linear transform 이 된다.
- 여러개의 유닛을 함께 사용해보자!
- hidden layer를 사용해서 각각의 유닛들이 스스로 유의미한 요소를 학습할 수 있도록 한다.
- 최종 classifier가 올바른 결정을 내릴 수 있도록 하는 요소들을 학습한다.
- cross-entropy loss를 최소화하는 방향으로 전체 유닛을 학습한다.
- hidden layer를 사용해서 각각의 유닛들이 스스로 유의미한 요소를 학습할 수 있도록 한다.

Named Entity recognition (NER)

- 주어진 text에 대해서 이름을 찾아서 classify
- 해당 이름을 people, places, organization 등으로 분류
- task 해결 방법
- 각 단어에 한번씩 접근하면서 classifier를 통해 class를 할당
- 여러개의 단어로 구성된 이름의 경우, 연속적으로 동일한 class를 부여한 경우 하나의 entity로 인식
- 해당 방법은 실생활에서 사용하기에 한계가 있음
- ex) "First National Bank" : 은행의 이름이 "First National Bank" 인지, "National Bank" 이고 "first"는 그냥 첫 글자라서 대문자로 명시한건지 알 수 없다.
- 실제로 entity 인지 확인하는 과정에도 어려움이 있다.
- ambiguous 한 단어들이 많기 때문이다.
- 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 를 적용해서 θnew=θold−α▽θJ(θ) 를 계산해서 파라미터를 업데이트 한다.
- 3-layer neural net에서 해당 task를 해결해본다.
- 중간층을 통해서 단어들 사이의 non-linear 한 관계를 학습할 수 있다.
- 각 단어에 한번씩 접근하면서 classifier를 통해 class를 할당

▽θJ(θ) 를 계산하는 방법
- n개의 input, 1개의 output인 경우 : f(x)=f(x1,x2,...,xn)
∂f∂x=[∂f∂x1,∂f∂x2,...,∂f∂xn]
- n개의 input, m개의 output 인 경우 : f(x)=[f1(x1,x2,...,xn),...,fn(x1,x2,...,xn)]
- matrix of partial derivative = Jacobian matrix
∂f∂x=[∂f1∂x1...∂fm∂x1......∂f1∂xn...∂fm∂xn]
(∂f∂x)ij=∂fi∂xj
- h=f(z) 일 때, ∂h∂z 를 계산하면 다음과 같다.
- $ \frac{\partial h}{\partial z} = \frac{\partial f'(z_i)}{\partial z} $ 이므로,
∂h∂z=∂f′(zi)∂z=(f′(z1)...0......0...f′(zn))=diag(f′(z))
728x90
'대학원 이야기 > CS224N : NLP with Deep Learning' 카테고리의 다른 글
[CS224N] Lecture 7 - Vanishing Gradients, Fancy RNNs (1) | 2020.08.23 |
---|---|
[CS224N] Lecture 6 - Language Models and RNNs (0) | 2020.08.23 |
[CS224N] Lecture 5 - Dependency Parsing (0) | 2020.08.14 |
[CS224N] Lecture 2 - Word Vectors and Word Senses (0) | 2020.08.11 |
[CS224N] Lecture 1 - Introduction and Word Vectors (0) | 2020.08.10 |
댓글