[문과생 ML 정복기] 1. 백터

이영훈·2021년 8월 2일
1

문과생ML

목록 보기
1/1

INTRO

첫 포스팅인 만큼 본인에 대해 간략하게 소개하자면 수학은 고등학교 때 미적분까지만 배운 순수 문과생이다. 따라서 해당 포스팅은 비전공자(이과계열이 아닌 문과생)도 이해하기 쉽도록 설명, 아니 정리할 생각이다.
본인도 아직 모르는 점이 많고 해당 포스팅을 하는 이유는 나름대로의 정리를 하면서 복습하기 위함이다.

인공지능 분야에 관심을 갖고 시작하는 문과생들은 많지만 항상 수학의 벽에 좌절 하는 경우를 많이 봐왔다. 해당 포스팅을 통해 조금이라도 도움이 되기를 바라는 바이다.

백터란 무엇인가?

X=[1,2,3]X=[1,2,3]   X=[123]X=\begin{bmatrix}1\\2\\3 \end{bmatrix}

백터는 크게 행 백터, 열 백터로 나뉜다.
직관 적으로 행과 열 그대로다. 앞의 수식이 행 백터이고 뒤의 수식이 열 백터이다.

하지만 백터라는 문과생에게 백터라는 개념은 매우 생소하다.
백터는 공간에서 한점을 나타내는 개념, 원점으로부터 상대적 위치를 표현하는 개념이라고 생각하면 편하다.

왼쪽 부터 순서대로 보면 첫 번째 그림은 수직선상 즉 1차원에서의 백터 표현이다.
X=[x1]X=[x_1]
그 다음은 2차원, 우리가 흔히 배웠던 좌표평면계에서의 백터 표현이다.
X=[x1,x2]X=[x_1,x_2]
마지막은 문과생에게는 매우 생소한 3차원에서의 백터 표현이다.
X=[x1,x2,x3]X=[x_1,x_2,x_3]
이 사진을 통해 d 차원(임의의 d)에서 대한 백터도 존재할 수 있다는 사실을 알 수 있다.
X=[x1,x2,...,xd]X=[x_1,x_2,... ,x_d]

스칼라란 무엇인가?

X=a[x1x2x3xd]X=a\begin{bmatrix}x_1\\x_2\\x_3\\\vdots\\x_d \end{bmatrix} X=[ax1ax2ax3axd]X=\begin{bmatrix}ax_1\\ax_2\\ax_3\\\vdots\\ax_d \end{bmatrix}

스칼라는 그냥 쉽게 실수로 이해하면 된다.
두 수식은 동등하다.
스칼라와 백터의 곱도 좌표평면상에서 표현해 볼 수 있다.

설명 그대로 스칼라의 곱은 백터의 길이를 줄이거나 늘릴 수 있다.
여기서 백터의 방향은 변하지 않는다.
하지만 -1 과 같은 음수의 스칼라를 곱하게 되면 방향도 180도 변할 수 있다.

백터의 사칙연산

백터는 같은 모양을 가지면 덧셈과 뺄셈을 계산할 수 있다.

X=[x1x2x3xd]X=\begin{bmatrix}x_1\\x_2\\x_3\\\vdots\\x_d \end{bmatrix} Y=[y1y2y3yd]Y=\begin{bmatrix}y_1\\y_2\\y_3\\\vdots\\y_d \end{bmatrix} X±Y=[x1±y1x2±y2x3±y3xd±yd]X\pm Y=\begin{bmatrix}x_1\pm y_1\\x_2\pm y_2\\x_3\pm y_3\\\vdots\\x_d\pm y_d \end{bmatrix}

물론 같은 모양을 갖고 있으면 곱셈도 가능하다. 하지만 이를 곱셈이라 표현하지 않고 백터의 성분곱 이라고 표현하다.

X=[x1x2x3xd]X=\begin{bmatrix}x_1\\x_2\\x_3\\\vdots\\x_d \end{bmatrix} Y=[y1y2y3yd]Y=\begin{bmatrix}y_1\\y_2\\y_3\\\vdots\\y_d \end{bmatrix} XY=[x1 y1x2y2x3y3xdyd]X\odot Y=\begin{bmatrix}x_1\ y_1\\x_2 y_2\\x_3 y_3\\\vdots\\x_d y_d \end{bmatrix}

모양도 특이하다. \odot
이제 사칙연산을 좌표평면 상에서 살펴보자

