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

0. Introduction

part4부터는 supervised learning의 다른 종류인 classification 문제에 대해 살펴보았습니다. 그 중 첫번째로 classification의 가장 기본적인 방법론인 linear classification을 공부하였는데 linear regression과 유사한 형태이기 때문에 학습하는데 어렵지는 않았습니다. 강의는 크게 3가지 부분을 전달하였습니다. 첫번째는 linear classification의 기본적인 원리와 로직, 두번째는 linear classification model이 적절한지를 판단할 수 있는 손실함수들, 마지막으로 multi classification 문제를 살펴보았습니다. 

1. Linear Classification

linear classification model은 이전에 살펴본 regression을 위한 linear model과 그 형태가 유사합니다. 파라미터 w와 입력 feature인 x의 선형 결합으로 이루어진 형태로 w 벡터의 전치행렬(w.T)과 x 백터의 점곱으로 일반화할 수 있습니다. 다만, regression과의 차이는 model의 output이 연속형이 아닌 이산형이라는 점입니다. linear classification model은 sample들을 나누는 기준으로서 결정경계(decision boundary)라고 하며 초평면(hyperplane)이라고도 합니다. 가령, linear classification을 수행할 수 있는 hypothesis h(x)를 아래와 같이 정의한다면 이 선형 모델이 hyperplane이 됩니다.

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

다음 그림을 보면 hyper plane을 기준으로 그 위쪽은 positive sample 그리고 아래 쪽은 negative sample들이 위치하고 있습니다. sample들을 매우 잘 구분한 hyper plane이라고 할 수 있습니다. 이 그림은 classification의 가장 단순한 가정을 보이고 있습니다. 오직 positive label과 negative label만 존재하는 이진분류(binary classification) 문제이고 linear classification model로도 충분히 분류 가능한 분포를 보이고 있습니다. 하지만 실제 현실에서는 linear model로 분류가 되지 않을 정도로 복잡한 경우가 많고 ouput 또한 3개 이상인 multi classification 문제들이 대다수입니다.

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

우리가 찾고자 하는 target function f를 approximate할 수 있는 hypothesis h는 다음과 같이 표현될 수 있습니다. 파라미터 w와 입력 x의 선형결합에 사인함수(signum function)를 적용한 형태입니다. 아래 그림에서 sign function 안의 summation 옆에 있는 w0는 bias 값(또는 offset)으로 가상의 x0(=1)을 곱해주는 것으로 하여 summation 안으로 넣어 정리할 수 있습니다. 이렇게 하면 w.T와 x의 곱으로 간단히 표현할 수 있고 이를 sign function의 input으로 넣어주게 됩니다. 오른쪽 sign function에 따라 w.Tx의 값이 양수이면 1(positive sample)을 반환하고 음수이면 -1(negative sample)을 반환하게 됩니다. 이런식으로 주어진 sample들을 각 label로 classification할 수 있게 됩니다. 

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

 linear classification model은 하이퍼파라미터 w값에 따라 다른 선형 hyper plane이 그려지게 됩니다. 따라서 w값에 의해 잘못된 classification결과가 도출되기도 합니다. 따라서, model이 예측한 결과의 error를 계산하고 평가할 수 있는 metric들이 필요합니다. 이를 위해 score와 margin의 개념을 살펴보아야 하는데 'score'은 모델의 ouput으로서 예측 결과에 대해 얼마나 확신할 수 있는지를 보여주며, 'margin'은 그 예측값이 얼마나 correct한지 보여줍니다.

가령, 아래의 상황을 가정해볼 수 있을 것입니다. 입력 데이터 x, 타겟 레이블 y(1 또는 -1)이 주어졌을 때 결정경계 h(x)에 따라 4가지 경우의 수가 생길 수 있습니다. case1과 4는 margin값이 양수로서 예측값과 실제값이 같도록 올바르게 분류한 hyperplane입니다. 반면 case2와 3는 margin값이 음수로서 잘못 분류한 hyperplane입니다. 

case score y margin(socre x y) correctness
1 +1 +1 (+) correct
2 -1 +1 (-) not correct
3 +1 -1 (-) not correct
4 -1 -1 (+) correct

2. Loss Function

 

2.1 Zero-one Loss

zero-one loss는 내부의 logic을 판별하여 맞으면 0을 틀리면 1을 출력하는 손실 함수입니다. 아래 왼쪽 식을 보면 model이 예측한 predicition값인 f(x)와 실제 target label인 y가 같지 않으면 1을 반환하게 됩니다. 위에서 살펴본 'score'과 'margin'의 개념을 적용해 보면 왼쪽의 식처럼 loss function을 일반화할 수 있습니다. 'score'값과 y값을 곱한 'margin'이 0보다 작거나 같으면 1을 반환하고 0보다 크면 0을 반환하는 것입니다. 즉, classification을 잘 수행하는 model일 경우 error가 0이며 반대로 classification을 잘 하지 못하는 부적합한 model은 error가 1이라고 간단히 이야기할 수 있습니다. 

일반적으로 training의 과정은 loss function을 최소화하는 과정이라고 할 수 있습니다. 이를 위해 우리는 보통 gradient descent 방식을 적용하여 gradient가 0이 되는 지점을 향해 학습합니다. 하지만 지금의 zero-loss-function을 아래 오른쪽과 같이 미분을 했을 때 거의 대부분의 지점에서 gradient가 0이 됩니다. 따라서, model을 조정하는 학습의 과정을 거치지 못하게 됩니다. 따라서 이러한 문제를 해결하기 위해 다음에 살펴볼 Hinge Loss가 등장하게 됩니다. 

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

2.2 Hinge Loss

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

