Home Machine Learning 9. Linear Model II

[기계학습] 9. Linear Model II

Post Date

Modified Date

Category

아홉번째 챕터는 챕터 3에 이어서 선형 모델을 배우는 챕터입니다. 교재에서는 챕터 3과 챕터 9의 내용이 같이 이어져서 나오지만, 인터넷 강의에서는 이론적인 내용을 연속해서 다루는 것보다 구체적인 예시를 앞부분에 넣기 위하여 선형 모델의 기본적인 부분을 앞부분으로 당겼습니다. 따라서 이번 챕터를 공부하기 전에 챕터 3을 다시 한번 복습하는 것을 추천합니다.

챕터 3에서 다루었던 것과 이번 챕터에서 다룰 것을 정리해봅시다. 챕터 3에서 선형 분류(Linear Classification), 선형 회귀(Linear Regression)가 무엇인지 배웠고, 어떤 알고리즘을 사용해 학습하는지까지 간단히 소개하였습니다. (물론 챕터 3에서 배운 학습 알고리즘이 전부는 아닙니다.)

또한 챕터 3 마지막에는 비선형 문제를 해결하는 방법인 Transform을 소개하였습니다. 다만 그 당시에는 간단하게 넘어갔기 때문에 이번 챕터에서 Nonlinear Transform을 먼저 더 공부하고, 이전에 다루지 않았던 Logistic Regression에 대해 본격적으로 공부하게 됩니다.

Nonlinear Transforms

챕터 3에서 배운 비선형 문제를 푸는 방법을 다시 한번 복습하고 넘어갑시다. 주어진 Input Data \mathbf{x}d차원의 벡터입니다. (x_0은 Threshold 역할을 하기 때문에 d에 포함시키지 않았습니다.) 그러나 \mathbf{x}의 분포가 선형 분리가 되지 않는 경우, 이를 선형 분리가 가능한 데이터로 만들어주기 위해 새로운 함수 \Phi를 정의하여 \mathbf{z}로 바꾸어 주었습니다. 이 때, \mathbf{x}와 차원이 달라질 수 있기 때문에 \mathbf{z}\tilde{d}차원을 갖게 됩니다.

여기서 주의할 점은, 변환을 하기 전과 변환을 하고 난 데이터의 Output은 동일하기 때문에, 굳이 변환한 학습 결과를 원래 차원으로 되돌릴 필요가 없다는 것입니다. 즉, 최종 가설 g는 선형 분류 문제의 경우 sign(\tilde{\mathbf{w}}\Phi(\mathbf{x})), 선형 회귀 문제의 경우에는 \tilde{\mathbf{w}}\Phi(\mathbf{x})가 됩니다.

하지만 비선형 문제를 Transform을 통해 문제를 해결하게 되면 새로운 문제가 생기게 됩니다. 챕터 3에서 이것을 처음 배울 때는 단순히 \Phi함수를 찾기가 쉽지 않다는 단점만을 생각할 수 있었지만, 이후 챕터에서 VC Dimension을 배우고 나니 Transform을 하게 되면 VC Dimension 또한 바뀌게 된다는 사실 또한 알게됩니다. 일반적으로 선형 데이터로 만들기 위해 Transform을 하는 것은 차원이 늘어날 수밖에 없기 때문에 VC Dimension 또한 늘어나게 됩니다. VC Dimension이 늘어난다는 것은 그만큼 일반화하기 힘들다는 말과 같습니다.

원래의 데이터 \mathbf{x}의 VC Dimension은 Threshold를 포함하여 d+1인데, \mathbf{z}의 VC Dimension은 최대 \tilde{d}+1이 됩니다. 왜 정확히 \tilde{d}+1이 아니라 최대 \tilde{d}+1이 되냐면 \mathbf{z}\mathbf{x}를 통해 만들게 되기 때문입니다. 이전 슬라이드의 Example 처럼 \mathbf{z} 벡터의 각 원소는 \mathbf{x}의 원소를 사용해 만들기 때문에, 각 원소가 독립적이지 않는 경우가 존재하기 때문입니다.

