오늘은 CS224n 3강 ! Word Window Classification, Neural Networks, and Matrix Calculus 이당


Classification Review

1. classification in NLP

NLP에서, input과 output에 따라 NER(개체명을 분류), 감정분석(긍정인지 부정인지 분류) 등등 classification은 엄청 다양하댜

ML분야에서의 classification은 decision boundary를 어떻게 정하느냐에 따라 class를 정하게 되는데,

decision boundary를 결정하는 weight를 학습해가며 classification model을 학습한다.


1-1. Supervised learning

Classification의 Supervised learning에서, input & output의 pair로 이루어진 data set(D = {(x1,y1), .., (xn,yn)})을 준비하고

이를 training , validation, test set으로 나눈 후

training dataset을 바탕으로 학습된 ML model의 output(M(x))과 실제 output(y)을 평가할 loss function으로 weight를 학습시키게 된다.

L(M(x), y) >=0

이후 validation , test set으로 model을 테스트하고 성능을 평가한다.


1-2. Loss function

loss function에 output(y)을 넣으면 probability(y')로 바뀐다. -> 이렇게 바뀐 확률을 확률분포(P(y=y'|x))로 표현 가능

(이때 binary에서는 logistic function , multiclass에서는 softmax function 사용 )

학습된 ML model의 output(M(x))이 바뀐 조건부 확률분포와 실제 output(y)가 바뀐 확률분포가 같아지도록 학습한다.


이때, 모든 tranining sample의 확률이 최대가 되는 Maximum likelihood Estimator를 사용한다.

argmax logpθ(D) = argmax Σlogpθ(yn|xn)

L(θ) = Σl(Mθ(xn), yn) = -Σlogpθ(yn|xn)

위처럼 log값을 갖는 식과 sigma을 이용하며, loss function(L(θ))에서는 구한 log 값의 음의 합을 사용한다.


1-3. Cross entropy

데이터의 분포와 모델이 추정한 확률분포와 결합하여 학습하기 위해서는 cross entropy가 필요하다

fig

위와 같이 확률이 작아질수록 값(중요도)가 커지는 entropy 식(-logP(X))을 바탕으로 빈도가 적게 나타난 정보의 중요도를 높게 두므로,

여기에 정보의 등장 확률(P(X))을 곱하여 평균 (-P(X)logP(X))들의 합을 표현하는 엔트로피를 활용한 것이다.

H(P,Q) = H(P) + D(P||Q) = -Σ P(x)log(Qx)

위와 같은 cross entropy 식에서, 데이터의 분포 P와 모델이 추정한 분포(Q)의 사이를 최소화하기 위해, D(P||Q)를 최소화하게끔 한다.


2. Neural Network

fig

뉴런의 구조를 응용한 neural network ! 몇가지만 적어보자면,

activation function에 비선형 함수를 사용해야

  • non-linear decision boundary를 학습할 수 있음

  • layer를 쌓을 수 있음 (linear의 경우 layer를 쌓아도 linear transform이 됨)

    • layer가 늘어날수록 실제 data 분포와 decision boundary의 모양이 비슷해짐

fig

NLP에서는, 학습에서 parameter 뿐만 아니라 embedding된 word vector도 함께 학습을 시킨다.

이때 word2vec, Glove, ELMO, BERT 등 다양한 word vector가 존재한다.

이때 random으로 initialize할수도 있지만, pre-train 및 fine tuning을 하기도 한다.

특히 많은 데이터로 이미 학습된 pre-trained word vector를 사용하므로서, 범용성뿐 아니라 정확성 향상 및 시간 절감의 효과도 있다.

(그러나 trainng dataset의 크기가 작은 경우 fine-tuning을 하지 않은 것을 추천한다. )


3. Window classification

대표적인 task, NER은 문장에서 Named Entity를 분류하는 방법이다.

이때 문맥(context)를 바탕으로 Named Entity를 결정하는데, 문맥을 읽는 방법에 따라 두가지로 나뉜다.

1) average

평균을 취하면 위치 정보가 사라짐

2) concatenate

fig

hidden layer에서 비선형 함수의 경우, relu나 sigmoid를 한번 더 사용해줘야 한다.


fig


Max-Margin loss

fig

일반적으로 softmax를 사용할 경우 값을 확률 비율로 변경했기 때문에 비율간의 차이를 계산하는 Cross-entropy를 사용하는게 일반적이다.

하지만, 위에서 score함수를 직접 정했으므로 여기에서는 이에 걸맞는 max-margin loss(hinge loss)를 이용해 정답과 오답 사이의 거리를 최대로 만들어주는 margin을 찾는다.

이때 margin으로 1을 둠으로서, optimization objective가 risky해지는 것을 막아준다.


Matrix Calculus

gradient descent algorithm

fig

이전 목적함수의 미분값(기울기)을 어느 정도로 줄 것인지를 정하는 learning rate(α)를 지정해준다

neural network에서, 목적함수의 미분값은 backpropagation algorithm으로 구한다.

fig


jacobian matrix

이때 계산량이 엄청 많으니까 matrix calcus로 계산을 하면 속도가 엄청 빨라지는데,

편미분의 조합을 나타낸 행렬인 jacobian matrix를 이용하면 훨씬 빠르다!

fig

neural network에서, 이전 layer의 n개의 node가 들어오면 현재 layer의 m개에 대해 각각 편미분한 것을 한 matrix에 나타낸 jacobian matrix를 사용하며,

이후 matrix끼리의 합성함수로 나타낼 수 있으며, chain rule로 미분한다.

이때 dimension을 맞추도록 행렬변환 및 gradient descent계산 형태 식으로 바꿔주면 잘 활용할 수 있다.

아래 코드에 해당 내용을 python으로 잘 정리해뒀더라.

https://medium.com/unit8-machine-learning-publication/computing-the-jacobian-matrix-of-a-neural-network-in-python-4f162e5db180

Reference