dukim's blog

[WK01-Day 003][21.08.04.Wed.] 다시 보는 MLE 본문

Boostcamp AI Tech 2th

[WK01-Day 003][21.08.04.Wed.] 다시 보는 MLE

eliza.dukim 2021. 8. 6. 15:11

Intro

오랜만에 보니 참 새롭네
요새 매일 학습 루틴이 이렇다
일단 퀴즈를 푼다 -> 막히는게 있다 -> 강의 pdf 를 읽고 바로 이해되면 넘어간다 -> 아니면 강의를 듣고 정리한다.
그런데 MLE 얘도 다시 보니 참 새로워서, 결국 마지막 단계까지 갔다.

강의 복습 내용

모수란?

  • 통계적 모델링 : 적절한 가정 위에서 확률분포를 추정하는 것이 목표, 기계학습과 통계학이 공통적으로 추구하는 목표
  • 확률분포를 추정하는 이유: 유한한 개수의 데이터만 관찰해서 모집단의 분포를 정확하게 알아낸다는 것은 불가능하므로
    • 예측 모형의 목적은 분포를 정확하게 맞추기 보다 데이터와 추정 방법의 불확실성을 고려해 위험을 최소화하는 것
  • 모수적(parametric) 방법론 : 데이터가 특정 분포를 따른다고 선험적으로(a priori) 가정 후 그 분포를 결정하는 모수(parameter)를 추정하는 방법
  • 비모수적(nonparametric) 방법론: 특정 확률분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀌는 방법. 기계학습의 대다수의 방법론이 이에 해당.
    • 주의 : 비모수적 방법론은 모수가 없다(X)→ 즉, 비모수와 모수적 방법론의 차이는 어떤 가정을 미리 부여하는지의 여부에 따라서 구별된다.
    • → 모수가 무한히 많거나, 모수의 개수가 데이터에 따라 바뀌는 경우에 비모수 방법론에 해당한다.

확률분포 가정하기: 예제

  • 확률분포 가정 방법: 우선 히스토그램을 통해 모양 관찰
    • 데이터가 2개의 값(0 또는 1)만 가지는 경우 → 베르누이 분포
    • 데이터가 n개의 이산적인 앖을 가지는 경우 → 카테고리 분포
    • 데이터가 [0, 1] 사이에서 값을 가지는 경우 → 베타 분포
    • 데이터가 0이상의 값을 가지는 경우 → 감마분포, 로그정규분포 등
    • 데이터가 실수 전체에서 값 가지는 경우 → 정규분포, 라플라스분포 등
  • 기계적으로 확률 분포를 가정해선 안됨, 데이터를 생성하는 원리를 먼저 고려하는 것이 원칙!
    • 모수만 추정하기 보다는 모수 추정 후에 통계적 검정을 통해서 적절하게 예측하고 있는지 검정해보는 것도 데이터 분석의 절차

모수 추정 실습

image

  • 평균
    • 정의 : 주어진 표본의 산술평균
    • 표본평균의 기대값은 모집단의 평균과 기대값이 일치하게됨
  • 분산
    • 정의 : 표본의 편차 제곱의 산술평균
    • 불편(unbiased)추정량을 구하기 위해 N이 아닌 N - 1로 나눈다
  • 주의! : 표집분포(sampling distribution)와 표본 분표(sample distribution)은 다른 개념
  • 이항 분포의 표본 평의 분포를 나타내며 초기엔 양 극단으로 관찰되다가 데이터가 점점 늘어날 수록 점점 더 정규분포에 가까워짐
  • 분산은 점점 작아지는 것을 볼 수 있는데, 표본평균의 분산에 해당하는 값은 $\sigma^2/N$이라 데이터 개수 N이 커질수록 표본평균의 분산이 0에 가까워진다.
  • 따라서 데이터를 많이 모을수록 표본평균의 값이 하나의 값으로 모이는 것을 관찰할 수 있다.

최대가능도 추정법

  • 확률분포마다 사용하는 모수가 다르므로, 적절한 통계량이 달라진다.
    • 분포마다 단순 표본 평균을 모수의 평균으로 추정할 수 없을 떄도 있음
  • 최대가능도 추정(MLE) : (주어진 확률분포를 어떤 식으로 가정하느냐와 상관없이) 이론적으로 가장 가능성 높은 모수 추정 방법 중 하나
  • 가능도 함수
    • 확률 밀도 함수와 같은 것이지만 관점의 차이
    • 주어진 데이터 x에 대해 모수 theta를 변수로하는 함수
    • 모수 theta에 따르는 분포가 데이터 x를 관찰할 가능성을 의미
    • theta에 대한 확률로 해석하면 안된다(theta에 대해서 적분을 했을 때 총합이 1이 되지 않음)
    • theta에 대해서 크고 작음의 대소 비교가 가능한 함수로 이해
      image
  • 데이터 집합 X가 독립적으로 추출되었을 경우 로그 가능도를 최적화한다.
  • image