이 문제를 해결하기 위해 비선형 예제 2개를 살펴보겠습니다. 첫번째 예제는 왼쪽 그림처럼 거의 선형이지만 선형으로 나눌 경우 약간의 에러가 발생하는 경우이고, 두번째 예제는 오른쪽 그림처럼 데이터들이 처음부터 비선형이라 선형으로는 절때 나눌 수 없는 경우입니다.

첫 번째 예제는 두 가지 선택을 할 수 있습니다. 약간의 In Sample Error를 감수하고 선형으로 나눌 것인지, 그 Error조차 용납하지 못하고 높은 차원으로 Transform을 시켜 In Sample Error를 0으로 만들게 할 수도 있습니다. 말할 필요도 없이 어떤 방법이 더 좋은지 우리는 이미 알고 있습니다. 굳이 VC Dimension을 따져보지 않더라도 Transform을 시켜서 푸는 방법이 일반화가 더 어렵기 때문에 더 좋지 않은 해결방법이라는 직관적인 판단을 하셨다면, 훌륭합니다.

두 번째 예제는 Transform을 해야만 문제를 풀 수 있기 때문에 Transform을 한다고 가정합시다. 원래의 데이터는 x_1, x_2로 이루어진 2+1차원의 데이터였으나, 차수를 늘려 5+1차원의 데이터로 바뀌게 되었습니다. 그렇게 Transform을 하고 학습을 성공적으로 마쳤을 때의 상황이 바로 오른쪽 그림입니다. 가만히 생각해보면, 나눈 결과를 보아하니 원 모양인데, 원의 방정식에 필요한 2차항만 남겨서 차수를 줄일 수 있지 않을까하는 느낌이 들 수도 있습니다. x_1^2, x_2^2만 남기고 2+1차원을 데이터로 바꿀 수도 있고, 혹은 그보다 줄이는 방법도 생각해 볼 수 있습니다. 물론 초기 상태인 5+1차원과 동일한 결과가 나옵니다. 하지만 이 방법은 뭔가 이상하다는 직관적인 느낌이 듭니다.

방금 전의 두 번째 예제에서 차원을 줄이는 과정을 다시 한번 복기해봅시다. 먼저, 데이터를 Transform 시키고 학습이 끝난 다음 결과를 확인하였습니다. 그런데, 학습 결과를 보고 원과 비슷한 모양인 것을 확인한 후, 의도적으로 Transform 시킨 데이터의 차원을 줄였습니다. 이 부분에서 잘못된 판단을 한 것입니다. 데이터를 눈으로 먼저 보고 모델을 고르는 것을 Data Snooping이라고 하는데, 이렇게 모델을 정할 경우 학습 결과가 일반화와는 거리가 멀어지기 때문에 Out of Sample Error에 큰 악영향을 주게 됩니다. 방금 전에 “원”의 모양을 눈으로 보고 그 모양이 나오도록 학습 결과를 의도적으로 수정했기 때문에 In Sample Error에는 영향이 없을 수도 있지만, 실제 Out of Sample Data가 어떻게 분포되어 있을지 모르는 상황이기 때문에 대부분의 경우에는 Out of Sample Error를 높게 만듭니다. 기계학습에서 가장 많이 행하게 되는 실수라고 하니 반드시 염두해 두도록 합시다.

Logistic Regression – The Model

이제 본격적으로 이번 챕터의 핵심 주제인 Logistic Regression을 공부해봅시다. 모델, 오류 측정 방법, 학습 알고리즘 순서로 배우게 됩니다.

Linear Model은 기본적으로 입력을 받고 출력값을 계산한다는 의미입니다. 이전에 배운 Linear Classification과 Linear Regression 모두 입력 \mathbf{x}와 가중치 \mathbf{w}를 받아 출력값을 계산하였습니다. 단순히 출력값을 그대로 내보내는가(Regression), +1/-1인지만 결정하는가(Classification)의 차이만 있었습니다. Logistic Regression도 이와 마찬가지로 입력 \mathbf{x}와 가중치 \mathbf{w}를 받아 출력값을 계산하는데, 그 출력값이 \theta 함수를 거쳐 나오게 됩니다.

