본문 바로가기

ChemiLOG

벡터, 너 참 신기하다!

‘벡터’라는 것을 들어 보신 적이 있나요? 저는 고등학교 과정 중 수학과 물리에서 꽤 중요하게 다루는 개념으로 처음 접했던 것 같아요. 여러 숫자를 독특하게 나열하고 복잡한 방식으로 계산해서 낯설기 짝이 없었죠. 하지만 이런 방식으로 숫자를 다루는 데는 나름의 이유가 있습니다. 그만큼 복잡한 물리 법칙이나 많은 정보를 효율적으로 다룰 수 있기 때문이죠. 

벡터는 오늘날 수학과 물리학뿐만 아니라 데이터 사이언스에도 널리 사용되는 중요한 개념입니다. 하지만 그러한 효용성과 활용에 대해서는 잘 느끼진 못하는 것 같아요. 저 역시 그랬거든요. 그래서 오늘은 가능한 쉽고 재밌게 벡터에 대해 알려드리려고 합니다. 그럼, 신기한 벡터의 세계로 출발!

 

 

01

벡터와 스칼라

   

 

먼저 벡터를 설명하기에 앞서 스칼라에 대한 설명을 빼놓을 수 없네요. 스칼라는 하나의 숫자를 사용하여 표현하는 것을 의미합니다. 일상생활에서 아주 쉽게 접할 수 있지요. 무게를 얘기하거나 돈을 지불하는 것처럼 명확한 하나의 숫자로 표현할 수 있는 것은 모두 스칼라입니다. 따라서 스칼라는 그 숫자가 의미하는 딱 하나의 정보만을 담고 있습니다.

그렇다면 스칼라에 비교되는 벡터란 무엇일까요? 쉽게 말하면 벡터는 하나 이상의 숫자가 나열된 것입니다. 여러 숫자가 나열되어 있으니 당연히 하나 이상의 정보를 포함할 수 있습니다.

물리에서는 스칼라와 벡터를 대표하는 예로 속력과 속도가 있어요. 먼저, 자동차 계기판을 보면 빠르기를 나타내는 속력계가 있습니다. 이걸 보면 차가 얼마나 빠른지 알 수는 있지만 어디로 가는지는 알 수는 없어요. 고개를 들어 밖을 보고 운전해야 하죠. 바로 빠르기라는 단 하나의 정보만 담고 있을 뿐 그 이상의 정보는 없기 때문이죠. 이것이 속력입니다.

하지만 비행기 계기판을 보세요. 딱 봐도 자동차 계기판보다는 훨씬 숫자가 많이 있어요. 도로를 찾을 수 없는 하늘에서 어디로 얼마나 빨리 가는지 방향을 포함한 다양한 정보를 알 수 있도록 여러 숫자가 나타나 있는 거예요. 이렇게 하나 이상의 수로 표현되는 것이 속도이고 이러한 숫자들을 정해진 순서대로 나열한다면 바로 벡터가 된답니다.

우리는 3차원의 공간을 살아가고 있습니다. 그래서 우리 주변의 물리량은 대개 3개의 숫자 성분으로 표현합니다. 비행기를 타보셨다면 위도, 경도, 고도가 안내되는 것을 기억할 거예요. 이 경우 3개의 성분값을 가지므로 3성분 벡터라고 합니다.

 

 

02

벡터의 상위 개념, 텐서 

  

 

이미 스칼라와 벡터에 차이에 대해서 말씀드렸지만 좀 더 자세히 벡터에 대해 살펴보면 생소한 용어가 많아요. 이러한 용어를 이해하려면 우선 가장 상위 개념인 텐서에 대해서 짚고 넘어갈 필요가 있어요. 아마 벡터는 들어보셨더라도 텐서는 낯설 거예요. 하지만 어렵게 생각할 것 없어요. 단지 수를 나열하는 방식의 차이거든요

고등 물리에서 언급되는 텐서의 대표적인 예인 응력에 대해서 살펴볼게요. 먼저, 딱딱한 통나무를 누른다고 생각해볼까요? 통나무를 누르면 가해진 힘은 그대로 작용합니다. 따라서 통나무의 상태를 고려할 때는 어디서 얼마만큼의 힘이 전달되는지만 생각하면 됩니다. 3차원에서는 3방향에 대한 힘을 고려하면 되므로 3성분 벡터면 충분합니다.

