반응형

 

스텐포드 기계학습 강의  Lecture 4 - Perceptron & Generalized Linear Model | Stanford CS229: Machine Learning (Autumn 2018)

이번 강의 주요 내용

  • Perceptron(퍼셉트론)
  • Exponential Family(지수계열, 지수족)
  • Generalized Linear Model(GLM, 일반화 선형 모델)
  • Softmax Regression(Multiclass classification)소프트맥스 회귀

 

Perceptron

퍼셉트론을 배우는 이유는 지난 시간에 이어 분류 문제를 다루는 알고리즘 중에서 기본적이고 역사적으로 의미가 있는 알고리즘이기 때문입니다. 너무 간단하고 한계가 많아서 실제로 많이 사용되지는 않지만 이것이 기반이되어 최근에 많이 쓰이는 딥러닝이 발전되었기 때문에 퍼셉트론을 이해하는 것은 중요하다고 할 수 있습니다.

퍼셉트론에 대한 정의와 배경에 대한 이야기가 강의에서는 부족해서 이해하기 어려울 수 있습니다.

그래서 설명을 추가해 보았습니다.

위키의 정의는 아래와 같습니다.

퍼셉트론은 이진 분류를 위한 지도학습 알고리즘 중 하나이다. 이진 분류기는 숫자로 된 벡터를 인풋이 어떤 특정 분류 그룹에 속하는지를 판단할 수 있는 함수이다. 이것은 선형 분류기 중 하나이다. 다시 말하면, 피처 벡터와 가중치의 조합을 통해 선형 예측함수를 기반으로 예측을 만들 수 있는 분류 알고리즘을 말한다. 

In machine learning, the perceptron is an algorithm for supervised learning of binary classifiers. A binary classifier is a function which can decide whether or not an input, represented by a vector of numbers, belongs to some specific class.[1] It is a type of linear classifier, i.e. a classification algorithm that makes its predictions based on a linear predictor function combining a set of weights with the feature vector.

쉽게 풀어서 설명해 드리겠습니다.

퍼셉트론은 아주 간단히 말하면 '알고리즘' 입니다. 조금 더 길게 설명하면 '분류 알고리즘'입니다. 더 길게 설명하면 '여러 데이터 항목의 입력을 받아서 출력은 이진으로 0또는 1을 출력하는 분류 알고리즘' 입니다.  이것은 시그모이드 함수에서와 유사하게 아래와 같은 공식으로 정의 할 수 있습니다. 

g(z) = { 1 : z >= 0,      0 : z < 0 }

입력 z가 0 과 같거나 더 크면 1, 0보다 작으면 0을 출력하는 함수 입니다. 이것이 퍼셉트론 알고리즘 입니다. 이것을 그림으로 그려보면 아래 왼쪽과 같습니다. 오른 쪽은 시그모이드 함수의 그림입니다. (시그모이드 함수에서는 지수를 써서 부드러운 곡선으로 표시되었군요.) 그림 아래에는 이러한 함수의 가중치(세타, theta, θ)를 찾기위한 업데이트 방법(Gradient Descent)을 표시합니다.

 

모델과 비용함수를 정의했으니 데이터를 가지고 어떻게 적용되는지 알아보겠습니다. 1개의 데이터는 여러개의 피처를 가질 수있습니다. (주택 가격예측의 예에서 처럼 주택 크기, 주택 방 수 등 여러개를 가질 수 있습니다. 주택 크기 x1, 주택 방 수 x2)

중앙에 사선으로 가로지르는 점선이 분류 모델의 기준 선입니다. 그래서 오른쪽 위의 사각형과 왼쪽 아래의 원을 분류하는 모델 입니다. 사각형이 1, 원이 0 클래스라고 할때 아래의 그림처럼 새로운 사각형 데이터(x)가 들어오면 모델에서는 잘못 분류하게되고 이를 학습하기 위해 θ를 업데이트하게 됩니다.

아래 그림은 θ를 θ' 으로 업데이트하고 이에 따라 모델 선을 파란색 처럼 변경한 후의 그림 입니다. 이렇게 하니까 사각형 x 가 잘 분류되게 됩니다. 즉 학습이 잘 되었습니다. 이처럼 x 값에 따라서 θ를 업데이트 하게됩니다.

θ  ≈  x | y = 1    y가 1일때 세타는 x와 가까워 집니다

θ    x | y = 0    y가 0일때 세타는 x와 멀어 집니다

위와 같이 되는 이유는 x와 θ가 모두 벡터인데 두 벡터의 합이 같은 방향이면 커지고 90도 이상으로 벌어진 경우 작아지기 때문입니다.

 

이러한 방법으로 훈련 데이터를 이용해서 최적의 θ와 모델선을 찾는 것을 모델 학습 이라고 합니다. 모든 훈련데이터에 대해서 모델 학습이 끝나고 난 뒤 최종의 θ와 모델을 이용해서 예측(Prediction)을 실행할 수 있습니다.

 

 

Exponential Family(지수계열, 지수족)

Exponential Faimily는  지수함수와 연관되어 있는 특정 확률분포 종류를 말합니다.  그래서 정규분포에 대한 확률밀도함수, 베르누이분포에 대한 확률밀도함수, 가우시안 분포에 대한 확률밀도함수 등에 대해서 설명합니다.  다양한 분포에 대한 확률밀도함수를 배우는 이유는 y의 분포 유형에 따라서 적절한 추가 함수를 만들어서 모델을 적용해야하기 때문입니다. 뒤에 GLM에서 더 자세히 설명해 드립니다.

 

 

 

 

