[비전공자를 위한 딥러닝] 2.1 선형회귀 (1)





챕터 1에서 살펴보았듯이, 머신러닝이란 데이터를 통해 학습시킨 모델을 가지고 새로운 데이터를 예측하는 하나의 문제 해결 방법이다.

머신러닝이 등장하기 훨씬 전부터 통계학에서는 데이터를 활용해 모델을 만들고, 모델을 활용해 새로운 데이터를 예측하는 방법을 사용해왔다. 그 대표적인 방법이 "선형회귀(linear regression)"다. 예를 들어 생각해보자.

우리는 집의 가격을 예측하는 모델을 만들고자 한다. "집의 넓이", "건축연도", "집의 위치", "집의 가격" 이렇게 네 가지 값을 각각 가지고 있는 1만 개의 집 데이터를 수집했다고 가정하자.


우리가 예측하고자 하는 변수는 네 가지 값 중에 "집의 가격"이기 때문에, 나머지 세 변수를 통해 집의 가격을 잘 표현하는 모델을 만들어야 한다.


1. 세 변수를 가지고 "집의 가격"을 잘 표현하는 모델을 만들고,

2. 새로운 데이터가 들어왔을 때 그 모델을 사용해 집의 가격을 예측할 것이다.


예측하고자 하는 변수인 "집의 가격"을 타겟(target)이라고 하고, 나머지를 데이터의 특성(feature)이라고 한다.

그렇다면 어떻게 "집의 넓이", "건축 연도", "집의 위치"라는 특성들로 타겟인 "집의 가격"을 잘 표현할 수 있을까? 가장 먼저 생각해볼 수 있는 것은, 특성별로 집의 가격에 영향을 미치는 정도가 다를 것이라는 점이다. 따라서 다음과 같이 서로 다른 가중치를 갖는 특성들이 더해지는 가중합(weighted sum)의 관계로 나타내볼 수 있다.




세 가지 특성이 각각 "집의 가격"에 대해 얼마나 영향을 미치는지 그 중요도, 즉 가중치(weight)를 가지고 있는 것을 나타낸 그림이다. 예를 들어 "건축 연도"라는 특성이 갖는 가중치가 "집의 넓이"라는 특성이 갖는 가중치보다 훨씬 작다고 가정해보자. 그 의미는, 건축 연도가 집의 가격에 미치는 영향보다, 집의 넓이가 집의 가격에 미치는 영향이 더 크다는 것이다. 따라서 가중치 w1이 w2보다 큰 값을 가지는 모델이 된다.

"집의 가격"에 대해서, 특성1의 가중치(w1)가 더 크다


이를 좀 더 일반화시키면 다음과 같이 된다.


이때 각 특성과 집의 가격을 그래프로 그려보면 다음과 같다. 실제로는 특성2와 특성3이 함께 표현된 4차원 그래프가 되겠지만, 시각화하기가 어렵기 때문에 한 특성씩 나누어 살펴보기로 하자.

이때 각각의 점은 1000개의 집 데이터를 의미하며, 이 분포를 잘 표현하는 하나의 직선을 찾는 것이 선형회귀의 목적이다. (여러 특성이 함께 표현된 다차원 그래프에서는 직선보다 높은 차원인 면 등의 하이퍼플레인으로 표현될 수 있다.)
이때 직선의 기울기가 특성1에 대한 가중치 w1에 해당하게 되는데, 가중치 w1의 의미 (특성1이 "집의 가격"에 얼마나 영향을 끼치는지) 를 생각해보면 이해하기 어렵지 않다.*

* 이 의미를 잘 기억해두면, 역전파에서 편미분의 값을 이해할 때 도움이 될 것이다.


이렇게 얻은 직선을 가지고, ("집의 가격"이 빈 칸인) 새로운 데이터가 들어왔을 때 위와 같이 "집의 가격"을 예측할 수 있다.


하지만 데이터의 분포가 다음과 같을 경우에는 어떨까?

이 경우에는 원점 (0,0)에 붙어 있는 직선으로는 분포를 제대로 표현하기가 힘들다.* 따라서 편향(bias)을 수식에 포함해 원점에서 해방될 수 있는 자유를 주면 훨씬 좋은 예측을 할 수 있는 모델이 된다.
(모든 특성이 함께 표현된 4차원 그래프에서는 원점 (0,0,0,0)에서 해방된다고 볼 수 있다.)

