그리스문자 정리

문자영어한글로마자 표기법
Α αAlpha알파a
Β βBeta베타b
Γ γGamma감마gh, g, j
Δ δDelta델타d, dh
Ε εEpsilon엡실론e
Ζ ζZeta제타z
Η ηEta에타i
Θ θTheta쎄타th
Ι ιIota요타i
Κ κKappa카파k
Λ λLambda람다l
Μ μMum
Ν νNun
Ξ ξXi크시x, ks
Ο οOmicron오미크론o
Π πPi파이p
Ρ ρRhor
Σ σ ςSigma시그마s
Τ τTau타우t
Υ υUpsilon입실론y, v, f
Φ φPhif
Χ χChi카이ch, kh
Ψ ψPsi프사이ps
Ω ωOmega오메가o
자세히 보기

RNN 첫걸음

시퀀스 데이터

  • 소리, 문자열, 주가 등처럼 순차적으로 나타나는 데이터를 시퀀스 데이터로 분류한다.
  • 독립동등분포(i.i.d.) 가정을 잘 위배하기 때문에 순서를 바꾸거나 과거 정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 된다.
  • 이전 시퀀스의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부확률을 이용할 수 있다.

  • 시퀀스 데이터를 다루기 위해선 길이가 가변적인 데이터를 다룰 수 있는 모델이 필요하다.

    $H_T = Net_\Theta(H_{t-1}, X_{t-1})$​

  • 시퀀스 길이가 길어지면 BPTT를 통한 역전파 알고리즘의 계산이 불안정해지므로 길이를 끊는 것이 필요하다. (truncated BPTT)

  • 이러한 문제들 때문에 Vanila RNN은 길이가 긴 시퀀스를 처리하는데 문제가 있다.

    • 이를 해결하기 위해 등장한 것이 LSTM과 GRU이다.
자세히 보기

CNN 첫걸음

  • 지금까지 배운 다층신경망(MLP) 구조는 각 뉴런들이 선형모델과 활성함수로 모두 연결된 (fully connected) 구조였다.
  • Convolution 연산은 이와 달리 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조이다.
  • Convolution 연산의 수학적 의미는 신호(signal)을 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것이다.
  • 커널은 정의역 내에서 움직여도 변하지 않고(translation invariant) 주어진 신호에 국소적(local)으로 적용한다.

2차원 Convolution 연산

  • 커널을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조

  • 입력크기를 (H, W), 커널 크기를 $(K_H, K_W)$, 출력 크기를 $(O_H, O_W)$ 라고 하면 출력 크기는 다음과 같이 계산한다.

  • 채널이 여러개인 2차원 입력의 경우 2차원 Convolution을 채널 개수만큼 적용한다. 텐서를 직육면체 블록으로 이해하면 좀 더 이해하기 쉬움.

  • Convolution 연산은 커널이 모든 입력데이터에 공통으로 적용되기 때문에 역전파를 계산할 때도 convolution 연산이 나오게 된다.

자세히 보기

베이즈 통계학 맛보기

조건부확률

  • 조건부확률 P(A | B)는 사건 B가 일어난 상황에서 사건 A가 발생할 확률을 의미한다.

  • 베이즈 정리는 조건부확률을 이용하여 정보를 갱신하는 방법을 알려준다.

    • theta: 모수 (데이터가 관찰될 확률)

    • 사후확률: 데이터를 관찰했을 때 이 가설이 성립할 확률 (데이터 관측 이후 측정한 확률이라 사후확률임)

    • 사전확률: 모델링 이전에 사전에 주어진 확률로 이해할 것. (데이터 분석 전 타겟에 대한 모수나 가설 등 미리 설정한 값.)

    • 가능도: 현재 주어진 파라미터(모수)가정에서 이 데이터가 관찰될 확률

    • Evidence: 데이터 전체의 분포

    • ex) COVID-99의 발병률이 10%로 알려져있다. COVID-99에 실제로 걸렸을 때 검진될 확률은 99%, 실제 걸리지 않았을 때 오검진될 확률이 1%라고 할 때, 어떤 사람이 질병에 걸렸다는 결과가 나왔을 때 정말로 COVID-99에 감염되었을 확률은?

      • 사전확률, 민감도(Recall), 오탐율(False alarm)을 가지고 정밀도(Precision)을 구하는 문제임.

      • 사전확률 P(theta) = 10% = 0.1

      • 가능도 P(D given theta) = 99% = 0.99, 오탐율 = 1% = 0.01
      • evidence P(D) = sum(P(D given theta) P(theta)) = 0.99 0.1 + 0.01 * 0.9 = 0.108
      • So, P(theta given D) = 0.1 * (0.99 / 0.108) ~= 0.916
    • COVID-99 판정을 받은 사람이 두 번째 검진을 받았을 때도 양성이 나왔을 때, 진짜 COVID-99에 걸렸을 확률은?

      • 베이즈 정리를 통해 새로운 데이터가 들어왔을 때 앞서 계산한 사후확률을 사전확률로 사용하여 갱신된 사후확률을 계산할 수 있다.
  • 조건부 확률은 유용한 통계적 해석을 제공하지만, 인과관계(Causality)를 추론할 때 함부로 사용해서는 안된다.

    • 인과관계는 데이터 분포의 변화에 강건한 예측모형을 만들 때 필요하다.
    • 인과관계를 알아내기 위해서는 중첩요인(confounding factor)의 효과를 제거하고 원인에 해당하는 변수만의 인과관계를 계산해야 한다. 제거하지 않았을 때는 가짜연관성(spurious correlation)이 나온다.