이러한 지수함수 계열은 데이터의 유형에 따라 선택해서 모델에 사용될 수 있습니다. 예를 들면 실수일 경우에는 가우시안을  이진 데이터의 경우 베르누이를, 양수(integer)인 경우 프아송을 ,  감마를, 여러차원의 값인 경우 드리크레를 사용할 수 있습니다.

 

 

 

 

Generalized Linear Model(GLM, 일반화 선형 모델)

In statistics, a generalized linear model (GLM) is a flexible generalization of ordinary linear regression. The GLM generalizes linear regression by allowing the linear model to be related to the response variable via a link function and by allowing the magnitude of the variance of each measurement to be a function of its predicted value.(소스 위키피디아)

GLM은 선형회귀의 일반화된 버전이라고 할 수 있습니다. 이것은 선형 모델이 링크 함수를 통해 반환 값에 영향을 주거나 예측된 값에 각 분산에 따른 변량을 적용하는 것에 의해 선형회귀를 일반화 한다. 아래 이미지의 하단에 있는 그림처럼 선형모델을 통해 에타(η) 를 찾아내고 이 에타를 분포에 따른 변형 지수함수가 적용된 모델에 입력으로 사용하여 최종 아웃풋을 산출하는 모델이다.

 

GLM의 가정들과 디자인 선택

1) x와 세타가 주어졌을때 y의 값은 지수함수계열에 훈련해서 찾은 에타를 적용한 것과 유사하다

2) 에타는 세타 트렌스포즈와 x를 곱한 것과 같다

3) 테스트할 때 아웃풋은 x와 세타가 주어졌을때 y가 나올 확률이다.

오른쪽 위/아래 2개의 화살표중 위는 training, 아래는 inference할 때의 내용을 말합니다. 여기서 에타(η)는 선형모델의 훈련을 통해 나온 결과 값이라는 것이 중요합니다. 훈련 시 입력된 데이터가 아닙니다. 

 

3개의 파라메타가 필요합니다.

 

아래는 GML에서 베르누이 분포를 이용한 GML 을 정리한 것인데 결국, 로지스틱 회귀의 경우 즉 시그모이드 함수를 이용한 경우와 같은 표현이 됩니다. 

 

 

아래는 정규분포를 가정한 일반 선형회귀 모델의 경우 데이터의 분포와 모델 라인을 설명하는 그림입니다.  오른쪽의 점으로 표시된 데이터를 가지고 세타를 찾기위해 비용함수와 GD(경사하강법)를 이용하고 찾은 세타를 이용해서 회귀 선을 그릴 수 있고, 그선이 의미하는 것은 각 x에 해당하는 y 값은 정규분포의 중심에 해당한다고 해석할 수 있습니다.

 

 

아래는 분류모델을 설명하는 이미지 입니다. 각 x에 해당하는 확률 값을 정리해보면 모델 라인을 기준으로 시그모이드 그래프와 같은 선이 그려집니다.

 

 

 

Softmax Regression(Multiclass classification)

(1:08:08)

동그라미, 삼각형, 사각형에 대한 분류를 하는 소프트맥스 회귀를 알아보겠습니다.

 

관련된 기호 셜명을 먼저 합니다.

 

선형회귀에서 하나의 y값을 만들기 위해 여러 x가 입력되는 경우 여러 개의 세타가 필요하여 θj 로 표시했습니다. 소프트맥스에서는 여러개의 클래스(동그라미, 삼각형, 사각형)가 있으므로 θj도 여러개가 필요하여 행렬로 표시할 수 있습니다. 여기서는 class의 약자를 써서 θc 라고 합니다.

클래스마다 여러 개의 세타가 있습니다.

 

 

 

학습된 θ를 이용해서 각 모델의 분류선을 그려보면 아래와 같습니다.

 

 

그럼 이제부터 위 모델을 이용하여 새로운 데이터(사각형에 가까운)가 주어졌을 때 어떤 클래스로 구분할지를 설명합니다. 각 클래스별로 시그모이드 함수의 결과에 해당하는 값들이 나옵니다. 이 값을 지수화하여 모두 양수화 시키면 오른쪽 그래프와 같이 됩니다.

 

지수화된 것을 다시 정규화(Normalize)하면 좌측의 아래 그래프와 같이 됩니다. 그러나 우리가 최종으로 원하는 것은 오른쪽 아래 그래프 처럼 클래스중에서 하나만 값이 있는 것입니다. 어떤 클래스에 해당하는지를 표시하는 것 입니다. 

 

좌측의 그래프 분포를 오른쪽의 그래프 분포로 바꾸는 것이 가능한데 이것을 Cross Entropy 로 할 수 있습니다. 공식은 아래와 같습니다.

위 공식을 가지고 GD를 이용해서 최적의 각 세타 값을 찾아서 적용하면 변환된 값을 구할 수 있습니다.  크로스 엔트로피의 파라메타를 찾을 때도 경사하강법(GD)를 쓰네요.

 

 

아래는 강의 동영상 링크입니다.

https://www.youtube.com/watch?v=iZTeva0WSTQ&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=4 

 

반응형
반응형

