이전 포스팅에서는 확률론을 기반으로 기계학습이 해야할 것은 결국 확률 변수간 관계를 찾아내는 것이고 그것이 확률변수의 확률 분포를 알아내는 것으로 가능하다고 했다. 그 다음으로는 기계가 어떻게 확률분포를 알아낼 것인가를 알아야 할것이다.
여기서부터 주로 연속 확률 변수에 대한 확률 분포를 알아보는 일에 대해 얘기한다.
기계가 알 수 있는 정보는 주어진 데이터 뿐이다. 이것이 나타난 원래 확률분포에 대한 정보는 기계가 알 방법이 없다. 이 때 만약 연속 확률 변수에 대해 확률분포를 알아내는 방법은 이전 포스팅에서 했던 것 처럼 단순히 구간별로 빈도수를 측정하고 전체 데이터 수로 나눠서 구간별 확률을 얻어보는 것이다. 이런걸 히스토그램이라고 부른다.
히스토그램 방법의 문제는 구간을 너무 작게 잡으면 구간당 빈도수가 적어지면서 신뢰도 문제가 다시 발생하는 것이다. 데이터 부족문제의 핵심은 구간(bin)에 담겨져 있는 데이터 수가 적을 때 신뢰도가 낮아진다는 것이다. 따라서 데이터가 많아도 구간을 너무 잘게 쪼개면 신뢰할 수 없는 밀도를 얻게 된다. 또한, 너무 듬성하게 구간을 쪼개도 전체 분포의 특성을 알 수 없다. 예를 들어, 마트 시식 코너가 있는 지하 1층에서 사람들의 위치 정보를 모두 얻었다고 하자. 그리고 인기 있는 두 시식 코너가 3m 쯤 떨어져있다고 하자. 사람들 위치는 2차원 평면 위에 있기 때문에 x,y 두 확률 변수로 나타낼 수 있다. 다양한 사람들이 자신들이 필요한 물건을 구매하기 위해 제각각 떨어져 있겠지만 인기있는 두 시식 코너에 몰려 있다. 이 때 5m x 5m단위로 구획을 나누어서 사람들이 얼마나 있는지 분석해본다고 하자. 두 시식코너가 3m떨어져 있기 때문에 이런 크기의 구획으로는 인기있는 장소가 한곳으로 추측될 것이다. 그러나 2m x 2m로 구획을 나눠서 각 구획에 사람이 얼마나 있는지 세어보면 확실히 3m떨어진 두 시식코너가 인기 있다는 것이 잘 드러날 것이다.(아래 그림 참조) 이렇듯 히스토그램을 만드는데 있어서 데이터가 갖는 성질을 잘 드러내는지 아닌지는 구획 또는 구간의 크기에 의해 결정된다. 그런 성질이 잘 반영 되었는지 판단할 수 있는 기준은 추후에 설명할 것이다.