hinge loss는 (1- margin)값과 0 중 max값을 출력하는 loss function입니다. 앞서 살펴본 결과 우리는 model의 예측과 실제값이 같은 경우 즉, 정답인 경우에 'margin'은 1이 되고 틀린 경우 -1이 됨을 알고 있습니다. 그렇다면 hinge loss의 경우 이렇게 정리할 수 있을 것입니다. 정답을 맞춘 경우에 (1-margin)은 0보다 작기 때문에 hinge loss의 max 결과는 0을 출력하게 됩니다. 반대로 정답이 못 맞춘 경우에는 (1-margin)이 0보다 크기 때문에 hinge loss는 1-margin을 리턴하게 됩니다. 이를 그래프로 표현하게 되면 아래 그림의 초록색 선과 같을 것입니다.(그래프에서는 x축이 1-margin이 아닌 그냥 margin이기 때문에 1을 기준으로 값이 바뀌게 됩니다.) 이렇게 되면 우리는 gradient descent를 적용하여 학습할 수 있게 됩니다. 

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

2.3 Cross-Entropy Loss 

cross-entropy loss는 정보 이론에 기반한 loss function으로 여기서 cross-entropy는 불확실한 정보의 양을 토대로 최적화하는 작업이라고 할 수 있습니다. Kullback-Leibler 발산과 같은 원리를 가지며 위에서 살펴본 classification의 모델들이 내놓은 예측 label들이 얼만큼 틀렸는지를 entropy로서 확인하는 것입니다.  그에 따라 모델이 예측한 정보에 대한 probability mass function(pmf)의 차이를 비교하게 됩니다. binary classification의 경우 2개의 pmf를 비교하게 되는데 각각 p와 q라고 가정하였을 때 p와 q가 서로 유사하면 loss가 줄어들게 되고 반대로 p와 q가 다르면 loss값은 커지게 됩니다. 아래 식은 binary classification 문제에서 cross-entropy loss를 계산하는 식이 됩니다. 

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

cross-entropy loss는 pmf 확률값을 사용하게 되는데 우리가 모델을 통해 계산하게 되는 score값은 확률이 아닌 실수값입니다. 따라서, cross entropy loss를 계산하기 위해 실수 score값을 확률값으로 mapping할 필요가 있습니다. 이때 사용할 수 있는 것이 로지스틱 모델 함수라고도 불리는 sigmoid함수입니다. sigmoid함수는 입력값을 0과 1사이의 값으로 출력하는데 도움을 줍니다. 아래 왼쪽은 sigmoid 함수의 그래프를 보여주고 있습니다. sigmoid 함수를 통해 오른쪽과 같이 class 0과 class 1에 대해서 각각의 확률값을 계산할 수 있게 됩니다.  

출처: (좌) https://38402160.tistory.com/39 / (우) 강제원 교수님 강의자료

아래 그림을 보면 cross-entropy loss를 더 간단히 이해할 수 있습니다. 왼쪽의 값들은 모델의 예측에 대한 확률의 분포입니다. 오른쪽은 실제 정답에 대한 확률의 분포입니다. 가령, onehot encoding으로 표현된 실재값이 [1, 0, 0]이라고 가정하고 예측값이 [1, 0, 0]인 경우 이때의 loss는 0됩니다. 하지만 [0, 1, 0], [0, 0, 1]과 같이 실재와는 전혀 다른 분류를 할 경우에는 무한대에 가까운 loss를 가지게 됩니다. 

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

3. Multiclass Classification 

지금까지 살펴본 예시들은 이진분류(binaryclass Classification) 문제들입니다. 그러나 실제로는 많은 class들이 존재하는 multiclass classification 문제들이 다수를 이룹니다. multiclass classification을 python으로 구현하기는 너무 복잡하기에 일반적으로 binary classification을 확장하여 multiclass 문제를 해결하게 됩니다. 이를 one vs all 또는 one vs rest 방식이라고 합니다. scikit learn에서는 multiclass 문제를 binary classification  문제 여러개로 나누어 해결을 하게 됩니다. 

출처: https://towardsdatascience.com/multi-class-classification-one-vs-all-one-vs-one-94daed32a87b

 

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

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

0. Introduction

개인적으로 이번 LGAimers 강의들 중에서 가장 흥미로웠던 파트는 [비지도학습] 부분이었습니다. 기존에 제가 알고 있던 비지도학습에 대한 내용보다는 최근 연구되고 있는 representation learning에 대한 내용이 주를 이루고 있어 조금 당황스러웠지만 교수님께서 일반인들도 들을 수 있게 최대한 쉽게 설명해주셔서 이해하는데 큰 무리는 없었습니다. 강의에서 학습한 내용들은 비교적 최근에 연구가 진행되고 있는 분야라 현재 그리고 앞으로의 인공지능 연구 흐름을 살펴볼 수 있어서 굉장히 인상깊었습니다. 특히 교수님께서 기계학습/딥러닝의 representation에 대해 많은 시간을 할애하며 설명하시고 강조하셨는데 전체 강의를 다 듣고 나니 앞으로 인공지능에 있어서 정보를 잘 정리할 수 있는 representation learning이 얼마나 중요한지를 실감할 수 있었습니다. 최근 초거대 AI의 연구와 개발이 진행되고 있고 조금씩 성과를 드러내고 있는데 representation learning과 함께 생각해보면 앞으로는 주어진 input을 넘어 AI가 스스로 문제/task를 만들어낼 수도 있지 않을까 하는 생각이 들기도 했습니다. (아마도 이미 이런 연구가 진행되고 있을 수도 있을 것 같습니다.)

1. Unsupervised Learing in Traditional Machine Learning

