본문 바로가기

컴퓨터 공학/머신러닝

[모두를 위한 머신러닝/딥러닝 요약] 1강-7강

모두를 위한 머신러닝/딥러닝 요약 1강-7강



모두를 위한 머신러닝 딥러닝 공식 홈페이지이다. https://hunkim.github.io/ml/


공식 홈페이지에 들어가보면 동영상 강좌의 링크, 강의 슬라이드, Lab 슬라이드가 모두 준비되어있다. 

딥러닝에 대해서 아무것도 모르던 시절, 이 강좌를 보면서 입문하게 되었다. 강좌는 교수님께서 해당 Lecture의 개념을 필기와 함께 설명해주시고, 개념 강좌가 끝나면 Lab시간에 Tensorflow 코드를 살펴보고 실행해 보는 과정으로 진행된다. 이론에서 끝마치는 것이 아니고, 실제 코드를 통해 결과값을 볼 수 있으니까 기억속에 훨씬 더 오래 남는 것 같다. 이렇게 좋은 강의를 제공해 주신 김성훈 교수님과 관련자 분들께 너무 감사한 마음이다.


Lec0: Orientation


Lecture0에서는 간단하게 OT형식의 수업을 진행한다. 도입부에는 최근에 큰 화두였던 이세돌 선수와 구글 딥마인드의 바둑 대국의 사례를 소개하고, 딥러닝이 가진 Power에 대해 설명을 한다. 또한 이 강좌의 수강대상, 강좌 목표, 스캐쥴, 강의 방식을 간단하게 소개하고 수업자료를 만들 때 사용했던 여러가지 참고자료들을 언급하신다.


Lec1: Linear regression (선형회귀)


Explicit하게 Rule이 정의된 기존의 일반적인 프로그램의 한계를 설명하시면서 머신러닝이 도입된 배경을 설명해 주신다. 우리 인간의 세계를 수많은 Rule로 정의하려면 끝도 없기 떄문에 이를 머신러닝으로 해결해야 한다. Machine Learning을 두가지로 분류할 수 있는데 Supervised와 Unsupervised이다. Supervised 학습은 예를들어 고양이, 개, 컵, 모자 같은 사진들을 프로그램에게 학습시킬 데이터로 주는 것이다. 반면에 Unsupervised Learning 은 데이터 없이 스스로 Grouping을 하거나 분류를 하는 것을 말한다. 대부분의 ML은 Supervised Learning인데 이를 적용할 수 있는 문제는 대표적으로 Image labeling, Email spam filter, Predicting exam score 같은 것들이 있다. 더 Specific한 Supervised Learning의 예를 들어보면, 기말고사 전 까지의 시험점수를 바탕으로 기말고사의 점수를 예측하는 것은 Regression(회귀)문제이고, 공부한 시간을 바탕으로 Pass/Non-pass를 예측하는 것은 binary classification이고, e더 나아가서 공부한 시간을 바탕으로 학점이 A, B, C, D 또는 F 일지 예측하는 것은 multi-label classification이다.



Lec2: Linear Regression2 (선형회귀)


하나의 입력변수와 하나의 출력변수를 가진 예측함수를 만드는 것도 일종의 Linear Regression이다. 우선 이 Linear Regression모델을 만들기 위해서는 Cost function을 정의해야 하는데, 말 그대로 이 함수의 비용이다. 이 비용함수는 하나의 입력값과 하나의 출력값으로 짝지어진 여러개의 데이터가 있었다고 했을 때, 여기서의 y값과  이를 이용해서 임의의 기울기 W와 상수 b를 가진 함수에 대입했을 때의 출력값과의 차이를 제곱해서 평균한 것이다. 제곱을 하는 이유는 값의 차이가 음수가 되면 양수값과 합쳐지면서 값이 오히려 작아지기 때문에 모든 차이를 제곱하는 것이다. 이러한 Cost function을 수식으로도 알려주시는데 이러한 비용함수의 값을 최소로 하는 b와 W를 구하는 것이 좋은 Linear Regression모델을 만드는 과정이다.


Lec3: How to minimize cost (비용함수를 최소화 하는 방법)


Lecture 3에서는 어떻게 하면 비용함수를 최소화 할 수 있을 것인가에 대해 소개한다. Hypothesis 함수는 모델을 미리 가정하고 우리가 만든 일종의 가설함수이다. 그리고 이 강의에서는 hypothesis함수중에서 가장 간단하다고 할 수 있는 선형함수를 H(x)로 정했다. 이전 강의에서 다뤘던 시험공부 시간과 성적과의 관계 데이터에 이러한 가설함수를 적용해서 기울기를 바꿔보면서 Cost값을 직접 계산해본다. 가설 함수가 1차함수일 경우에는 Cost 함수는 아래로 볼록한 2차함수가 된다. 또한 Cost함수는 x나 y에 대한 함수가 아니라 기울기 W와 Cost에 대한 함수로 바뀌게 된다. 왜냐하면 데이터는 항상 일정한 값이기 때문이다. 따라서 이 함수에 꼭짓점, 즉 Cost가 최소가 되는 W를 찾게되면 최적의 W를 찾게 되고 이는 Cost를 최소로 만드는 Model을 만드는 것이다. 여기서 2차함수 꼭짓점의 기울기가 0이고 양쪽으로 기울기의 부호가 다르다는 점을 이용하면 Gradient Descent Algorithm을 적용할 수 가 있다. GDA는 아무점에서 시작하는데 W를 기존 W에서 Cost함수를 미분한 값에 Learning Rate을 곱해준 값을 계속해서 빼주면 W를 구할 수 있다. 이렇게 되면 W는 기울기가 0인 이차함수의 꼭짓점에 수렴하게 되고, 이때 Curve의 경사를 타고내려가는 것과 비슷하다고 해서 경사하강법이라고 이름이 지어졌다. 가설 함수의 변수가 2개이상이어서 그래프로 나타내기에 힘들다면 수식으로 똑같이 적용할 수 있다고 한다.