\theta 함수는 다음 슬라이드에서 설명하도록 하고, 함수의 모양을 먼저 보면 S자를 눕힌 듯한 그래프를 가짐을 알 수 있습니다. 정확하게는, 최댓값은 1, 최소값은 0이 되고 그 사이를 부드럽게 올라가는 곡선입니다. Linear Classification은 Threshold를 기준으로 +1/-1로만 출력값이 나오지만, Logistic Regression은 0과 1 사이의 모든 실수가 출력값이 될 수 있습니다.

로지스틱 함수 \theta의 명확한 정의는 {e^s}/{(1+e^s)}입니다. s가 크면 클수록 1에 가까워지게 되고, 작으면 작을수록 0에 가까워지게 됩니다. 특수한 경우로, s가 0이면 정확하게 0.5가 됩니다. 이 함수는 부드럽게 0과 1 사이를 움직이기 때문에 Soft Threshold로 부르기도 하지만, 일반적으로는 Sigmoid 함수로 많이 불립니다. Sigmoid는 “S자 모양의” 라는 뜻입니다.

0과 1사이의 값을 갖는다는 것에서 눈치채신 분들도 계실텐데, 로지스틱 회귀는 바로 확률에 관한 문제를 다룰 때 쓰이게 됩니다. 이해를 돕기 위해 구체적인 예시로 심장 마비를 예측하는 문제가 있다고 가정해봅시다. 심장 마비에 영향을 줄 수 있는 요소인 콜레스트롤 수치, 나이, 몸무게 등은 입력 데이터로 들어가게 됩니다. 만약 Linear Classification으로 이 문제를 접근한다면 심장마비가 발생하지 않는다/발생한다 라는 결과만 출력할 수 있습니다. 그런데 정말 좋지 않은 신체적 상황이라고 해도 심장마비가 무조건 발생하지는 않습니다. 하지만 심장마비의 발생은 입력 데이터에 영향이 분명히 있기 때문에 이러한 상황에서는 확률적으로 접근해야 한다는 것입니다. 따라서 이 문제를 로지스틱 회귀로 풀게 된다면, \theta 함수는 입력 s에 대해 심장 마비가 발생할 확률을 의미하게 됩니다. 이 때 입력 s는 이전의 선형 분류나 회귀와 마찬가지로 선형이고, 높으면 높을수록 심장 마비를 발생할 확률을 높게 만들기 때문에 “Risk Score”로 부를 수 있습니다.

로지스틱 회귀에서 특이한 점은 학습 데이터입니다. 선형 분류나 회귀와 마찬가지로 지도학습으로 이루어지는데, 선형 분류에서는 데이터의 Output y가 +1/-1로, 선형 회귀에서는 실수 \mathbb{R}로 주어졌습니다. 그렇기에 로지스틱 회귀에서는 Output y가 0과 1 사이의 값으로 주어질 것이라고 생각할 수 있는데 그렇지 않는 것이 문제입니다. 로지스틱 회귀의 학습 데이터는 선형 분류와 마찬가지로 +1/-1로 주어집니다. 물론, 노이즈가 반영되기 때문에 같은 입력값에 대해 다른 Output을 갖고 있는 데이터가 포함됩니다.

이전 슬라이드의 심장 마비 예측 문제를 생각하면, 완전히 동일한 신체조건을 가지고 있는 서로 다른 10명의 환자 데이터가 있다고 했을 때, 이 중 3명이 심장 마비가 발생하고 7명이 발생하지 않았다면 해당 신체조건(=s)에서 심장 마비가 발생할 확률이 0.3이다라고 예측하는 방식입니다. 물론 학습 알고리즘에 따라 0.3보다 작을수도, 클수도 있습니다.

Logistic Regression – Error Measure