전통적 기계학습에서 unsupervised learning은 feature의 개수가 적은 저차원의 데이터를 주로 다루며 이를 학습하는 algorithm들은 비교적 간단한 개념들로 구성되어 있습니다. 이러한 특징 덕분에 지금까지 unsupervised learning은 범용적으로 많이 사용되어 왔습니다. 하지만 전통적 기계학습에서 unsupervised learning model이 예측해낸 결과를 신뢰할 만한지에 대해서는 논란의 여지가 있습니다. 가령, 대표적인 비지도학습인 clustering을 살펴보면 algorithm이 묶어낸 군집들이 과연 의미가 있는지는 확신할 수가 없습니다. 따라서, 항상 cluster 결과에 대해 수치적으로 검증하는 절차를 반드시 거쳐야 합니다. 이러한 점은 우리가 기계학습의 unsupervised learning을 실제 application에 적용하는데 무리가 있을 수도 있음을 보여줍니다. 

2. Unsupervised Learing in Deep Learning

전통적 기계학습에서의 unsupervised learning과 달리 최근 딥러닝에서의 unsupervised learning은 이미지 또는 자연어와 같은 고차원의 데이터를 처리하기 시작하였습니다.  그럼에도 algorithm들은 이전과는 비교가 되지 않을 정도로 높은 성능을 보이지만 이를 구성하는 개념과 아이디어들은 이해하기 어려울 정도로 굉장히 복잡해졌습니다.

2.1 Feature Engineering vs Representation Learning

또한, 전통적 기계학습과 딥러닝에서 unsupervised learning이 보이는 차이점 중 하나는 정보를 생성하는데 인간의 개입이 현저히 줄어들었다는 것입니다. 강의에서 교수님은 feature engineering과 representation learning을 비교하여 설명해주셨습니다. 이 부분이 저에게는 굉장히 흥미로웠던 내용이었습니다.

출처: 이원종 교수님 강의자료

우리가 일반적으로 하고 있는 model 학습과 예측의 과정을 보면 다음과 같습니다. 우리의 목적은 관측 데이터인 X를 통해 y hat을 잘 예측할 수 있는 model f(x)를 학습하는 것입니다. 우리가 가지고 있는 데이터 X는 볼 수는 없지만 현실에서 존재하는 수많은 random variable들이 복합적으로 작용하여 만들어낸 관측치입니다. 여기서 random variable들을 y라고 할 수 있고 이 y는 비선형적으로 변수들이 구성되어 있습니다. y는 우리가 발견하기 쉽지 않은 영역이지만 domain knowledge를 통해 어느정도 유추가 가능합니다. 그리고 이렇게 유추한 사실과 내용들을 바탕으로 X를 가공하여 g1(), g2()...gl()과 같은 feature들을 만들어내게 됩니다. 이들 feature들을 가지고 model f(x)를 잘 학습하게 된다면 좋은 y hat의 결과를 얻을 수 있습니다. 이처럼 model이 잘 학습할 수 있도록 인간이 직접 필요한 정보들을 정리하는 과정을 feature engineering이라고 하며 실제로 우리가 기계학습을 할 때 많은 시간을 할애하는 영역이라고 할 수 있습니다. 

하지만, 딥러닝에서의 목표는 이러한 feature engineering의 과정을 컴퓨터에게 맡기는 것입니다. 즉, algorithm이 스스로 우리가 가지고 있는 데이터 X에서 중요하다고 생각되는 정보를 잘 정리하여 y를 뽑아내도록 하는 것입니다. 이렇게 만들어진 y는 간단한 model로도 충분히 좋은 성능을 도출할 수 있다는 것이 딥러닝의 핵심 아이디어입니다. 따라서, 인간이 해야 하는 것은 data를 직접 손 보는 것이 아니라 정보를 잘 정리할 수 있는 algorithm을 만들어 내는 것입니다.

3. Representation

강의에서 교수님은 representation learning에 대해 본격적으로 이야기 하기 전에 representation이 무엇인지에 대해서 설명해주셨습니다. 다양한 예시들을 통해 설명해주셨지만 저에게는 개념들이 추상적으로 다가왔고 여전히 representation이 무엇인지에 대한 질문에 두루뭉술하게 설명할 수 있을 뿐입니다. 그래도 강의에서 배운 내용을 최선을 다해 설명을 드리자면 다음과 같습니다. 제가 이해한 바로는 representation은 '정보의 일반화된 표현'이라고 정의할 수 있을 것 같습니다. 이 정의에는 '정보', '일반화', '표현' 이렇게 3가지 핵심 포인트가 있습니다. 

첫번째로 '정보'는 우리가 관측해서 얻어낸 데이터 또는 현상이라고 할 수 있습니다. 교수님은 이 점을 설명하시기 위해 ICML tutorial의 한 장면을 인용하셨습니다. 플라톤의 '동굴의 우상'을 시각화한 그림인데 여기서 우리가 주목할 점은 동굴 밖의 실제 상황을 우리는 직접 보지 못하고 오로지 동굴 벽에 그려진 그림자를 통해서만이 간접적으로 확인할 수 있다는 것입니다. 즉, '정보'는 이전 절에서 설명했던 바와 같이 데이터 X에 불과하고 algorithm이 찾아내야 하는 것은 그 이면에 있는 y인 것입니다. 

두번째로 '일반화'는 2가지 측면을 이야기할 수 있는데 하나는 인간이 아닌 컴퓨터가 이해할 수 있는 표현으로 일반화해야 한다는 것이고 다른 하나는 특정 task에 oriented된 표현이 아니라 어떤 task도 수행할 수 있도록 일반화된 representation이어야 한다는 것입니다. 일반적으로 feature engineering 과정에서 만들어진 representation은 인간은 이해할 수 있지만 컴퓨터는 이해하기 어려운 경우도 있고 또 인간이 디자인하였기 때문에 문제와 목적이 명확한 representation인 경우가 많습니다. 이러한 representation을 algorithm도 이해할 수 있고 수많은 task를 해결할 수 있도록 하는 것이 representation learning에서의 representation이라고 할 수 있습니다. 

