Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gihyunkim/5be57396b5626c0c22b57000425bd052 to your computer and use it in GitHub Desktop.
Save gihyunkim/5be57396b5626c0c22b57000425bd052 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 0.1 공간이라 생각하면 직관이 먹힌다.\n",
"- 벡터 공간은 현실 공간의 성질을 특정 수준에서 추상화.\n",
"\n",
"\n",
"- 예) 2차원 물체 -> 3차원 물체\n",
"\n",
"\n",
"- 즉, 단일 수치가 아닌 다수의 수치를 조합한 데이터를 다루고 싶다. (고차원) : Neural Network\n",
"\n",
"\n",
"- 벡터를 고차원 공간 내의 점이라고 생각한다면 직관적인 생각이 가능하다.\n",
"\n",
"\n",
"# 0.2 선형대수가 다루는 대상 : 선형, 즉 곧은 것.\n",
"- 다루기 쉬움, 예측하기 좋다, 명쾌한 결과.\n",
"\n",
"\n",
"- 그렇다면 곡선 또는 고차원의 그래프는 어떻게 다룰것인가?\n",
" - 어떤 곡선이건간에 zoom up 하면 모두 선형으로 근사할 수 있다."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import Image"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 4,
"metadata": {
"image/png": {
"width": 200
}
},
"output_type": "execute_result"
}
],
"source": [
"Image('./image/linear01.png',width=200)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAF4AAABmCAIAAADNmbH5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIYSURBVHhe7do7UiNBEIThGY6ADR7c/0CY2HCFIRU9QSgaUsZ0d70iP2fB2/2pqhHS7sdxbHXt+/V/4NP5p/yhNJTSUEpDKQ1VOc3I4wk0NZTSUEpDKQ2lNJTSUEpDKQ1VNg1e751fXVV5agbfitJCUZXTfL++n19dUjPN+KGBslPz9fL2/PlxfnOJbg1VMM2UbYKaUzO+TaCFoqqlmbVNUHBqpmwTaKGoUmkGP0LoaGqoamnwe9OUQwOaGkppqFJpZj22mzppJr7Ya4qkmd4F6kzN3G0CnWGqQpoV2wRFpmb6NoEWilIaKn0aHJoV2wSaGip3mrlv0HQ0NVT6NBPfoOkkTrN0myBrmtVdIPdCrdsm0BmmlIZKnGbpNoGmhlIaKmuaRb9S3kuZZtHbeh0tFJUyjcE2Qb40NtsEWigqXxqbbQJNDZUsjdmhAU0NlSyN2aEBTQ2VKY3loYFMaSy3CbRQVJo0xtsEadIYbxPkSGM/MqBbQyVIg5Gx3ybQ1FBKQyVI47JNED2Ny7OpCZ0GXVb/T5EHdGuouGnayKz+zP+BoGkcT8yviGlaF8cr03jeuX/dn17HbQKdYSpWGt+ndSdQmq6L7zaBFooKMcBBHkkd/6mJ2QWc04TtAv5TE7MLuN2ayPPSeE5N5C7gk6Z7CROTQ5q2SvFZ//RSzEtj9xeNf3c7pguVqAtYTE26eWnWpkka5WbbfgAN1KbapBZlJAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 5,
"metadata": {
"image/png": {
"width": 200
}
},
"output_type": "execute_result"
}
],
"source": [
"Image('./image/linear02.png',width=200)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1.1 벡터와 공간\n",
"- 많은 수치를 묶은 데이터를 다루고 싶다.\n",
" - **수치의 조합**이 아닌 **공간 안의 점**으로 간주.\n",
" - **문자 배열**이 아닌 **공간**\n",
"\n",
"\n",
"vector : 숫자를 일렬(1차원) : 화살표, 공간 내 점\n",
"matrix : 숫자를 사각형으로 나열(1-고차원) : 공간 -> 공간으로의 사상\n",
"행렬식 : 복잡한 계산 : 사상에 따른 부피 확대율\n",
"\n",
"## 벡터\n",
"여러 개의 수치를 한 곳에 모아 덩어리로 다루고 싶다.\n",
"수를 나열한 것.\n",
"\n",
"$(1, 2, 3)^T$ => 벡터는 기본적으로 열벡터.\n",
"\n",
"### 왜 열 벡터?\n",
"함수 : f(x) 즉, Ax 형태로 표기가 가능하다.\n",
"\n",
"### 연산\n",
"$ { x_1 \\choose x_2} + {y_1 \\choose y_2} = {x_1 \\ + \\ y_1 \\choose x_2 \\ + \\ y_2}$ \n",
"\n",
"$ c{ x \\choose y } = {cx \\choose cy}$\n",
"\n",
"### 벡터의 성질\n",
"1. $ (cc')x = c(c'x)$\n",
"2. $ 1x = x$\n",
"3. $ x + y = y + x $\n",
"4. $ (x + y) + z = x + (y + z)$\n",
"5. $ x + 0 = x$\n",
"6. $ x + (-x) = 0$\n",
"7. $c(x+y) = cx + cy$\n",
"8. $(c +c')x = cx + cx'$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.1.2 '공간'의 이미지\n",
"위치 벡터 : 위치에 대응시키는 것을 강조.\n",
": 도형으로 해석할 때는 '화살표'가 더 어울린다.(기하학적)\n",
"\n",
"## 1.1.3 기저\n",
"2차원 : 평면 위에 점\n",
"3차원 : 공간 위에 점\n",
"\n",
"'정수배'와 '덧셈'이 정의된 세계를 **선형 공간**이라 한다. \n",
"\n",
"선형공간에 '길이', '각도'는 정의되어 있지 않다.\n",
"- 즉, 대소비교와 각도 회전 개념이 없다.\n",
"- 내적 공간이라는 선형 공간의 확장판에서 정의됨.\n",
"\n",
"\n",
"### 기준을 정하여 번지를 매기자.\n",
"특정 벡터 $\\vec{v}$를 지정하는데 표현 방법이 없다. \n",
"\n",
"- 기준이 되는 벡터 $\\vec{e_1}, \\ \\vec{e_2}$를 정한다. : 기저\n",
"\n",
"\n",
"- 예) $\\vec{e_1}$ 3보, $\\vec{e_2}$ 4보처럼 말로 표현이 가능.(좌표)\n",
"\n",
"\n",
"기저를 취하는 방법에 의존하지 않는 실체 : 정칙, 랭크, 고윳값.\n",
"\n",
"## 1.1.4 기저의 조건\n",
"1. 어떤 벡터 $\\vec{v}$라도$\\vec{v} = x_1\\vec{e_1}+x_2\\vec{e_2}+\\dots+x_n\\vec{e_n}$ 형태로 표현이 가능하다.\n",
" - 모든 토지에 번지가 붙어 있다.\n",
"\n",
"\n",
"2. 표현 방법은 오직 하나.\n",
" - 토지 하나에 번지 하나\n",
" \n",
"**차원 만큼의 기저가 필요. (모두가 다른 축 방향을 가져야한다.)**\n",
"\n",
"## 1.1.5 좌표에서 표현\n",
"좌표에 기저는 필수.\n",
"- 예) 1500 -> ?, 1500m => 아하! (여기서 단위가 기저가 된다.)\n",
"\n",
"**덧셈과 정수배는 기저에 독립적**\n",
"\n",
"$\\vec{x} + \\vec{y} = (x_1+y_1)\\vec{e_1}+(x_2+y_2)\\vec{e_2}+\\dots+(x_n+y_n)\\vec{e_n}$ \n",
"\n",
"$ c\\vec{x} = (cx_1)\\vec{e_1} + (cx_2)\\vec{e_2}+\\dots+(cx_n)\\vec{e_n}$\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1.2 행렬과 사상\n",
"대상 간의 **관계**를 나타내기 위해 '행렬'을 사용.\n",
"\n",
"## 1.2.1 우선적 정의 : 순수 관계를 나타내는 편리한 기법.\n",
"행렬 : 수를 사각형 형태로 나열한 것. \n",
"\n",
"정방행렬 : 행 = 열 \n",
"\n",
"i행 j열 : A의 (i, j) \n",
"\n",
"행렬도 정수배와 덧셈이 성립.\n",
"\n",
"### 곱에 대한 성질\n",
"1. 행렬 x 벡터 = 벡터\n",
"\n",
"\n",
"2. 행렬의 열 수 = 입력 차원 수, 행렬의 행 수 = 출력 차원 수\n",
"\n",
"\n",
"## 1.2.2 여러 가지 관계를 행렬로 나타내다 (1)\n",
"행렬을 곱하다 = 순수한 관계\n",
"- 예) 단순히 각 요인의 합계, 상승 효과나 규모 효과가 없다.\n",
"- 상수곱과 덧셈으로만 형성이 되면 순수하다 한다.\n",
"\n",
"### 순수한 예\n",
"$ y_{머리} = a_{학머리}x_{학} + a_{거북머리}x_{거북} = x_{학} + x_{거북}$ \n",
"\n",
"$ y_{다리} = a_{학다리}x_{학} + a_{거북다리}x_{거북} = 2x_{학} + 4x_{거북}$\n",
"\n",
"### 순수하지 않은 예\n",
"한 개에서 나오는 원료의 양은 20g인데, 1000개에서 나오는 원료의 양은 18000g. \n",
"\n",
"## 1.2.3 행렬은 사상이다.\n",
"n차원 vector x, m x n 행렬 A. \n",
": Ax = y. \n",
"\n",
"**즉, A는 벡터 x를 다른 벡터 y로 옮기는 사상이다**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 사상의 성질\n",
"- 원점 O => 원점 O\n",
"\n",
"\n",
"- 직선 -> 직선 또는 찌그러져서 점이 될 수 있다.\n",
"\n",
"\n",
"- 평행선은 평행선으로. (입력이 평행이면 출력도 평행)\n",
"\n",
"\n",
"$e_1 = {1 \\choose 0}$을 ${1 \\choose -0.7}$, $e_2 = {0 \\choose 1}$을 ${ -0.3 \\choose 0.6}$으로 이동. \n",
"\n",
"=> 행렬 A $\\begin{pmatrix} 1 & -0.3 \\\\ -0.7 & 0.6 \\end{pmatrix}$ 사상."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- m x n 행렬 A : n차원 vector -> m차원 vector\n",
"\n",
"\n",
"- 사상이 같으면 행렬도 같다.\n",
" - Ax = Bx 이면 A=B\n",
" \n",
"## 1.2.4 행렬의 곱 = 사상의 합성\n",
"(k, m) 행렬 x (m, n)행렬 = (k, n) 행렬.\n",
"\n",
"**즉 벡터 x를 A로 사상시킨 후, B로 한번 더 사상**\n",
"\n",
"z = B(Ax), like g(f(x))\n",
"\n",
"### 성질\n",
"- $ABC = (AB)C = A(BC)$\n",
"\n",
"\n",
"- $AB \\neq BA$\n",
"\n",
"### 예\n",
"A = $\\begin{pmatrix} 0 & -1 \\\\ 1 & 0 \\end{pmatrix}$ 공간 회전.\n",
"B = $\\begin{pmatrix} 2 & 0 \\\\ 0 & 1 \\end{pmatrix}$ 가로로 넓히는, 즉 x축 방향을 늘리는.\n",
"\n",
"ABx : x벡터를 가로로 넓힌 후, 공간 회전.\n",
"BAx : x벡터를 공간 회전 후, 가로로 넓힘.\n",
"\n",
"## 1.2.5 행렬 연산의 성질\n",
"- (cA)x = c(Ax) = A(cx)\n",
"\n",
"\n",
"- (A+B)x = Ax + Bx\n",
"\n",
"\n",
"- A+B = B+A\n",
"\n",
"\n",
"- (A+B)+C = A+(B+C)\n",
"\n",
"\n",
"- (c+c')A = cA + c'A\n",
"\n",
"\n",
"- (cc')A = c(c'A)\n",
"\n",
"\n",
"- A(B+C) = AB+ AC\n",
"\n",
"\n",
"- (A+B)C = AC + BC\n",
"\n",
"\n",
"- (cA)B = c(AB) = A(cB)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 벡터도 행렬?\n",
"n차원 vector는 1xn행렬이라 할 수 있다.\n",
"행렬의 모든 성질을 만족.\n",
"\n",
"## 1.2.6 행렬의 거듭 제곱 = 행렬의 반복.\n",
"**단, 정방행렬에서만 가능**\n",
"\n",
"$A\\dots A = A^n$ : A를 n번 반복한다.\n",
"\n",
"- $(A+B)^2 = A^2 + AB + BA + B^2$\n",
"\n",
"\n",
"- $(A+B)(A-B) = A^2 -AB +BA - B^2$\n",
"\n",
"\n",
"- $(AB)^2 = ABAB$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.2.7 특수 행렬\n",
"### 영행렬 : 모든 성분이 0\n",
"\n",
"사상: 모든 점을 원점으로 이동시킨다.\n",
"\n",
"$ A \\neq 0, B \\neq 0$ 이어도 $AB = 0$이 될 수 있다.\n",
"\n",
"\n",
"$ A \\neq 0$ 이어도 $A^2 = 0$이 될 수 있다.\n",
"\n",
"### 단위행렬 : 대각성분이 1, 나머지는 0\n",
"\n",
"사상 : 아무것도 하지 않는 사상.\n",
"\n",
"### 대각행렬 : 비대각 성분이 모두 0\n",
"정방행렬에서 대각 부분을 '대각 성분', 나머지 부분을 '비대각 성분' 이라 한다.\n",
"\n",
"$diag(a_0, a_1, a_2, \\dots a_n)$\n",
"\n",
"사상 : 축에 따르는 신축(늘고 줄음) 사상.\n",
"- 각 성분 값이 배율이 된다.\n",
"\n",
"예) A= $\\begin{pmatrix} 1.5 & 0 \\\\ 0 & 0.5 \\end{pmatrix}$ \n",
"x축 : 1.5배, y축 : 0.5배\n",
"\n",
"**즉, 각 x원소 개별만이 출력에 영향을 준다.**\n",
"\n",
"- 대각 행렬끼리의 곱셈\n",
"$\\begin{pmatrix} a & 0 \\\\ 0 & b \\end{pmatrix}$ $\\begin{pmatrix} x & 0 \\\\ 0 & y \\end{pmatrix}$ = $\\begin{pmatrix} ax & 0 \\\\ 0 & by \\end{pmatrix}$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.2.8 역행렬 = 역사상\n",
"A로 이동시킨 것을 원래대로 돌리는 사상.\n",
"\n",
"$Ax = y, x = A^{-1}y$\n",
"\n",
"역행렬은 존재하거나 안 할수 있다.\n",
"\n",
"존재하지 않는 경우\n",
"- 납작하게 눌리는 경우.\n",
" - 서로 다른 두 점(x, x')이 같은 점 y로 이동.\n",
" \n",
"### 역행렬의 성질.\n",
"- $(A^{-1})^{-1} = A$\n",
"- $(AB)^{-1} = B^{-1}A^{-1}$\n",
"- $ (A^k)^{-1} = (A^{-1})^k$\n",
"\n",
"\n",
"### 대각행렬의 경우\n",
"**축에 따른 신축을 되돌리려면?**\n",
"\n",
"$ A = diag \\left( a_1, a_2,\\dots a_n) => A^{-1} = diag(\\frac{1}{a_1}, \\frac{1}{a_2}, \\dots,\\frac{1}{a_n}\\right)$\n",
"\n",
"**$a_1, a_2, \\dots a_n$ 중에 하나라도 0이 있다면 역행렬이 존재하지 않는다.**\n",
"- 한 차원이 0이 되어 버리므로. 눌리는 현상.\n",
"\n",
"## 1.2.9 블록행렬\n",
"큰 문제를 작은 문제로 분할하고 싶다. \n",
"\n",
"블록행렬 : 행렬의 종횡에 단락을 넣어 각 구역을 작은 행렬로 간주한 것.\n",
"\n",
"덧셈과 정수배, 행렬 곱 모두 만족. 단, 서로의 비율이 같아야한다."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 9,
"metadata": {
"image/png": {
"height": 400,
"width": 400
}
},
"output_type": "execute_result"
}
],
"source": [
"Image('./image/linear03.png', width=400, height=400)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.2.10 여러가지 관계를 행렬로 나타내다(2)\n",
"\n",
"약간의 트릭을 이용하여 식을 행렬과 벡터 곱으로 쉽게 나타낼 수 있다.\n",
"\n",
"### 고계차분 , 고계미분\n",
"\n",
"$$ x_t = -0.7x_{t-1} -0.5x_{t_2}+0.2 x_{t-3} + 0.1 x_{t-4}$$\n",
": 최초의 상태로부터 다음 번 상태가 결정된다.\n",
"\n",
"$$ x(t) = \\begin{pmatrix} x_{t} \\\\ x_{t-1} \\\\ x_{t-2} \\\\ x_{t-3} \\end{pmatrix} = \\begin{pmatrix} -0.7 & -0.5 & 0.2 & 0.1 \\\\ 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{pmatrix} \\begin{pmatrix} x_{t-1} \\\\ x_{t-2} \\\\ x_{t-3} \\\\ x_{t-4} \\end{pmatrix}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.2.11 좌표 변환과 행렬\n",
"- 같은 공간에서도 기저를 취하는 방법은 여러가지.\n",
"- 문제에 따라 적절한 기저를 취해야한다.\n",
"\n",
"좌표 변환 : '정방행렬 A'를 곱한다.\n",
"\n",
"$\\vec{v} = x\\vec{e_x} + y\\vec{e_y} = x'\\vec{e'_x}+y'\\vec{e'_y}$\n",
"\n",
"좌표 v와 v'의 대응관계는 어떻게 될까?\n",
"\n",
"$e_x를 e'_x, e'_x를 e_x$식으로 표현이 가능하다.\n",
"즉, 기저가 바뀌면 그 앞 계수는 달라지지만 실제 값은 동일하다.\n",
"\n",
"예) 1780m = 1.78km. 단위가 바뀌어 계수가 달라졌지만 값은 동일.\n",
"\n",
"## 1.2.12 전치행렬=?\n",
"$A^T$\n",
"\n",
"사상 : 단순 선형 공간에서는 정의되지 않는다.\n",
"\n",
"### 성질\n",
"- $(A^T)^T = A$ \n",
"- $(AB)^T = B^TA^T$ \n",
"- $diag(A)^T = diag(A)$\n",
"- $(A^{-1})^T = (A^T)^{-1}$\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.3\n",
"행렬식과 확대율.\n",
"\n",
"## 1.3.1 행렬식 = 부피 확대율\n",
"\n",
"A = $\\begin{pmatrix} 1.5 & 0 \\\\ 0 & 0.5 \\end{pmatrix}$ \n",
"가로 1.5배, 세로 0.5 배 => 면적 = 1.5 x 0.5\n",
"\n",
"**면적 확대율**에 관한 것을 그 행렬의 **행렬식**이라한다.\n",
"- 3차원일 경우, 부피 확대율.\n",
"\n",
"$det A = |A|$\n",
"\n",
"도형이 납작하게 되는 경우는 확대율이 0.\n",
"\n",
"정방행렬에서만 정의된다.\n",
"\n",
"## 1.3.2 행렬식의 성질\n",
"- det I = 1\n",
"- det(AB) = (detA)(detB)\n",
"- $detA^{-1} = \\frac{1}{detA}$\n",
"- detA=0이면 역행렬이 존재하지 않는다.\n",
"- $det(diag(a_1,\\dots, a_n)) = a_1*a_2*\\dots*a_n$\n",
"\n",
"### 유용한 성질\n",
"\n",
"행렬식은 **어느 열의 정수배를 다른 열에 더해도 값이 변하지 않는다.**\n",
"\n",
"즉, det$\\begin{pmatrix} 1 & 1 & 5 \\\\ 1 & 2 & 7 \\\\ 1 & 3 & 6 \\end{pmatrix} = \\begin{pmatrix} 1 & 1 & 5+1*10 \\\\ 1 & 2 & 7+2*10 \\\\ 1 & 3 & 6+3*10 \\end{pmatrix}$ \n",
"\n",
"2열을 10배한 값을 3열에 더해준것.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### upper triangular\n",
"A= $\\begin{pmatrix} a_{11} & a_{12} & a_{13} \\\\ 0 & a_{22} & a_{23} \\\\ 0 & 0 & a_[33} \\end{pmatrix}$\n",
"\n",
"우상삼각 x 우상삼각 = 우상삼각 \n",
"좌하삼각 x 좌하삼각 = 좌하삼각\n",
"\n",
"### 전치행렬의 행렬식\n",
"$det(A^T) = det(A)$ \n",
"행렬식의 성질은 행과 열의 역할을 모두 바꾸어도 성립.\n",
"\n",
"### 열쇠가 되는 성질.\n",
"$det(ca_1, a_2,\\dots a_n) = cdet(a_1,a_2,\\dots,a_n)$\n",
"- det(cA) - $c^n$det(A) \n",
"$det(a_1+a'_1, a_2, \\dots, a_n) = det(a_1, a_2,\\dots,a_n) + det(a'_1,a_2,\\dots,a_n)$\n",
"\n",
"행렬식의 부호가 도형의 뒤집음과 대응하고 있으므로 => **두 열을 바꾸면 부호가 역전**\n",
"\n",
"$det(a_2, a_1, \\dots, a_n) = -det(a_1, a_2, \\dots, a_n)$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment