Lecture 1.1 The geometry of linear equations
CHAPTER 1. Matrix
Row Picture
행의 관점으로 선형방정식 바라보기
Row picture으로 푸는 방법은 익히 잘알려져 있다. 행렬들을 행으로 구분한 뒤 선형 방정식들의 그래프를 각각 그리면, 서로 만나게 되는 교점이 생기게 되는게 그 교점이 선형방정식의 해가 되는 것이다.
Column Picture
열의 관점으로 선형방정식 바라보기
Column picture은 열의 관점에서 선형시스템을 보는 것이다. 선형 방정식들을 열 벡터들의 선형 결합(linear combination)으로 표현할 수 있다.
그렇다면 여기서 의문점이 있다.
만약 x , y에 숫자를 대입하지 않았을 경우 즉, 모든 조합의 결과는 어떻게 되는가?
==> 평면 전체가 벡터로 채워질 것이다.
In deap learning
row picture과 column picture 둘 다로 선형방정식을 해결하는 것도 중요하지만, 딥러닝에서는 선형 시스템을 column picture로 보는 것이 더 낫다. 그 이유는 차원이 높아짐에 따라 row picture로 좌표계에서 표현하기 상대적으로 더 어렵기 때문이다.
시각적으로 비교를 해보자면 먼저 Row picture 관점에서는,
# Row picture 관점에서의 선형 방정식 시각화
import numpy as np
import matplotlib.pyplot as plt
# 계수 행렬 A와 b 벡터 정의
A = np.array([[2, -1, 0],
[-1, 2, -1],
[0, -3, 4]])
b = np.array([0, -1, 4])
# 그래프 범위 설정
x_vals = np.linspace(-5, 5, 100)
y_vals = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x_vals, y_vals)
# 각 방정식을 z에 대해 풀기
Z1 = (2*X - Y) / 1 # 첫 번째 방정식
Z2 = (-X + 2*Y + 1) / 1 # 두 번째 방정식
Z3 = (4 + 3*Y) / 4 # 세 번째 방정식
# 3D 그래프 설정
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# 방정식 평면 시각화
ax.plot_surface(X, Y, Z1, alpha=0.5, color='red', label='2x - y = 0')
ax.plot_surface(X, Y, Z2, alpha=0.5, color='blue', label='-x + 2y = -1')
ax.plot_surface(X, Y, Z3, alpha=0.5, color='green', label='-3y + 4 = 4')
# 축 레이블 추가
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
plt.title('Row Picture of Linear Equations')
plt.show()
row picture로 위 선형방정식으로 좌표계를 그리게 되면, 위의 좌표계에 평면이 겹치는 영역이 나타나게 된다.
행렬이 선형 독립 관계(Linear independance)이기에, 모든 좌표를 해석할 수 있는 겹친 평면을 나타낼 수 있다.
그 다음 Column picture 관점은 아래와 같다.
# Column picture 관점에서의 선형 방정식 시각화
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 열 벡터 정의
col1 = np.array([2, -1, 0]) # 첫 번째 열 벡터
col2 = np.array([-1, 2, -3]) # 두 번째 열 벡터
col3 = np.array([0, -1, 4]) # 세 번째 열 벡터
b = np.array([0, -1, 4]) # b 벡터
# 3D 그래프 설정
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
# 원점을 기준으로 벡터를 그림
ax.quiver(0, 0, 0, *col1, color='r', label='Column 1: (2, -1, 0)')
ax.quiver(0, 0, 0, *col2, color='g', label='Column 2: (-1, 2, -3)')
ax.quiver(0, 0, 0, *col3, color='b', label='Column 3: (0, -1, 4)')
ax.quiver(0, 0, 0, *b, color='purple', linestyle='dashed', label='b: (0, -1, 4)')
# 축 설정
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax.set_zlim([-3, 5])
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
# 범례 및 제목 추가
ax.legend()
plt.title('Column Picture: Linear Combination of Column Vectors')
plt.show()
위와 같이 column picture로 위 선형 방정식을 그리게 되면, vector를 통해서 표현된다. 따라서 아무리 차원이 높아지더라도, 축의 표현의 어려움이 있지만, 방정식을 벡터 간의 표현으로 생각하면 보다 생각하기 용이하다.