이제 로지스틱 회귀에서 Error Measure를 어떻게 하는지 배워봅시다. 선형 분류는 Output이 다른 것의 갯수를, 선형 회귀는 Squared Error를 사용했는데 로지스틱 회귀에서 Error Measure는 직관적으로 어떻게 해야 할지 떠오르지 않습니다.

로지스틱 회귀에서는 가능도(Likelihood)를 Error Measure에 사용합니다. 가능도는 우도라고도 불리는데, 통계학에서 확률 분포가 확률 변수의 특정 값에 얼마나 일관적인지 그 정도를 나타내는 값입니다. 즉, 만약 가설 h와 Target Function f와 같다면, 가설 h에 의해 입력 데이터 x가 주어졌을 때 Output으로 y를 얻을 확률이 어느 정도인가? 를 의미합니다.

개념을 이해했으니 구체적인 수식을 통해 계산하는 법을 알아봅시다. 먼저 가설 h는 로지스틱 회귀이므로 \theta 함수와 같습니다. \theta 함수의 특이한 점은 입력 s의 부호를 반대로 넣으면 1-\theta(s)와 같습니다. 직접 계산할 필요 없이 오른쪽의 함수 그림을 보시면 점선인 1에서 파란색 선을 빼 보시면 쉽게 알 수 있습니다. 이 성질을 이용하여 가능도 함수를 P(y|\mathbf{x})=\theta(y\mathbf{w}^{\sf T}\mathbf{x})로 간단하게 표현할 수 있습니다. 이를 이용하여 N개의 데이터가 주어져 있다고 가정할 때, 각 데이터에 대해 가능도 함수 P를 계산하여 곱하면 됩니다. 가능도 함수는 방금 구한 \theta 함수와 같으니 \theta 함수로 바꿔도 무방합니다.

가능도는 인과관계를 의미하기 때문에 기존의 다른 Error Measure와 다르게 높을 수록 좋은 수치입니다. 그렇기에 다른 방법과의 통일성을 위해, 이전 슬라이드에서 도출한 식의 부호를 반대로 하고, 그 값을 최소화하는 방향으로 최적화를 진행할 것입니다. 식을 간단하게 정리하기 위해 마이너스 기호를 로그 안에 넣고, 파이를 로그 밖으로 빼어 시그마로 바꿉니다. 수식을 N으로 나눈 이유는 모든 주어진 데이터에 대해 평균적인 Error를 구하기 위함입니다.

최적화를 수행하기 전에, N, y, \mathbf{x}는 모두 고정된 값이기 때문에 임의로 바꿀 수 없음에 유의하시기 바랍니다. 우리는 이 식에서 오로지 \mathbf{w}만 수정해야 합니다.

