Info) 아래 포스팅은 LGAimers에서 제공하는 AI 전문가 과정 중 이화여자대학교 강제원 교수님의 [지도학습(분류/회귀)] 강의에 대한 요약과 생각들을 정리한 것입니다. 정리된 내용들은 강의를 토대로 작성되었으나 수강자인 저의 이해도에 따라 일부 틀린 부분이 있을 수 있다는 점 알려드립니다. 잘못된 점이 발견될 시에는 즉각 수정하도록 하겠습니다. 또한, 강의의 모든 내용을 정리하기는 어렵기 때문에 인상깊었던 내용을 중심으로 정리하였습니다. 따라서, 설명의 맥락이 끊길 수도 있다는 점 양해 부탁드립니다. 

0. Introduction

part5에서는 이전의 linear classifiation model 외에 다른 형태의 classification algorithm을 살펴보았습니다. 크게 2가지 SVM과 Neural Network에 대해 학습하였는데 2가지 모두 이미 알고 있었던 내용들이라 수월하게 들을 수 있었습니다. 그래도 2가지 모델에 대해 수학적으로 더 깊이 알아볼 수 있었던 시간이라 개인적으로 많은 공부가 되었던 강의였습니다. 

1. Support Vector Machine

아래 왼쪽 그림에서 binary classification 문제에서 support vector machine이 왜 필요한지를 확인할 수 있습니다. 그림을 보면 round sample과 square sample을 구분할 수 있는 hyperplane이 여러개 존재할 수 있다는 것을 확인할 수 있습니다. 하지만, train data에 대해서는 그 어떤 hyperplane도 비슷한 수준의 loss값을 가질 수 있겠지만 새로운 unexpected data에 대해서는 천차만별의 loss값을 가질 수 있습니다. 즉, train data에 대해서는 적합하지만 test data에는 맞지 않은 overfitting이 우려될 수 있는 것입니다. support vector machine은 이런 가정에서 출발한 모델입니다. 앞서의 문제를 해소하기 위해 support vector machine(SVM)은 positive sample과 negative sample 딱 중간에 hyperplane이 위치하는 것을 이상적인 hyperplane이라고 정의하게 됩니다. SVM의 hyperplane과 각 sample군에서 가장 가까운 sample을 support vector라고 합니다. 그리고 이 support vector와 hyperplane 사이의 거리를 margin이라고 하는데 이 margin이 가장 큰 값을 가지도록 하는 것(large margin)이 SVM이 hyperplane을 찾아내는 과정이라고 할 수 있습니다. 아래 오른쪽 그림에서 지금까지 설명한 내용을 시각적으로 확인할 수 있습니다.

출처: (좌) https://docs.opencv.org/3.4/d1/d73/tutorial_introduction_to_svm.html / (우) https://www.researchgate.net/figure/Classification-of-data-by-support-vector-machine-SVM_fig8_304611323

다시 한번 SVM의 원리를 정리해보면 SVM은 각 sample의 support vector로부터 margin이 가장 커지게 되는 hyperplane을 line seperator로 설정하게 됩니다. 강의 자료에 있던 개념을 그대로 가져와 보면 다음과 같습니다. "Maximum margin hyperplane with support vector." 제가 복잡하게 설명했던 내용을 함축적으로 정리한 표현인 것 같습니다. SVM은 support vector라는 개념을 사용하기 때문에 outlier가 존재하는 상황에서도 안정적인 성능을 유지할 수 있다는 장점이 있습니다. 

2. Optimization

SVM이 최적의 파라미터 값들을 찾아내기 위해서는 class sample들을 정확하게 분류할 뿐만 아니라 margin을 가능한 크게 해야합니다. 이 2가지 조건을 만족시키도록 하는 것이 SVM의 optimization 과정이라고 할 수 있습니다. 하지만 이러한 optimization 과정에서 한가지 제약이 생기게 됩니다. 위 그림의 경우는 data sample들이 선형분리(linear separable)가 가능하다는 전제를 가지고 있습니다. 이러한 상황에서는 hyperplane과 각 support vector 사이를 지나가는 plane 사이의 영역에 어떠한 sample도 존재하지 않을 수가 있습니다. 그러나 data가 non-separable한 경우가 있을 수도 있습니다. 가령, outlier가 존재하거나 데이터에 noise가 있을 경우 선형 모델로 구분이 쉽지 않을 수가 있습니다. 

2.1 Hard Margin SVM

Hard margin SVM은 선형 분리를 가정한 SVM 방식입니다. 앞서 얘기했던 것처럼 margin 사이의 영역에 sample들이 존재하지 않게 됩니다. 아래 그림과 같이 hyperplane h(x)가 임의의 어떤 값을 가질 때 이를 scaling하게 되면  class label이 1인 모든 positive sample들은 h(x) >= 1인 영역에 위치하게 됩니다. 반대로 class label이 -1인 모든 negative sample들은 h(x) <= -1인 영역에 위치하게 됩니다. 즉, 모든 샘플들은 y*h(x) >=1에 해당한다고 할 수 있습니다. 

출처: 강제원 교수님 강의자료

hard margin SVM의 경우 margin은 2를 w norm으로 나눈 값입니다. 따라서, SVM의 파라미터를 최적화하는 문제는 margin을 최대화하는 w norm값을 찾아야 하는 것이고 이는 w norm을 최소화하는 경우를 찾는 문제로 재정의할 수 있습니다. 일반적으로 w norm을 최소화하는 것보다는 w norm의 제곱을 최소화하는 것이 더 편합니다. 따라서, 모든 data sample들이 y*h(x) >= 1이라는 전제 하에서 w norm의 제곱을 최소화하는 문제로 optimization 과정을 거치게 됩니다. 

