[머신러닝] Lecture 03 Linear Algebra review

이재호·2025년 2월 27일

머신러닝

목록 보기
3/18

https://www.youtube.com/watch?v=4Pm-htIGVMQ&list=PLiPvV5TNogxIS4bHQVW4pMkj4CHA8COdX&index=3

먼저 행렬에 대해서 정의를 해보자.
행렬은 배열들의 집합이라고 생각하면 된다.
아래 그림에서,

  • 좌측은 차원이 4 x 2 차원인 행렬을 의미하고,
  • 우측은 차원이 2 x 3 차원인 행렬을 의미한다.

행렬의 원소는 Ai,jA_{i,j}꼴로 표현하며, 이는 ii행 그리고 jj열에 있는 원소를 의미한다.

그렇다면 벡터는 무엇일까.
벡터는 차원이 n x 1인 행렬을 의미한다. (즉, 칼럼의 종류가 하나인 행렬을 의미한다.)

행렬의 합 연산은 아래 그림과 같다.
직관적으로 같은 위치의 원소들끼리 합해주면 된다.
다만, 행렬의 합 연산을 위해서는 행렬 간의 차원이 같아야한다는 전제 조건이 필요하다. (만약, 서로 다른 차원의 행렬끼리 합 연산을 할 경우 error가 발생할 것이다.)

행렬의 스칼라 곱은 아래 그림과 같다.
이것도 직관적으로 각 행렬의 원소마다 스칼라 값만큼 곱해주면 된다.

따라서, 행렬의 (스칼라) 사칙연산은 아래 그림처럼 직관적으로 풀이할 수 있다.

그렇다면 행렬간의 곱 연산은 어떻게 구할 수 있을까.
우선 행렬간의 곱 연산을 위해서는 좌측 행렬 AA의 칼럼 수와 우측 행렬 BB의 로우 수가 같아야 한다.
그 이유는 좌측 행렬의 행과 우측 행렬의 열 간의 곱 연산을 해야하기 때문이다.
예를 들어, 다음과 같은 수식을 생각해보자.

  • x+3y=16x + 3y = 16
  • 4x+0y=44x + 0y = 4
  • 2x+0y=52x + 0y = 5
    그리고 이를 행렬로 표현하면, [134020][xy]=[1645]\begin{bmatrix}1 & 3 \\ 4 & 0 \\ 2 & 0\end{bmatrix}\begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix}16 \\ 4 \\ 5\end{bmatrix}와 같다.
    따라서, 앞 행렬의 행과 뒤 행렬의 열을 각각 곱해서 더해줌으로써 곱 연산 결과를 구할 수가 있다.

다음은 행렬곱의 예시다.

그렇다면 이를 예측 함수 h(x)h(x)에 적용해보자. 좌측에는 입력데이터셋 xx vector가 있고, 우측에는 예측 함수 h(x)h(x)가 정의되어 있다.
θ0\theta_040-40이고, θ1\theta_10.250.25라는 걸 알 수 있다. 따라서 이를 벡터로 표현하면 [400.25]\begin{bmatrix}-40 \\ 0.25\end{bmatrix}가 된다.
그리고 입력값 xx에 대해서도 행렬로 표현하면 [1210411416115321852]\begin{bmatrix}1 & 2104 \\ 1 & 1416 \\ 1 & 1532 \\ 1 & 852\end{bmatrix}로 표현할 수 있다. 여기서 11θ0\theta_0에 해당하는 값이다.
이제 두 행렬곱을 진행하면 예측값 벡터를 구할 수 있을 것이다.

다만 위 과정에서 한 가지 의문점이 들었다. 왜 변수에 해당하는 Data Matrix를 앞에 두고, 파라미터 벡터를 뒤에 두고 행렬곱을 진행했을까? 이전까지는 변수에 해당하는 부분(x, y, z)을 뒤로 두고 계수에 해당하는 부분을 앞에 뒀었는데 반대로 하니 의문이 들었다.
그래서 계수 행렬을 앞으로, 변수 행렬을 뒤로 두고 해보았다.

