같은 문장에서 나타난 단어들은 유사할 것이라는 가정에서 만들어진, Distributed Represnetation으로 단어를 표현하고자 한 Model이다.
CBOW와 Skip-gram 2가지 원리가 존재한다.
먼저 CBOW는 현재 단어에서 이전 R개 단어, 이후 R개 단어를 활용해 현재 단어를 예측하는 방식으로 학습이 진행되어 단어를 Embedding시키는 학습 원리이다.
NNLM과는 다르게 Projection Layer에는 모든 단어의 "평균"을 활용하기 때문에, Projection Layer에 모든 단어가 공유되어 있다는 특징을 가지고 있다.
Skip-gram은 현재 단어를 통해 이전 R개 단어, 이후 R개 단어를 예측하는 방식으로 학습이 진행되어 단어를 Embedding시키는 학습 원리이다.
R이 커질수록 Quality도 늘어나지만, Time Complexity도 증가한다.
일반적으로는 CBOW보다 Skip-gram이 성능이 좋다고 알려져 있다.
RNN의 매우 큰 단점 2개는 Gradient Exploding/Vanishing 문제와 Long-term Dependency를 잘 처리하지 못한다는 것이다.
먼저, LSTM은 Cell State와 Hidden State 2개의 상태를 활용하여 다음 단어를 예측하는 LM이다.
이 때 Cell State는 과거 Data에 대한 정보를 담고 있는 State이며 Hidden State는 현재 Data에 대한 정보를 담고 있는 State라고 생각하면 될 것이다.
LSTM은 Cell State에서 더 이상 필요하지 않을 것 같은 과거 Data를 삭제하고, 반대로 계속해서 필요할 것 같은 과거 Data는 유지함으로써 Long-term Dependency 문제를 해결했다.
또한 이전 Cell State에 현재 상태를 "더함"으로써, 항상 똑같은 Parameter를 "곱해주는" RNN보다 Gradient Exploding/Vanishing 문제를 해결할 수 있다.
(미분을 수행해보면, Forget Gate(Sigmoid Output)를 모두 곱한 값이 미분 값이 된다. 이 때 Sigmoid Output은 0 ~ 1의 값을 가지게 되고, 이 값이 1에 가까운 값을 가지게 되면 미분값이 소멸되는 것을 최소한으로 줄일 수 있게 되는 것이다. 당연히 0 ~ 1이므로 Exploding 문제는 발생하지 않는다)
우리는 Model을 짤 때 Train Data를 (Train Data) + (Validation Data)로 나눠서 Model을 학습시키고, 동시에 평가한다.
이 때, 만약 Cross Validation을 수행하지 않으면 고정된 Validation Set만을 활용하므로, Overfitting되는 경우가 발생할 수 있다.
따라서, 이를 방지하기 위해 Validation Set을 고정하지 않고 다양하게 하여 각각의 Set에 대해 Test를 진행하고, 이 결과값의 평균을 활용하여 최종적인 검증 결과를 도출하는 것이 Cross Validation이다.
가장 대표적인 방법은 K-fold Cross Validation이 있다.
데이터를 K개의 Data Fold로 분할하고, 그 중 1개의 Data Fold가 Validation Set이 되도록 총 K개의 Data Fold Set를 생성한다.
이후, 모델을 학습 및 훈련할 때 총 K번의 iteration을 수행하고, 이렇게 나온 검증 결과들의 평균을 내어 최종적인 검증 결과를 도출하는 방법이다.
K-fold의 문제점은 쪼개진 Data Fold가 실제 Data의 Label 분포와 일치한다는 보장이 없다. 만약, Label의 분포가 클래스별로 불균형을 이룰 때, 이런 문제점은 더욱 치명적이 된다. 따라서, Stratified K-fold Cross Validation이라는 개념이 나왔는데, K-fold 개념 자체는 동일하나 각 Data Fold의 데이터 분포를 실제 Data의 Label 분포와 최대한 유사하게 만드는 것이다.