2.2 Soft Margin SVM

hard margin SVM과 반대로 Soft Margin SVM은 데이터가 선형 분리가 되지 않는 경우를 고려하게 됩니다. 따라서, margin 사이의 영역에 일부 sample들이 존재하는 error를 허용하게 됩니다. 이를 위해 위의 식에서 슬랙 변수를 선형 제약 조건으로 더하게 됩니다. 아래와 같이 hard margin svm의 loss function에 슬랙변수를 더하여 이를 최소화하는 w를 푸는 문제로 정리됩니다. 

출처: 강제원 교수님 강의 자료

2.3 Kernel Trick

데이터의 샘플이 선형 분리가 되지 않는 경우 kernel함수를 통해 이를 해결할 수 있습니다. 가령, 아래 왼쪽 그림과 같이 데이터 class 분포가 2개의 동심원 형태로 분포되어 있는 경우 선형 모델로 class를 분리할 수 없습니다. 그러나 오른쪽과 같이 3차원의 공간에 data를 mapping하게 되면 초평면(hyperplane)을 통해 분리가 가능하게 됩니다. 이처럼 저차원의 dataset을 고차원으로 mapping하여 separable하게 만드는 것을 kernel 기법이라고 합니다. 

출처:&nbsp;https://www.sallys.space/blog/2018/05/30/svm/

kernel함수를 통해 고차원의 공간으로 mapping이 가능하며 이때 주로 활용되는 kernel 함수로는 gaussian radial basis function(RBF), polynomial, hyperbolic tangent 등이 있으며 아래와 같은 식에서 하이퍼파라미터를 설정하여 차원 확장을 조정할 수 있습니다.

3. Aritifical Neural network (ANN)

3.1 Perceptron

인공신경망은 인간의 뇌 신경을 모사하여 non linear classification model을 해결할 수 있는 algorithm입니다. 뉴런에 입력된 전기 신호가 임계치를 넘으면 다음 뉴런으로 전기 신호를 전달하는 아이디어를 적용한 것으로 아래 그림과 같이 perceptron을 시각화하여 살펴볼 수 있습니다. 입력값인 x와 가중치 w의 곱을 선형 결합한 score값이 activation function을 거쳐 non-linear한 형태로 변환하고 이 값을 임계값과 비교하여 다음 노드의 입력값으로 전달하게 됩니다. 

출처:&nbsp;http://aikorea.org/cs231n/neural-networks-1/

인공신경망에서는 activation function으로 어떤 것을 사용하느냐에 따라 성능의 차이가 생기기 때문에 activation function의 역할이 매우 중요합니다. 대표적으로 가장 많이 사용되는 activation function은 sigmoid function으로 무한의 실수값을 0과 1사이의 값으로 mapping하는 역할을 합니다. 하지만 sigmoid function은 0 전후의 아주 좁은 구간에서만이 gradient 값이 크게 되며 양 극단에서는 gradient가 매우 작기 때문에 학습이 진행될수록 학습량이 줄어드는 단점이 있습니다. 따라서 이를 보완하기 위해 ReLU 또는 Leaky ReLU 함수가 사용되는데 gradient가 0이 되는 문제를 일부 해소시켜줍니다. 이 외에도 다양한 activation function들이 상황에 따라 사용됩니다.

출처:&nbsp;https://22-22.tistory.com/20

3.2 Multilayer Perceptron

언젠가 인공지능 발전 역사에 있어 2번의 암흑기가 있었다는 이야기를 들은 적이 있습니다. 그 첫번째 암흑기는 1960년대에 있었으며 linear model이 이른바 XoR이라는 문제를 풀 수 없다는 문제가 제기되며 도래했다고 합니다. 그러나 인공신경망 연구의 초시인 multilayer perceptron이 XoR 문제를 해결할 수 있다는 것이 증명되며 인공지능 연구는 다시 스퍼트를 받을 수 있었다고 합니다. 교수님께서는 이번 강의에서 간단한 multilayer perceptron이 XoR 문제를 푸는 과정을 rough하게 보여주셨습니다. 굉장히 흥미로웠던 내용이라 여기서 다시한번 정리해보도록 하겠습니다. 

XoR 문제는 논리 연산에 기반하여 2개의 값이 같으면 0 다르면 1을 반환하는 엄청나게 간단한 문제입니다. 가령, 아래 그림고 같이 2차원 그래프로 표현할 수 있는데 선형 모델로는 2개의 class label을 쉽게 구분할 수는 없습니다. 

출처: 강제원 교수님 강의자료

이 문제를 해결하기 위해 간단한 2layer perceptron(MLP)을 만들어 적용해보겠습니다. 아래 그림과 같이 각 노드에 선형 결합식이 있고 첫번째 class label의 x1과 x2값을 mlp에 입력해보면 아래 식과 같이 계산되어 최종 0을 출력하게 됩니다. 그리고 이와 같은 계산을 각 경우의 수에 적용하여 검증해보면 모두 정확하게 분류해 내는 것을 확인 할 수 있습니다. 

출처: 강제원 교수님 강의자료

 

출처: LGAimers / https://www.lgaimers.ai/

+ Recent posts