우선 덧셈은 상대적 위치 이동인 것을 확인할 수 있다.
원점에서 XX백터 만큼 이동한 후 그 지점에서 다시 YY백터 만큼 이동하면 백터의 덧셈이다.
그 역도 물론 성립한다.
뺄셈도 이해하기 어렵지 않다. 원점에서 XX백터만큼 이동한후 YY백터에 음수를 곱하여 이동하면 된다.

백터의 노름

노름(norm)이란 어휘는 문과생에게 있어서 매우 생소하다. 하지만 이해하기는 크게 어렵지 않다.
백터의 노름은 원점에서부터 거리를 나타낸다.

X=[x1x2x3xd]X=\begin{bmatrix}x_1\\x_2\\x_3\\\vdots\\x_d \end{bmatrix}   X1=i=1dxi\Vert X\Vert_1 = \sum_{i=1}^{d}{\vert x_i\vert}   X2=i=1dxi2\Vert X\Vert_2 = \sqrt{\sum_{i=1}^{d}{\vert x_i\vert}^2}

우선 노름에는 2가지 종류가 있다.
L1L_1-노름과 L2L_2-노름이다.
L1L_1-노름은 각 성분의 변화량의 절대값을 모두 더한 값이다.
L2L_2-노름은 피타고라스 정리를 이용해 유클리드 거리를 계산한 값이다.

그렇다면 왜 다른 노름의 종류를 우리는 알아야 될까?

노름의 종류에 따라 기하학적 성질이 달라지기 때문이다.
ML에서는 각 노름마다의 기하학적 성질이 필요한 방법론들이 존재하기 때문에 둘다 숙지할 필요가 있다.

노름을 이용해 두 백터 사이의 거리 구하기

L1L_1,L2L_2-노름을 이용해 우리는 두 백터사이의 거리를 산출해낼 수 있다.

두백터 사이의 거리를 계산할 때에 백터의 뺄셈을 이용할 수 있다.
00백터에서 YY백터 까지이동한후 다시 YY백터에서 XX백터만큼 빼주면 YXY-X백터의 거리를 구할 수 있다.
같은 논리로 XYX-Y백터도 같은 값을 갖는 다는 것을 알 수 있다.
즉,

XY1=YX1\Vert X-Y\Vert_1 = \Vert Y-X\Vert_1    XY2=YX2\Vert X-Y\Vert_2 = \Vert Y-X\Vert_2

임을 알 수 있다.

노름을 이용해 두 백터 사이의 각도 구하기

여기서 부터 피곤해 지기 시작한다.
우리가 중학교때 배웠던 삼각함수의 개념이 등장한다.
제2코싸인 법칙이다.

https://namu.wiki/w/%EC%BD%94%EC%82%AC%EC%9D%B8%20%EB%B2%95%EC%B9%99

증명은 나무위키를 통해 알아보자
제2코싸인 법칙을 통해 세변의 길이를 알면 모든각의 cosθ\cos \theta 값도 계산해낼 수 있다.

L2L_2-노름을 이용해서 원점으로 부터 각 백터의 거리를 구하고, 백터의 뺄셈을 이용해 XX백터 YY백터 사이의 거리를 구할 수 있다. 즉 삼각형의 세변의 길이를 모두 알고 있는 셈이다.

여기서 제2코싸인 법칙을 대입해보자
삼각형ABCABC가 있고 이때 각 A,B,CA, B, C의 대변이 각각 a,b,ca, b, c 라고 하면

cosA=b2+c2a22bc\cos A = \frac{b^2+c^2-a^2}{2bc}

다음과 같다.

대변 b,cb,c를 원점과 XX백터, YY백터 사이의 거리라고 보고, aaXY2\Vert X-Y\Vert_2라고 보면 금방 이해할 수 있다.
이제 분모를 계산하면 X22\Vert X\Vert_2^2Y22\Vert Y\Vert_2^2는 소거 되고 2XY2\vert XY\vert만 남게 된다. 두 백터의 곱은 위에서 배운 '\odot' 이 친구를 떠올려보자 즉 그림으로 정리하면 다음과 같다. 여기서 주의할 점은 거리이기 때문에 곱셈을 해준디 각 성분을 모두 더해주어야 한다.

두 백터의 곱셈을 한뒤 모두 더한 값을 내적이라고 한다.

OUTRO

금방 정리해서 끝낼 줄 알았는데 생각보다 시간이 많이 흘렀다.
거의 LaTex 문법, 포스팅에 수식 넣는 법을 익히는 시간이 대부분 인것같다.

0개의 댓글