Lecture 2

리치·2023년 3월 24일
0

CS229

목록 보기
2/21
post-thumbnail
post-custom-banner

deep.daiv 동아리에서 진행했으며 팀원과 함께 정리한 내용입니다.

Lecture 2

Part.1 Linear regression(선형 회귀)


Process of supervised learning: feed training set to a learning algorithm, and make prediction about housing prices

Untitled

💡 $h$(hypothesis)란, input과 output의 관계를 나타내는 함수이다.

size of house 라는 입력값이 hh함수에 들어가게 되면, estimated price 라는 출력값이 나오게 된다. 이렇게 주어진 트레이닝셋을 알고리즘으로 학습시켜 hh함수를 만들어, 더 정확한 결과값이 나오게 하는 것이 지도 학습이다.

Untitled

h**h함수는 어떻게 구현할까?**

h(x)=θ0+θ1x1+θ2x2,h(x)=j=0j=nθjxj,x0=1θ=[θ0θ1θ2]x=[x0x1x2],θjxj=θTx=[θ0θ1θ2]×[x0x1x2]h(x)=\theta _0+\theta_1x_1+\theta_2x_2 , \\h(x)=\sum_{j=0}^{j=n} \theta_j x_j , x_0=1 \\ \theta= \begin{bmatrix}\theta_0 \\ \theta_1 \\ \theta_2 \end{bmatrix} x= \begin{bmatrix}x_0 \\ x_1 \\ x_2 \end{bmatrix} , \theta_jx_j=\theta^Tx= \begin{bmatrix}\theta_0 &\theta_1 & \theta_2 \end{bmatrix} \times \begin{bmatrix}x_0 \\ x_1 \\ x_2 \end{bmatrix}
💡 $\theta_j$: 가중치(parameter or weights)라고 불리는데 , $\theta_j$를 조정하여 주어진 데이터에 가장 잘 맞는 직선을 찾아갈 수 있다.

nn: input 변수(feature)들의 개수이다.

hypothesis 함수의 정확도를 측정하기 위해 cost function(비용함수)가 필요하다.

costfunction=J(θ)=12i=1m(hθ(xi)yi)2cost function=J(\theta) = \frac{1}{2}\sum_{i=1}^{ m } {(h_\theta(x^i) - y^i)^2}
💡 $m$ : 트레이닝 샘플의 개수이다.

Batch Gradient descent(경사하강법)


경사 하강법은 앞서 설명한 cost function 을 최소로 만드는 적당한 parameter θ\theta 값을 찾는 일반적인 방법 중 하나이다.

θj:=θj12αi=1m(h(xi)yi)xji( for j=0,1,2... n )=θjθjJ(θ)\theta_j := \theta_j - \frac{1}{2}\alpha\sum_{i=1}^{ m } {(h(x^i) - y^i)}x_j^i \\ \text{( for j=0,1,2... n )}=\theta_j-\frac\partial{\partial\theta_j}J(\theta)
💡 $\alpha$ : learning rate $:=$ : 새로운 $\theta$ 값의 항을 왼쪽에, 이전의 $\theta$에 어떤한 변화를 주는 항을 오른쪽에 두는 기호이다.
  1. start with some θ\theta (say θ=0\theta = \vec{0} )
  2. Keep changing θ\theta to reduce J(θ)J(\theta)
  3. Repeat until convergence
  • More details about θj\theta_j
    1. θj:=θjαθjJ(θ)  (for j=0,1,2)\theta_j := \theta_j - \alpha \frac\partial{\partial\theta_j}J(\theta)\space\space (for\space j = 0,1,2)

    2.  θjJ(θ)=θj(hθ(x)y)2=2×12(hθ(x)y)θj(hθ(x)y) (by chain rule)=(hθ(x)y)θj(θ0x0+θ1x1+...+θnxny)=(hθ(x)y)xj\space \frac\partial{\partial\theta_j} J \left(\theta\right) \\ = \frac\partial{\partial\theta_j}{(h_\theta(x) - y)^2} \\ = 2 \times \frac{1}{2}(h_\theta(x) - y) \frac\partial{\partial\theta_j}(h_\theta(x) - y) \space (by\space chain\space rule) \\ = (h_\theta(x) - y)\frac\partial{\partial\theta_j}(\theta_0x_0+\theta_1x_1 + ...+ \theta_nx_n - y) \\ = (h_\theta(x) - y)x_j

    3. θj:=θjα(hθ(x)y)xj\theta_j := \theta_j - \alpha (h_\theta(x) - y)x_j

    4. We have ithi^{th} examples. θj:=θjαi=1m(h(xi)yi)xji\theta_j := \theta_j - \alpha\sum_{i=1}^{ m } {(h(x^i) - y^i)}x_j^i

      💡 편미분항을 빼주는 이유는 기울기가 양수이면 왼쪽으로 움직이고,반대로 음수이면 오른쪽으로 움직여야 local optima로 가까워지기 때문이다.