자세히 보기

통계학 맛보기

모수란?

  • 통계적 모델링은 적절한 가정 위에서 확률분포를 추정(inference)하는 것이 목표이며, 기계학습과 통계학이 공통적으로 추구하는 목표이다.
  • 유한한 개수의 데이터만 관찰해서 모집단의 분포를 정확하게 알아낸다는 것은 불가능하다. 때문에 근사적으로 확률분포를 추정할 수밖에 없다.
  • 데이터가 특정 확률분포를 따른다고 선험적(a priori)으로 가정한 후 그 분포를 결정하는 모수(parameter)를 추정하는 방법을 모수적 방법론이라고 한다.
  • 특정 확률분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀌면, 그것을 비모수(nonparametric) 방법론이라 부른다.
    • 기계학습의 많은 방법론은 비모수 방법론에 속한다.
    • 모수가 무한히 많거나 모수가 데이터에 따라 바뀌는 것이지, 비모수방법론에는 모수가 없다는 것이 아니다.

확률분포 가정하기(예제)

  • 우선 히스토그램을 통해 모양을 관찰한다.
    1. 데이터가 2개의 값(0 또는 1)만 가지는 경우 -> 베르누이분포
    2. 데이터가 n개의 이산적인 값을 가지는 경우 -> 카테고리분포
    3. 데이터가 [0, 1]사이에서 값을 가지는 경우 -> 베타분포
    4. 데이터가 0 이상의 값을 가지는 경우 -> 감마분포, 로그정규분포 등
    5. 데이터가 R 전체에서 값을 가지는 경우 -> 정규분포, 라플라스분포 등

데이터로 모수 추정

  • 데이터의 확률분포를 가정했다면, 모수를 추정해볼 수 있다.
  • 정규분포의 모수는 평균과 분산으로, 이를 추정하는 통계량은 아래 식과 같다.
    • 표본분산을 구할 때 N이 아니라 N - 1 로 나누는 이유는 불편(unbiased) 추정량을 구하기 위해서다.
  • 통계량의 확률분포를 표집분포(sampling distribution)라 부르며, 특히 표본평균의 표집분포는 N이 커질수록 (데이터가 많아질수록) 정규분포를 따르게 된다.
    • 이것을 중심극한정리라고 부르며, 모집단의 분포가 정규분포를 따르지 않아도 성립한다.

최대가능도 추정법

  • 표본평균이나 표본분산은 중요한 통계량이지만 확률분포마다 사용하는 모수가 다르므로 적절한 통계량이 달라지게 된다.
  • 이론적으로 가장 가능성이 높은 모수를 추정하는 방법 중 하나는 최대가능도 추정법(maximum likelihood estimation, MLE)이다.
  • 데이터집합 X가 독립적으로 추출되었을 경우엔 로그가능도를 최적화한다.
    • 로그가능도를 사용하는 이유
      1. 로그가능도를 최적화하는 모수는 가능도를 최적화하는 MLE가 된다.
      2. 데이터의 숫자가 수억 단위가 된다면 컴퓨터의 정확도로는 가능도를 계산하는 것이 불가능해진다.
      3. 데이터가 독립일 경우, 로그를 사용하면 가능도의 곱셈을 로그가능도의 덧셈으로 바꿀 수 있기 때문에 컴퓨터로 연산이 가능해진다.
      4. 경사하강법으로 가능도를 최적화할 때 미분 연산을 사용하게 되는데, 로그가능도를 사용하면 연산량을 O(N^2)에서 선형시간으로 줄일 수 있다.
      5. 대개 손실함수의 경우 경사하강법을 사용하므로 음의 로그가능도(negative log-likelihood)를 최적화하게 된다.