[400.25][1111210414161534852]=[40×1 + 0.25×2104..]\begin{bmatrix}-40 & 0.25\end{bmatrix}\begin{bmatrix}1 & 1 & 1 & 1 \\ 2104 & 1416 & 1534 & 852\end{bmatrix} = \begin{bmatrix}-40 \times 1 \ + \ 0.25 \times 2104 & ..\end{bmatrix}

  • 그리고 행렬을 작성하면서 깨달았다. 이전의 예시에서는 방정식에 대한 각 변수의 값을 구할 때 변수의 값이 고정되어 있었지만(x, y, z 처럼), 위 예시에서는 오히려 파라미터(θ0,θ1\theta_0, \theta_1)가 고정되어 있고, 입력값이 변한다는 것을 알았다.
  • 따라서 값이 고정되는 파라미터 행렬을 뒤로 하고, 값이 변하는 입력값 행렬을 앞으로 하는 것이었다.
  • 또한, 바로 위처럼 행렬곱을 할 경우, 이는 벡터가 아니라는 점도 깨달았다. 오히려 칼럼의 차원만 늘리는 꼴이었다. 그리고 이는 의미상으로도 잘못된 것임을 깨달았다.
  • 추가로, Transpose를 진행하면 그림에 나오는 정상적인 행렬식으로 돌아가는 것도 볼 수 있었다.

그렇다면 행렬곱을 좀더 빠르고 직관적으로 하는 방법은 어떤 게 있을까.
아래 그림처럼 뒤 행렬의 열들을 따로 분리하여 앞 행렬과 따로 계산한 후 나중에 합쳐주면 빠르고 직관적으로 결과를 구할 수가 있다.

예시는 다음과 같다.

  • 먼저 뒤 행렬의 열을 따로 분리해서 앞 행렬과 곱 연산을 수행한다.
  • 그러고 나서 각 결과를 합쳐준다.

이를 활용해서 다양한 파라미터를 갖는 예측 함수 h(x)h(x)에도 적용하여 각각의 예측값을 도출하는 데도 직관적으로 빠르게 수행할 수 있다.

다음은 행렬 곱연산에서는 교환법칙이 성립하지 않음을 보여주는 그림이다.

물론 교환법칙은 성립하지 않지만 아래와 같이, 곱의 순서는 바꿔줘도 괜찮다.
즉, 행렬 곱연산에서 결합법칙은 성립한다.

다음은 단위 행렬(Identity Matrix)에 대한 그림이다.

  • 단위 행렬의 크기는 n x n이다.
  • 단위 행렬의 대각 성분의 값은 1이며, 나머지 성분들의 값은 0이다.
  • 어떤 행렬 AA에 단위 행렬 II와 곱연산을 할 경우, 그 값은 그냥 AA이다.
    즉, 단위 행렬 II의 값은 그냥 11로 봐도 무방하다.

다음은 역행렬(Inverse Matrix)에 대한 그림이다.

  • 크기 m x m을 갖는 행렬 AA가 있다고 해보자.
  • AA의 역행렬 A1A^{-1}의 크기는 마찬가지로 m x m일 것이다.
  • 그리고 역행렬 A1A^{-1}은 다음 조건을 만족해야 한다.
    AA1=I=A1AAA^{-1} = I = A^{-1}A
  • 그리고 중요한 점이 모든 행렬이 다 역행렬을 갖고 있지 않다.
    이 경우, 이러한 행렬을 singular 행렬이라고 한다.

다음은 행렬의 전치(Transpose)를 나타내는 그림이다.

  • 크기 m x n의 행렬 AA의 전치 행렬 ATA^T의 크기는 n x m이다.
  • 전치 행렬 ATA^T는 행렬 AA의 행을 열로 가져가고, 행렬 AA의 열을 행으로 가져간다.
  • 즉, Ai,j=Aj,iTA_{i,j} = A^T_{j,i}이다.
profile
천천히, 그리고 꾸준히.

0개의 댓글