로그가능도를 사용하는 이유

  • 로그가능도를 최적화하는 모수 theta는 가능도를 최적화는 MLE가 된다.
  • 데이터의 숫자가 수억 단위가 된다면 컴퓨터의 정확도로는 가능도 계산 불가
  • 로그를 사용하면 가능도의 곱셈을 로그 가능도의 덧셈으로 바꿀 수 있어 컴퓨터로 연산 가능
  • 경사하강법으로 가능도를 최적화할 때 미분 연산을 사용하게 되는데, 로그 가능도를 사용하면 연산량을 O(N^2)에서 O(N)으로 줄어든다.
  • 대개의 손실함수의 경우 경사하강법을 사용하므로 음의 로그가능도(negative log-likelihood)를 최적화하게 된다.

최대가능도 추정법 예제: 정규분포

image
image
image

최대가능도 추정법 예제: 카테고리 분포

  • 베르누이 분포의 확장

  • d개의 다차원에서 하나의 값을 선택하는 확률변수로서 원핫벡터로 x값이 표현됨

  • 각 카테고리에서 값이 1 또는 0이될 확률인 p_1 ~ p_d가 모수가 된다. 이들의 총합은 1이 되야함

  • 위 성질이 주어진 상황에서 MLE 추정
    image

  • 식에서 주목할 점: 모수 p_k에 해당하는 값에 $x_{i,k}$ 즉, 주어진 i번째 데이터의 k번째 차원에 해당하는 값을 승수를 취해준다.
    → k번째 차원이 1인 경우의 확률값만 남고, 나머지 모수 p_k, where k ≠ 1인 경우엔 $p^{0}_k$ = 1이 되어 확률값이 곱해지지 않음

  • 제약식 존재 : 주어진 각 차원의 확률의 총합은 1
    image

  • 주어진 각 데이터에 대해서 k값이 1인 개수를 카운팅한 $n_k$라는 값으로 대체해 표현(단순히 말해서 d차원 벡터 x의 각 클래스 k의 개수. k=1이면 첫번쨰 차원이 1에 해당하는 데이터의 개수 n_1
    image

  • 제약조건하 최적화시에는 라그랑주 승수법을 사용.

  • 제약식의 등식을 한 변으로 넘겨 준 상태에서 라그랑주 승수 $\lambda$를 곱해줘서 새로운 목적식을 만들어 줄 수 있다.

    image

  • 주어진 라그랑주 목적식을 각각의 모수 p_k에 대해서 미분한 다음, 라그랑주 승수인 람다에 대해서도 미분해주게 된다.

  • 오른쪽 식은 원래 주어진 제약식과 똑같은 형태, 왼쪽식을 보면 n_k / p_k가 모두 $\lambda$를 만족해야한다는 사실을 알 수 있다.

    image

  • 위 두 사실을 조합하면 카테고리 분포의 MLE는 각 경우의 수를 세어서 비율을 구한 것.

  • 위 식에서 p_k가 어떻게 유도되는지 이해가 가지 않았는데 이 사이트의 수식 전개를 보고 이해하였다.

딥러닝에서 최대가능도 추정법

  • (딥러닝 모델이 어떻게 확률분포를 모델링하는지, 손실함수로 모수(파라미터)를 찾는 다는 것이 어떤 의미인지에 대한 설명)

  • 최대가능도 추정법을 이용해 기계학습 모델 학습 가능

  • 카테고리 분포의 모수 p_k를 데이터셋 X가 주어졌을 때 MLE로 추정한 것처럼, 딥러닝 모델의 가중치를 $\theta$를 통해 출력된 소프트맥스 벡터 → 카테고리 분포의 모수 $p_1, ..., p_K$를 모델링

  • 원핫 벡터로 표현한 정답레이블 $\bold{y}$을 관찰데이터로 이용해 확률분포인 소프트맥스 벡터의 로그가능도를 최적화할 수 있다.
    image

  • 아래 MLP는 Multi-Layer Perceptron을 의미

확률분포의 거리 구하기

  • 기계학습에서 사용되는 손실함수들은 모델이 학습하는 확률분포와 데이터에서 관찰되는 확률분포의 거리를 통해 유도한다.
  • 데이터 공간에 두 개의 확률 분포 P(X), Q(X)가 있을 경우, 두 확률분포 사이의 거리를 계산할 떄 다음과 같은 함수 이용
    • 총변동 거리(Total Variation Distance, TV)
    • 쿨백-라이블러 발산(Kullback-Leibler Divergence, KL)
    • 바슈타인 거리(Wassertein Distance)

쿨백-라이블러 발산

  • 사실 KL-Divergence는 엄밀한 의미에서 거리는 아니다. 이해를 돕기 위해 이런 표현을 썼을 뿐
    image

  • 방금전의 최대가능도추정법의 손실함수는 쿨백 라이블러 식에서의 크로스 엔트로피의 마이너스 텀과 동일

  • 최대가능도추정법에서 loglikelihood를 최대화시키는 것은 정답 레이블의 분포 P와 예측 레이블의 분포 Q의 쿨백 라이블러 발산을 최소화하는 것과 동일하게 된다.

  • 확률분포사이의 거리를 최소화하는 개념이 주어진 데이터를 이용해서 목적으로 하는 확률분포의 최적화된 모수를 로그가능도함수를 최대화시켜 구하는 것과 밀접하게 연관되어 있음

  • 기계학습의 원리:
    데이터로부터 확률 분포 사이의 거리를 최소화하는 것..

  • 데이터에서 통계학적 기반의 방법론에 의해서 기계학습에서 모수를 추정할 수 있는 방법론을 살펴봤고, MLE에 의해 모수를 추정하는 것은 목적(정답 레이블)에 해당하는 확률 분포와 모델이 추정하는 확률분포 간의 거리를 최소화하는 개념과 일치한다. 이걸 통해 통계학적으로 기계학습 모형에서 통계적으로 적절한 방법론을 사용한다는 원리를 이해.

  • 이 원리는 딥러닝과 기계학습 방법론에서 자주 사용하게됨. 앞으로 논문을 볼 때 손실함수가 어떻게 설계되었는지를 고민해보되 MLE관점에서 많이 유도되었다는 걸 기억.

과제 수행 과정 / 결과물

  • 필수과제 5번 모스부호 변환기 문제

  • 3시간 반 소요

  • 시행착오를 겪었던 부분

    • 빈 문자열 판정시 빈 문자열 '' 는 bool 자료형의 False 값에 해당하며 값이 없음을 의미하는 None과는 다르다.
    • ' '는 공백 문자를 포함하므로 bool 자료형의 True 값에 해당한다.
    • 정규표현식 처리
  • y, yes, h, help 등 단순한 커맨드 판정 문제를 굳이 정규표현식으로 머리 싸맬 필요가 없다. 정규표현식으로 표현하려고 y뒤에 숫자나 es가 아닌 문자가 오지 않고, y가 연속으로 나열되지 않는 경우(yes에 대해서도 동일)만을 판정하려고 했으나, 문제를 너무 돌아갔다. True 판정할 경우의 수가 어차피 많지 않으니 그냥 if문을 쓰자.

    user_input = user_input.lower()
    
    if user_input == 'h' or user_input == 'help':
        result = True
    else:
        result = False
  • 모스코드 판정 시 입력 문장을 문자열 단위로 쪼개야한다. 처음에 이 부분을 실수해서 테스트 케이스를 통과하지 못 했다.

  • [정규표현식] : 어떤 글자를 제외한 다른 글자가 포함되어 있는 경우

      # e.x.) "-","."," "외 다른 글자가 포함되어 있는 경우
      import re
      pattern = re.compile(r'[^\-\.\s]+')
      matched_chr = pattern.findall(user_input)
  • [정규표현식]: 양 끝 공백 문자 제거

      import re
      result = re.sub('^\s*|\s*$', '', result)
  • 메인 함수에서 while 내에 첫번째 if문으로 영어 문장이 맞는지 판정하고 그것이 아니면 모스부호 문장인지 판정하도록 했는데, if 문에 쓰이는 판정 함수가 잘못 짜여있어 .....을 True로 잘못 판정했었다. 판정 함수를 수정하여 문제 해결(특정 문자를 삭제한 값을 가지고 추가 처리를 했어야했는데, 삭제하지 않은 원본 값으로 추가 처리를 하고 있었다).

  • 조건 판정시 특정 문자를 제외한 문장에 대해서 입력값이 없거나 빈 칸만 있는 경우 판정할 때, 정규표현식과 findall로 찾으려 했으나 그러면 매칭되는 여러개의 문자열이 제외할 특정 문자를 기준으로 분절되어 매칭된 리스트를 얻게 된다. 반대로 생각해서 제외할 특정 문자를 지운 문장을 만들어 놓고 이 문장으로 판정하면 쉽게 풀린다.

      # 조건 3에 해당하는 문장부호 삭제
      user_input_ = re.sub(r'[.,!?]+', '', user_input)
    
      # 조건 3 검사
      if user_input_ == '' or user_input_.isspace(): 
          return False

피어세션 정리

  • 피어세션이 피어씁니다. 발표자를 정하고, 시뮬레이션
  • 선택과제에서 막히는 부분 공유 e.x.) 문제 풀이에 필요한 sympy
  • 학습 내용 공유 : MLE 복습, 정규표현식

학습 회고

  • 통계적 기계학습 방법론의 관점에서 딥러닝 모델이 가진 의미를 알 수 있었다. 그동안 너무 생각없이 모델을 쓰고만 있었던 것 같다. 그것이 가진 의미와 다른 개념과 어떻게 연결되는지를 고민하면서 학습하자.
Comments