Lec4: Multivariable linear regression (다변수 함수의 선형회귀)


이전 강좌에서는 1변수 함수에 대한 regression을 해보았다. 그렇다면 만약에 3개의 입력변수가 3개라면 어떻게 Regression을 적용해야 할까.w1과 w2, w3를 차례대로 정하고 x1, x2, x3를 선언하면 된다. 그리고 이제는 Cost 함수를 곱할때 스칼라 값끼리 단순하게 하는 것이 아니라 Matrix를 정의해서 Dot Product를 하면된다. 그러면 여러가지 변수나 입력값들을  전부다 적지 않고 W 와 X로 표현 가능하다. 또한 Matrix로 연산을 하면 GPU로 병렬처리가 가능해서 여러가지 속도면에서 이점이 있다. 그리고 출력되는 값은 W matrix의 형태로 결정이 가능하다.



Lec5: Logistic (regression) classification


Hypothesis, Cost, Gradient decent 순서로 Regression 문제를 해결했던 저번 강의의 내용을 다시한번 복습했다. Classification 이 사용되는 문제들을 간략하게 예시를 들어 설명을 한다. Email Spam/Ham, show/hid, legitimate/fraud 같은 실생활의 문제들이 있다. 두가지 분류 기준이 있을 경우 하나는 0 그리고 나머지 하나는1 로 매핑할 수 있다. 이것을 Binary Classification이라 한다. 이 문제를 Linear Regression으로는 해결하지 못한다. 다른 방법이 필요하다. 바로 Logistic 함수를 사용하는 것이다. Logistic 함수는 Wx+b에 해당하는 H(x)를 0과 1사이의 공역으로 매핑시키는 비선형 함수다. Logistic 함수는 Sigmoid함수라고도 불린다. Logistic함수는 비선형 함수기 때문에 Cost함수를 구할경우 울퉁불퉁해 질 수 있다. 그러나 형태는 비슷하게 나오게 된다. 왜냐하면 단조 증가함수이기 때문에 합성함수를 하여도 함수의 개형은 유지되기 때문이다. 그리고 classification이기 때문에 새로운 Cost 함수를 제안할 필요가 있다. y값에 따라 다르게 함수를 정의한 함수인데 이 cost함수가 로그함수 기반이기 때문에 울퉁불퉁한 것들도 사라지면서 매끈하게 변한다고 한다. 그리고 이 Cost함수를 정의한 뒤에 GDA를 하면 자연스래 분류를 잘하는 방향으로 W가 이동하게 된다.



Lec6: Softmax classification, Multinomial classification 


만약에 이진 분류가 아닌 3가지 이상의 분류가 필요하다고 한다면, 직선 하나로는 분류가 불가능 하다. 이 때도 다변수 함수에 대해 Regression을 적용했던 것과 마찬가지로 변수 여러개를 사용하면 분류를 할 수 있다. Sigmoid란 0과 1 사이로 매핑해 주는 것인데 score값을 Probability로 변환해 준다.그리고 기존 데이터에 생성했던 One-Hot Encoding과의 비교를 통해 Cross Entropy라는 새로운 CostFunction을 구할 수 있고 이렇게 구한 Cost Function에 또 다시 GDA를 하면 최적의 분류 모델을 생성할 수 있다.



Lec7: Learning rate, data preprocessing, overfitting


 데이터를 학습시킬 때 질 높은 데이터 만큼이나 중요한 여러가지 요소들이 존재한다. 우선 첫째로 Learning rate라는 것이 있는데 너무 작으면 local minimum에서 학습이 멈추게 된다. 이 Learning Rate을 정할 때는 Cost Function을 관찰하며 reasonable한 값을 찾아나가야 한다. 또한 데이터를 학습시킬 때 정규화를 통해 값들을 일정한 범위내로 압축시키는 것이 좋다. 큰 값에 의해서 모델이 손상되는 것을 막을 수 있기 때문이다.  학습을 오랫동안 시키게 되면 트레이닝 데이터를 모델이 기억해 버려서 실제 일반적인 데이터 셋에서는 좋은 결과를 나타내지 못하는 Overfitting 현상이 발행할 수 있다. Overfitting에 대한 Solution은 더 많은 데이터를 넣거나 특징의 차원을 축소하거나 정규화를 하는 방법이 있다.