연립선형방정식과 행렬
연립선형방정식 #
우리는 일상에서 알게 모르게 수많은 미지수를 계산하며 살악나다.
예를 들어 카페에서 아메리카노 2잔과 카페라떼 1잔을 주문하고 11,000원을 결제했다고 해보자.
다음날 같은 카페에서 아메리카노 1잔과 카페라떼 2잔을 사고 13,000원을 지불했다.
아메리카노와 카페라떼의 단가는 각각 얼마일까
중학교 수학 시간에 배웠던 방식을 떠올려보면, 아메리카노의 가격을 , 카페라떼의 가격을 라 두고 다음과 같은 두 식을 세울 수 있다.
이처럼 알지 못하는 값 미지수를 차수가 1인식으로 표현하고 이 식들이 여러개 모여 공통의 정답을 찾는 구조를 연립 선형 방정식 System of Linear Equations라고 한다.
선형이라는 이름이 붙은 이유는 미지수가 2개인 2x + y = 11,000 같은 방정식을 좌표평면에 그리면 구부러지지 않는 Line 형태로 나타나기 때문이다.
AI 눈으로 보는 선형 방정식 #
방금 든 예시는 미지수가 x, y 2개 뿐이였지만, 인공지능이 다루는 세상은 훨씬 넓다.
예를들어 주택 가격을 예측하는 AI 모델을 만든다고 해보자, 집값에 영향을 주는 요인은 집의 면적, 방의 개수, 지하철역과의 거리, 건축연도등 수십, 수백가지가 넘는다.
AI는 이러한 특징들에 적절한 가중치 weight를 곱해서 최종 집값을 예측한다.
수천 세대의 집값 데이터를 수집하여 적절한 값을 찾는 과정은, 본질적으로 수천 개의 미지수와 수천 개의 식이 얽혀 있는 거대한 연립선형방정식을 푸는 문제와 완벽히 동일하다.
선형성이 AI에서 강력한 이유 #
세상에 수 많은 현상은 비선형적인 곡선형태이지만, 컴퓨터는 복잡한 곡선보다 단순한 직선 연산을 수천억번 반복하는데 훨씬 뛰어나다.
AI 엔지니어링의 핵심은 복잡한 현실 세계를 수 많은 선형방정식의 집합으로 변환하여 컴퓨터가 가장 빠른 속도로 처리할 수 있게 만드는데 있다.
행렬의 정의 #
액셀 표에서 시작하는 행렬 #
미지수가 100개이고, 식이 100개인 연립방정식을 종이에 처럼 기호와 덧셈 표기를 일일이 적다보면 번잡하고 알아보기 힘들다, 그래서 수학자들은 기호나 덧셈 기호를 때어내고 숫자들만 격자모양으로 깔끔하게 정렬하는 표를 생각해냈다. 이게 바로 행렬 Matrix이다.
앞서 세웠던 카페 주문식을 다시보자
여기서 미지수 앞의 숫자(계수)만 따로 떼어 대괄호 안에 사각형 모양으로 모아본다.
이렇게 가로와 세로로 숫자를 나열한 집합을 행렬 이라고 부른다.
- 행(row): 가로줄을 의미한다. 위 행렬에서 첫 번째 행은 이다.
- 열(column): 세로줄을 의미하고 위 행렬에서 첫번째 열은 이다.
가로가 줄, 세로가 줄인 행렬을 행렬(m by n matrix)이라고 부르며, 행렬내의 개별 숫자는 몇 번째 행, 몇 번째 열이 있는지를 따져 (i행 j열의 원소)로 나타낸다.
1열 2열
1행 [ 2 1 ] -> a_11 = 2, a_12 = 1
2행 [ 1 2 ] -> a_21 = 1, a_22 = 2
AI에서 행렬이 의미하는 것: 데이터 묶음 #
컴퓨터 visual 데이터 처리나 AI DL 프레임워크 PyTorch, TensorFlow등을 다루다보면 항상 행렬을 접하게 된다.
- 이미지 데이터: 28 x 28 크기의 흑백 이미지는 각 명암값을 0~255 사이의 숫자로 표현한 28x28 크기의 행렬이다.
- 배치 데이터 (Batch Data): 100명의 사용자 데이터를 한꺼번에 AI에 입력할 때, 1명당 5개의 특징 데이터만 있다면 이는 100 x 5 크기의 행렬이다.
즉, 행렬이 단순한 수학적 도구를 넘어, 컴퓨터가 수 많은 데이터를 일괄처리하기위해 데이터를 담아두는 표준 규격 격자 상자이다.
행렬의 연산: 규칙적이고 규칙적인 데이터의 덧셈과 곱셈 #
숫자끼리 더하고 곱하듯, 숫자를 담은 상자인 행렬끼리도 연산을 정의할 수 있다.
다만 행렬 연산은 나름의 독특한 규칙을 가지고 있다.
덧셈과 뺄셈: 같은 위치끼리 짝짓기 #
두 행렬을 더하거나 빼려면 두 행렬의 크기 (가로, 세로 길이)가 완전히 같아야 한다.
계산은 같은 위치에 있는 원소끼리 더하거나 빼주면 된다.
1월 매장 매출표와 2월 매장 매출표가 있을때, 각 품목별 위치에 맞추어 두달간 총매출표 하나로 합치는 것과 같다.
스칼라 곱: 전체 원소에 배수 적용하기 #
행렬 전체의 단 하나의 숫자 (이를 수학에서는 스칼라라고 부른다)를 곱하는 연산이다.
행렬 내부의 모든 원소에 그 숫자를 똑같이 곱해주면 된다.
제품 가격표 행렬이 있을때 모든 제품 가격을 일률적으로 3배 인상하는 상황
행렬의 곱세미: 가로줄(행)과 세로줄(열)의 내적 #
행렬 연산에서 가장 중요하면서도 초심자들이 처음 당황하는 부분이 행렬의 곱셈이다.
행렬의 곱셈은 단순히 같은 위치끼리 곱하는 것이 아니라, 앞 행렬의 가로줄(행)과 뒤 행렬의 세로줄(열)을 짝지어 곱한 뒤 더하는 방식으로 진행된다.
, 일 때, 의 첫 번째 칸(1행 1열)을 구하는 과정은 다음과 같다.
- 의 1행 와 의 1열 을 가져온다
- 각 성분을 곱해서 더한다. .
- 이 값을 결과 행렬의 1행 1열 위치에 넣는다.
이 과정을 모든 행과 열의 조합에 대해 반복한다
이 곱셈이 성립하려면 반드시 앞 행렬의 열 개수와 뒤 행렬의 행 개수가 일치해야한다.
. ( 행렬과 행렬을 곱하면 결과는 행렬이 된다.
왜 행렬 곱셈을 이렇게 복잡하게 정의했을까? #
행렬의 곱셈은 단순히 수식놀이가 아니고, 딥러닝 신경망에서 입력 데이터를 여러층의 가중치 레이어를 거치며 새로운 특징으로 변환되는 과정 Linear Trasformation을 가장 간결하게 표현한 수학적 도구다.
라는 단 한 줄의 행렬 곱셈 코드로, 수만개의 입력데이터를 수천개의 인공 신경망 노드 ()와 동시에 연산시킬 수 있게 된다.
행렬과 연립선형방정식의 관계: #
이제 이번장의 핵심으로 들어와보자.
연릭선형방정식과 행렬이 어떻게 하나로 만나는지 확인해보자.
아까 세웠던 아메리카노와 카페라떼 문제를 다시 보면
이 방정식은 행렬의 곱셈 정의를 역으로 활용한다면 다음과 같이 하나의 행렬 곱셈식으로 완벽하게 다시 적을 수 있다.
정말 같은지 확인해볼까
1행과 열을 곱하면:
2행과 열을 곱하면:
원래의 복잡했던 연립방정식이 그대로 복원된다. 기호로 간단히 축약해보자
- : 계수 행렬(Coefficient Matrix) — 데이터 사이의 관계 또는 시스템의 규칙
- : 미지수 벡터(Unknown Vector) — 우리가 찾고자 하는 정답
- : 결과 벡터(Result Vector) — 최종 관측된 결과값
#
이 표현은 혁명적인데 기존에 수많은 기호와 덧셈으로 길게 늘어져있던 문맥을 라는 세 문자로 압축했기 때문이다.
이 축약이 주는 이점은 압도적인데
- 차원 확장성: 미지수가 2개든 1억개든 상관없이 한줄로 표현이 가능하다.
- 코드 구현의 단순화: for문을 돌려 수식 100개를 하나씩 계산하는 대신에, GPU의 병렬 연산 기능을 이용해 행렬 와 를 한번에 Vectorization 하여 처리속도를 수천 배 향상시킬 수 있다.
이처럼 연립선형방정식을 행렬 방정식 형태로 변환하여 푸는 것이 현대 인공지능 데이터 과학 연산전체를 받치고 있는 기둥이다.