자세히 보기

확률론 맛보기

딥러닝에서 확률론이 필요한 이유

  • 딥러닝은 확률론 기반의 기계학습 이론에 바탕을 둔다.
  • 손실함수 등의 작동원리가 데이터 공간을 통계적으로 해석해서 유도하기 때문.
  • 회귀분석에서 손실함수로 사용되는 L2-노름은 예측오차의 분산을 가장 최소화하는 방향으로 학습
  • 분류문제에서 사용되는 교차엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화하는 방향으로 학습
  • 분산 및 불확실성을 최소화하기 위해서는 측정 방법을 알아야한다.

확률분포

  • 확률분포란 데이터 공간에서 데이터를 추출하는 분포이다.
  • 데이터는 확률변수로 (x, y) ~ D 라고 표기한다.
  • 결합분포 P(x, y)는 D를 모델링한다.
    • D는 이론적으로 존재하는 확률분포이기 때문에 사전에 알 수 없다.

확률변수

이산확률변수

  • 이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.

연속확률변수

  • 연속형 확률변수는 데이터 공간에 정의된 확률변수의 밀도 위에서의 적분을 통해 모델링한다.
  • 밀도함수는 누적확률분포의 변화율을 모델링한 것으로 확률로 해석해서는 안된다.

조건부확률과 기계학습

자세히 보기

딥러닝 학습방법 이해하기

비선형모델 신경망

  • 신경망 모델은 기본적으로 비선형 모델이지만, 보통 선형 모델과 비선형 모델의 결합으로 이루어져 있다.

  • 소프트맥스(softmax) 연산

    • 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산임.

    • 분류 문제를 풀 때 선형모델과 소프트맥스 함수를 결합하여 예측한다.

    • def softmax(vec):
          denumerator = np.exp(vec = np.max(vec, axis=-1, keepdims=True))
          numerator = np.sum(denumerator, axis=-1, keepdims=True)
          val = denumerator / numerator
          return val
      
  • 신경망은 선형모델과 활성함수(activation function)을 합성한 함수이다.

  • Multi-layer Perceptron(MLP)은 신경망이 여러층 합성된 함수이다.

활성함수

  • 활성함수는 비선형함수이다.
  • 활성함수를 쓰지 않으면 딥러닝은 선형모형과 차이가 없다.
  • 시그모이드 함수나 tanh 함수는 전통적으로 많이 쓰이던 활성함수지만 딥러닝에선 ReLU 함수를 많이 쓰고 있다.

층을 여러 개 쌓는 이유

  • 이론적으로는 2층 신경망으로도 임의의 연속함수를 근사할 수 있다.
  • 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능하다.
    • 층이 얇으면 필요한 뉴런의 숫자가 기하급수적으로 늘어나서 넓은(wide) 신경망이 되어야 한다.

딥러닝 학습원리: 역전파 알고리즘

  • 딥러닝은 역전파(backpropagation) 알고리즘을 이용하여 각 층에 사용된 파라미터를 학습한다.
  • 역전파 알고리즘은 합성함수 미분법인 ‘연쇄법칙(chain-rule)’ 기반 자동미분(auto-differentiation)을 사용한다.
자세히 보기

경사하강법

미분

  • 미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 가장 많이 사용하는 기법이다.
  • 미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기를 구한다.
  • 미분값을 더하면 경사상승법(gradient ascent)이라 하며, 함수의 극대값의 위치를 구할 때 사용한다.
  • 미분값을 빼면 경사하강법(gradient descent)이라 하며, 함수의 극소값의 위치를 구할 때 사용한다.
  • 경사상승/경사하강법은 극값에 도달하면 움직임을 멈춘다.
1
2
3
4
5
6
7
8
# gradient: 미분 계산 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건

var = init
grad = gradient(var)
while(abs(grad) > eps):
var = var - lr * grad
grad = gradient(var)
  • 미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로서, 최적화에서 제일 많이 사용하는 기법이다.
  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용한다.
  • 각 변수 별로 편미분을 계산한 그래디언트 벡터(gradient vector)를 이용하여 경사하강/상승법에 사용할 수 있다.
    • Nabla(역삼각형) 기호로 표기

역행렬을 이용한 선형회귀분석

  • np.linalg.pinv 를 이용하면 데이터를 선형모델로 해석하는 선형회귀식을 찾을 수 있다.

  • 행렬 X(n, m)에서 n >= m인 경우,

    • XB = y_hat ~= y

      -> B = X^+ * y (L2-노름을 최소화)

      -> = (X^T X)^-1 X^T * y

  • 선형모델의 경우 역행렬을 이용하여 회귀분석이 가능하다.

