티스토리 뷰


[Multivariate Linear Regression]

1. Multiple Features

 - 이전 시간까지는 variable이 1개, 2개인 것만 봤는데, 조금 더 변수가 많은 multiple featrue 모델을 보자

 - n = number of features 이며, x^(i) = input of i_th training example. 만약 x^2라면 2번째 training example의 variable들이며 이는 n by 1 vector로 표현됨

 - linear regression에서 x0, 즉 x_0^(i)는 1로 정의한다

 - 이 경우, h함수는 0부터 n까지, n+1개의 feature로 이루어진 x벡터 그리고 n+1개의 θ로 이루어진 θ벡터의 inner product로 표현할 수 있다

 - h(x) = θ^T X (n+1 dimensional vectors)


2. Gradient Descent for Multiple Variables

 - n = 1일 경우에는 구분을 하여 표기했지만, 조금 더 일반화하여 Cost function과 Gradient descent를 표시함


3. Gradient Descent in Practice 1 - Feature Scaling

 - 만약 feature의 사이즈가 너무 차이가 나는 상황이라면, 타원이 길고 좁게 그려질 수 있는데 이 경우 gradient descent를 통해서 global minimum으로 가는 시간이 굉장히 느릴 수 있다. 즉 convergence speed가 너무 느리다.

 - 이에 대한 솔루션으로, 각 feature를 max(or range)값으로 나누어서 0과 1사이로 normalize해주면, 훨씬 direct하게 global minimum으로 찾아갈 수 있고 convergence speed도 훨씬 빠르게 된다. 


 - 가능하면 -1 <= x_i <= 1의 범위로 가져오는 것이 좋은데 이것은 정확히 -1과 1을 의미하는 것이 아니라 -1과 1에 대해 작건 크건 차이가 심하게 나지 않는 값으로 설정하는 것이 바람직하다는 것이다.

 - 좋은 예 : 0 <= x1 <= 3 / -2 <= x2 <= 0.5  보통, Ng 교수는 -3 to 3 / -1/3 to 1/3 정도로 맞춘다고 함

 - 나쁜 예 : -0.001 <= x4 <= 0.0001  / -100 <= x3 <= 100


 - Mean normalization도 가능함, (x - avg(x))/range 로 두는 방법임. 역시 값이 너무 정확하거나 할 필요는 없음


4. Gradient Descent in Practice 2 - Learning Rate

 - Gradient descent를 통해서 언제쯤 converge하는지를 판단하기가 어려움

 - 즉 작업이 30, 3000, 3000000 iterations을 필요로 하는지 파악하기 어려움

 - automatic convergence test가 있는데, 이는 threshold값을 주고 그 값까지 iteration이 얼마나 걸리는지 파악하는 것인데

차라리 그래프를 보고 평평해지는 지점을 파악하는 것이 현명하며 Ng교수도 그래프를 보는 방법을 거의 사용함

 - 그래프를 보면 gradient descent가 잘못 움직이는 것도 판단할 수 있음, common problem으로 예를 들어 점진적으로 증가하는 그래프가 그려진다면,  ⍺를 좀 작게 조정하라는 것이다. 이것을 cost function 그래프를 보았을 때 점차적으로 작아지면서 수렴해야되는데 왔다갔다 하면서 발산하는 꼴로 움직이는 형태를 띔. 파도무늬 처럼 올라갔다 내렸다가 하는 문제도 ⍺를 작게 함으로써 해결할 수 있음. 물론 너무 작게 설정하면 convergence speed가 너무 느릴 수 있으니 조심해야 함

 - 일반적으로 learning rate를 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1 이런식으로 3배 정도의 간격을 두고 체크해보는 편임


5. Features and Polynomial Regression

 - 문제 별로 어떤 h(x) 함수를 설정하는지도 문제 해결에 중요한 역할을 함

 - 예를 들어 점진적으로 포물선으로 증가하는 분포가 있을 때  2차(quadratic) 함수는 올라갔다가 다시 떨어지는 성질이 있어서 fit하지 않은 것에 대해

3차(cubic model) 함수를 사용한다면 더 나이스할 수 있음

 - 물론 이러한 문제에 대해 전부 feature를 어떤 함수로 구성할지 고민한할 수 있을탠데 다음에 자동으로 어떤 feature model을 적용할지를 결정해주는 알고리즘을 배울 것임



[Computing Parameters Analytically]

1. Normal Equation

 - Cost function J를 최소화하는 지점 θ를 찾기 위해서, gradient descent가 이 되는 θ값을 미분을 통해 방정식 풀이하여 구할 수 있다.

해당 θ값은 cost function J를 최소화하는 값이 된다. 

 - 실제 예를 들어서, 그렇다면 θ 계산 과정을 vector로 표현한다면 θ = (X^T X)^(-1)  X^T Y로 표현할 수 있음

 - X가 만약 0부터 n개 feature이며, 총 m개의 example로 이루어져있을 때 X 는 m by n+1 행렬로 표현됨. Y는 결과값으로 m - dimensional vector(m by 1)임

 - 만약 이 normal equation을 사용한다면, feature scaling은 고려하지 않아도 상관없음. 예를 들어, <= 1000, >= 10^(-5) 등의 범위도 문제가 되지 않음

 - 그렇다면 언제 Normal Equation을 쓰고 언제 Gradient descent 방법을 쓰느냐? 각각의 이익과 손해가 있다.

Gradient Descent는 learning rate를 직접 고르고 많은 iteration이 필요하다. 하지만, n이 10000이상, 충분히 클 때도 잘 작동한다. 이에 반해

Normal Equation은 learning rate를 고를필요 없으며, iteration이 필요없는 대신 X'X를 계산할 때 O(n^3) 복잡도를 보인다. 하지만 모던 컴퓨터에서는 n이 1000정도 규모일 때까지는 무리없이 Normal Equation을 사용하는 것이 Gradient Descent보다 효율적이다.

 - 물론 앞으로 배울 더 복잡한 알고리즘은 Normal Equation을 적용하지 못하거나 하여 Gradient Descent에 의존해야하는 경우가 많다. 하지만, 특히 linear regression의 경우 Normal Equation의 성능이 좋으므로 잘 알아둘 필요가 있다.


2. Normal Equation Noninvertibility

 - Octave에 pinv, inv 두 가지의 역행렬 계산 함수가 있는데, pinv(pseudo-inv)를 사용하면 invertible과 상관없이 옳은 값을 출력해주니 이것을 사용하면 됨

 - 만약 역행렬 계산이 불가능한 singular or generate matrix와 같이 non-invertible한 행렬이라면 Normal Equation 계산을 할 수 없음

 - 어떨 때 이런 경우가 생길 수 있느냐, 1) Redundant features 할 때, 값들이 그렇게 배치되서 |x| = 0 나오는 경우 이 때는 한 feature를 제거하는 방법으로 해결

2) Too many features, 계산 해야할 feature는 많은데 example 개수가 그보다 적은경우(m < n) 발생할 수 있다. 이 경우, feature를 줄이거나 regularization을 사용함

 - 따라서 non-invertible한 경우 feature의 redundant 여부를 확인하고, 그 다음에 example이 부족하면 regularization을 사용하는 방법으로 문제를 해결함




Quiz는 1번 문제를 틀렸는데, mean normalization을 구할 때 계산 식 잘 세워놓고 계산기 잘못 두들김

문제들이 배웠던 개념을 확인시켜주는 것이라 좋다. 


댓글