하지만 젤리를 누른다고 생각해보세요. 젤리를 누를 때는 통나무와는 다르게 힘이 단순하게 작용하지 않고 젤리를 압축시키기도 하고 통통하게 앞과 옆으로 늘어뜨리는 것을 볼 수 있습니다. 이를 통해 우리는 가해진 힘이 젤리에는 더욱 복잡하게 작용한다는 것을 알 수 있죠. 정확하게는 힘이 가해지는 면(face)을 기준으로 면에 직접 가해지는 힘(압축시키는 힘)과 면 방향으로 전단*되는 힘(앞과 옆으로 늘어뜨리는 힘)이 젤리에 작용하는 것이지요.

*전단: 물체 내부 양쪽에 크기가 같고 방향이 반대인 두 힘이 가해져 물체 내부에서 어긋남이 생기는 일 

 

 

03

텐서, 더 자세히 알아보기

   

 

결국, 3차원에서의 면은 3종류가 존재하며 각 면에 대해서 3성분의 힘 벡터가 작용하므로 이를 구분해서 나열하면 “가로(면의 종류)x세로(힘의 방향) = 3개x3개”인 수의 배열을 만들 수 있습니다. 총 9개의 수를 구분해서 일렬이 아닌 가로와 세로로 배열한 것이 되죠. 또한 이렇게 나타내는 형태를 행과 열로 나타냈다고 해서 행렬이라고도 합니다.

여러 숫자를 다루는 데 있어 이런 다른 형태를 취하는 이유는 물리법칙에 맞추어 보다 복잡한 계산을 요구하거나 특정 분류에 따른 많은 정보를 다룰 때 편의성이 있기 때문입니다.

결국 수를 나열하는 방식의 차이일 뿐이지 벡터 혹은 텐서 모두 하나 이상의 정보를 담고 있다는 것은 마찬가지입니다. 따라서 경우에 따라 이를 구분하지 않고 뭉뚱그려 벡터라고 하는 경우도 있어요.

   

 

하지만 엄밀하게는 전부 텐서라는 상위개념에 속하는 것이며 하나의 숫자로 나타내는 것은 0차 텐서 (스칼라), 일렬로 수를 나열하는 것을 1차 텐서 (벡터), 가로와 세로로 수를 배열하는 것을 2차 텐서 또는 행렬이라고 합니다.

 

 

04

벡터의 기본 연산 

   

 

이상으로 벡터의 상위 개념인 텐서가 무엇인지도 알게 되었습니다. 하지만 고차원적인 텐서의 연산 방법이나 그 특성을 제대로 이해하기란 쉽지 않습니다. 그래서 오늘은 아주 간단하게 벡터의 스칼라 곱과 덧셈 그리고 뺄셈에 대해서만 다뤄보도록 하겠습니다. 

먼저 벡터는 개념적으로 작용점과 크기 그리고 방향으로 이루어진 형태로 나타낼 수 있습니다. 일렬로 나열된 수를 특정한 위치를 나타내는 좌표(점)라고 보면 기준점으로부터 여기까지를 화살표로 나타낼 수 있죠. 일반적인 좌표계*에서는 원점을 기준 좌표로 사용하기 때문에 이 경우 작용점은 원점, 크기는 벡터가 나타내는 좌푯값과 원점 사이의 거리, 방향은 원점에서 벡터 좌표가 위치한 방향을 의미합니다.

이때, 벡터의 스칼라 곱은 벡터의 작용점과 방향은 유지하면서 크기가 스칼라 값만큼의 배수가 되면 되는데요. 이러한 벡터는 각 성분 또한 모두 스칼라 배수만큼 됩니다. 그리고 음의 스칼라 곱은 방향이 반대가 되죠.

