머신러닝, 딥러닝에 필요한 기초 수학 - 다변수 함수와 벡터함수

TS2·2021년 7월 15일
1

공부한 책 : 머신러닝, 딥러닝에 필요한 기초 수학 with 파이썬 (조준우 저)

목차 입력과 출력에 따른 함수들

1) 스칼라와 벡터
2) 일변수 스칼라 함수
3) 일변수 벡터 함수
4) 다변수 스칼라 함수
5) 다변수 벡터 함수
6) 합성 함수
7) 소프트 맥수 함수

1. 스칼라와 벡터

스칼라 : 크기만을 나타내는 숫자. 양.
벡터 : 크기와 방향을 모두 가지는 숫자. 양.

스칼라가 여러개 모여 있으면 벡터라고 봐도 쪼렙에겐 무방하다.

벡터변수를 표현할 때는 x볼드체로 표기한다.
만일 x, x 이면 앞의 x는 스칼라, 뒤 x는 벡터이다.

벡터 x의 각 숫자들은 벡터의 요소(element)라 하고, 그 개수를 차원(dimension)이라 한다.

x=(x1x2)or(x1,x2)T\displaystyle x = \begin{pmatrix} x1 \\ x2 \end{pmatrix} or \begin{pmatrix} x1, x2 \end{pmatrix}^T

로 표현할 수 있다. 일반적으로 열행렬로 표현해서 '열벡터'로 부르고 인라인으로 표기할땐 우측처럼 '행벡터'로 표기하고 전치행렬(T) 표시를 해준다.

2. 일변수 스칼라 함수

하나의 변수가 입력되고 하나의 결과가 출력되는 함수면 일변수 스칼라 함수다.

y=f(x)y = f(x)

x와 y 둘다 스칼라 이다

3. 일변수 벡터 함수

일변수 벡터함수는 아래 처럼 정의된다.

r(t)=(f1(t),f2(t),...,fn(t))Tr(t) = (f_1(t), f_2(t), ..., f_n(t))^T

n차원(n개의 벡터요소를 가진) 벡터를 결과로 돌려주는 벡터함수.
변수는 t 한가지만 입력되었다.

따라서 일변수 벡터 함수는

f:RRnf : R \to R^{n}

인 함수이다. R은 실수 전체 집합을 의미함. 함수의 어떤 형태(지수/로그/다항)든 가능함.

1) 예시
r(t)=(x(t)y(t)z(t))=(sin(6t)t4t22)r(t) = \begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix} = \begin{pmatrix} sin(6t) \\ \cfrac{t}{4} \\ \cfrac{t^2}{2} \end{pmatrix}

인 경우, t 한가지만 결정되면 벡터를 계산할 수 있음.

이를 파이썬 코드로 작성해보기로 하자.

## 3. 일변수 벡터 함수

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

plt.figure(figsize =(7, 7))

ax = plt.axes(projection='3d')
ax.xaxis.set_tick_params(labelsize=15)
ax.yaxis.set_tick_params(labelsize=15)
ax.zaxis.set_tick_params(labelsize=15)
ax.set_xlabel('$x$', fontsize =20)
ax.set_ylabel('$y$', fontsize =20)
ax.set_zlabel('$z$', fontsize =20)

# eq(3.3)
t = np.linspace(0, 2, 101)
x = np.sin(6*t)
y = 1/4 * t
z = t**2 / 2

ax.plot3D(x, y, z, c='k')
ax.plot([x[0]], [y[0]], [z[0]], 'o', markersize=10, color='k', label="t = {:.2f}".format(t[0]))
ax.plot([x[50]], [y[50]], [z[50]], '^', markersize=10, color='k', label="t = {:.2f}".format(t[50]))
ax.plot([x[-1]], [y[-1]], [z[-1]], '*', markersize=10, color='k', label="t = {:.2f}".format(t[-1]))

ax.legend(fontsize=15, loc="upper left")

plt.show()

요로코롬 숫자 t에 해당하는 점을 3차원 공간에 선으로 표현해준다.
마치 시간에 따라 3차원 공간에서 점이 어떻게 이동하는지를 보여주는 모델링이 가능하다.
일변수 벡터함수는 잘 쓰이진 않지만, 경사도하강 증명시 사용되니 알아두자.

4. 다변수 스칼라함수

입력이 여러 개고 출력이 한가지인 함수.

y=f(x)y = f(\bold x)

x는 n개인 스칼라를 의미

케이스1)

f(x,y)=x+yf(x, y) = x + y

케이스2)