머신러닝에서 이 방법에서 문제가 드러나는데 왜냐하면, 머신러닝은 저번 포스팅에 소개한 것 처럼 관찰 대상의 수가 많기 때문이다. 즉, 확률 변수가 많다는 문제 때문이다. 확률 변수가 많다는 것은 위의 마트 시식 코너 예시에서 확률변수가 2개인 것을 넘어서 적어도 10개가 넘는 수준의 확률변수에 대한 분석을 수행해야 함을 말한다. 그런 경우는 나누는 구획도 많아진다는 것이 문제다. 변수당 구획 수가 8개라고 하면 10개 변수가 있을 때 총 구획 수는 8^10이다. 확률 변수 수를 D개라고 하고 변수당 구획 수를 n이라고 하면 구획 수는 총 n^D개 이므로 차원을 늘릴수록 아주 빠르게 구획 수가 늘어난다. 이런경우 각 데이터 한개가 어떤 구획에 해당하는지 알기 위해 계산해야하는 양이 너무 늘어나므로 머신러닝 분야에서 적극적으로 히스토그램 방법을 이용하는데에는 한계가 있다.
확률 분포를 알아내는 방법으로 히스토그램을 고려했지만 한계점이 있음을 알았다. 그러면 다른 방법으로 어떤 것이 있을까? 알려진 방법으로 최대 가능도 방법(MLE)이 있다. 이것은 히스토그램 방법처럼 어떤 데이터가 주어졌든 자유롭게 확률 밀도를 추측하는 방법은 아니다. 즉, 몇 가지 가정이 필요하다. 적은 수의 파라미터로 표현되는 확률 밀도 함수들을 이용해서 데이터 분포를 최대한 추측하는 것이다. 그리고, 데이터가 추출되었다고 믿는 그 분포에서 독립적이고 동일하게 추출되었다고 가정한다. 만약 원 데이터가 평균 \(m\), 분산 \(\sigma^2\)인 정규 분포형태에서 추출되었다고 하자. 기계는 그런 정보를 알고있지는 못하지만 개별 데이터가 어디에 존재하는지 위치는 알고 있다. 그리고 우리가 기계에게 정규분포로 추출되었다는 힌트만 알려주고 평균과 분산은 알려주지 않았다고 하자. 그러면 기계가 해야할 일은 평균과 분산을 추측하는 것이고, 어떤 추측값이 옳은지에 대한 점수는 추측된 평균과 분산으로부터 나타난 확률 분포에서 그 데이터가 추출되었을 확률로 표현할 수 있다. 이 점수를 최대화하는 추측 파라미터를 찾는것이다. 이를 좀 더 일반적이고 수학적으로 적으면 다음과 같다.
Finding \(p(\textbf{x};\theta)\)
\[\theta^* = \underset{\theta}{\text{argmax}} L(\theta) \]
\[L(\theta) \equiv \prod_{n=1}^{N} p(\textbf{x}_n;\theta) \]
여기서 \(L\)을 '가능도'라고 부른다. 위 설명처럼 추측 확률 밀도가 현재 데이터를 생성했을 확률을 표현하고 있다. 가능도를 최대화하는 추측 확률 밀도의 파라미터 \(\theta\)를 찾는다는 의미다. 같은 표현이지만 오류를 최소화한다는 느낌으로 쓰는 방법이 있다. 그리고 곱하기보다 덧셈으로 표현하는 것이 계산이 더 편리하기 때문에 다음과 같은 표현이 실용적으로 더 많이 쓰인다.
Finding \(p(\textbf{x};\theta)\)
\[\theta^* = \underset{\theta}{\text{argmin}} E(\theta) \]
\[E(\theta) \equiv -\sum_{n=1}^{N} \log{p(\textbf{x}_n;\theta)} =-\log{L(\theta)} \]
여기서 \(E\)를 오류함수라고 한다.
직관적으로 \(E\)의 성질에 대해 알아보자. 데이터가 있는 곳에서 모두 확률이 0이되도록 파라미터\(\theta\)를 조정하여 확률 밀도를 추측했다고 하자. 그러면 각 덧셈항 안의 로그함수에 0이 들어가기 때문에 음의 무한대로 발산하게 되고 전체항에 음수가 붙기 때문에 양의 무한대로 발산하는 꼴이 된다. 따라서 데이터가 있는 곳에 확률이 있어야 오류가 적어질 것이다. 데이터가 적은 \(\textbf{x}\)점에 더 확률을 크게 설정하고 데이터가 큰 \(\textbf{x}\)점에 확률을 적게 설정하면 반대 경우보다 \(E\)가 크다는 것을 금방 알 수 있다. 그런 비교를 계속 진행해서 최소인 것을 찾을 수 있다. 만약 발산하는 함수(dirac delta function)을 추측 확률 밀도 함수로 이용하면 음의 무한대로 발산하기 때문에 최소가 없게 된다. 이런 특이한 함수를 쓰는것이 아닌이상 최소는 존재한다. 이런 가정 아래에서 오류함수를 최소화하는 파라미터 \(\textbf{x}\)를 찾아볼 수 있다. 이런 과정의 예시를 아래 그림에서 확인할 수 있다.



이 최대 가능도 방법에도 한계는 있다. 원 분포에 대해 아는 바가 없다면 추측 분포를 설정할 수 없다는 것이다. 위의 그림에서는 1차원 데이터(확률 변수 1개에 대한 관측 데이터)에 대해 히스토그램으로 분포를 확인할 수 있고, 그 결과 정규분포가 데이터가 추출된 원 분포라는 생각을 해볼 수 있다. 그래서 정규분포의 두 파라미터인 평균과 표준편차를 맞추는 문제로 바꿀 수 있었다. 머신러닝 문제는 앞에서 설명한 것 처럼 변수 숫자가 많기 때문에 시각화하고 분포에 대한 직관을 얻기 어렵다. 그러나 정규분포이외에 다양한 확률 분포 함수를 최대 가능도 방법을 이용하는데 시도해볼 수 있다. 그 중에서 오류함수가 가장 작게 하는 최대 가능도 해를 이용하면 그나마 나은 결과를 낼 수 있다. 그래서 최대 가능도 방법 하에서는 원 확률 분포에 가까워 질 수 있도록 여러가지 함수 형태를 시도해보는 것과 가장 일반적으로 함수를 표현하는 것이 중요하게 여겨진다.
'DL,ML Basic' 카테고리의 다른 글
| 기계학습이란 무엇인가?(2) - 확률론 (5) | 2024.07.23 |
|---|---|
| 기계 학습이란 무엇인가?(4) - 수치적 최적화 (0) | 2024.07.22 |
| 기계학습이란 무엇인가?(1) (2) | 2024.07.22 |