이러한 과정들을 마치게 되면 θ\theta의 값이 계속 변하면서 hh함수를 조정하고, 주어진 데이터에 가장 적합한 직선을 만들어내게 된다. 이러한 과정을 그림으로 살펴보면,

$\theta$의 값이 바뀜에 따라, 비용함수 $J(\theta)$의 전역 최솟값에 점점 도달하는 것을 볼 수 있다.
θ\theta의 값이 바뀜에 따라, 비용함수 J(θ)J(\theta)의 전역 최솟값에 점점 도달하는 것을 볼 수 있다.

Untitled

  1. learning ratelearning\space rate를 의미하는 α\alpha의 값은 너무 작다면 반복량이 많아지면서 속도가 느려지고, 너무 크다면 overshoot하게 되므로 적당한 값을 설정해주는 것이 좋다. (보통 0.001)
  2. θj\theta_j의 값은 한번에 업데이트 해야한다.
  3. Batch Gradient Descent 하나의 파라미터를 업데이트 하기위해서 i=1m(h(xi)yi)xji\sum_{i=1}^{m} {(h(x^i) - y^i)}x_j^i 을 계산한다. 때문에 거대한 크기의 데이터에 사용하기 부적합하다.

Stochastic Gradient Descent(확률적 경사하강법)


Batch Gradient Descent의 느린 속도의 단점을 보완하기 위해 Stochastic Gradient Descent를 사용한다.

Repeatfor i=1 to mθj:=θjα(h(x(i))y(i))xj(i)Repeat \\ \quad for\space i = 1\space to \space m \\ \qquad \theta_j := \theta_j - \alpha {(h(x^{(i)}) - y^{(i)})}x_j^{(i)}
(좌: 확률적 경사하강법), (우: 경사하강법)
(좌: 확률적 경사하강법), (우: 경사하강법)

SGD의 움직임을 보면, BGD보다 역동적으로 움직인다. 하지만, Global Minimum에 가깝게 움직이고 대신 수렴하지는 않는다. 이러한 특성 덕분에, BGD의 경우 local optima가 되면 더 이상 업데이트 하지 않지만, SGD는 local optima가 되더라도 global minimum을 찾을 가능성을 준다.

SGD를 사용하게 되면 global minimum에 근접한 값을 얻을 수 있지만, 최적의 값은 아니다. 이를 보완할 방법 중 하나는, learning rate를 시간이 지남에 따라 감소시키는 것이다. 변수의 움직임이 점점 더 작은 폭으로 움직이게 되어 global minimum에 가까운 값을 찾을 수 있다.

Normal equation(정규 방정식)


정규 방정식을 통해 θ\theta값을 한 번에 구할 수 있다. 정규방정식은 오로지 선형회귀 알고리즘에서만 사용가능하다.

  1. BGD 방식과는 다르게 learning rate 가 필요하지 않다
  2. 정규방정식을 사용하면 반복적인 알고리즘의 구현 없이 한번에 θ\theta를 구할 수 있다. ****
  3. n이 많아질수록 계산은 거의 불가능하다.