* y = ax 인 직선은 항상 (0,0)을 지난다. 위 그래프의 직선 target = (feature1) x (weight1) 역시 마찬가지다. 





세 특성이 각각의 가중치와 함께 곱해지고, 거기에 편향이 더해지면 타겟의 값이 예측되는 것이다.

 


추가적으로, 가로축이 특성 x이고 세로축이 타겟(집의 가격)인 2차원 상에서만 선형회귀를 살펴보았는데, 실제로는 다음과 같은 고차원 공간에서의 직선을 구한다.

가로축이 특성 1, 세로축이 집의 가격인 방향

가로축이 특성 2, 세로축이 집의 가격인 방향


특성이 3개인 경우는 4차원 공간에서의 직선을 구하는 것이 되고, 특성이 더 늘어나면 점점 더 고차원 공간에서 직선을 구하게 된다.




 
다음 장에서는 선형회귀를 계산하는 방법, 즉 회귀 직선을 대체 어떻게 구하는지 살펴보자.






댓글 쓰기

6 댓글

  1. 그래프에서 보는 시점까지 그려주시는 친절함,, 잘 보고 갑니다!!

    답글삭제
    답글
    1. 제가 학습할 때 궁금했지만 쉽게 찾아보기 힘든 부분들을 많이 녹여봤습니다.
      감사합니다 :)

      삭제
  2. 편향(bias)는 직선이 데이터 분포의 가운데를 지나도록 조정하는 건가요?

    답글삭제
    답글
    1. 가중치(직선의 기울기)와 편향(직선의 절편)을 이동시켜 데이터 분포를 가장 잘 표현하는 (w, b) 값을 찾고, y = wx + b 라는 회귀직선을 도출하는 과정을 선형회귀로 보시면 좋을 것 같습니다.

      삭제
  3. 입력에 대해 하나의 특성이 아닌 여러개의 특성을 추출한다고 했을 때, 입력이 같은데도 불구하고 서로 다른 특성이 항상 추출되는건가요? 아니면, 여러개의 특성을 추출하도록 구성하더라도, 각 특성이 별로 다르지 않을 수도 있는건가요?

    답글삭제
    답글
    1. 본 포스팅은 "선형회귀"에 관해 설명하지만, 엄밀하게는 "머신러닝/딥러닝 입장에서 보는 선형회귀"입니다. (순수 통계학 입장에서는 같은 입력/데이터에 대해 동일한 회귀직선이 도출됩니다.)

      1. 가중치가 동일하다면 같은 입력에 대해 같은 출력을 가집니다. 즉, 어떤 데이터 x와 어떤 가중치 조합 W에 대한 결과는 일정합니다.

      2. 같은 입력에 대해서 서로 다른 출력 a1, a2가 나오기 위해서는 서로 다른 가중치 조합이 곱해져야합니다.
      예) x * W1 = a1
      예) x * W2 = a2

      3. 많은 수의 데이터로 모델을 학습시킨다면, 그 과정에서 가중치 조합 W 속 가중치들은 더 나은 방향으로 계속 업데이트됩니다. 모델의 예측력이 높아지는 방향으로 (즉, 손실이 낮아지도록) 가중치들이 각각 업데이트되는 것이죠. 이때 어떻게 학습하냐에 따라 (하이퍼파라미터 세팅 등) 각각의 층에서 가중치 조합이 어떻게 업데이트될 지 달라질 수 있습니다. 똑같은 조건으로 학습한다고 하더라도 데이터 순서 섞기(shuffle) 등의 랜덤성을 완벽히 통제하지 않는 이상 항상 같은 결과의 가중치 조합을 얻는다는 보장은 없습니다. (물론 random seed 등을 고정하여 실험의 재현성을 확보하는 방법도 가능합니다)
      따라서 일반적인 상황에서 동일한 데이터세트로 학습을 진행한다고 할 때 항상 같은 가중치 조합을 결과로 얻는다고 보기는 힘들고, 항상 같은 특성들이 추출된다고 보기도 힘듦니다.

      4. 여러 개의 특성을 추출하도록 구성하더라도 그 안에서 크게 차이가 없거나 거의 동일한 특성이 추출될 수도 있습니다. 또한 모델을 크고 복잡하게 구성하여 너무 많은 특성을 추출한다면 과적합(overfitting)의 위험도 있기 때문에 추출할 특성(혹은 노드) 개수도 중요한 하이퍼파라미터입니다.


      이어지는 포스팅을 확인하신다면 좀 더 이해하기 수월하실 것 같습니다.

      삭제