Lecture 3 - Locally Weighted & Logistic Regression | Stanford CS229: Machine Learning (Autumn 2018)

 

이번 강의 주요내용

  • Linear Regression(Recap 지난시간내용)
  • Locally Weighted Regression(지역가중회귀)
  • Probabilistic Interpretation(확률 해석)
  • Logistic Regression(로지스틱 회귀)
  • Newton's method(뉴턴 방법)

 

Linear Regression(Recap 지난시간내용)

  • (x^(i), y^(i)) : 입력 x값중 i번째 값(또는 백터)과, 출력 y값중 i번째 값을 의미한다. i 번째 예시라고 한다.
  • x^(i) ㅌ R^n+1 : 입력 x의 i 번째는 전체행렬(R^n+1) 의 일부이다.
  • y^(i) ㅌ R : 출력 y의 i번째는 전체행렬(R) 의 일부이다.
  • m : 전체 예시 수
  • n : 전체 입력항목(feature)의 수
  • 선형회귀 모델 : hθ(x) = ∑ j=0,m  θj xj    = θ^T X  (단, θ0 = 1)
  • 비용합수 : J(θ) = 1/2  ∑ j=0,m ( hθ(xj) - yj )^2   


지난 강의에서는 위의 내용들을 공부했고 이를 통해 기계학습 모델을 만드는 방법을 배웠습니다. 즉, 선형회귀 모델을 이용해서 2차원의 데이터에 대한 최적의 모델을 찾는 방법을 공부했습니다. 최적의 모델을 찾기 위해서는 실제 값과 모델이 출력한 값의 차이를 최소화하는게 필요합니다. 그래서 이런 차이 값을 계산하는 비용합수(코스트 함수, Cost Function)을 정의할 수 있고, 이 함수에 훈련 데이터를 하나씩 대입하면서 나온 차이들의 전체합을 최소화 시키는 파라메터(세타 theta θ)를 찾는 방법으로 Gradient Descent를 알아 보았습니다. 

  • θj := θj - α  편미분(θj)   * J(θ)
  • θj := θj - α ( hθ(x) - y ) * Xj
  • θj := θj - α  ∑ i=1,m ( hθ(x(i)) - y(i) ) * x(i)j   

 

Locally Weighted Regression(LWR)

그런데 1차원, 2차원 정도가 아니라 복잡한 선형인 경우 어떻게 해야할까요?

 

파라메타(Parametar, 모수: 평균,분산,표준편차 등) 를 정하는 방법에 따라 크게 두가지 학습방법으로 나뉩니다.

파라메트릭 학습 알고리즘(Parametric Learning Algorthm)은 주어진 데이터를 가지고 최적의 파라메타(모수)를 찾아 정하는 방법입니다. 지난 시간에 배운 선형회귀 방법이 그 예입니다.

비파라메트릭 학습 알고리즘(Non-Parametric Learning Algorthm)은 주어지는 데이터의 양에 따라서 파라메타 값을 누적해가면서 파라메타를 찾고 정의하는 방법입니다.

LWR은 비파라메트릭 방법중 하나로 그 컨셉은 이름에 나와있는 것처럼 로컬에 중심해서 회귀선을 만들고 추정하는 방법입니다. 이 내용을 그래프와 함께 설명해 줍니다. 선형회귀 에서와 같이 최적의 세타(θ)값을 찾는것이 아니라 지역에서 찾는 것입니다.

 

LWR은 그림에서 처럼 x값이 주어졌을 때 특정 구간을 기준으로 직선(공식/모델)을 만들고 이것에 따라 추정/예측하는 방법입니다. 이렇게 만들어주는 가중치를 찾는 것이지요. 즉, x 값과 가까운 것에 많이 신경쓰고 멀리 있는 것은 신경을 덜 쓰도록 만드는 것입니다. 이부부은 마치 딥러닝에서 어텐션(Attention) 방법이나 NLP에서 Word 2 Vec/n-gram 같은 것을 연상하게 합니다.

LWR = ∑ i=0,m  W(i)  ( y(i) - θ^T x(i) )^2   

 

가중치 행렬은  

W(i) = exp(-   (x(i) - x)^2  /  2 τ(tau)^2  )

입니다.    exp(지수) 표현이기 때문에 (x(i) - x) 값이 작아지면 W(i) 값이 1에 가까워지고 반대로 커지면 0에 가까워집니다.  일반적으로 그리고 기본적으로 사용되는 공식이라고 합니다. 이공식은 가우시안 분포와 같은 종모양의 분포를 따릅니다. 그래서 아래와 같은 그림이 그려집니다.

수평축에 x가 주어졌을때  그래프 상에 표시된 관측치(X표시)의 y 값을 그대로 사용하는게 아니라 하단에 있는 종모양의 녹색 선에 해당하는 가중치를 적용하여 계산하는 것입니다.  이렇게 계산할때 변수가 되는게 x 주변 좌/우 어디까지의 범위를 기준으로 w를 찾을 것인가 입니다. 이 범위의 크기에 따라서 모델이 오버피팅(over fitting) 또는 언더피팅(under fitting) 됩니다.  그리고 가우시안 형태만이 아니라 여러가지 다른 함수를 이용할 수 있다고 합니다.

 

 

Probabilistic Interpretation

왜 제곱오차를 이용할까요?

주택 가격예측 예시를 기반으로 선형회귀 모델을 만들어보면 아래와 같습니다.

y(i) = θ^T x(i) + e(i)

e(i)는 자연 발생한 오차를 말하는데 정규분포(가우시안분포)를 따른다고 가정합니다. 그리고 데이터 샘플들이 각각 IID(Independently and Identically Distributed)하다고 가정합니다. 각각 독립적이고 서로 영향을 안준다는 의미입니다.

이러한 가정은 x가 주어졌을 때 y의 값을 (x와 θ가 적용된) 변형 가우시안 분포에서의 확률로 구할 수 있다는 의미입니다. (이말은 정규 분포를 가정했을때 실제 값에 매우 가까운 값을 (MLE를 통해) 구할 수 있다는 것 입니다. MLE를 쉽게 말하면 정규분포를 가정하에 관측치를 기반으로 가장 가능성 높은 실제 값을 구하는 방법입니다. )

P(y(i) | x(i); θ) = 1 /  √2πσ  *  exp(-   ( y(i) - θ^T x(i) )^2  /  2 σ^2  )

 

(31:00) 용어 중 혼동하기 쉬운 것이 확률(Probability)과 가능도(Likelihood) 입니다.

probability of data : 파라메터가 정해진 경우 입력 데이터를 바꾸어 가면서 나온 값을 확률 이라고 부릅니다.

likelihood of theta  : 입력 데이터를 고정된 것으로 생각하고 파라메터를 변경해가면서 나온 값을 가능도/우도 라고 합니다.

 

MLE(Maximum Likelihood Estimation) 38:12

MLE란  L(θ) : Likelihood of theta 이고     l(θ) : log likelihood of theta(L(θ)에 log를 적용한 것) 일때    l(θ)를 최대화 시키는 θ를 찾는 것입니다. 

L(θ) : Likelihood of theta.      l(θ) : log likelihood of theta

결국 제곱 오차를 사용하는 것이 가우시안분포를 가정한 확률분포상의 가능도를 MLE로 계산하는 것과 같은 효과를 나타냅니다.  일상 대부분의 데이터가 정규분포를 따르고 있다는 가정에서 모델과 파라메타를 정규분포로 가정하는 것은 자연스러운 가정이고, 따라서 정규분포 기반의 MLE계산이나 제곱 오차가 같은 효과를 나타낸다는 것은 말이 되는 것 같습니다.

 

Logistic Regression

Classification 43:20

y 벨류가 0, 또는 1인 분류 문제에 대해서 설명합니다. 이처럼 2개 분류가 있는 것을 바이너리 분류(Binary classification)이라고 합니다. 분류 문제에 선형회귀를 적용하는게 안좋을 때가 많습니다. 특히, 아웃라이어가 아니면서 차이가 큰 특이한 x 값을 훈련 데이터에 포함하는 경우 선형회귀의 직선이 특이한 x값을 제외했을 경우랑 매우 다른 모양이 되어 정확한 분류가 안되는 경우가 있습니다. 그래서 교수님은 분류 문제에 선형회귀를 안쓰신다고 하네요.  

그래서 분류에 가장 많이 사용되는 로지스틱 회귀(모델)에 대한 설명을 해주십니다.

hθ(x) ∈ [0, 1]       

(For values of h subscript tehta of x lies in the set from 0 to 1)

즉, 모델이 x을 입력으로 받아서 0, 또는 1을 출력해야 합니다. 그래서 계산은 어떻게 되더라도 주어진 값을 0또는 1로 만드는 함수인 g(z)함수(시그모이드 함수, 로지스틱 함수)를 만들어서 적용합니다.

hθ(x) = g(θ^T x) =  1 / (1 + e^(-θ^T x))  

g(z) = 1 / (1 + e^-z)      : sigmoid function, logistic function  

이러한 함수를 다시 확률로 바꾸어서 종양의 양성과 음성을 분류하는 경우를 설명해 보면 다음과 같습니다.

P(y = 1 | x; θ) = h(x)        - 공식(1)

: 변수 x와 θ가 주어졌을 때 양성(y=1)일 확률은 모델이 x를 가지고 예측한 값과 같다.  

P(y = 0 | x; θ) = 1 - h(x)      -공식(2)

: 변수 x와 θ가 주어졌을 때 음성(y=0)일 확률은 1에서 모델이 x를 가지고 예측한 값을 뺀 것과 같다.  

y  {0, 1}   : 즉, y가 0또는 1만 가능하므로 위의 두 식을 아래와 같이 하나로 합칠 수 있습니다.

P(y | x; θ) =  h(x)^y * (1- h(x))^1-y     - 공식(3)

(위 공식에서 y=1 이라고 가정하고 계산해 보면, 모든 수의 영제곱(^0)은 1이기 때문에 (1-h(x))^1-y가 1이 되서 계산 결과 값이 h(x)가 나오게되며 결국 이것은 공식(1)과 같습니다.   반대로 y=0이면 공식(2)와 같아집니다.)

상기 내용을 기반으로 세타의 최대 유사도 공식을 구해보면 아래와 같이 됩니다.

L(θ) = P(->y | x; θ)   = i=1,m  p(y(i) | x(i); θ)    여기에서 p(y(i) | x(i); θ) 대신에 위의 공식(3)을 적용해 보면

i=1,m  h(x(i))^y(i) * (1- h(x(i)))^1-y(i)        - 공식(4)

