Natural Language Processing 2022
word2vector, word embedding 처럼 단어/텍스트를 distributed하게(분산적으로) 표현하는 방식이고, 각 단어의 similarity를 vector간의 dot(scalar) product로 계산해서 얻어지는 vector를 말한다.
오늘의 단어 정리 : WordNet, Word2Vect, Local representation, Orthogonal, Conditional Probability, Collaborative Probability, Bottle Neck, Cosine Similarity, Dot Product, Word Analogy
다양한 distribution (왼쪽 부터 정규분포, 지수분포, 감마분포)가 있는데 우리는 데이터들이 이 중에 어떤 데이터 분포를 가지고 있는지 효율적으로 알아맞춰야 한다. 그래야 예측이 되니까! 여기서 이제 weight가 중요한데, 분포에서 weight란 무게중심이 어디 있냐는 거니까 어디에 몰려있는지, 어디에 집중적으로 분포되어있는지 그 부분이 바로 weight인거다. (symmatrical - 대칭적이다 / skewed - 치우쳐져있다) / (skinny - 갑자기 훅 올라갔다 내려오는 형태 / medium - 중간 / large-boned - 뭉툭하고 넓게 살짝만 올라온 형태) 이 weight가 mean value에서 얼마나 떨어져있고 얼마나 가까운지를 다시 값을 확인해본게 likelihood이다.
MLE(Maximum Likelihood Estimation) - Maximum Likelihood Estimation은 Likelihood 함수의 최대값을 찾는 방법이라 할 수 있다. log 함수는 단조증가 함수이기 때문에 likelihood function의 최대값을 찾으나 log-likelihood function의 최대값을 찾으나 두 경우 모두의 최대값을 갖게 해주는 정의역의 함수 입력값은 동일하다. 따라서, 보통은 계산의 편의를 위해 log-likelihood의 최대값을 찾는다.
Object Function : 목적 함수라고도 하고, 보통 MLE를 할때 최댓값을 찾길 원하기 때문에 감소하는 방식이 아닌, 즉 비용함수가 아닌 목적함수로 언급해야 한다. Object Function-MLE/Cost Function(오차 계산, 데이터에서 나간 모든 비용)-Gradient Descent/Loss Function(실제값과 예측값 간의 오차 하나씩 계산, 이걸 sum을 하면 cost function)
즉, object function는 negative log likelihood의 평균이기 때문에 마이너스 로그라서 object function을 최소화해야 predict accuracy를 최대로 할 수 있다.
softmax : exp(x) = exponentiation(e^x =~ 2.718^x), 즉 모두 positive이다. 더 큰 dot product일 수록 더 큰 probability. softmax의 max는 largest x_i라는 뜻이고 soft는 더 작은 x_i의 확률을 여전히 갖고있기 때문에 완전 딱 정확은 아니지만 이정도~ 라는 뜻의 soft를 쓴다고 한다. output sum이 1이 나오게 0과 1사이의 수로 분포를 재배치(normalization, squash)한다고 생각하면 될 듯.
Negative log-likelihood(NLL) : -log(x)라고 생각하면 됨. 우리는 Loss의 최솟값을 찾아야 하기 때문에 network가 높은 confidence를 정답 class에 할당하면 우리는 loss의 최솟값을 찾을 확률이 높아지므로 불행지수도 낮아지는 것. 낮은 confidence를 정답 class에 할당하면 반대로 불행지수가 높아짐. 이러한 불행지수 그래프가 nll 그래프인 것이다. loss값을 찾을 수 있는지 없는지 확률을 그려본 그래프라고 할 수 있음. 즉, softmax 값이 1이면 완전 정답이니까 내가 loss값을 못찾을 수는 없는 일임 완전 기뻐서 -log값은 0이고, softmax 값이 0이면 완전 틀려먹어가지고 loss값이 뭔지를 모르겠으니까 loss값을 알기 위해 이거저거 다 써봐야됨. 그래서 loss는 infinity로 감. 완전 불쾌 만땅
Gradient : 모든 파라미터들은 조금의 변화도 output에 영향을 미친다. 우리는 Loss 값을 줄이는게 최종 목표이므로 어디로 파라미터가 이동해야 loss값을 줄일 수 있는지 알아낼 수 있다. 이 방향값, 변화량은 미분해서 알 수 있다.
Derivative, Partial Derivative : 미분, 편미분은 방법만 할 줄 알면 됨. Gradient Descent를 이해하는데 필요하다. 자세한 설명은 링크에 들어가면 잘 설명되어있다. 우리는 하나의 입력 변수에만 미분을 할 수 있는 것을 편미분이라고 하고, 다변수 함수인 다차원 함수에서는 기울기를 스칼라값이 아닌 벡터값으로 갖고 있고, 이를 Gradient라고 한다. 즉, 우리는 해당 값을 벡터, 스칼라값 행렬로 미분하면서 편미분의 과정을 거쳐 Gradient를 구하게 된다. 경사하강법을 통해 미분 가능한 함수에서 해당 함수의 최소값을 찾을 수 있다.
활성화 함수 사용조건은
1. 미분값을 구할 수 있어야 한다.(기울기가 있어야 한다.)
2. 비선형을 표현할 수 있어야 한다.
Sigmoid의 Gradient Vanishing --> ReLU의 음수 값 네트워크 끊김 --> Leaky ReLU
Loss = |y-RELU(h w)|
Optimization
Optimal points(최적의 포인트)를 찾기 위한 시스템 과정. 최적의 포인트란 Maxima가 될 수도 있고 minima가 될 수도 있음.
딥러닝에서는 loss값의 최솟값. 우리가 놓치고 있는 값들을 최소로 줄이고 싶기 때문에 backpropagation으로 parameters gradient들을 구하여 loss를 최소로 줄이는 update를 하는 것이다.
Gradient Descent
learning rate가 너무 높게 설정하면 수렴이 아닌, 진동 또는 발산할 것. 값에 가까워지는 것 보다는 값이 계속 변하게 될 것.
CBOW
- Continuous Bag of Words
context vectors의 sum을 사용한다.
Skip-gram
- 모든 word pair가 독립적이라고 가정함. context word를 예측할 때, 우리는 다른 context word를 고려하지 않음. 이런 추정 방식을 Naïve Bayes 라고 한다. (베이즈 정리 공식)
Semantic vs Syntactic
Semantic한 것은 말 그대로 의미론적인 것, brother-sister, man-woman 이러한 pair이라고 하면 Syntactic한 것은 Syntax, 문법적인 것. mouse/mice, dollar/dollars, is/be 이러한 느낌이라 Semantic-의미, Syntactic-문법오류 이런식으로 보면 될 것 같다. 코드에서는 Semantic/Syntactic Error가 중요하게 작용하는데, 아무래도 Syntactic Error가 나오면 뭔가 Typo의 문제정도로 끝나겠지만 Semantic Error면 코드 문맥상 말이 안되는 느낌으로 잘못 짠 느낌이어서 오류를 제대로 파악하기 어려울 수 있다.
Bag of Words
각각의 word들의 등장만을 count한 것. word onset같은거라고 생각하면 되려나, 아무튼 word position이나 index는 상관 안하고 등장 했다! Counter같은 느낌인 것 같다. CBOW에서 Continuous bag of words가 Continuous인 이유는 distributional representation(분산표현)을 사용하고 word vector에서 평균을 사용하기 때문이라고 한다. 즉 CBOW는 주변 단어를 통해 ___ 에 들어갈 단어를 예측하는데 학습시킬 모든 단어들을 one-hot encoding으로 벡터화하고 주변의 단어들이 주어졌을 때 다음 center 단어의 조건부 확률을 최대화한다는 것. Skip-gram은 CBOW와는 반대로 하나의 단어에서 여러 단어를 예측하는 방법. 중심 단어에서 주변 단어를 예측하는 방식인데 CBOW보다 성능이 좋다. CBOW와 마찬가지고 input이 one-hot 으로 들어가고 hidden layer-softmax-output lyaer로 나온다. output layer에서 여러 단어가 나오게 된다는 것이 다른 점이다.
아주 잘 설명되어있는 링크를 첨부하니 다시 읽어보길!
(https://simonezz.tistory.com/35)
Negative Sampling, Sub-sampling