먼저 \theta함수를 풀어서 표현합니다. 이전에 나온 \theta식과 조금 달라보이는데, 분모와 분자를 모두 e^s로 나눈 것 외에는 동일합니다. 식을 마지막까지 정리하게 되면 깔끔한 식이 나오게 되는데, 이 중 로그 부분을 따로 떼어 e(h(\mathbf{x}_n, y_n)으로 정의합니다. 이런식의 Error Measure를 Cross-Entropy Error라고 부릅니다.

Logistic Regression – Learning Algorithm

다음 순서로는 로지스틱 회귀에서 어떤 학습 알고리즘을 사용할 것인지 배우게 됩니다.

이제 In Sample Error를 계산하는 식을 구했으니, 이를 최소화 시키는 방법을 알아야 합니다. 이전에 배운 선형 회귀의 경우 Pseudo-Inverse를 이용하여 여러 단계를 거치지 않고 한번에 최적의 가중치 \mathbf{w}를 계산하였습니다. 그러나 로지스틱 회귀에서는 불행하게도 로그 함수의 존재로 인해 한번에 쉽게 구하는 방법이 없습니다. 따라서 반복적인(Iterative) 방법으로 계산해야만 합니다.

반복적인 방법 중 대표적인 것이 바로 경사하강법(Gradient Descent)입니다. 여기서 Gradient는 미적분학에서 배우는 기울기입니다. 위 슬라이드의 오른쪽 그림을 보시면 최종 목적지는 In Sample Error가 가장 낮게 나오는 점입니다. 이 점을 한번에 구할 수 없기 때문에 초기에는 무작위로 \mathbf{w}를 정합니다. 이 곳이 최종 목적지라면 좋겠지만 일반적인 경우에는 그렇지 않으니 이 점에서 다른 점으로 움직여야 합니다. 그 움직이는 방향을 가리키는 것이 단위벡터 \widehat{\mathbf{v}}입니다. 단위벡터 앞에 붙은 상수 \eta(에타)는 얼마나 움직일 것인지 그 크기를 나타냅니다. 그렇게 움직인 결과가 바로 새로운 \mathbf{w}가 되는 것입니다.

방법을 알았으니 이제 방향을 결정하는 단위벡터 \widehat{\mathbf{v}}만 구하는 방법을 알면 됩니다. 이름에서 눈치채신 분들도 있지만, 이걸 구할때 바로 기울기(Gradient)를 이용합니다.

먼저, 이전 슬라이드에서 구한 \mathbf{w}(1)과 초기값 \mathbf{w}(0)을 비교해봅시다. \mathbf{w}(1)을 넣어서 In Sample Error를 계산하고, \mathbf{w}(0)을 넣어서 In Sample Error를 계산한 후, \mathbf{w}(1)로 계산한 In Sample Error에서 \mathbf{w}(0)로 계산한 In Sample Error를 빼면 In Sample Error의 차이(\Delta E_{in})를 계산할 수 있습니다. 우리가 원하는 것은 반복적인 과정을 거칠 때마다 In Sample Error가 줄어드는 것을 원하므로 이 변화가 음수가 나와야 합니다.

이 차이를 계산하기 위하여 테일러 급수를 사용해야 합니다. 테일러 급수에서 맨 앞 항만 사용하고 나머지 부분은 O(\eta^2)로 묶었습니다. 사실 중요한 것은 맨 앞부분에 있는 \widehat{\mathbf{v}} 이기 때문에 식을 간략화한 후 정규화(Normalization)를 시키면, \mathbf{w}(0)에서의 기울기 단위 벡터를 얻을 수 있습니다. 왜 \widehat{\mathbf{v}}에 마이너스(-) 가 붙는 지 궁금하실 수도 있는데, 쉽게 이해하기 위해서는 이전 슬라이드의 그림을 떠올리시면 됩니다. 그림처럼 점이 최소값의 왼쪽에 있을 때는 오른쪽으로 점을 움직여야 하는데, 현재의 기울기가 음수이므로, 양의 방향으로 움직여야 하기 때문입니다. 즉, 움직여야 하는 방향은 현재 기울기의 반대 방향임을 알 수 있습니다.

그 다음으로 논의할 것은 \eta입니다. 처음에는 \eta를 고정된 값을 사용한다고 했는데, 만약에 이 \eta가 너무 작으면 최종 목적지에 도달하는데 너무 많은 단계를 거쳐야 하는 문제가 생길 수 있습니다. 그렇다고 이 값을 크게 만들다가 너무 커지게 되면, 최종 목적지를 지나칠 수도 있고, 그 주변에서 왔다갔다 하느라 목적지에 도달하지 못할 수도 있습니다. 따라서 이런 단점들을 해결하기 위해, \eta를 유동적인 값을 사용하는 것이 좋습니다. 초기에는 큰 값을 부여해 목적지에 빠르게 가깝게 다가가고, 나중에는 작은 값을 부여해 목적지를 지나치지 않고 쉽게 다가갈 수 있도록 만드는 것입니다.

그럼 유동적인 \eta를 어떻게 구현해야 할지 구체적으로 계산해봅시다. 이 강의에서는 \Delta\mathbf{w}의 식을 응용하여 \eta를 정의하였습니다. 바로 기존의 \eta값을 || \triangledown E_{in}(\mathbf{w}(0)) ||에 비례하게 만들어 \widehat{\mathbf{v}}의 분모를 약분할 수 있게 만든 다음, 새로운 고정된 값인 \eta로 정의하는 것입니다. \eta 기준에서 보면 초기에는 기울기가 가파르기 때문에 높은 값을 가지지만 목적지에 도달할수록 기울기가 완만해지기 때문에 낮은 값을 갖게 됩니다. 굉장히 기발한 아이디어라고 생각합니다.

이제 필요한 것을 모두 배웠으니 이를 정리하여 하나의 알고리즘으로 통합해 봅시다. 먼저 무작위로 \mathbf{w}(0)을 정하고, 기울기를 계산하여 다음 단계의 \mathbf{w}를 계산합니다. 이 과정을 최종 목적지(In Sample Error가 가장 낮은 지점)에 도달할 때까지 반복하면 됩니다.

마지막으로, 지금까지 배운 선형 모델을 간단하게 정리해봅시다. 선형 모델에는 선형 분류, 선형 회귀, 로지스틱 회귀 3가지로 나뉩니다. 챕터 3에서 배운 신용 카드 발급 문제를 예로 들면 선형 분류는 신용 카드를 발급할지/거부할지를 결정하는 모델이고, 선형 회귀는 신용 카드를 발급한다면 한도를 얼마로 정할 것인지를 결정하는 모델이며, 로지스틱 회귀는 이 사람이 파산할 확률(즉, 신용카드 대금을 갚지 못할 확률)을 계산하는 모델입니다. 세 모델의 목적이 모두 다르기 때문에 오류 측정 방법도 모두 다릅니다. 선형 분류는 얼마나 분류가 틀렸는지(Classification Error), 선형 회귀는 정답과 얼마나 멀리 떨어져 있는지(Squared Error), 마지막으로 로지스틱 회귀는 입력과 출력이 얼마나 관련이 있는지(Cross-Entropy Error)를 기준으로 삼게 됩니다.

이번 챕터는 여기까지입니다. 읽어주셔서 감사합니다.

댓글 남기기

Please enter your comment!
Please enter your name here

Duvelix

학부에서는 수학을, 대학원에서는 컴퓨터공학을 전공했습니다. 현재는 컴퓨터공학과 박사과정을 수료하고 보이지 않는 졸업과 싸우는 중입니다.

Popular posts

[KATC] 전문연구요원 훈련소 후기 – 프롤로그

훈련소를 수료하고 돌아온지도 거의 열흘이 지났습니다. 그 동안 밀려있던 일들을 처리하기도 하고 오랜만에(?) 느낀 사회의 자유를 즐기느라 포스트를 작성하지 못했습니다. 당분간은 정기적으로 작성해던 포스트의...

[Tip] New 닌텐도 3DS XL vs New 닌텐도 2DS XL

안녕하세요, 오늘 포스트는 New 닌텐도 3DS XL과 New 닌텐도 2DS XL의 차이점을 소개하려고 합니다. 저는 New 닌텐도 2DS XL로 시작을 했고 최근에 New 닌텐도 3DS...

[기계학습] 7. VC Dimension

일곱 번째 챕터에서는 지난 챕터 마지막에 나온 Vapnic-Chervonenkis (VC) Dimension에 대해 배우게 됩니다. 이번 챕터는 4개의 소주제로 나뉘어 있습니다. 먼저 VC Dimension의 정의를 배우고, Perceptron에서의...

[Life Hack] OBS Studio로 녹화하기

게임을 할 때나, 컴퓨터로 복잡한 작업을 할 때는 기록을 위해 녹화를 하고 싶은 경우가 있습니다. 컴퓨터 화면을 녹화할 수 있는 프로그램은 Fraps, 반디캠, 오캠...

[워드프레스] 뉴스페이퍼 테마 구매 및 적용하기

지난 시간에 워드프레스를 설치했습니다만, PHP 프로그래밍에 능숙한 분이 아니라면 워드프레스 테마를 직접 만들어서 운영하기 쉽지 않습니다. 그렇기 때문에 대부분의 사용자들은 전문가들이 제작한 워드프레스 테마를...

Recent comments