Link

수학 용어 설명

이번에는 이 책에서 다룰 수학 표현에 대해서 일부 설명하고 넘어가려 합니다. 합을 나타내는 시그마SIGMA의 경우 고등학교에서 배우기 때문에 보통 다들 이해하지만, 곱을 나타내는 프로덕트product의 경우에는 가끔 질문이 있는 경우가 있어서 설명하고 넘어가고자 합니다.

Sum & Product

우리는 고등학교에서 수열의 합을 표현하는 방법에 대해서 배웠습니다. 이것을 코드로 나타내볼 수도 있을 것입니다.

\[\begin{gathered} \sum_{i=1}^n{ x_i }=x_1+\cdots+x_n \end{gathered}\]
def sigma(x):
    ret = 0
    for x_i in x:
        ret += x_i

    return ret

x = [i + 1 for i in range(n)]

print(sigma(x))

마찬가지로 수열의 곱셈을 나타내 볼 수도 있을 것입니다. 아쉽게도 고등학교 교과 과정에 없는데, 대학교에서 불쑥 튀어나오는 재미있는 표현 방법입니다. 사실 앞서 보여드린 시그마와 비슷한 방식으로 동작하기 때문에, 곱셈이라는 것만 알면 이해하는데 큰 지장은 없을 것입니다.

\[\begin{gathered} \prod_{i=1}^n{ x_i }=x_1\times\cdots\times{x}_n \end{gathered}\]
def product(x):
    ret = 1
    for x_i in x:
        ret *= x_i

    return ret

x = [i + 1 for i in range(n)]

print(product(x))

Argmax

추가적으로 argmax 함수에 대해서도 설명하고 넘어가고자 합니다. 기존에 max 함수의 경우에는 함수에 인자로 들어온 숫자들 중에서 가장 큰 값을 골라 반환하는 것이었습니다. 하지만 argmax 함수의 경우에는 인자로 대상 함수와 대상 함수의 입력 셋을 받게 됩니다. 다음의 수식에서 대상 함수는 $f$ 가 되고, 입력 셋은 $x\in\mathcal{X}$ 가 됩니다. 그럼 argmax 함수는 대상 함수 $f$ 의 출력을 최대로 만드는 입력을 반환하게 됩니다.

\[\begin{gathered} \hat{x}=\underset{x\in\mathcal{X}}{\text{argmax }}f(x) \end{gathered}\]

다음의 예제 코드를 통해 좀 더 쉽게 이해해보도록 합니다. 대상함수가 $f(x)=-\log{x}$ 일 때, argmax 함수를 구현한 내용입니다. 우리가 정의한 argmax 함수가 target_func라는 인자로 함수를 넘겨받는 것을 볼 수 있습니다. 그리고 for 반복문을 통해 리스트 X 내의 숫자들을 하나씩 넣어가며 max_val과 ret을 갱신하고 있습니다.

import numpy as np

def argmax(target_func, X):
    max_val = -np.inf
    ret = None
    for x in X:
        val = f(x)
        if val > max_val:
            max_val = val
            ret = x

    return ret

X = [i + 1 for i in range(n)]

def f(x):
    return -np.log(x)

print(argmax(f, X))