마지막으로 '표현'은 말그대로 representation의 사전적 의미입니다. 수학에서의 representation은 개념을 수학적인 기호로 표현하는 룰이라고 할 수 있습니다. 만약 이를 일반화한다면 represenation은 정보를 어떻게 정리하고 표현할까를 고민한 결과라고 할 수 있습니다. 

이 세 가지를 종합해보면 representation의 개념과 representation learning의 목적을 확인할 수 있습니다. 제가 올바르게 이해했는지 그리고 이 글을 읽는 분들께 잘 전달이 되었는지는 잘 모르겠지만 한가지 분명한 것은 representation이 unsupervised learning 특히 deep learning 분야에서는 매우 중요하다는 것입니다. 

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

0. Introduction

이번 part3에서는 지난 시간에 알아본 gradient descent에 대해 더 심도있게 내용을 알아보았습니다. gradient descent에서 발생할 수 있는 문제들을 해결하기 위한 다양한 변형들을 살펴보았는데 일부는 알고 있는 방법들이었지만 처음 들어본 최적화 기법들도 꽤 있었습니다. 이번 차시를 공부하면서 학계에 계신 수많은 machine learning 연구자 분들께 경외감을 느낄 수 있었습니다. 각 알고리즘들이 가지는 한계를 해결하는 방법들이 전혀 복잡한 접근법이 아닌데도 도무지 저로서는 생각하지 못할 아이디어들이었습니다. gradient descent 말고도 다른 machine learning 알고리즘들을 공부하다보면 발상을 뒤집는 접근법에 감탄을 금치 못할 때가 많습니다. 세상에 참으로 숨겨진 고수들이 많은 것 같아 괜시리 주눅드는 것 같습니다. 

1. Batch Gradient Descent vs Stochastic Gradient Descent (SGD)

gradient descent algorithm은 임의의 파라미터 theta에서 시작하여 loss function을 최소화할 때까지 theta를 계속 업데이트해 나가는 것입니다. 이때 theta를 업데이트하는 방식은 모든 데이터에 대한 오차 평균을 구하고 learning rate를 곱하여 새로운 theta를 구하게 됩니다. 이런식으로 theta를 업데이트 할 때 전체 데이터를 고려하게 되는 것을  batch gradient descent라고 합니다. batch gradient descent 방식은 몇가지 단점이 있습니다. 바로 한번 업데이트 시에 모든 데이터 샘플을 다 고려하여 계산해야 하기 때문에 계산 과부화가 걸릴 수 있다는 것입니다. 데이터 샘플의 수가 증가하게 되면 계산량이 증가하여 computational load가 생기게 되는 것이지요. 

따라서, 이러한 단점을 해소하여 조금 더 빠르게 iteration을 돌며 최적의 파라미터를 업데이트 해나가기 위해 한 샘플에 대한 오차만 계산하여 파라미터를 갱신하는 방법이 등장하였습니다. 우리말로 확률적 경사하강법이라고 불리는 stochastic gradient descent는 임의의 샘플 하나를 골라 이에 대한 오차를 계산하여 경사하강법을 진행하게 됩니다. 아래 식은 gradient descent의 각 파라미터 갱신을 표현한 것입니다. 여기서 m은 업데이트 시에 사용하는 데이터 샘플 개수 의미합니다. 가령, 우리가 가지고 있는 총 데이터 개수를 N이라고 하면 batch gradient descent에서의 m은 N이라고 할 수 있습니다. 반면, stochastic gradient descent에서의 m은 극단적으로 1로 설정하여 계산한 것이라고 볼 수 있습니다. 

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

이처럼 stochastic gradient descent 방식은 계산량이 줄어들어 빠르게 수렴할 수 있다는 장점이 있지만 데이터 샘플 하나씩만 가지고 업데이트를 진행하기 때문에 만약 데이터 샘플에 noise가 존재하게 되면 완만하게 수렴하지 못하고 이리저리 왔다갔다하며 수렴하게 됩니다. 조금은 비효율적인 경로를 거치며 최소점을 탐색하게 되는 것입니다. 아래 그림이 이를 잘 보여주고 있습니다. 

출처: https://blog.superannotate.com/guide-to-gradient-descent-algorithms/

2. Some ideas to avoid local minimum

이전 차시 수업에서 gradient descent algorithm은 지역해(local optimum)에 빠질 수 있는 한계가 존재한다고 배웠습니다. 특히 error surface가 복잡할 경우, 초기 파라미터 값 theta가 어디서 부터 시작하느냐에 따라 global optimum으로 수렴되지 못하고 saddle point나 local minimum에서 학습이 멈출 수 있게 됩니다. 이를 해결한 momentum 방법을 시작으로 이후에도 지속적으로 시간을 단축하고 올바른 방향으로 향하여 효율적인 최적화할 수 있는 다양한 optimization 방법들이 등장하였습니다. 아래에서 몇가지 살펴보도록 하겠습니다. 

2.1 Momentum

