해당 카테고리의 글들은 카이스트의 주재걸 교수님이 cs231n 강의를 기반으로 설명하시는 영상의 흐름대로 작성되며, 제 이해 정도에 따라 부연 내용이 추가될 예정입니다.
지금부터 저희가 살펴볼 머신러닝은 크게 2가지로 분류할 수 있습니다. Supervised learing과 Unsupervised learning이 그것인데요. Reinforcement learning은 지금 제외하고 다뤄보도록 하겠습니다. 저희가 다룰 데이터셋이 Feature와 Label로 구성되어 있다고 가정하고, 이를 데이터프레임으로 만든 뒤, Feature에 대응하는 행렬을 X, Label에 대응하는 행렬을 y라고 둡시다. 이 때, (X,y)데이터셋을 통해 어떤 학습을 진행하는 경우를 Supervised learning, (X)만을 사용하여 어떤 학습을 진행하는 것을 Unsupervised learning이라고 합니다. Supervised learning은 크게 Classification, Regression 등의 행위가 가능하며, Linear reg, Logistic reg, SVM, KNN, NN, DT 등 많은 알고리즘을 통해 구현될 수 있습니다. Unsupervised learning의 경우에는, 아까 말씀드린것처럼 오로지 X만을 이용하여 어떤 결과를 성취해야합니다. 예측의 대상인 y에 대한 정보가 없는거죠. 그래서 Clustering, Dimention reduction, Density estimation 등의 행위가 가능하며, K-means, PCA, Isomap 등의 알고리즘을 통해 구현됩니다.
조금 더 깊숙하게 들어가보면 저희가 할 머신러닝의 목적은 Squential/Temporal data analysis와 Anomaly dectection으로 생각할 수도 있습니다. Squential/Temporal data analysis는 다시 Auto-regressive model, Speech recognition, Recurrent neural networks 등으로 생각할 수 있는데, 순서대로 한 번 봅시다. Auto-regressive model이 뭘까요. Auto-regressive model의 대표적인 모델이 ARIMA(Auto-regressive moving average model)입니다. Auto-regressive에서 Auto의 뜻을 한 번 생각해봅시다. 물론 자동-이라는 뜻도 있지만, Autography와 Biography의 차이를 생각하시면 됩니다. 여기서 Auto는 스스로-라는 뜻이죠. 해서 Auto-regressive는 Self-regressive라고 생각하시면 됩니다. 저희는 본래 (X,y)로 구성된 데이터셋을 통해서 어떤 분석 결과를 얻어내고자 했지만, 예를 들어 어떤 Squential 주식 데이터를 생각해봅시다. 해당 데이터는 그냥 어떤 날짜에 주식이 얼마다-라는 정보밖에는 없어요. 이를 통해 미래의 주식을 예측하고자 한다면, 어떻게 할까요. n번째 값을 예측하기 위해서 n-1번째 까지의 값들을 활용하면 되겠죠. 라벨 데이터 그 자체에서 기간에 따라 X를 분할한다는 느낌으로 생각하셔도 됩니다. 이런 걸 Auto-regressive model이라고 합니다. 이런 행위가 주가에만 적용이 가능한가- 당연히 아니겠죠. 순수하게 타겟 변수만 있는 Squential data라면 어디든 적용가능하겠죠. 물론 이러한 방법론이 적절한 데이터 구성인가는 생각해봐야할 문제겠죠. 가령 주식을 이런 방식으로 LSTM을 통해 모델을 구성한다면, Stationary하지 않은 데이터의 특성 탓에 실적용에서는 큰 오차를 낳게됩니다. 추가로 이런 개념으로 Linear reg모델을 적용한 것이 ARIMA입니다. 간단하지만 성능에서는 좀 제약이 있습니다. 이런 Auto-regressive model의 아이디어를 곰곰히 생각해보면 뭔가 Interpolation을 하는 느낌이 들죠. 자신이 가진 과거의 데이터를 통해서 미래의 어떤 값을 예측하는... 그런데 많은 예측 문제들은 사실 Extrapolation으로 진행되는게 더 맞겠죠. 수많은 외부 변수에 영향을 라벨이 결정될테니까요. 그래서 근본적으로 성능이 잘 나오기가 힘듭니다. 둘째로 Speech recognition. 이것도 음성 데이터는 본질적으로 시계열 데이터니까 그에 맞게 분석할 수 있구요. 그전에 Sequential / Temporal data의 차이에 대해 생각해봅시다. 시간을 갖고 말고-도 표면적인 차이 중 하나겠죠. 하지만 본질적으로는 어떤 시간축에서의 irregularity가 끼어들 여지가 있는가 없는가-라고 말할 수 있겠습니다. 조금 더 유연한게 당연히 Temporal data가 되겠죠. 쨋든 이런 데이터들을 RNN을 통해 해결할 수 있고, Anomaly detection에 대해서도 이야기해보죠. 이건 Supervised learning인가 Unsupervised learning인가. 둘 다 가능하겠죠. 스팸 메일을 생각한다면, 내가 가진 데이터가 정상 메일뿐이다. 그러면 내가 보던 수많은 정상 메일과 새로운 메일을 비교해서 어 이게 좀 보던 것과 다른데? 로 스팸 메일을 분류할 수도 있겠고, 정상 메일과 스팸 메일 모두 가지고 있다면, 이진 분류 모델을 학습시킬 수 있겠죠. 다만 Anomaly detection에서 다루는 데이터셋에서는 99%가 정상, 1%가 비정상처럼 굉장히 Imbalanced한 데이터를 다루기 때문에, 그에 맞는 여러 테크닉을 활용해야합니다. 어떤 방법이 있을까요? 단순하게 99개의 정상 메일과, 1개의 스팸 메일이 있다고 생각해보죠. 이러면 사실 그냥 모든 케이스가 정상이라고 판단하기만 해도, 정확도는 99%가 나옵니다. 분명히 문제가 있는거죠. 이를 해결하기 위해서, 가장 쉬운 방법은 클래스별 데이터 개수를 맞춰주는 거겠죠. 스팸 메일의 데이터를 복제시키는 개념이죠. Data augmentation의 일종입니다. 다만 단순히 복사하는 것으로는 한계가 있으니, 조금 더 좋은 어떤 알고리즘을 통해 복제하는게 좋겠죠. 작은 것은 늘리고, 많은 것은 줄이고. 여러 Sampling이 존재합니다. 그리고 Weighted loss를 생각할 수도 있겠죠. 스팸을 틀렸을 때, 정상을 틀렸을 때 동일한 로스를 주는 것이 아니라, 데이터 개수에 맞게 Weight를 적용한 loss를 적용하는 겁니다. 또 단순한 Accuracy를 적용하기 보다는 F1, precision, recall, ROC Curve 등의 다른 Measure를 생각하는게 좋겠죠. Imbalanced에 조금 더 Robust한, 그런 것들이요.
이번에는 머신러닝에서 알아야 할 내용을 리스트화해봤습니다.
- Linear regression and logistic regression
- Ensemble learning
- Bias/variance tradeoff
- Overfitting vs underfitting
- Regularization
- Gradient descent optimization
- Training/Validation/Test sets
- Cross-validation
- Model selection and hyper-parameter tuning
- Loss function
- Evaluation metric (Accuracy, Precision, Recall, F1 score, ROC curve, Auc...)
위의 내용들은 어느정도 기본적으로 알고 계신 것을 기반으로 다음 내용들을 진행할 예정입니다. 몇 가지만 잠깐 짚어보자면, Parameter와 Hyper-parameter를 구분해봅시다. Parameter는 기본적으로 데이터를 통해 결정되는 변수입니다. 가량 MLE(Maximum Likelihood Estimation)를 통해 계산되어지는 변수들을 생각하시면 되겠습니다. Hyper-parameter의 경우, 모델링할 때 사용자가 직접 세팅해주는 변수입니다. Learning rate, Batch size, SVM 등에서의 Reguralization constant, KNN에서의 K값 등등이 있겠습니다. 다만, 이렇게 사용자가 직접 입력하는 변수의 경우 어떤 값이 최적의 값인지 알기가 굉장히 모호하죠. 실제로 어떤 값이 최적이냐-에 대한 Unique solution은 없습니다. 때문에 Heuristic한, 또는 경험에 근거한 결정을 내리는 경우가 많고, 때문에 살짝 Artistic한 영역이라고 생각됩니다. 물론 베이지안 옵티마이제이션과 같은 방법론이 존재하기도 합니다. 다음으로 Regularization에 대해 조금 생각해봅시다. 가령 Linear reg 모델을 생각해봅시다. Linear reg 모델을 내가 구성했을 때, 각 Term들의 계수값은 큰게 좋은가, 작은게 좋은가 생각해보면, 물론 적당한게 좋죠. 과도하게 큰 Weight는 어떤 Term에 대한 의존도를 높이게 되고, 이건 Risk가 증가한다고 생각해볼 수 있습니다. 이렇게 Weight를 너무 과도하게 키우지 않게 제약을 걸어두는 걸 Regularization이라고 생각하시면 됩니다. 실제로는 정말 다양한 Reugularization이 있으나, 방향성은 모두 같습니다.
이번에는 인공지능과, 머신러닝, 딥러닝간의 관계를 말해봅시다. 사실 인공지능>머신러닝>딥러닝. 이건 다 아실거에요. 그럼 머신러닝이 아닌 인공지능에는 뭐가 있는가-에 대해 생각해보죠. 데이터를 잔뜩 줘서, 어떤 모델을 학습시키고, 최적의 값들을 찾아내는 행위- 이게 머신러닝이죠. 그런데 그런 머신러닝이 아니라는 말은, 데이터가 없더라도 뭔가를 해낼 수 있는게 되겠죠. 아니 그게 되냐, Object tracking이라는 문제를 생각해볼게요. 예를 들어 영상 속 사람을 추적한다고 생각해봐요. 그럼 머신러닝을 통해 진행하려면, 수많은 영상 이미지를 데이터셋으로 쌓고, 사람에 대해 박스를 만들고, 난리를 칠거에요. 그런데 머신러닝을 안쓴다는말은? 그냥 저희가 사람을 인식하는 그 룰기반 알고리즘을 만들어서 적용하겠죠. 머신러닝이 등장하기 전 많은 문제를 그렇게 풀었으니까요. 별로 어렵지 않고, 다들 하실 수 있어요. 그런 알고리즘 기반이라면, 별 다른 데이터셋이 필요없죠. 룰기반으로 해결한거니까요.
이런 딥러닝이 성공한 요인은? 보통 3가지를 꼽습니다. 빅데이터의 축적, 향상된 알고리즘, 빨라진 하드웨어
이상입니다.