벡터 : 숫자를 원소로 가지는 list 또는 array를 말한다
numpy는 주로 행백터를 의미한다.
벡터의 차원 ?
= 벡터 안의 원소의 개수!
벡터 개념
1. 공간에서 한 점을 의미(스칼라와 다르다!)
- 공간은 1차원, 2차원, 3차원 등등
- 인공지능에서는 훨씬 더 큰 차원을 다룬다!
2. 원점으로부터 상대적 위치(화살표)
- 벡터에 숫자를 곱해주면 벡터의 길이만 변한다 (= 스칼라 곱)
단, 스칼라가 음수가 되면 방향이 반대로 바뀐다!
벡터의 연산
벡터끼리 같은 모양을 가지면 덧,뺄셈이 가능하다.
- 같은 모양이면 당연히 같은 차원!
- 각각 원소끼리의 연산을 한다.
- element - wise!
ex) X = [x1, x2], Y = [y1, y2]
X + Y = [x1+y1, x2+y2]
+
성분곱(hadamard product = element-wise product) 역시 계산 가능.
ex) X = [x1, x2], Y = [y1, y2]
XY = [x1y1, x2y2]
※ 벡터의 덧셈은 다른 백터로부터 상대적 위치이동을 표현
※ 뺄셈은 방향을 뒤집은 덧셈이다!
=> Y - X의 경우, 원점에서 y점까지 화살표를 그린 후 원래 X 벡터의 진행방향과 반대 방향의 화살표를 그려준다.
Norm : 원점에서부터의 거리(벡터의 크기를 측정)
노름은 L1, L2...등 여러 차원의 노름이 존재한다.
p는 norm의 차수를 의미한다.
L1 노름 : 각 성분의 변화량의 절대값들의 합
2차원에서는, x축의 변화량 + y축의 변화량
L2 노름 : 피타고라스 정리를 이용한 유클리드 거리!
굳이 사진 설명 없어도 아시겠죠? 피타고라스니까..
왜 다른 차수의 Norm이 존재하는가?
=> 종류에 따라 기하학적 성질이 달라지기 때문이다!
ex) 원점에서 거리가 1인 점들의 집합 = 원 = L2 Norm
L1 Norm인 경우 거리가 1인 마름모가 생성됨.
-> '거리' 라는 정의를 다르게 해주면 다른 성질이 성립
※ 머신러닝에서는 여러 Norm의 기하학적 성질을 이용!
두 벡터 사이의 거리
벡터의 뺄셈을 이용, X-Y나 Y-X나 동일하다.
이 역시 마찬가지로 L1, L2가 다르다!
거리를 알면? 각도 역시 계산해볼 수 있다.
(L2 Norm에서만 가능)
유클리드 거리를 이용하여 제2 코싸인법칙 적용
-> 2차원이 아닌, N차원에서도 적용 가능하냐? OK
-> L2 Norm을 정의한 것도 사실은 N차원에서의 적용을 위한 것!
벡터의 내적? 두 벡터들의 연산들의 성분곱을 취하고 그 벡터들의 성분을 모두 더한 것
각도를 구하는 것 = 제2 코사인 법칙 이용 -> 분모 : L2 Norm 활용, 분자는 내적 활용
내적은 numpy 모듈의 inner함수를 이용하여 계산가능!
내적이란? 정사영(orthogonal projection)된 벡터의 길이와 관련있다.
정사영 = 그림자로 표현
proj(x)의 길이는 코사인법칙에 의해 ||x|| * cos theta 가 된다.
내적은 정사영의 길이를 벡터 Y의 길이 ||Y||만큼 조정한 값이다.
(조정 = 스칼라곱을 통해 길이를 늘리거나 줄이거나 하는 행위)
행렬 : 벡터를 원소로 가지는 2차원 배열을 말한다
X라는 행렬은 3개의 벡터(=행벡터)를 가진다. 기본 단위는 행(row)이다!
행렬은 행(row)과 열(column)이라는 인덱스를 가진다. 순서는 행이 먼저 온다!
전치행렬 : 행과 열의 인덱스가 바뀐 행렬
m x n 행렬은 n x m 행렬이 된다.
(벡터의 transpose : 행벡터를 전치하면 열벡터가 됨!)
행렬 이해하기
(1) 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 의미함.
(데이터들을 모은 배열)
행벡터 Xi는 i번째 데이터, Xij는 i번째 데이터의 j번째 변수 값
(2) 같은 모양을 가지면, 덧셈 뺄셈을 계산할 수 있다. 성분곱 역시 벡터와 동일하다
스칼라곱도 벡터와 차이가 없다.
(3) 행렬 곱셈!
i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산
X행렬의 열의 수와 Y행렬의 행의 수가 같아야 계산할 수 있다. (아래 사진에서는 k)
순서가 바뀌면 결과값도 달라지므로 유의할 것.
※ 행렬도 내적이 있을까?
numpy의 inner는 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다.
수학에서 말하는 내적(i번재 행벡터, j번째 열벡터)과는 다르므로 주의!
수학에서 말하는 내적을 구하기 위해서는 전치행렬을 사용하면 된다.
inner 사용을 위해선, 두 행렬의 행의 크기가 같아야 한다.
행렬 이해하기2
(1) 행렬은 벡터공간에서 사용되는 연산자(operator)로 이해할 수 있다.
=> 선형 변환(linera transform)
=> 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있다.
=> 행렬곱을 통해 패턴 추출, 데이터 압축이 가능하다.
역행렬 이해하기
역행렬 : 어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬
- A-1 이라 표기
- 아까 선형 변환한 벡터를 다시 원래 값 또는 원래 차원으로 되돌릴 수 있다.
- 행과 열 숫자가 같고, 행렬식이 0이 아닌 경우에만 계산 가능
※ 항등행렬 I
-대각선을 제외한 모든 원소가 0이고, 대각선에 해당 하는 성분 값은 1인 행렬
어떤 행렬 A과 항등행렬(단위행렬)을 곱하면 자기 자신인 A가 나온다.
어떤 행렬 A와 그 역행렬 A-1 을 곱하면 항등행렬이 나온다.
만약, 역행렬을 계산할 수 없다면, 유사역행렬 또는 무어-펜로즈 역행렬 A+를 이용한다.
이들은 굳이 행과 열의 수가 같지 않아도 역행렬과 유사한 기능을 하는 행렬을 구할 수 있다.
- 행의 수가 열보다 많은 경우 - A+A = I
- 열의 수가 행보다 많은 경우 - AA+ = I
두 가지 경우에 따라 역행렬을 계산하는 수식과 항등행렬을 도출하는 식의 순서가 조금 다르다.
'수학 > 선형대수학' 카테고리의 다른 글
[AI프로그래밍] 선형대수와 미분 (0) | 2022.09.27 |
---|