stochastic gradient descent 방식이 기존의 gradient descent 보다는 빠르지만 그래도 여전히 느리고 비효율적인 경로 탐색을 할 수 도 있기 때문에 이를 보완하기 위한 momentum 방식이 등장합니다. momentum은 '관성'을 통해 이동 방향과 속도를 조절하는 방식으로 현재 위치한 지점에서 gradient값이 0이 되더라도 과거의 gradient가 업데이트 되어오던 방향과 속도를 기억하고 반영해 계속 학습이 진행될 수 있도록 하게 됩니다. momentum은 지수적으로 가중치가 더해지는 방식을 적용하며 아래 식과 같이 표현됩니다. g(기울기/gradient)가 t(시간)에 따라 누적되는 모습을 보이고 있는데 g에 곱해지는 rho값(가중치)은 0과 1사이의 값이기 때문에 지수승이 될수록 점점 더 작아지게 됩니다. 따라서, 먼 과거의 gradient 값일수록 더 작아지며 영향을 덜 미치게 됩니다. 여튼, 현재의 이동방향에 과거의 momentum값들을 반영하게 되므로서 혹여나 gradient값이 0이 되더라도 계속 학습을 이어갈 수 있게 됩니다. 

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

2.2 Nesterov Momentum

nesterov momentum 방식은 기존의 momentum 방식과는 다른 순서로 gradient값을 계산하게 됩니다. 일반적인 momentum 방식에서는 현재의 gradient값에서 '관성' 즉 과거의 momentum을 계산하는 방식이라면 nestrov momentrum에서는 '관성' momentum값으로 먼저 이동후에 그 곳에서 gradient값을 반영하게 됩니다. 즉, 현재의 gradient값과 지난 momentum의 적용 순서를 서로 달리한 차이라고 할 수 있습니다. 이렇게 순서를 달리한 nesterov momentum 방식을 'lookahead gradient'라고도 하며 기존의 momentum 방식보다 더 빠르고 성능이 우수하다고 알려져 있습니다. 아래 링크를 통해 들어가시면 지금까지 수많은 머신러닝/딥러닝 책들을 번역해 오신 박해선 저자님께서 일반적인 momentum과 nesterov momentum에 대해 자세히 비교하여 설명한 글을 읽을 수 있습니다. 정말 상세하게 정리되어 있기 때문에 많은 참고가 될 것입니다. 

https://tensorflow.blog/2017/03/22/momentum-nesterov-momentum/

 

Momentum & Nesterov momentum

경사하강법gradient descent 최적화 알고리즘의 한 종류인 모멘텀momentum과 네스테로프 모멘텀nesterov momentum 방식은 여러 신경망 모델에서 널리 사용되고 있습니다. 비교적 이 두가지 알고리즘은 직관

tensorflow.blog

2.3 AdaGrad

앞서 살펴본 momentum에 대한 2가지 algorithm은 학습을 할 때의 탐색 방향을 조절하는 방식입니다. 가능한 이상한 길로 새지 않고 효율적인 경로를 따라 최적의 포인트를 찾아가기 위한 것이 주된 목적입니다.  그에 반해 이제부터 살펴볼 algorithm들은 learning rate를 조절하여 학습 속도를 최적화하는 방식이라고 할 수 있습니다.

그 중 첫번째는 Adaptive Gradient라고 부르는 Adagrad algorithm입니다. adaptive라는 말에서 유추할 수 있듯이 adagrad는 학습이 진행됨에 따라 learning rate를 적응적으로 조절하여 학습의 효율을 높이는 방법입니다. 지금까지 갱신 및 학습이 많이 되어 누적된 gradient 값이 크다면 learning rate를 낮추어 학습의 속도를 줄이게 됩니다. 반대로 학습이 많이 진행되지 않아 누적된 gradient 값이 작다면 learning rate를 높여 학습 속도를 높이게 됩니다. 즉, 현재까지의 학습 현황을 반영하여 이후의 학습을 진행하는 적응적인 방식이라고 할 수 있습니다. 아래 식은 adagrad에서 어떻게 learning rate를 조절하는지 보여주고 있습니다. 누적된 g의 제곱값이 분모로 들어가 delta theta를 조절하는 것을 확인할 수 있습니다.

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

2.4 RMSProp

adagrad 방식은 g값이 계속 누적됨에 따라 learning rate가 작아지게 되는데 이 때문에 학습이 진행되지 않는 단점이 있습니다. 이를 개선한 RMSProp 방법이 등장하였는데 rmsprop은 가중치를 주어 learning rate가 극단적으로 0으로 수렴하는 것을 방지해줄 수 있습니다. 위 그림 왼쪽을 보게 되면 rmsprop은 adagrad에서 r과 g의 제곱에 각각 weighted decay에 해당하는 rho와 (1-rho)를 곱한 것밖에 차이가 없지만 이렇게 함으로서 학습속도를 적절히 조절할 수 있게 됩니다.  

2.5 Adam

Adam optimizer는 RMSProp와 Momentum을 혼합한 방식으로 momentum에서 계산된 첫번째 moment와 RMSProp에서 계산된 두번째 moment를 편향 보정하여 파라미터를 업데이트하는데 활용하는 것입니다.  

이상으로 part3를 마치도록 하겠습니다. 위에서 살펴본 optimization 기법들 외에도 수많은 변형들이 있는데 나중에 기회가 되면 열심히 공부해서 정리해보도록 하겠습니다.

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

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

0. Introduction

이번 part2는 linear regression에 대한 강의입니다. 선형회귀(linear regression)는 지도학습의 가장 기초적인 알고리즘이라 할 수 있습니다. 그래서 그 이론적 배경과 사용되는 concept이 다른 복잡한 모델들에 비해서 그나마 저에게 쉽게 다가왔습니다. 강의는 linear regression의 바탕이 되는 아이디어에 대해 짧게 설명하고 여러(?) 비용함수를 통해 linear regression을 optimization하는 과정을 중점적으로 다루었습니다. mean squared error와 gradient descent에 대해서는 기존에 linear regression을 공부하며 익히 들어보았지만 정확히 그 logic에 대해서는 잘 알지 못했던 터라 이번 강의가 굉장히 흥미로웠습니다. 확실히 머신러닝 분야는 어느 하나 허투루 넘길 수 있는 부분이 하나도 없는 것 같습니다. 앞으로 공부해야 될 것이 산더미인 것 같아 슬프기도 하지만 한편으로는 새로운 호기심을 끊임없이 자극하는 것 같아 설레기도 합니다.

1. Linear Model

linear regression의 기본적인 틀이라고 할 수 있는 linear model은 입력 feature와 모델 파라미터의 선형결합(linear combination)으로 이루어져 있습니다. 아래 수식의 가운데를 보면 theta(*기호를 어떻게 넣는지 몰라 그냥 말로 풀어 쓰겠습니다*)값과 x값의 곱의 합으로 구성되어 있는데 앞에 있는 theta는 모델이 최적화되는 과정에서 계속 바뀌게 되는 'model parameter'라고 부릅니다. 때로는 각 x값이 1증가하였을 때 output이 얼마나 많이 변하는지를 보여주기도 하기 때문에 'weight(가중치)'라고 부르기도 합니다. 일반적으로 linear model은 입력변수인 x에 대해 선형의 모습을 모이지만 반드시 그럴 필요는 없습니다. 아래 2번째 식처럼 x에 대해 커널 함수를 적용할 경우 입력변수는 비선형으로 바뀌게 되지만 매개변수인 theta에 대해서는 선형이 유지됩니다. 즉, h(x)의 linear model은 theta에 대해서는 선형이지만 x에 대해서는 그렇지 않다고 할 수 있습니다. 정확하게 기억이 나지는 않지만 BMI와 체지방률 사이의 선형회귀 모델이 아래 2번째 식과 같이 비선형적인 구조를 가진 것으로 알고 있습니다. 

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

2. Cost function - Minimizing MSE

주어진 입력과 출력을 통해 추론한 linear model이 얼마의 오차를 가지며 데이터에 근접하게 fit되었는지 확인하기 위해 비용 함수(cost function)를 사용할 수 있습니다. 모델이 얼마나 좋은 성능(good)을 보이고 있는지 확인할 수 있는 지표라고 할 수 있습니다. 선형 회귀에서는 평균제곱오차(mean-squared-error)를 cost function으로 사용하고 있습니다. 여기서 잠깐 헷갈리는 부분 하나만 정리하고 가겠습니다. cost function과 비슷하게 사용되는 용어로서 손실 함수(loss function)가 있습니다. 둘이 의미상으로 비슷하여 혼용되어 사용되는 경우가 많은데 정확하게는 loss function은 각각의 값들이 가지는 오차를 말하고 이 오차들이 모여 이루어진 오차들의 합을 cost function이라고 구분할 수 있습니다. 제가 헷갈려서 적어놓고 가는 것이니 그냥 넘어가셔도 됩니다. 다시 본론으로 돌아와 mean-squared-error은 아래 식과 같이 정리할 수 있습니다. 왼쪽 식에 써져있는 것처럼 mse는 말그대로 오차의 제곱의 평균입니다. 오른쪽 식을 보게 되면 오차는 실제값에서 예측값을 뺀 것이라 할 수 있는데 모델이 좋은 성능을 보여 주어진 데이터에 잘 적합되었다면 이 오차가 0에 가까워질 것입니다. 그렇게 되면 cost function 또한 0에 가까워진다고 할 수 있습니다. 즉, 우리의 목표는 cost function인 mse를 최소화하는 것으로서 이를 충족하는 모델 파라미터 theta 값들을 찾아내는 것입니다. 

출처: https://suboptimal.wiki/explanation/mse/

3. Optimization - Normal Equation

우리의 목표는 이 녀석을 최소화하는 theta(여기서는 w로 표현되어 있는값)를 찾아내야 합니다.

그렇다면 이제는 어떻게 mse값을 최소화할 수 있는 최적의 theta들을 찾아낼수 있을지 고민해봐야 합니다. 이를 위해 최소제곱법(least squared method)을 활용할 수 있습니다. 이때 문제를 해결하는 방적식을  nomal equation이라고 하며 그 유도 과정은 복잡하여 여기서는 생략하도록 하겠습니다. 어쨌든 어쩌어찌 방정식을 잘 풀어내면 최적 파라미터 theta에 대한 식을 만들어 낼 수 있습니다. 아래와 같이 X의 의사역행렬(pseudoinverse)값에 y를 곱한 값으로 정의될 수 있습니다. 

출처: http://mlwiki.org/index.php/Normal_Equation

하지만 이러한 normal equation 방법으로 최적의 파라미터값을 찾아내는 것은 현실적으로 쉽지 않을 때가 많습니다. 가령, 데이터의 sample 숫자가 늘어나는 경우 X의 inverse값을 계산하는데 복잡하여 너무 오랜 시간이 걸리게 됩니다. 또한, X의 역행렬이 존재하지 않을 경우도 있습니다. 이러한 문제를 해결하기 위해 경사하강법(gradient descent)을 활용할 수 있습니다.

개인적으로 gradient descent는 머신러닝/딥러닝 알고리즘들의 기초가 되는 핵심적인 방법론이지 않을까 생각됩니다. gradient descent의 이론적 아이디어에 대해 간단히 말씀드리면 iterative(반복적)하게 최적의 파라미터 theta를 찾아가는 과정이라고 할 수 있을 것 같습니다. 

4. Optimization - Gradient Descent

