최근 딥러닝이나 배열이나 모든 학문을 이해하기 위해서는 선형대수학이 기본이 된 다는것을 다시한번 느꼈다. 따라서 기본기를 조금 더 튼튼하기 위해 선형대수학을 다시 공부해 보려 한다.
우선 선형대수학이 무엇인지와 왜 사용하는지 그리고 선형대수학의 근본인 일차방정식과 행렬에 대해서 알아보자.
설명과 파이썬 코드를 포함하였으니 도움이 되길 바란다.
1. 선형대수학이란
선형대수학, 이름만 들으면 무척 어렵고 거창한 학문처럼 느껴질 수 있습니다. 하지만 실제로 그 개념은 우리가 이미 중학교 때부터 접해온 방정식 풀이에 뿌리를 두고 있습니다.
먼저 선형대수학이라는 용어를 풀어볼까요? ‘선형대수학(線形代數學)’을 한자어로 보면 **선형(線形)**은 말 그대로 “직선의 형태”를 뜻하고, **대수학(代數學)**의 “대(代)”는 “대신할 대” 자입니다
. 여기서 중요한 포인트는, 대수학이란 숫자를 대신해서 문자를 사용해 방정식을 푸는 수학이라는 뜻이라는 거죠. (흔히 ‘대수’를 큰 대(大)자로 오해하기 쉬운데 그렇지 않습니다
즉, **알제브라(algebra)**라고 부르는 대수학은 우리가 중학교 때 배웠던 것처럼 미지의 값을 문자로 놓고 식을 세워 방정식을 해결하는 과정입니다. 선형대수학에서 말하는 **선형(linear)**은 “일차의”라는 의미인데요. 다시 말해, 1차 방정식만을 다루는 수학입니다. 여기서 1차 방정식이란 미지수(변수)의 차수가 1인 방정식을 뜻합니다. 예를 들어:
- 2x + 5 = 11 (1차 방정식의 예 – x의 거듭제곱이 1)
- 3x + 2y = 7 (두 개의 미지수를 가진 1차 방정식)
위처럼 각 변수들이 한 번씩만 등장하고 제곱이나 세제곱 같은 높은 차수가 없는 식이 선형 방정식입니다. 이렇듯 선형대수학은 “선형(1차)인 방정식들을 문자로 놓고 푸는 학문”이라고 한마디로 정의할 수 있겠습니다. 결국 어려운 수식의 향연이라기보다는, 우리가 이미 알고 있던 방정식 풀기의 연장선이라는 사실을 알 수 있습니다.
2. 연립일차방정식
선형대수학에서 특히 강조되는 것은 *“모든 것의 시작은 연립일차방정식!”*이라는 문장입니다. 실제로 선형대수학의 출발점이자 핵심 문제는 연립 일차방정식, 즉 여러 개의 1차 방정식을 한꺼번에 풀어서 해를 찾는 것입니다. 예를 들어 두 개의 방정식이 있다고 해봅시다:
- 방정식 ①: x + 2y = 4
- 방정식 ②: 2x + 5y = 9
이렇게 두 개의 미지수 x, y를 가진 방정식 두 개가 함께 주어지면, 이를 연립방정식이라고 부릅니다. 중학교 수학 시간에 이런 문제 많이 풀어보셨을 텐데요. 보통 한 방정식에서 x나 y를 표현하여 다른 식에 대입하는 대입법이나, 두 식을 적절히 조합해서 한 변수를 없애는 **소거법(가감법)**으로 해를 구했습니다. 위 연립방정식을 풀면 x와 y의 값을 찾아낼 수 있는데, 직접 해 보면 x = 2, y = 1임을 알 수 있습니다.
이처럼 여러 개의 일차 방정식을 동시에 만족하는 해를 찾는 것이 선형대수학이 푸는 기본 문제입니다. 방정식이 많아질수록 일일이 문자로 대입하고 계산하기가 복잡해지는데, 선형대수학은 이를 효율적으로 풀 수 있는 멋진 도구를 제공합니다. 바로 행렬과 벡터를 사용하는 것이죠.
3. 행렬과 벡터로 방정식 표현
두 개 이상의 방정식을 다룰 때, **행렬(matrix)**과 **벡터(vector)**를 사용하면 연립방정식을 간편하게 표현할 수 있습니다. 행렬은 숫자들을 직사각형 형태로 나열한 표라고 생각하면 되고, 벡터는 숫자들을 한 줄로 세운 (혹은 한 줄로 늘어놓은) 리스트라고 생각하면 됩니다. 방금 예로 든 연립방정식 x+2y=4, 2x+5y=9을 행렬-벡터 곱 형태로 나타내보면 다음과 같습니다:
⌊ 2 5 ⌋ ⌊ y ⌋ = ⌊ 9 ⌋
위 표현을 해석해볼까요? 첫 번째 행렬 ⌈1 2; 2 5⌋의 각 행은 원래 연립방정식의 좌변에 있던 계수(coefficients)들로 이루어져 있습니다. 벡터 ⌈x; y⌋는 우리가 구하고자 하는 미지수 벡터이고, 우변의 벡터 ⌈8; 3⌋는 연립방정식 각 식의 상수항을 모아놓은 것입니다. 이 행렬 × 벡터 = 벡터라는 하나의 식으로 두 개의 방정식을 한 번에 표현할 수 있게 되었죠. 일반적으로 연립일차방정식은 A **x** = **b** 형태, 즉 행렬 A와 미지수 벡터 x의 곱이 결과 벡터 b가 되는 식으로 나타낼 수 있습니다
. 선형대수학에서는 이러한 행렬-벡터 방정식을 풀어서 x를 구하는 것이 핵심 목표가 됩니다
. 아래는 위 식의 해를 구한 것입니다. 코드는 아래에 있으니 참고하세요.

행렬과 벡터를 사용하면 연립방정식을 굉장히 체계적으로 다룰 수 있습니다. 특히 많은 수의 방정식과 변수들로 이루어진 복잡한 문제도 행렬 한 개와 벡터 두 개로 깔끔하게 표현되죠. 예를 들어, 변수 3개가 있는 방정식 3개도 3×3 행렬과 3×1 벡터들로 한 줄에 표현할 수 있습니다. 이렇게 하면 컴퓨터를 이용한 계산이나 이론적 분석 모두 훨씬 쉬워집니다. 선형대수학의 매력과 힘은 바로 이런 행렬과 벡터 표현을 통해 복잡한 문제를 단순하고 우아한 형태로 다룰 수 있다는 데 있어요.
4. 선형대수학이 중요한 이유
그렇다면 이런 선형대수학이 왜 그토록 중요할까요? 앞서 본 것처럼 선형대수학은 결국 연립일차방정식 문제를 푸는 일반적인 방법론을 제공합니다. 두세 개의 방정식을 푸는 일은 손으로도 할 수 있지만, 수십 개나 수백 개의 방정식이라면 이야기가 달라집니다. 이때 행렬을 이용하면 컴퓨터가 빠르게 계산하여 해를 구할 수 있고, 이론적으로도 해의 존재 여부나 개수를 판단하기 쉬워집니다.
과학과 공학 전반에서 선형대수 지식은 필수적입니다. 예를 들어 컴퓨터 그래픽스에서는 행렬을 사용해 3D 물체의 회전이나 이동을 계산하고, 통계나 경제 모델에서도 여러 변수 간 관계를 행렬로 나타내어 해를 구합니다. 특히 AI와 딥러닝 분야에서 선형대수학은 없어서는 안 될 기초 도구인데요. 인공신경망의 계산은 본질적으로 대용량 행렬과 벡터 연산으로 이루어집니다. 한 층의 뉴런 연산이 한 번의 행렬×벡터 곱으로 표현되고, 학습 과정에서도 미분 계산을 행렬로 처리하지요. 선형대수학을 알면 복잡해 보이는 최신 기술들의 기반을 이해할 수 있고, 새로운 문제를 만났을 때 그것을 행렬 방정식 형태로 모델링해서 푸는 접근법을 가질 수 있게 됩니다.
- 과학 및 공학 분야: 선형대수학은 물리, 공학에서 필수적인 도구입니다. 예를 들어 물리학의 힘, 속도 같은 벡터량 계산이나, 전기회로에서 여러 방정식을 풀어 전류와 전압을 구하는 문제 등에서 행렬을 통한 계산이 활용됩니다. 복잡한 구조 해석이나 경제 모델에서도 수십 개의 연립방정식을 행렬 형태로 풀어내곤 합니다.
- 컴퓨터 그래픽스: 우리가 보는 디지털 이미지와 3D 그래픽 세계는 선형대수 없이는 성립하기 어렵습니다. 모든 디지털 이미지는 픽셀 값들의 행렬로 표현되며, 3차원 그래픽스에서는 변환 행렬을 사용해 물체를 이동/회전/확대하는 연산을 합니다. 예를 들어 게임이나 애니메이션에서 캐릭터를 회전시키는 것은 해당 좌표 벡터에 회전 행렬을 곱하는 과정이고, 카메라 시점을 바꾸는 것도 행렬 곱으로 처리됩니다. 이렇게 행렬은 공간 변환의 언어로 쓰입니다.
- 데이터 과학 및 인공지능: 선형대수학은 AI의 핵심 언어라고 해도 과언이 아닙니다. 머신러닝 알고리즘은 데이터를 벡터로 표현하고, 학습 과정에서 벡터 간 유사도를 판단하거나 최적의 해를 찾기 위해 내적과 같은 연산을 반복합니다. 특히 딥러닝(인공신경망)에서는 수백만 개의 가중치들이 행렬 형태로 저장되고, 매 신경망 계층(layer)을 통과할 때마다 행렬과 벡터의 곱셈 연산이 이루어집니다. 예를 들어 이미지 인식을 위한 합성곱 신경망(CNN)은 필터와 이미지 부분의 내적을 계산하여 특징을 추출하는데, 이 모든 과정이 선형대수의 연산으로 표현됩니다. 대규모 데이터에서 유사한 패턴을 찾는 추천시스템이나 문서/문장의 의미를 벡터로 표현하는 자연어 처리 역시 벡터 사이의 유사도를 내적이나 코사인 값으로 측정하여 동작합니다. 결국 현대의 많은 소프트웨어 기술은 선형대수학을 기반으로 만들어져 있다고 해도 지나치지 않습니다.
- 기타 일상 속 예시: 우리가 사용하는 스마트폰 카메라의 이미지 보정, 음성 인식의 신호처리, 지도 앱의 경로 탐색(그래프 알고리즘도 행렬로 표현되기도 합니다) 등도 내부적으로는 선형대수적 계산을 거칩니다. 인터넷 검색 알고리즘인 구글의 PageRank는 수십억 개의 웹페이지를 노드로 보고 행렬의 고유벡터를 계산함으로써 중요한 페이지를 찾는 방식으로 유명합니다. 이처럼 선형대수학은 우리 눈에 직접 드러나진 않아도 다양한 기술의 엔진 역할을 하고 있습니다.
정리하면, 선형대수학에서 배우는 개념들은 학문적인 호기심을 충족시키는 것을 넘어 실제 세계의 문제를 푸는 열쇠가 됩니다. 행렬과 벡터를 자유자재로 다룰 수 있게 되면, 데이터가 넘쳐나는 현대 사회에서 정보를 효율적으로 처리하고 새로운 가치를 만드는 역량을 갖추게 되는 것입니다.
5. 최종정리
정리하면, 선형대수학은 **“방정식을 푼다”**는 중학교 수학의 연장선에서 시작하여, 이를 행렬과 벡터라는 도구로 일반화한 분야입니다. 어려워 보이던 이름 뒤에는 알고 보면 간단한 개념이 숨어 있었죠.
.앞으로의 강의에서는 구체적으로 연립방정식을 풀기 위한 방법(예를 들어 가우스-조던 소거법 등)과 더 심화된 개념들이 다루어질 텐데요. 차근차근 이런 도구들을 익히다 보면 선형대수학이 눈에 보이게 이해될 것이라고 기대됩니다.
수학은 결코 마법이 아니라 체계적인 도구와 논리로 문제를 해결하는 과정입니다. 선형대수학도 마찬가지로, 우리가 이미 알고 있는 원리들을 활용하여 더욱 큰 규모의 문제를 해결하도록 도와주는 친구라고 생각해보세요
6. 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
# 연립방정식의 계수 행렬 A와 결과 벡터 b 설정
A = np.array([[1, 2],
[2, 5]])
b = np.array([4, 9])
# 연립방정식의 해 구하기 (A * x = b)
solution = np.linalg.solve(A, b)
print("연립방정식의 해:", solution)
# x의 범위 설정
x = np.linspace(-1, 6, 400)
# 첫 번째 방정식: x + 2y = 4 => y = (4 - x) / 2
y1 = (4 - x) / 2
# 두 번째 방정식: 2x + 5y = 9 => y = (9 - 2*x) / 5
y2 = (9 - 2*x) / 5
# 그래프 그리기
plt.figure(figsize=(8, 6))
plt.plot(x, y1, label="x + 2y = 4", linewidth=2)
plt.plot(x, y2, label="2x + 5y = 9", linewidth=2)
plt.scatter(solution[0], solution[1], color='red', s=100, zorder=5, label="해 (Intersection)")
plt.xlabel("x")
plt.ylabel("y")
plt.title("연립방정식의 해와 그래프 시각화")
plt.legend()
plt.grid(True)
plt.show()
아래는 코드의 각 부분에 대한 상세한 설명입니다.
1. 라이브러리 임포트
import numpy as np
import matplotlib.pyplot as plt
- numpy (np):
수치 계산을 위한 핵심 라이브러리로, 배열(array)과 행렬 연산, 선형대수 알고리즘 등 다양한 수학적 기능을 제공합니다. - matplotlib.pyplot (plt):
데이터 시각화를 위한 라이브러리로, 그래프나 차트를 쉽게 그릴 수 있게 해줍니다.
2. 연립방정식 설정 및 해 구하기
# 연립방정식의 계수 행렬 A와 결과 벡터 b 설정
A = np.array([[1, 2],
[2, 5]])
b = np.array([4, 9])
- 행렬 A:
- 벡터 b:
# 연립방정식의 해 구하기 (A * x = b)
solution = np.linalg.solve(A, b)
print("연립방정식의 해:", solution)
- np.linalg.solve:
3. x 값 범위 설정 및 함수 정의
# x의 범위 설정
x = np.linspace(-1, 6, 400)
- np.linspace(-1, 6, 400):
-1부터 6까지 균등하게 분포된 400개의 점을 생성합니다.
이는 두 직선의 그래프를 부드럽게 그리기 위한 x 좌표값입니다.
# 첫 번째 방정식: x + 2y = 4 => y = (4 - x) / 2
y1 = (4 - x) / 2
# 두 번째 방정식: 2x + 5y = 9 => y = (9 - 2*x) / 5
y2 = (9 - 2*x) / 5
- 방정식을 y에 대해 풀기:
- 첫 번째 방정식 x+2y=4x + 2y = 4를 y=4−x2y = \frac{4-x}{2}로 변환합니다.
- 두 번째 방정식 2x+5y=92x + 5y = 9를 y=9−2x5y = \frac{9-2x}{5}로 변환합니다.
이렇게 하면 x 값에 따라 y 값을 계산할 수 있어, 함수 형태의 두 직선을 그릴 수 있습니다.
4. 그래프 시각화
# 그래프 그리기
plt.figure(figsize=(8, 6))
plt.plot(x, y1, label="x + 2y = 4", linewidth=2)
plt.plot(x, y2, label="2x + 5y = 9", linewidth=2)
plt.scatter(solution[0], solution[1], color='red', s=100, zorder=5, label="해 (Intersection)")
plt.xlabel("x")
plt.ylabel("y")
plt.title("연립방정식의 해와 그래프 시각화")
plt.legend()
plt.grid(True)
- plt.figure(figsize=(8, 6)):
8 x 6 인치 크기의 새로운 Figure(그래프 창)를 생성합니다. - plt.plot(x, y1, ...), plt.plot(x, y2, ...):
- 각 방정식에 대해 x와 y 값을 사용하여 직선을 그립니다.
- label 파라미터를 이용해 범례에 표시할 이름을 지정합니다.
- linewidth로 선의 굵기를 조절합니다.
- plt.scatter(solution[0], solution[1], ...):
- 연립방정식의 해인 (2, 1)을 붉은 점으로 표시합니다.
- s는 점의 크기, zorder는 다른 요소들보다 위에 표시되도록 하는 설정입니다.
- plt.xlabel, plt.ylabel, plt.title:
각각 x축, y축의 레이블과 그래프 제목을 설정합니다. - plt.legend():
범례(legend)를 표시하여 각 선의 의미를 명확히 합니다. - plt.grid(True):
그래프에 격자선을 추가하여 시각적 해석을 돕습니다.
전체 요약
이 코드는 다음과 같은 흐름으로 동작합니다:
- 연립방정식 설정:
- 해 계산:
- 함수 정의 및 그래프 데이터 생성:
- 시각화:
Matplotlib을 사용해 두 직선을 그린 후, 교점(해)를 빨간 점으로 표시하여 시각적으로 해를 확인할 수 있도록 합니다.
'머신러닝(Machine Learning) > 선형대수학' 카테고리의 다른 글
선형대수학 기초[1강]: 벡터의 덧셈, 뺄셈 및 스칼라배(파이썬 코드 포함) (0) | 2025.02.17 |
---|