경사하강법을 이용한 선형회귀분석

  • 선형회귀의 목적식은 ||y - XB||2 이고, 이를 최소화하는 B를 찾아야 하므로 아래와 같은 그래디언트 벡터를 구해야 한다.

  • # norm: L2-노름을 계산하는 함수
    # lr: 학습률, T: 학습횟수
    
    for t in range(T):
        error = y - X @ beta
        grad = - transpose(X) @ error
        beta = beta - lr * grad
    
  • 이론적으로 경사하강법은 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장되어 있다. (볼록한 함수는 그래디언트 벡터가 항상 최소점을 향하기 때문)

확률적 경사하강법(SGD, Stochastic Gradient Descent)

  • 확률적 경사하강법은 모든 데이터가 아닌 데이터 한 개 또는 일부(mini batch)를 활용하여 업데이트한다.
  • 볼록함수가 아닌(non-convex) 목적식은 SGD를 통해 최적화할 수 있다.
  • SGD는 데이터의 일부를 가지고 파라미터를 업데이트하기 때문에 연산자원을 좀 더 효율적으로 활용하는데 도움이 된다.
    • 전체 데이터(X, y)를 쓰지 않고 미니배치(X(b), y(b))를 사용하여 업데이트하므로 연산량이 b / n 으로 감소한다.
자세히 보기

행렬이 뭐에요?

행렬이란?

  • 행렬은 벡터를 원소로 가지는 2차원 배열
  • 행렬은 행과 열이라는 인덱스를 가진다.
  • 행렬의 특정 행(열)을 고정하면 행(열)벡터라고 부른다.
  • 전치행렬(transpose matrix)은 행과 열의 인덱스가 바뀐 행렬이다.
  • 벡터가 공간에서 한 점이었다면, 행렬은 여러 점을 나타낸다.
  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다.
  • 행렬곱은 i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다.
  • 행렬은 벡터공간에서 사용되는 연산자(operator)로 이해한다.
  • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있다.
  • 행렬곱을 통해 패턴을 추출할 수 있고, 데이터를 압축할 수도 있다.
  • 모든 선형변환(linear transform)은 행렬곱으로 계산할 수 있다.

역행렬

  • 어떤 행렬 A의 연산을 거꾸로 되돌린 행렬을 역행렬이라 한다.
  • 역행렬은 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산할 수 있다.
  • 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose)역행렬을 이용한다.
  • 유사역행렬을 이용하면 데이터를 선형모델로 해석하는 선형회귀식을 찾을 수 있다.
자세히 보기

벡터가 뭐에요?

벡터란?

  • 벡터는 공간에서 한 점 을 나타낸다.
  • 벡터는 원점으로부터의 상대적인 위치 를 표현한다.
  • 벡터에 숫자를 곱해주면(스칼라곱) 길이가 변하지만, 스칼라가 0보다 작다면 반대 방향 이 된다.

  • 벡터는 숫자를 원소로 가지는 리스트 혹은 배열이다.

  • 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다.
  • 두 벡터의 덧셈은 다른 벡터로부터 상대적인 위치 이동 을 표현한다. (뺄셈은 방향을 뒤집은 덧셈)
    • 벡터 x에 대하여, $x = 0 + x$ 가 성립한다. 즉 x라는 벡터는 원점벡터에서부터의 상대적인 위치를 나타낸다.

벡터의 노름

  • 벡터의 노름(norm)은 원점에서부터의 거리 이다.

  • L1-노름은 각 성분의 변화량의 절대값을 모두 더한 값이다.

  • L2-노름은 피타고라스 정리를 이용하여 유클리드 거리 를 계산한다.
  • 노름의 종류에 따라 기하학적 성질이 달라진다.
    • L1-노름 상의 원은 마름모꼴 (Robust 학습, Lasso 회귀)
    • L2-노름 상의 원은 흔히 알고 있는 원이다. (Laplace 근사, Ridge 회귀)
  • 두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용한다.
    • 뺄셈을 거꾸로 해도 거리는 같다.
  • L2-노름에서 두 벡터 사이의 거리를 이용하여, 제2 코사인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있다.
    • 내적(inner product)을 통해 분자를 쉽게 계산할 수 있다.

벡터의 내적

  • 내적은 두 성분곱의 총합이다.
  • 내적은 정사영(orthogonal projection)된 벡터의 길이와 관련이 있다.
  • Pros(x)는 벡터 y로 정사영된 벡터 x의 그림자 를 의미한다.
  • Proj(x) = ||x||2cos(theta)
  • 내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값이다.
  • = Proj(x) * ||y||2 = ||x||2||y||2cos(theta)
자세히 보기