경사하강법(gradient descent)에서의 descent는 '함수의 변화도' 또는 '기울기'입니다. 즉, 함수를 미분하는 과정에서 얻는 값으로 해당 함수의 변화하는 정도를 나타내는 값이라 할 수 있습니다. 바로 이 descent가 경사하강법의 핵심적인 아이디어입니다. 함수의 기울기는 함수의 최대값 또는 최소값에서 0이 됩니다. 이 원리를 이용하여 mse가 최소가 되는 지점을 찾아낼 수 있는 것입니다. 정리하자면 기울기가 0이 되는 지점 혹은 함수의 변화가 큰 방향으로 이동하다 더 이상 변화가 이루어지지 않는 지점까지 iterative(반복적)하게 이동하는 것이 gradient descent라고 할 수 있습니다. 아래 왼쪽 그림은 제 설명을 잘 표현해준 그림입니다. 물론 여기서는 cost function이 간단한 2차함수 형태이기 때문에 gradient가 0이 되는 지점이 전역해(global optimum)라고 당당히 말할 수 있습니다. 하지만 실제로 cost function은 오른쪽 그림처럼 복잡한 형태를 가지게 됩니다. 따라서, gradient 값이 0이 되어 학습을 종료했는데 알고 보니 안장점(saddle point)이거나 지역해(local optimum)인 경우가 있습니다. 그래서 이를 해결하기 위한 고민이 또 이루어져야 하는데 이는 다음 시간에 알아볼 예정입니다. 

출처: https://sebastianraschka.com/faq/docs/gradient-optimization.html

gradient 값을 구한 후에는 이를 계속 파라미터 theta값에 업데이트 해야 합니다. 이때 단순히 업데이트하는 것이 아닌 학습률(learning rate)인 알파값을 곱하여 업데이트하게 됩니다. 이는 업데이트 속도를 조절하기 위한 것으로 local optimum에 빠지지 않기 위한 방지책입니다.학습률(learning rate)는 사용자가 직접 지정해줘야 하는 하이퍼 파라미터값으로 learning rate가 너무 작으면 최소값으로 수렴하는데 너무 많은 시간이 걸리게 되고 반대로 learning rate 값이 너무 크면 값이 수렴하지 못하고 발산하게 됩니다. 따라서 적절한 learning rate를 지정해주는 것이 중요하며 이는 hyper parameter tuning의 과정을 통해 찾아낼 수 있습니다.  

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

아래 그림은 하이퍼 파라미터인 learning rate의 크기에 따라 학습이 어떻게 진행되는지 보여주고 있습니다. 

출처: https://www.codingninjas.com/codestudio/library/nesterov-accelerated-gradient

마지막으로 gradient descent algorithm을 정리하자면, 임의의 theta에서 시작하여 cost function이 최소가 될 때까지 계속 theta를 업데이트 해나가며 최적의 파라미터 theta를 찾아내는 것이라고 할 수 있습니다. 물론 그 과정에서 지역해에 빠지거나 시간이 너무 오래 걸린다는 단점이 존재하게 됩니다. 이번 시간은 여기서 마무리하고 다음 차시에서 앞서 언급한 문제점들을 해결하는 다양한 gradient descent algorithm의 변형들을 살펴보겠습니다. 

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

0. Introduction

강제원 교수님의 [지도학습] 강의를 듣기 전에 [품질과 신뢰성] 강의를 들었을 때는 생소한 개념들과 용어 때문에 머리가 어질어질했었는데 지도학습은 기존에 머신러닝을 공부하면서 귀에 피가 날 정도로 많이 들었던 내용이라 왠지 자신감이 생기고 가볍게 듣고 넘어갈 수 있겠다는 생각이 들었습니다. 하지만 강의를 듣기 전의 저의 호기로웠던 태도는 순식간에 긴장으로 바뀌게 되었습니다. 왜냐하면 제 예상과 달리 한번쯤 들어봤던 내용들인데 영어로 되어있고 수학 수식과 함께 설명이 되다보니 아는 내용도 어렵게 느껴졌습니다. 저는 선형대수학이나 미적분에 대해서 공부해본 적이 없던터라 온갖 요상한 기호들로 정리된 수식들이 낯설고 어렵게 다가왔습니다. 그래도 교수님께서 친절히 하나하나 설명을 해주셔서 그나마 어찌어찌 따라갈만 했습니다. 여튼 이번 Part1 강의에서 배운 내용들을 복습차원에서 간단히 정리해보고자 합니다. 

1. Supervised Learning vs Unsupervised Learning

Machine Learning은 크게 supervised learning과 unsupervised learning으로 구분할 수 있습니다. 종종 강화학습(reinforcement learning)이나 기타 다른 학습 방법들도 분류의 기준에 포함이 되지만 대다수의 교과서나 아주 rough하게 정리된 내용들을 보면 통상 이 2가지 learning으로 구분하는 경우가 많습니다. supervised와 unsupervised를 구분하는 기준은 data에 label이 있는냐 없느냐입니다. 입력 X 와 출력 y가 쌍으로 구성되어 있다면 labeled data로 학습하는 supervised learning이고 반대로 출력값(output)이 없다면 unlabeled data로 학습하는 unsupervised learning입니다. 쉽게 말하면 답을 알려주고 학습시키느냐 아니면 정해진 답 없이 학습을 시키느냐로 설명할 수 있을 것 같습니다. 

2. Supervised Learning의 과정

지도학습(supervised learning)의 대표적인 기법들에는 회귀(regression)과 분류(classification)이 있습니다. labled data가 연속형(continuous)이라면 regression, 범주형(discrete)이라면 분류라고 볼 수 있습니다. supervised learning이 학습하는 과정을 간단히 살펴보자면 아래 그림과 같습니다. 

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