선형회귀때와 마찬가지로 여기에 로그를 적용한 공식으로 바꾸면 아래와 같습니다.

l(θ) = Log L(θ)  = ∑i=1,m  y(i) log h(x(i)) + (1- y(i)) log (1-h(x(i))

로그 함수는 단조증가함수 이기 때문에 l(θ)를 최대화 시키는 θ를 찾는 것이나 L(θ)를 최대화 시키는 θ를 찾는 것이나 같은 의미입니다. 그래서 결국l(θ)를 최대화 시키는 θ를 찾는 것이 목표이며 이를 위해 Batch Gradient Descent를 수행합니다. 

θj := θj + α  편미분(θj) * l(θ)      - 공식(5)

이것은 선형회귀에서 했던 θj := θj - α  편미분(θj) * J(θ) 와 비교해보면 +/- 기호가 다르고 l(θ)/J(θ)가 다릅니다. 다른 이유는 선형회귀에서는 함수의 오차를 최소화 시키는 θ를 찾아야 하는 것이고, 로지스틱 회귀에서는 유사도를 최대화 시키는 θ를 찾아야 하기 때문입니다.

공식(5)의 편미분(θj) * l(θ) 부분을 실제로 미분하면 아래와 같습니다.

θj := θj + α ∑i=1,m  (y(i) - hθ(x(i)) * x(i)j)   - 공식(6)

지난 시간에 배웠던 선형회귀의 Gradient Descent공식(θj := θj - α  ∑ i=1,m (hθ(x(i)) - y(i)) * x(i)j  )와 비교해보면 부호가 다르고 차이를 구할때 y - h(x)를 할지 아니면 h(x)-y를 할지가 다릅니다. 위에서 선형회귀는 분류 문제에 적합하지 않다고 했는데 왜 위의 공식에서는 선형회귀와 유사한 공식이 사용될까요?

바로, GD 공식은 동일하게 2차원곡선(아래로 오목: convex 또는 위로 볼록: concave)으로 결국 최저점 또는 최고점을 찾는 공식이기 때문에 그렇습니다. (순서가 바뀐 것은 likelihood를 구할 때 분류 문제이기 때문에 확률 1에서 모델이 계산한 값을 빼는 방법으로 계산이 필요해서 바뀐 것 같습니다.) 

 

 

Newton's method (1:05:55)

설명을 위해 새로운 예를 사용합니다.

우리가 원하는 것은 f라는 함수인데, 이 함수는 가중치(세타θ) 가 주어졌을 때 0을 반환하는 함수 입니다.

f(θ) = 0

이렇게 만드는 θ를 찾기를 원하고 있는 거죠. 이를 위한 비용함수 l(θ)의 최대값을 찾는 것이지요.

이말은 예를 들면 함수를 log likelihood 함수의 미분(ㅣ'(θ))이 0이되는 θ를 찾는 것이 됩니다. 즉, 

f(θ) = l'(θ) = 0

(지금 우리가 원하는 것은 Gradient Descent 와 같이 특정 조건을 만족시키는 값을 찾기 위한 반복 알고리즘 입니다.)

x1 이 주어졌을때 f(x1) 값을 가지고 미분하여 가로축과 만나는 x2를 알수 있고 다시 x2로 이동하고 이를 이용하여 f(x2)계산해서 x3의 위치를 알 수 있습니다. 이러한 방법으로 계속해나가면 빠르게 0과 만나는 점을 찾을 수 있습니다. 이러한 방법이 뉴튼의 방법 입니다.

아래는 위키에 정의된 뉴턴 방법입니다.

"수치해석학에서, 뉴턴 방법(영어: Newton's method)은 실숫값 함수 영점을 근사하는 방법의 하나이다. 뉴턴-랍슨 방법(영어: Newton–Raphson method)이라고도 불린다."

강의중 판서 내용

위에서 글로 설명했던 내용을 공식으로 정리한 판서 내용 입니다.  시간(t)에 계산된 theta에서 기울기를 기준으로한 변화량 델타(delta, △) 만큼을 빼서 시간(t+1)의 값(위치)를 찾아내고 이를 반복합니다.

 

이것은 Quadratic Convergence 라는 특징을 갖는데, 예를 들면 첫번째 에러가 0.01 error라고하면 다음 반복에서 0.0001 error가 발생하고 그 다음 반복에서 0.00000001 error가 발생한다. 빠르게 낮은 에러로 접근한다 는 것입니다. 즉, 엄청 빠르게 수렴한다는 것입니다. 그래서 Gradient Descent와 다르게 빠르게 변수를 찾을 수 있습니다.

단점은 큰 행렬을 전환해야한다는 것입니다. 그래서 파라메타 수가 작으면 (보통 50개 이하인 경우) 연산이 빠르지만 더 많으면 백터 연산이 오래걸려서 비효율적입니다. 이럴땐 Gradient Descent를 쓰는게 더 효과적이라고 합니다. 

 

 

아래는 강의 영상 링크입니다.

https://www.youtube.com/watch?v=het9HFqo1TQ&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=3 

 

 

 

 

반응형
반응형

주요내용:

  • Linear Regression(선형회귀)
  • Batch/Stochastic Gradient Descent(SGD: 일괄/확률통계 경사 강하법)
  • Normal Equation(정규 방정식)

 

 

지난 시간에 이야기했던 주택 사이즈를 통한 주택 가격 예측하는 예를 설명합니다.

 

전통적인 지도학습의 프로세스

 

전통적인 지도학습의 프로세스를 위와 같이 말하면서 결국 기계학습의 목표는 (Inferencing Data)입력을 받았을 때 적절한 추정(Predicted Data의) 예측/매핑 값을 만드는 모델을 만드는 것이라 말합니다.

기계학습 모델을 만들때 상기 프로세스에 있는 요소들에 대한 많은 의사결정들이 필요한데(어떤 데이터를 쓸것인지, 어떤 알고리즘을 쓸것인지 등) 각각에 대해 적합한 의사결정을 하는 것이 좋은 모델을 만드는데 매우 중요하다고 합니다.

 

 

선형회귀(Linear Regression)

모델(가설, h)의 표현 방법중하나가 선형회귀(Linear Regression)입니다. 기본표현식은 아래와 같습니다. 입력 데이터 항목이 한 개(x, 예시에서는 주택 크기)가 있는 경우입니다.

h(x)= θ0+ θ1*x

즉, 주택 크기를 입력해서 가격을 예측하는 모델을 만든다고 할경우 x는 주택 크기가 되고 h(x)는 주택 가격(모델의 아웃풋/예측값)이 됩니다.

주택 크기, 방의 수 처럼 항목이 2개인 경우는 h(x)= θ0 * x0 + θ1 * x1 + θ2 * x2  입니다. 

항목이 많아질 경우 수식이 길고 복잡해지므로 간단한 수식으로 정리하면 아래와 같습니다.

h(x) 를 변형한 수식(단, x0 = 1)

향후 나올 표기법들에 대핸 정리해 봅니다.

    • θ = parameters 파라메타라고 합니다. feature 수 만큼의 파라메타가 필요하므로 j 개의 백터로 표시할 수 있습니다.
    • m = 훈련 데이터 예시의 갯수
    • x : "inputs"/features
    • y : "outputs"/target
    • (x, y) = 하나의 훈련 데이터 예시
    • (x(i), y(i)) = i번째 훈련 데이터 예시, x(1) = x의 1번째 훈련 데이터 값
    • n = feature 갯수

  • 0위에 화살표 = 모든 원소값이 0인 백터
  • :=  는 := 오른쪽에 있는 값을 왼쪽으로 할당한다는 표현( a := a + 1의 의미는 a의 값을 1 증가시킴)

 

좋은 모델은 무엇일까요!  모델의 아웃풋(예측값, h(x))이 실제 정확한 주택 가격인 y와 일치하는 것입니다.  이렇게 잘 일치시키기 위해 모델에서 바꿀 수 있는 값은 파라메터(θ)값 밖에 없습니다. 따라서 적절한/좋은 파라메터를 찾는 것이 좋은 모델을 만드는 것입니다. 다시 말하면 모델의 아웃풋과 실제 y 값의 차이를 작게 만드는 것이 목표입니다. 이것을 공식으로 바꾸어보면 

minimize (h(x^1) - y^1)   이렇게 됩니다. x^1 과 y^1 의 차이를 최소화 하는 것입니다.

x, y가 하나의 값이 아니기 때문에 여러 x(즉, x^(i))와 y(y^(i))에 대해서 누적 합계 계산이 필요합니다. 전체 훈련 데이터 예시 개수가 m 이므로 아래와 같이 정리가 됩니다.

J(θ) = 1/2  ∑ j=0,m ( h(xj) - yj )^2      (여기서 j는 훈련 데이터 예시의 인덱스)

이처럼 모든 훈련 데이터에 대한 전체 오차를 계산하는 함수 J(θ)를 코스트 함수(Cost function)이라고 합니다.  제곱으로 인해 일반적으로 값이 커지기 때문에 전통적으로 1/2로 값을 줄여준다고합니다. 그리고 오차 계산 시 왜 그냥 차이나 차이 절대값 등 다른 값을 안쓰고 제곱을 쓴 이유는 가우시안과 연계되어 있어서 라고하며 다음주에 더 자세히 말하겠다고 합니다.

 

이제 코스트 함수 J(θ)를 최소화하는 θ값을 찾기만 하면 좋은 모델을 만들 수 있습니다. 시작시 일단 θ를 모두 0 으로 정하고 모든 인풋 데이터 x에 대해서 h(x)를 계산하고 각각에 해당하는 y와의 차이를 제곱하여 J(θ)구할 수 있습니다.   그리고나서 θ값을 바꾸어가면서 가장 작은 J(θ)값을 찾으면 됩니다.  θ를 찾는 방법에 대한 설명을 위해 Gradient Descent를 설명합니다.

 

 

Gradient Descent

 

GD(Gradient Descent)를 아기 걸음에 비유하여 설명합니다. 그림과 같은 언덕(산)이 있을때 재일 위에 있는 검은 십자 표시에 아기가 서있고 제일 낮은 곳으로 가기위해 걸음을 걷는다고 생각해봅니다. 아기는 보폭에 해당하는 주위 360도를 둘러보고 제일 낮은 곳에 있는 것으로 보이는 방향으로 한걸음 옮김니다. 다시 이자리에서 주위 360를 돌아보고 제일 낮을 곳을 찾아 그쪽 방향으로 또 한걸음 옮김니다. 이렇게 계속하다보면 제일 아래쪽에 있는 검은 십자 표시에 다다른다고 설명합니다. GD의 특징으로 처음 시작점이 다르면 최종으로 다다르는 곳이 다를 수 있다는 것입니다. 

θ 값을 어떻게 바꿀 것인가? 방법을 GD로 사용했을 때 공식은 아래와 같습니다.

θj := θj - α  편미분(θj)   * J(θ)

α은 학습율(learning rate, 아기의 한 걸음 크기)이고, J(θ)를 시그마 σ가(전체합이) 아닌 1개의 테스트 데이터에 대해서 적용한다고 가정후 공식을 정리하면 아래와 같이 됩니다.

θj := θj - α ( hθ(x) - y ) * Xj

코스트 함수의 값이 커지면 학습이 안되고 있다는 것인데 문제의 이유중 하나가 학습 비율(Learning Rate)을 너무 크게 잡은 경우가 그럴 수 있습니다. 그래서 응 교수님은 두배씩 증가한 몇개의 학습 비율을 가지고(O2, O4, O8...) 테스트해 본다고 하십니다.

위 공식은 1개 태스트 데이터에 대해서 한것이고 이를 모든 훈련데이터에 적용하는 공식은 아래와 같습니다.

θj := θj - α  ∑ i=1,m ( hθ(x(i)) - y(i) ) * x(i)j   

(굵은 글씨 부분이 J(θ)를 θj로 편미분하는 것과 같은 부분입니다.,  j 는 피처의 순서로 예시의 경우 주택 크기와 방의 개수 데이터를 이용하므로 2 + 1(x0)이 되서 0부터 2까지가 됩니다.) 33:29

위 식을 말로 풀면 j번째 세타 값을 업데이트하는데 이 업데이트하는 값은 기존 세타 값에서 학습율과 편미분 값의 곱한 값을 빼서 구하는데, 이 편미분 값이란 모델이 출력한 값과 실제 값의 차이를 제곱한 값들의 합을 x의 값을 곱한 값을 모두 합친 값입니다.

이처럼 모든 훈련 데이터에 대해서 적용하는 Gradient Descent 방법을 Batch Gradient Descent라고 합니다.

 

스토케스틱 그래디언트 알고리즘

 

좋은 질문과 답들이 나옵니다. 예를 들면 Batch GD가 더 정확한거 아닌가? 그런데 왜 실무에선 Stocastic GD를 많이 쓰나?, 언제 SDG를 중지해야 하나? 등입니다.

 

 

Normal Equation(정규 방정식)

선형회귀의 경우 이런 GD를 하지 않고도 바로 최소값을 알 수 있습니다. 이것이 Normal Equation(정규 방정식)입니다. 

이를 위해 함수와 행렬과 미분의 계산 방법을 설명해줍니다. 그리고 다양한 행렬 연산에 대한 기본 정의/특성을 설명해주고 숙제로 직접 증명해보라고 합니다.  이러한 행렬 연산을 이용하여 J(θ) 를 행렬간의 연산으로 바꿀 수 있다고합니다.

J(θ) = 1/2 ∑j=0, m  (h(xj)-yj)^2

        = 1/2 (Xθ - y)^T (Xθ - y)

미분θ * J(θ) = 1/2 미분θ (θ^T X^T - y^T) (Xθ - y)

= 1/2 미분θ [ (θ^T X^T Xθ) - (θ^T X^T y) - (y^T Xθ) + (y^T y) ]

= X^T Xθ - X^T y  =(set) 0백터

X^T Xθ - X^T y   "Normal Equation"

결국 찾고 싶은 값인 θ는 아래와 같은 공식으로 바꿀 수 있습니다. 

θ =  (X^T X)^-1  -  X^T 

이렇게 하면 Gradient Descent 알고리즘을 통해 θ값을 찾지 않아도 X^T와 y를 이용해서 한번에 J(θ) 값을 제일 작게 만드는 θ값을 계산할 수 있습니다. 다시 말하면 J(θ)를 최소로 만드는 θ를 찾았다는 것은 가장 오차를 작게 만드는 θ를 찾은 것이므로 이값이 들어있는 모델(식)이 가장 좋은 모델이 되는 것입니다.  

내용이 좀 많고 행렬에 대한 이해가 조금 있어야 이해가되는 강의 입니다.  그럼에도 기계학습에서 감히 가장 중요하다고 할 수 있는 비용합수/로스함수 Cost Function(Loss Function)과 Optimizer(Gradient Descent)에 대한 내용을 설명해주는 좋은 강의 입니다.  아래에는 강의에 나오는 주요 용어에 대한 간단한 정의와 강의 링크입니다.

감사합니다.

 

 

 

Linear Regression(선형회귀)

통계학에서, 선형 회귀(線型回歸, 영어: linear regression)는 종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법이다.(소스: 위키피디아)

 

Batch/Stochastic Gradient Descent(SGD: 일괄/확률통계 경사 강하법)

SGD : 미분과 같은 연속적 특징을 가지는 목적 함수의 최적화를 위한 반복적인 방법의 하나이다.(소스: 위키피디아) Stochastic gradient descent (often abbreviated SGD) is an iterative method for optimizing an objective function with suitable smoothness properties (e.g. differentiable or subdifferentiable).

 

Normal Equation(정규 방정식)

정규방정식(Normal equation 혹은 Ordinary least squares 혹은 linear least squares)은 통계학에서 선형 회귀상에서 알지 못하는 값(parameter)를 예측하기 위한 방법론이다.(소스: 위키피디아)

 

 

강의 영상

https://www.youtube.com/watch?v=4b4MUYve_U8 

 

반응형
반응형

오래된(?) 강의지만 다시 봐도 참 좋은 강의입니다. 앤드류 응 교수님의 스탠포드 컴퓨터 사이언스 과목의 299번 과목의 첫 번째 강의입니다. 앤드류 응 교수는 MIT에서 석사, UC버클리에서 박사를 받고 스탠포드에서 교수로 일하신 분입니다. 강화 학습 관련 훌륭한 연구를 하셨고, 무엇보다 대중에게는 온라인 학습 포탈로 많이 알려진 MOOC의 일종인 코세라(COURSERA)를 만들고 활성화시킨 분으로 유명합니다. 구글 브레인의 설립자이기도 하시고 바이두에서도 인공지능/기계학습 관련 많은 연구를 주도하신 분입니다.
첫 강의라 전반적인 운영 내용 등 학습과 조금 관련 없는 이야기들이 나오긴하지만 후반부 부터는 기계학습에 대한 간단한 정의와 예를 들어가며 설명해주는 내용이 이해하기 쉽습니다.
들어보면 좋은 내용이 많은 것 같습니다. 주요내용은 아래와 같습니다.
기계학습이란 무엇인지 설명해주고(36:23), 지도학습(Supervised Learning)에 대해서도 예를 들어 설명해줍니다. (39:38) 주택의 크기와 가격을 예로 들어 설명하고, 종양의 크기를 가지고 양성(암)과 음성(물혹)을 학습하는 것도 설명해줍니다. 모델의 아웃풋이 숫자인 경우(Regression)와 0과 1의 분류인 경우(Classification)를 설명합니다. 더 정확한 학습을 위해 종양의 크기와 환자의 나이를 가지고 분류하는 방법을 예로 설명해주고, 실제 현장에서는 더 많은 데이터를 이용하고 이렇게 많은 데이터를 이용할 경우 서포트 백터 머신(Support Vector Machine)이라는 방법(커널)을 이용하여 무한대의 데이터(피처)를 학습할 수 있음을 설명해줍니다.
인공지능(기계학습)의 목적은 인풋 x에 대한 아웃풋 y 를 매핑하는 것을 학습하는 것이라고 설명합니다. x가 주어졌을 때 가장 적합한 y를 매핑하는 것이지요. 그러면서 오래전에 카네기멜론 대학에서 만든 자율주행 자동차에 대한 영상을 보여주면서 x와 y에 대해서 설명해줍니다.(53:00)

Input은 x(도로 전방 사진 이미지)이고 y는 핸들을 오른쪽으로 틀어야할지 왼쪽으로 틀어야 할지입니다. 모델의 학습을 위해서 사람이 도로 전방 사진(x)에 대해서 실제로 어떻게 핸들을 회전하는지를 가지고 학습했다고 합니다.
기계학습 전략(58:10)은 어떻게하면 수많은 의사결정을 내리고 반복적으로 수행해야 하는 모델 개발에서 시스메틱 한 방법으로 진행할지를 찾는 방법에 대해서 이야기한다고 합니다. 몇 개월 씩이나 몰두해서 문제를 해결하기 위한 모델을 개발하지 말고 접근하려는 방법이 잘못되었다는 것을 빨리 알아낼 수 있는 방법에 대해서 향후 수업에서 이야기할 거라고 합니다. 유사한 예로 프로그램 코드를 빠르게 실행시키는 방법은 속도가 빠른 언어로 프로그램을 변경하는 것이 아니라 프로그램 로직에서 병목을 찾아 이를 변경하는 것이 경험 있는 사람들이 해결하는 방법이라고 말합니다.
딥러닝(Deep Learning)에 대해서는 cs230에서 더 깊이 다룬다고 하네요. (1:04:00)
비지도 학습(Unsupervised Learning)에 대해서는 구글 뉴스의 예를 들면서 설명해 줍니다. 방송사나 리포터가 다르더라도 같은 주제의 내용을 묶어서 보여주는 기능이 비지도 학습을 통해 제공되는 것이라고 설명합니다. 또한 칵테일 파티 문제도 비지도 학습으로 다룬다고 합니다.


강화 학습(Reinforcement Learning) (1:11:19)에 대해서는 스탠포드 자율비행 헬리콥터를 예로 들어 설명합니다. 최적의 비행 방법을 찾는 것을 강화 학습하여 진행했다고 합니다. 강화 학습의 예로 애완견에게 좋은 습관을 들이도록 가르칠 때의 예를 들어 설명합니다. 잘했을 때 칭찬해주고 잘못했을 때 벌을 주는 방법으로 강아지가 좋은 습관을 들이도록 한다는 내용입니다. (강아지) 로봇이 장애물을 넘는 방법을 학습하는 것도 강화 학습을 이용한다고 합니다.(1:13:40)

강화학습을 통해 학습한 강아지 로봇이 장애물을 넘는 모습



다음 강의는 아래 링크를 클릭해 주세요
https://bigdatamaster.tistory.com/143


1강의 자세한 내용은 아래의 유튜브 동영상을 참고해주세요.
감사합니다.


https://www.youtube.com/watch?v=jGwO_UgTS7I

반응형

+ Recent posts