텐서 공부일지에서 벡터는 1차원 텐서라고 썼었다.
이번에는 벡터에 대해 공부하며 생각한 내용들을 정리하는 글이다.
강의에서 백터는 다음과 같은 특징을 갖고 있다고 말하고 있다.
벡터는 무조건 1차원 배열이다.
[1, 2, 3]이나 [4, 5] 처럼 표현된다.
이때 [1, 2, 3]은 3차원 공간에서의 벡터다.
[4, 5]는 2차원 공간에서의 벡터다.
[1, 2, 3, 4, 5] 와 같은 시각화하기 어려운 5차원 공간에서의 벡터도 있다.
2차원배열은 뭐다? 2 rank tensor다.(행렬로도 표현 가능) 조금 헷갈렸던 개념은
차원이라는게 배열의 차원과 벡터의 차원이 다르다는 사실이 처음에는 조금 헷갈렸으나,
몇 번 반복하니 명확해졌다.
이제 벡터의 연산에 대해서 알아볼 것이다.
행렬 내의 원소를 대각선 축을 기준으로 서로 위치를 바꾼 것[출처, 나무위키]
원래 행렬의 행과 열을 뒤바꾼 행렬[출처, 위키독스]
벡터의 열과 행을 바꾸는 연산이다. 3행 1열의 벡터를 1행 3열로 바꾸는 연산.
PyTorch에서는 만들어진 텐서에 '.T'속성을 붙여서 만들고,
TensorFlow에서는 tf.transpose()함수에 만들어진 텐서를 매개변수로 넣어서 만든다.
벡터의 놈(norm)은 원점으로부터의 거리를 나타내는 것 같다.
강의나 여러 자료에서는 벡터의 크기 또는 길이를 측정하는 방법이라고 한다.
구하는 방법은 각 배열의 요소를 제곱하여 모두 더한 것의 제곱근을 구하면 된다.
직각 삼각형의 빗변 길이 구하는걸 떠올리면 쉽다.(피타고라스의 정리)
이 거리를 유클리드 거리라고 하는데, 유클리드 거리는 피타고라스 정리를 일반화한 것이라고 한다.
[출처, 위키피디아]
벡터의 놈은 || 로 텐서를 감싸서 표현한다.
텐서 x의 놈은 ||x||로 표현한다.
여기까지 다룬 norm은 L2 norm이다.
단위벡터(unit vector)는 크기가 1인 norm을 의미한다.
이는 단순히 각 원소의 절댓값을 더한 것이다.
둘의 차이는 거리를 구하는 방법의 차이이며, 이렇게 측정된 거리값은 방법에 따라 다르게 나온다.
이는 L2 norm을 구하는 과정에서 마지막 제곱근을 구해주는 과정을 뺀 방법이다.
연산적으로는 이득이지만, 큰 값에 과도하게 반응하여 모델 모양이 과도하게 정규화된다고 gpt와 강의에서 말했다.
표현해야할 정보보다 덜 표현될 수 있다는 얘기로 이해했다.
제곱근이 제거되기 때문에 미분이 간편해져 연산비용이 줄어든다.
또한 경사하강법과 같은 최적화 과정에서 부드러운 기울기를 제공하는 이점도 있다고 한다.
텐서의 성분 중 가장 큰 절대값을 크기로 정의하는 방법
강의에서는 크게 다루지 않았지만, 딥러닝에서 가중치의 최대 크기를 제한할 때 사용한다고 한다.
신경망이 과도하게 학습하는 것을 막는다.
이 모든 norm을 일반화 하는 Lp norm 공식도 알려줬다.
실제로 위 식에 p>=1을 적용하면 다 들어맞는다.(max는 무한대)
어떤 주어진 벡터공간에서 임의의 벡터를 표현할 수 있는 기준이 되는 벡터의 집합
서로 90도 관계에 있는 벡터
x와 y가 있다고 할 때 xTy = 0 이면
직교벡터라고 한다.
n차원 벡터공간은 n개의 직교벡터를 갖는다.
서로 직교하면서, 각 벡터의 크기(norm)가 1인 경우