define θJ(θ)=derivative of J(θ) respect to θRn+1define\space \nabla_\theta J(\theta) = derivative\space of\space J(\theta) \space respect\space to\space \theta \in \mathbb{R}^{n+1}
θJ(θ)=[Jθ0Jθ1Jθ2]\nabla_\theta J(\theta) = \begin{bmatrix} \frac{\partial J}{\partial\theta_0} \\ \frac{\partial J}{\partial\theta_1} \\ \frac{\partial J}{\partial\theta_2}\end{bmatrix}
  • Example Suppose A=(A11A12A21A22) is a 2 by 2 matrixSuppose\space A = \begin{pmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{pmatrix}\space is\space a \space 2\space by\space 2\space matrix The function f:R2×2R is given f(A)=A11+A122The\space function\space f:\mathbb{R}^{2\times2} \mapsto \mathbb{R}\space is\space given\space f(A) = A_{11} +A_{12}^2 Af(A)=(fA11fA12fA21fA22)=(12A1200)\nabla_A f(A) = \begin{pmatrix} \frac{\partial f}{\partial A_{11}} & \frac{\partial f}{\partial A_{12}} \\ \frac{\partial f}{\partial A_{21}} & \frac{\partial f}{\partial A_{22}} \end{pmatrix} = \begin{pmatrix} 1 & 2A_{12} \\ 0 & 0 \end{pmatrix}

J(θ)J(\theta)의 도함수=0 을 구하는 이유는, J(θ)J(\theta)의 전역 최솟값을 구하여, 그에 해당하는 θ\theta값을 구하기 위해서이다.

  • What is tr A or ‘trace of A ? n by n 행렬 A에 대해서, 모든 대각항들의 합으로 정의한다 :
    trA=i=1nAiitr A = \sum_{i=1}^{n} A_{ii}
    2개의 행렬 A,B 에 대해, 두 행렬의 곱이 정사각행렬이면 다음 특징을 만족한다.
    1. trAB=trBAtr AB = tr BA

    2. trABC=trCAB=trBCAtr ABC = tr CAB = tr BCA

      또한, 두 행렬 A,B가 정사각행렬이면 다음을 만족한다.

    3. trA=trATtr A = tr A^{T}

    4. tr(A+B)=trA+trBtr (A+B)=trA +trB

    5. tr aA=a trAtr\space aA = a\space trA

  • 행렬 도함수에 관한 다음 4가지 식을 얻어 낼 수 있다.
    1. AtrAB=BT\nabla_A trAB = B^{T}
    2. ATf(A)=(Af(A))T\nabla_{A^{T}}f(A) = (\nabla_Af(A))^{T}
    3. AtrABATC=CAB+CTABT\nabla_AtrABA^{T}C = CAB + C^{T}AB^{T}
    4. AdetA=detA(A1)T (Only for non singluar square matrix)\nabla_A \det A = \det A (A^{-1})^{T} \space (Only\space for\space non\space singluar\space square\space matrix)
⁍⁍⁍⁍ ⁍ ⁍
(Xθy)=[(h(x(1))y(1))(h(x(2))y(2))....(h(x(n))y(n))](X\theta - y) = \begin{bmatrix} {(h(x^{(1)}) - y^{(1)})} \\ {(h(x^{(2)}) - y^{(2)})} \\ . \\ .\\. \\. {(h(x^{(n)}) - y^{(n)})} \end{bmatrix}
ZTZ=Z2, J(θ)=12(Xθy)T(Xθy)Z^{T}Z = \sum Z^2, \space J(\theta) = \frac{1}{2}(X\theta - y)^{T}(X\theta-y)
  • How to calculate θJ(θ)\nabla_\theta J(\theta) θJ(θ)=θ12(Xθy)T(Xθy)\nabla_\theta J(\theta) = \nabla_\theta \frac{1}{2}(X\theta - y)^{T}(X\theta-y) =θ12[θTXTXθθTXTyyTXθ+yyT]=\nabla_\theta \frac{1}{2}[ \theta^{T}X^{T}X\theta-\theta^{T}X^Ty-y^TX\theta+yy^T] =12[XTXθ+XTXθXTyXTy]= \frac{1}{2} [X^TX\theta + X^TX\theta - X^Ty - X^Ty] =XTXθXTy=set0= X^TX\theta - X^Ty \overset{set}{=} \vec{0}
XTXθ=XTyX^TX\theta = X^Ty

마지막 식에서 θ\theta를 구하면 그값이 J(θ)J(\theta)를 최소화하는 값이 된다.

X의 가역행렬이 존재하지 않다면, 이는 중복되는 feature가 존재함을 의미한다. 따라서, 실제로 어떤 feature가 반복되는지 확인해야 한다.

profile
이것저것
post-custom-banner

0개의 댓글