f(x1,x2)=50(x2x12)2+2(2x1)2f(x_1, x_2) = 50(x_2 - x_1^2)^2 + 2(2 - x_1)^2

우변대로 계산하면 출력은 숫자 하나이다.

따라서 f:R2Rf : R^2 \to R 인 함수이다.

순서쌍이 입력변수의 원소 수의 제곱만큼 존재하기 때문에 각 입력변수 차원의 제곱 차원이 정의역이 된다.

x=(x1,x2)T\bold x = (x_1, x_2)^T

로 볼 수 있기에 치역을 \bold x로 치환할 수 있다.

1) 예시

이 함수의 정의역은 x1x_1x2x_2를 각 축으로 하는 2차원 평면이 된다.
이에 따른 함수의 그래프는 3차원 공간의 점으로 그 치역을 표현한다.

## 4. 다변수 스칼라 함수

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

plt.figure(figsize=(7,7))

ax = plt.axes(projection='3d')
ax.xaxis.set_tick_params(labelsize=15)
ax.yaxis.set_tick_params(labelsize=15)
ax.zaxis.set_tick_params(labelsize=15)
ax.set_xlabel(r'$x_1$', fontsize =20)
ax.set_ylabel(r'$x_2$', fontsize =20)
ax.set_zlabel(r'$z$', fontsize =20)

## 정의역정의(x1, x2)
x1 = np.linspace(-2, 2, 50) 
x2 = np.linspace(-1, 3, 50)
X1, X2 = np.meshgrid(x1, x2)
Z = 50 * (X2 - X1 **2) **2 + (2 - X1)**2

ax.scatter3D(X1, X2, Z, marker='*', color='gray')

plt.show()
2) 음함수와 해집합

위 예시처럼 2차원 정의역의 다변수 스칼라 함수인 경우, 3차원 공간에 표현할 수 있지만
만일 정의역이 3차원 이상인 경우라 더이상 3차원 공간에 함수를 표현할 수 없는 경우는?

\to 하나의 변수 또는 치역이 고정되어있다면, 음함수(implicit function) 이라 명한다. x2=f(x1)x_2 = f(x_1) 처럼 변수의 관계가 명시적으로 드러나 있지 않고 또는 f(x1,x2)=cf(x_1, x_2) = c 와 같이 두 변수가 한 식에 한번에 나타나있는 경우에 해당한다. 이때의 (x1,x2)(x_1, x_2)를 만족시키는 모든 순서쌍을 '해집합'이라고 한다.

5. 다변수 벡터함수

입력 여러개, 출력도 여러개인 함수이다.

F(x)=(f1(x),f2(x),...,fn(x))T,xRmF(\bold x) = (f_1(\bold x), f_2(\bold x), ..., f_n(\bold x))^T , \bold x \in R^m

입력 x\bold x는 숫자 m개가 모인 벡터이고, 각 성분 함수 f1(x)f_1(\bold x)f:RmRf:R^m \to R인 다변수 스칼라함수가 된다.

1) 예시
s(u,v)=(uv1+u2+v21+v2),0u,v1s(u, v) = \begin{pmatrix} u \\ v \\ 1 + u^2 + \frac{v^2}{1+v^2} \end{pmatrix}, 0 \le u, v \le 1

독립변수 m = 2인, x=(u,v)\bold x = (u, v)로 두고 출력변수의 차원을 n = 3으로 두고 그래프를 그려보자.

## 5. 다변수 벡터함수

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

plt.figure(figsize=(7,7))

ax = plt.axes(projection='3d')
ax.xaxis.set_tick_params(labelsize=15)
ax.yaxis.set_tick_params(labelsize=15)
ax.zaxis.set_tick_params(labelsize=15)
ax.set_xlabel(r'$x$', fontsize =20)
ax.set_ylabel(r'$y$', fontsize =20)
ax.set_zlabel(r'$z$', fontsize =20)

u = np.linspace(0, 1, 30)
v = np.linspace(0, 1, 30)
U, V = np.meshgrid(u, v)
X = U
Y = V
Z = (1+U**2) + (V/(1+V**2))

#ax.plot_surface(X1, X2, Z, cmap=plt.cm.binary, edgecolor="k")
ax.scatter3D(X, Y, Z, marker='*', color='gray')

plt.show()

입력변수 2개로 출력변수 3개의 값을 3차원에 표현한 것이다. 입력변수 uv의 순서쌍은 표현되지 않는다.

  • 인공신경망은 이러한 다변수 벡터함수의 복잡한 형태이며, 여러개의 다변수 벡터함수를 연결한 합성함수이다.
profile
샴푸아닙니다. TSE입니다.

0개의 댓글