-
자연어 처리와 딥러닝 1- 개론general ML, DL, NLP/자연어 처리 2022. 3. 15. 15:34
* 본 게시물은 연세대학교 일반대학원 22-1학기 자연어처리와딥러닝(여진영 교수님) 수업을 정리한 것입니다.
* 참고: 밑바닥부터 시작하는 딥러닝, 사이토 고키, 개앞맵시, 한빛미디어(2017)
0. 인공지능, 머신러닝, represntation learning, 딥러닝
(1) 용어 구분
- 위의 개념들은 자주 혼동되어서 쓰입니다. 혹은 구분하기가 매우 모호하기도 합니다. 그러나 늘 그렇듯이 서로는 약간씩 다릅니다 ^^ㅋㅋㅋ
다음의 표를 보시겠습니다.
AI Machine Learning Representation Learning Deep Learning ex. knowledge bases
-올드 패션한 방법입니다Logistic regression Shallow autoencoders MLP's 방법 hard coded knowledge based extracts patterns
co-relation between 'features'learns the representation instead of the features Complex reepresentations are expressed in terms of Simple Representaion 단점 rule driven aprroach is limiting difficult to know all the features would need to be extracted could be many 'factors of variation' for a given representation 티스토리는 진짜 표가 안이쁜거 같아요... 아무튼 이와 같은 차이가 있습니다. 저는 비전공자라 조금 덜(?) 와닿지만 컴퓨터 공학이 전공이신 분들은 많이 와닿으시겠죠...?아마도...
무튼 위의 표 중 AI와 Machine Learning을 살펴보시면 'hard coded'와 'extracts patterns'가 눈에 띕니다. 즉 Ai는 코드로 짠 알고리즘, 즉 프로그램을 인풋과 함께 넣는 반면, 머신 러닝은 인풋과 원하는 결과를 넣어 '프로그램'을 산출합니다. 알고리즘, 프로그램은 모두 mathmatical equation들을 뜻합니다. 이를 그림으로 표현하면 다음 그림과 같은데 머신러닝은 인풋과 원하는 결과, 즉 인풋-아웃풋 페어가 학습에 사용되는 것을 알 수 있습니다.
(2) 머신 러닝의 정의
머신러닝은 다음 4가지 요소로 구성됩니다:
1) Task : interest of targets - 수행하고자 하는 과제
2) Experience: 학습
3) Program(Model): 모델
4) Performance Measure: 학습 결과 평가이는 위키백과 "Machine Learning" 항목에 있는 다음 글에서 유래한 것입니다.
"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E." 으로 정의됩니다. 곧 컴퓨터 프로그램은 어떤 task에 대한 experience를 통해 학습하게 되며, 이에 대한 결과는 performance measure에 의해 측정됩니다. 이 측정된 결과는 다시 experience를 향상하기 위해 쓰입니다.
좀 더 친숙한 개념으로 이야기하자면 모델이 task 수행을 위해서는 데이터를 사용하여 학습(experience; learning)이 되어야 하며, 학습 결과(prediction)에 대한 평가(loss value)를 보고 다시 학습(back propagation & learning)을 재개한다는 것입니다. 밑에서 자세히 살펴보겠습니다.
1) Task and 2) Experience: Training data
가령 머신러닝 혹은 딥러닝을 통해 이미지가 개인지 고양이인지 분류(classification)해야 한다고 합시다.
이런 이미지는 과연 어떻게 분류될 지가....! 개와 고양이의 사진이 섞인 데이터셋이 있다고 할 때 모델에 들어갈 인풋들과, 아웃풋의 레이블은 다음으로 정의할 수 있습니다.
인풋이 되는 낱장 사진을 x로 둘 때, 첫 번째 사진은 x1, 두 번째 사진은 x2.... 그리고 마지막 N 번째 사진은 xN이 됩니다. 아웃풋 레이블도 y라 할 때, x1의 레이블은 y1, x2의 레이블은 y2... 그리고 N번째 사진의 레이블 yN 이렇게 정해지게 됩니다. 이를 통해 전체 데이터셋(D)은 사진(x)과 레이블(y)의 pair임을 알 수 있으며 총 N개의 훈련 데이터(training dataset)가 있음을 알 수 있습니다. 이를 다음과 같이 좀 더 팬시하게 표현할 수 있습니다.
하지만 그냥 사진을 딥러닝 모델에 넣는 것은 안됩니다. 즉 folder_path="사진폴더" 하고 인풋에 집어넣으면 error를 마주하게 된다는 소리입니다ㅠㅠㅋㅋ
이런 에러가 존재하는 이유는 서로 사맛디 아니하기 때문인데요ㅠ 현실에 존재하는 것은 symbol이나, 딥러닝에 사용되는 형태는 numeric입니다. 즉, 머신러닝이나 딥러닝에 쓰려면 적어도 알고리즘(혹은 수식)이 이해하는 방식으로 tranform이 되어야 합니다. 또한 인풋이 numeric 형식이므로 output도 당연히 numeric임을 유추할 수 있습니다. 보통 output은 레이블에 대한 확률(probablity)이나 원-핫 벡터(하나만 뜨거운 벡터, 즉 0과 1로만 된 벡터입니다: 0 0 0 1 0 0) 로 표현됩니다. 참으로 수학밖에 모르는 바보라 말할 수밖에 없습니다.
3) Program(Model)
이처럼 1)에서는 개와 고양이를 구분하는 task와, 모델에 들어가는 데이터셋에 대해 정의했습니다. 그렇다면 이제는 program(model)에 대해 정의할 차례입니다.
모델은 학습에 사용되는 함수(function)입니다. 크게 architecture와 parameter로 구성되며 parmeter 중 weight parameter는 학습을 담당합니다. 모델이라는 함수는 이 weight을 통해 학습을 하므로 fw 함수로 정의됩니다. parameter 중 사용자가 조절할 수 있는 파라미터를 하이퍼 파라미터(hyper parameter)라 합니다.
model(fw)이 데이터셋을 통해 학습해야 하는 것은 input인 x벡터에 대해 최적의 prediction output인 y햇(y^)을 찾는 것입니다. 이 y햇은 원래 정답인 y랑 유사할수록 좋습니다. y햇은 다음과 같이 표현됩니다.
모델 fw 함수에 인풋 xi를 넣었더니 xi에 대한 예측값 yi가 나왔습니다. 논문에 많이 나오는 표현방식입니다. 모델은 함수이므로 random forest, decision tree 등 다양한 알고리즘이 될 수 있습니다. 그러나 여기서는 Neural Network에 집중하려 합니다. Neural Network는 여러 뉴런(neuron)들이 존재하는 여러 레이어로(layer) 구성되어 있는 네트워크입니다. 레이어는 weight들이 학습되는 곳이기도 합니다.
Neural Network에 대해 표현되는 방법들이 있습니다. 예로 인풋 이미지가 4개, 레이블 갯수가 사람/개/고양이인 3인 NN을 상정하겠습니다.
xi ∈ R^4는 real number로 구성된 4차원 공간(4 dim. space)입니다. xi ∈ R^4는 인풋인 이미지(xi)가 real number이며, 인풋이 4개이기 때문에 4차원으로 표상되었음을 나타냅니다. label쪽도 마찬가지로 아웃풋이 3개이기 때문에 yi ∈ R^3 으로 표현될 수 있습니다.
인풋과 아웃풋이 real number란 뜻은 인간이 알 수 있다는 뜻입니다. 그러나 앞서 말한 바와 같이 모델은 함수이기 때문에 인풋은 numeric한 형태로 변환되게 됩니다. 또한 이 numeric 형태들이 처리되는 hidden layer는 사람이 알 수조차 없습니다. hidden layer내 벡터들은 latent value/space/vector라 불리기도 합니다.
이 히든 레이어에서 최적의 weight 파라미터를 찾는 과정이 발생하고, 인풋과 아웃풋의 레이블을 매칭하는 패턴이 학습됩니다. 이 informative vector들이 iteration 내에 계속 compute되다가 각 레이블의 확률로 assign 됩니다.
4) Performance Measure: Loss
Performance Measure은 모델이 잘 학습했는지를 확인하는 척도입니다. 보통 loss function이 사용됩니다.
사람도 그렇듯이 모델도 한방에 정답을 맞추는 것은 불가능합니다. 때문에 x와 y를 매칭할 때 최적화된 weight 파라미터를 찾는 과정이 필요합니다. 이때 기준이 되는 것이 loss입니다.
모델의 학습은 일단 randomly initialized weight parameter를 상정하는 것으로 시작합니다. 이 weight들을 최적 weight가 되도록 계속 업데이트하는 것이 학습 과정입니다. 이때 정답 레이블(actual y)과 예측 레이블(y^)을 비교하여 얻는 값이 loss value입니다. 당연히 loss value는 작을수록 좋습니다(정답에 가깝다는 뜻)
loss value를 얻는 가장 간단한 값은 '정답-예측값'입니다. 그러나 복잡한 NN에 비해 너무나 간단하기에 optimize에 기여하지 못합니다. 곧 단순히 빼서 모든 오차를 더하게 된다면 0에 가까워지기 때문에 웨이트들이 업데이트되지 않습니다. 때문에 special한 form들을 쓰게 됩니다.
Loss의 oldies but goodies는 MSE(Mean Squared Error), CE(Cross Entropy)입니다. MSE는 regression, CE는 분류(classification)에 용이합니다.
loss를 잘 이해하기 위해서는 Maximum Likelihood Estimation(MLE)를 알아야 합니다. 추후 공부해서 정리해볼까 합니다..*^^*
5) Model Training
위에 있는 내용들을 아우르는 내용입니다. 결론적으로 model의 training은 loss를 minimize하고 optimal parameter를 찾는 것입니다.
argminf(x)는 f(x)의 값을 최소화하는 x값을 구하는 것을 말합니다. 위의 식을 다르게 표현하면 아래와 같이 됩니다. Loss value를 최소화하는 y^와 y를 찾는 꼴이 되었습니다. 이 값을 찾는 데에는 optimal weight parameter가 필요하므로 결론적으로는 ground truth y와 가아아아장 유사하게 y^을 만드는 W(weight parmam)을 찾는 것이 관건이 됩니다. 이처럼 weight는 loss value에 의해 업데이트 됩니다.
업데이트는 L(W+△W)가 L(W)가 될 때까지 이루어집니다. 그러나 토이 데이터에서나 그렇지 사실은 수백 수천만개의 파라미터가 모델에 존재합니다. 가장 optimal한 단 하나의 weight parameter를 찾는 것은 보통일이 아닌 것입니다. 때문에 사실 가장 optimal한, L(W+△W)==L(W)를 가능하게 하는 단 하나의 weight를 찾기는 불가능에 가깝습니다.
때문에 L(W+△W)와 L(W)의 차이를 가장 작게 만드는, 가장 possible한 combination을 찾아야 하는데요 이를 가능하게 하는 방법에는 Gradient Descent가 있습니다. 이는 후의 포스트에서 다루겠습니다.