인공지능-기계학습/스탠포드 강의

스탠포드 기계학습 강의 Lecture 2 - Linear Regression and Gradient Descent | Stanford CS229: Machine Learning (Autumn 2018) 선형회귀, 경사하강법, 정규 방정식

The Yellow Lion King 2022. 3. 2. 19:28
반응형

주요내용:

  • 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 

 

반응형