학습은 크게 두 가지 과정을 거치게 됩니다. 첫번째는 training 과정으로 주어진 학습 데이터(training data)로 학습을 진행하는 것입니다. 그리고 두번째는 testing 과정으로 학습된 모델을 통해 unseen input(혹은 testing data)을 입력하여 예측을 진행하는 것입니다. 이때, 첫번째 training 과정이 핵심인데 supervised learning에서는 training data를 입력 받아 output을 출력하게 되면 출력된 output을 desired output(우리가 가지고 있는 정답(label))과 비교하여 error를 찾아내게 됩니다. 그리고 이 error를 줄이는 방향으로 parameter들을 변경해 나가며 model을 교정하게 됩니다. 즉, supervised learning에서는 우리가 가지고 있는 정답과 모델이 내놓은 예측값을 비교해가며 모델이 정답에 가까운 예측값을 출력할 수 있도록 학습을 시키는 것이라고 정리할 수 있습니다. 

3. Supervised Learning의 X, Y 그리고 Hypothesis g

위의 과정을 수학적으로 정리해보면 다음과 같습니다. 우선 모델에 입력되는 X는 d차원의 입력 feature가 존재하는 백터이며, 모델이 출력하는 Y는 classification 문제의 경우 yes/no 또는 1/-1 등 2개의 label로 이루어진 binary decision이라고 할 수 있습니다. 그리고 X와 Y의 관계식이라고 할 수 있는 함수 f가 존재하며 이를 target function f라고 정의할 수 있습니다. 하지만, 우리는 현실적으로 이 세상의 모든 sample들을 전수조사할 수 없기 때문에 일부 sample로부터 target function f에 approximate할 수 있는 hypothesis g를 구할 수 있을 뿐입니다. 이 hypotheis g를 최대한 target function에 가깝게 하는 것이 machine learning 특히 이 강의에서는 supervised learning이 해야하는 목표라고 할 수 있습니다. 

4. Model Generalization

모든 data sample을 관찰하고 학습할 수 없다는 현실적인 문제는 data의 결핍이 존재할 수 밖에 없다는 사실로 이어지게 됩니다. 따라서, 우리가 보지 못하고 학습하지 못하는 data들에 대해서도 모델이 좋은 성능을 가지고 예측할 수 있도록 최대한 model을 일반화(generalization)해야 할 필요가 있습니다. generalization한다는 것은 training error, testing error을 최소화 하여 궁극적으로 generalizaion error 또한 최소화하는 것이라고 할 수 있습니다. 이 error들은 아래의 2가지 과정을 적절히 조합해 최소화해 나갈 수 있습니다. 

1) test error 와 train error 사이의 간극을 최대한 줄이기 (Overfitting 문제 해소)

test error와 train error의 차이를 줄인다는 것은 결국 학습한 모델이 일반적인(general) 성능을 가지게 되어 variance가 작아지는 것을 의미합니다. 즉, 모델이 train data를 잘 학습하고 동시에 test data도 잘 분류해내는 것입니다. 학습이 잘못되게 되면 train data에 대해서는 좋은 성능을 보이지만(train error는 작지만), test data에 대해서는 성능이 나쁜(test error는 상당히 큰) 경우가 생깁니다. 이를 variance가 큰 상태인 overfitting(과적합)되었다고 하고 regularization을 통해서 이 문제를 해소할 수가 있습니다. 

2) train error를 0에 가깝게 만들기 (Underfitting 문제 해소)

train error가 최소가 되도록 하는 것은 모델의 정확도가 높아지는 것을 의미합니다. 모델이 주어진 학습 데이터를 잘 학습하여 regression 또는 classification 문제를 잘 해결하는 것이 중요합니다. 하지만, 이러한 과정이 잘 이루어지지 않으면 편향성(bias)이 높아지는 underfitting(과소적합) 문제가 발생하게 됩니다. 즉, 모델이 너무 simple하여 성능(정확도)이 그리 높지 않다는 것입니다. 

위 2가지 과정을 정리하자면 test error ≒ train error ≒ 0 즉, test error, train error를 모두 0에 근사하게 만드는 것이 최적의 학습이라고 할 수 있습니다. 그리고 이 최적의 학습을 model generalization이라고 정리할 수 있습니다. 

5. Bias와 Variance의 Trade-off 관계

아래 그림은 overfitting과 underfitting을 설명하는 대표적인 예시입니다. 왼쪽은 underfitting된 모델로 비선형적인 데이터 분포를 선형 모델로 퉁치려는 모습입니다. 따라서 편향된(high bias & low variance) 모델이라 할 수 있고 반대로 오른쪽 그림은 주어진 데이터에 너무 과도하게 fit된 모습을 보이고 있습니다. 때문에 분산이 큰(high variance & low bias) 모델이라 할 수 있겠습니다. 결국 우리가 해야되는 것은 가운데 그림처럼 적절한 편향성(bias)과 적절한 분산(variance)을 가지는 optimum level의 모델을 찾아야 하는 것입니다. 

출처: https://opentutorials.org/module/3653/22071

이를 Bias와 Variance의 trade-off관계라고 합니다. bias가 작아지면 variance가 커지고 variance가 커지면 bias가 작아지는 상충관계를 보이게 됩니다. 따라서 이 둘 사이의 적절한 균형을 찾는 것이 위 4절에서 이야기한 model generalization이라고 할 수 있겠습니다. 아래 그림은 방금 설명한 bias와 variance사이의 trade-off를 보여주는 그림인데 아마 대부분 이 글을 보시는 분들은 꿈에 나올 정도로 지겹게 보셨으리라 생각됩니다. 

그럼 이만 part1에 대한 정리를 마치도록 하겠습니다. 

+ Recent posts