두 벡터의 합은 한 벡터의 끝점에 다른 벡터의 작용점이 만나도록 평행이동 시켰을 때, 처음 벡터의 작용점과 마지막 벡터의 끝점을 잇는 벡터가 됩니다. 또한, 두 벡터의 합은 각 성분을 더한 벡터로 표현됩니다. 

마지막으로 벡터의 뺄셈은 빼려고 하는 벡터와 크기가 같고 방향이 반대인 벡터를 대상이 되는 벡터에 합한 것으로 표현할 수 있으며 각 벡터 성분을 빼준 값으로 표현됩니다. 

이러한 벡터의 성질을 이용하면 하나의 벡터를 각각의 좌표계 또는 서로 다른 성분으로 분해하는 것도 가능하답니다

*좌표계: 좌표의 종류, 원점, 좌표축 따위를 통틀어 이르는 말. 

 

 

05

벡터의 무궁무진한 활용

   

 

지금까지 주로 벡터의 수학적, 물리적인 예를 살펴보았는데요. 데이터 사이언스에서도 벡터의 활용은 무궁무진합니다. 그중 한 가지 예시로 데이터 압축과 복원 기술에 대해 간단히 설명해 드리겠습니다.

위 그림의 첫 단계에서는 x축과 y축으로 이루어진 2차원에서의 여러 데이터를 확인할 수 있는데요. 여기에 나열된 데이터들을 x축 성분과 y축 성분으로 각각 나열하면 총 10개의 2성분 벡터를 얻을 수 있습니다. 또한 여기서 우리는 직관적으로 데이터들의 연관성을 알 수 있는데요. 바로 y=x 축에 데이터가 밀집되어 있다는 것입니다. 

   

 

따라서 두 번째 단계에서는 원본 벡터의 압축을 위해 벡터를 변환하는 작업이 필요합니다. 여기서는 새로운 x’축과 y’축을 기준으로 하는 벡터로 변환하였습니다. 앞에서 벡터의 합에 대해서 설명해 드렸던 것과 같이 이를 응용해서 각 데이터의 벡터를 x’축 벡터 성분과 y’축 벡터 성분으로 분해한다고 보시면 됩니다. 이렇게 다시 새로운 10개의 변환된 벡터로 나타내면 x’성분에 비해 y’성분은 값의 차이가 미미하다는 것을 알 수 있습니다.

바로 여기서 데이터 압축의 힌트가 있습니다! 바로, 과감하게 y’성분값을 무시해버리는 거죠. 그러면 데이터는 원래의 2성분 벡터 10쌍이(총 20개의 수) 1성분 벡터 10개로(총 10개의 수) 기존의 절반이 되는 것을 알 수 있습니다.

   

 

이렇게 압축된 데이터를 다시 x축과 y축으로 옮겨서 복원하면 원본의 절반밖에 안 되는 데이터만으로도 원본과 유사한 데이터를 얻을 수 있습니다. 이것이 압축과 복원의 원리이지요. 하지만 압축된 데이터만으로 복원된 데이터가 원본과 완전히 동일하진 않겠죠? 이것을 압축에 의한 데이터 손실이라고 합니다.


앞에서 보여드린 데이터 압축의 예는 아주 간단한 경우인데다 축을 옮기는 방식도 직관에 의존했습니다. 하지만 실제로 우리가 다루는 데이터는 그 양이 아주 방대하고 압축에 활용해야 하는 변환도 직관적으로 알 수 없죠. 오늘날에는 이처럼 무수히 많은 데이터를 효과적으로 다룰 수 있는 여러 방법이 잘 발달되어 있습니다. 추가로 궁금하신 분들은 ‘선형변환(linear transformation)’과 ‘특이값 분해 (Singular Value Decomposition, SVD)’를 알아보시는 것을 추천해 드려요. 


지금까지 벡터의 아주 기본적인 성질부터 무궁무진한 활용까지 알아보았는데요. 이번 이야기도 여러분의 흥미를 충족시켰기를 바라며, 다음에는 더욱더 좋은 글로 찾아오도록 하겠습니다.


(글: 한화토탈에너지스 공정연구팀 심상현 수석연구원)


  

종합 케미칼 & 에너지 리더,

한화토탈에너지스에 대해 더 알고 싶다면?