머신 러닝에서 벡터, 행렬 표기법 📂머신러닝

머신 러닝에서 벡터, 행렬 표기법

vector and matrix notation in machine learning

선형대수를 잘 알지 못하거나, 잘 알아도 실제로 행렬 계산을 많이 해보지 않은 경우에 머신 러닝을 공부하면서 벡터와 행렬 표기법 때문에 힘들 수 있다. 해당 값이 스칼라인지, 벡터인지, 행렬인지 잘 구분해야하는데 실제로 손 계산을 해보면 익숙해지는데에 도움이 된다. 본 글의 표기법은 Bishop의 '패턴 인식과 기계 학습'1을 참고했다.

벡터

주로 소문자 볼드체로 표기하며, $n\times 1$ 행렬을 말한다. 입력 데이터는 $\mathbf{x}$, 가중치는 $\mathbf{w}$로 표기한다.

$$ \mathbf{x}=\begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix},\quad\mathbf{w}=\begin{bmatrix} w_{1} \\ w_{2} \\ \vdots \\ w_{n} \end{bmatrix} $$

벡터의 놈

벡터의 은 다음과 같이 정의되며 3차원 공간에서 벡터의 크기와 같은 개념이다.

$$ \left\| \mathbf{x} \right\| =\sqrt{\sum \limits _{i=1} ^{n} x_{i}^{2} },\quad \left\| \mathbf{x} \right\|^{2}=\sum \limits _{i=1} ^{n} x_{i}^{2} $$

두 벡터의 내적

다음과 같이 행벡터와 열벡터의 행렬곱을 내적이라 한다. 내적의 결과는 스칼라이다.

$$ \begin{align*} \mathbf{w}^{T}\mathbf{x}&=\begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix}\begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix} \\ &=w_{1}x_{1}+w_{2}x_{2}+\cdots+w_{n}x_{n} \\ &=\sum \limits _{i=1} ^{n} w_{i}x_{i} \end{align*} $$

이 경우에 위 계산 결과는 출력 결과, 추정치를 의미한다.

$$ \hat{y} =\mathbf{w}^{T}\mathbf{x}=\sum \limits _{i=1} ^{n} w_{i}x_{i} $$

놈은 스칼라이므로 $\mathbf{w}^{T}\mathbf{x}=\mathbf{x}^{T}\mathbf{w}$가 성립하고, 놈을 내적으로 표현하면 다음과 같다.

$$ \left\| \mathbf{x} \right\| =\sqrt{\mathbf{x}^{T} \mathbf{x} },\quad \left\| \mathbf{x} \right\|^{2} =\mathbf{x}^{T} \mathbf{x} $$

두 벡터의 외적

다음과 같이 열벡터와 행벡터의 행렬곱을 외적outer product이라 한다. 외적의 결과는 행렬이다.

$$ \begin{align*} \mathbf{x}\mathbf{w}^{T} &= \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix} \begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix} = \begin{bmatrix} x_{1}w_{1} & x_{1}w_{2} & \cdots & x_{1}w_{n} \\ x_{2}w_{1} & x_{2}w_{2} & \cdots & x_{2}w_{n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n}w_{1} & x_{n}w_{2} & \cdots & x_{n}w_{n} \end{bmatrix} \\ &= \begin{bmatrix} x_{1}\begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix} \\ x_{2}\begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix} \\ \vdots \\ x_{n}\begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix} \end{bmatrix} = \begin{bmatrix} x_{1}\mathbf{w}^{T} \\ x_{2}\mathbf{w}^{T} \\ \vdots \\ x_{n}\mathbf{w}^{T} \end{bmatrix} \end{align*} $$

또한 외적의 대각합이 내적과 같다는 것을 알 수 있다.

$$ \mathbf{w}^{T}\mathbf{x}=\sum \limits _{i=1} ^{n} w_{i}x_{i}=\text{Tr}\left( \mathbf{x}\mathbf{w}^{T} \right)=\text{Tr}\left( \mathbf{w}\mathbf{x}^{T} \right) $$

따라서 다음의 식이 성립한다.

$$ \begin{align*} \left\| \mathbf{x} \right\| &=\sqrt{\sum \limits _{i=1} ^{n} x_{i}^{2}}=\sqrt{\mathbf{x}^{T}\mathbf{x}}=\sqrt{\text{Tr}\left( \mathbf{x}\mathbf{x}^{T} \right)} \\ \left\| \mathbf{x} \right\|^{2} &=\sum \limits _{i=1} ^{n} x_{i}^{2}=\mathbf{x}^{T}\mathbf{x}=\text{Tr}\left( \mathbf{x}\mathbf{x}^{T} \right) \end{align*} $$

행렬

주로 대문자 볼드체로 표기하며, $m\times n$ 행렬을 말한다. 행벡터를 상하로 쌓거나, 열벡터를 좌우로 나열한 꼴을 말한다. $n$차원의 입력 데이터 $\mathbf{x}$, 가중치 $\mathbf{w}$를 $m$개 묶으면 아래와 같이 나타낸다.

$$ \begin{equation*}\begin{aligned} \mathbf{X} &= \begin{bmatrix} \mathbf{x}_{1}^{T} \\ \mathbf{x}_{2}^{T} \\ \vdots \\ \mathbf{x}_{m}^{T} \end{bmatrix}= \begin{bmatrix} \mathbf{x}_{1} & \mathbf{x}_{2} & \cdots & \mathbf{x}_{m} \end{bmatrix}^{T} \\ &= \begin{bmatrix} \begin{bmatrix} x_{1}^{(1)} & x_{1}^{(2)} & \cdots & x_{1}^{(n)} \end{bmatrix} \\ \begin{bmatrix} x_{2}^{(1)} & x_{2}^{(2)} & \cdots & x_{2}^{(n)} \end{bmatrix} \\ \vdots \\ \begin{bmatrix} x_{m}^{(1)} & x_{m}^{(2)} & \cdots & x_{m}^{(n)} \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} x_{1}^{(1)} & x_{1}^{(2)} & \cdots & x_{1}^{(n)} \\ x_{2}^{(1)} & x_{2}^{(2)} & \cdots & x_{2}^{(n)} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m}^{(1)} & x_{m}^{(2)} & \cdots & x_{m}^{(n)} \end{bmatrix}\end{aligned} \quad \begin{aligned} \mathbf{W} &= \begin{bmatrix} \mathbf{w}_{1} & \mathbf{w}_{2} & \cdots & \mathbf{w}_{m} \end{bmatrix} \\ &= \begin{bmatrix} \begin{bmatrix} w_{1}^{(1)} \\ w_{1}^{(2)} \\ \vdots \\ w_{1}^{(n)} \end{bmatrix} & \begin{bmatrix} w_{2}^{(1)} \\ w_{2}^{(2)} \\ \vdots \\ w_{2}^{(n)} \end{bmatrix} & \cdots & \begin{bmatrix} w_{m}^{(1)} \\ w_{m}^{(2)} \\ \vdots \\ w_{m}^{(n)} \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} w_{1}^{(1)} & w_{2}^{(1)} & \cdots & w_{m}^{(1)} \\ w_{1}^{(2)} & w_{2}^{(2)} & \cdots & w_{m}^{(2)} \\ \vdots & \vdots & \ddots & \vdots \\ w_{1}^{(n)} & w_{2}^{(n)} & \cdots & w_{m}^{(n)} \end{bmatrix}\end{aligned} \end{equation*} $$

두 행렬을 곱할 때 정의에 따라 앞 행렬의 행과 뒤 행렬의 열을 곱한다. 따라서 앞쪽에 적는 행렬은 $\mathbf{X}$와 같이 행벡터를 쌓는 꼴로 표기하고, 뒤쪽에 적는 행렬은 $\mathbf{W}$와 같이 열벡터를 나열하는 꼴로 표기한다. 헷갈리지 않도록 주의하자.

행렬의 놈

행렬의 놈도 벡터와 마찬가지로 각 성분의 제곱의 합으로 정의한다.

$$ \left\| \mathbf{W} \right\| = \sqrt{\sum \limits_{i=1}^{m} \sum \limits_{j=1}^{n} \left( w_{i}^{(j)} \right)^{2}} $$

이를 $\left\| \mathbf{W} \right\|_{F} $와 같이 표기하여 프로베니우스 놈Frobenius norm 이라 부르기도 한다. 다음과 같이 자기 자신과의 곱의 트레이스로 나타낼 수 있다.

$$ \begin{align*} \text{Tr}(\mathbf{W}^{T}\mathbf{W}) &= \text{Tr}\left( \begin{bmatrix} \mathbf{w}_{1}^{T} \\ \mathbf{w}_{2}^{T} \\ \vdots \\ \mathbf{w}_{m}^{T} \end{bmatrix}\begin{bmatrix} \mathbf{w}_{1} & \mathbf{w}_{2} & \cdots & \mathbf{w}_{m} \end{bmatrix} \right) \\ &= \text{Tr}\left( \begin{bmatrix} \mathbf{w}_{1}^{T}\mathbf{w}_{1} & \mathbf{w}_{1}^{T}\mathbf{w}_{2} & \cdots & \mathbf{w}_{1}^{T}\mathbf{w}_{m} \\ \mathbf{w}_{2}^{T}\mathbf{w}_{1} & \mathbf{w}_{2}^{T}\mathbf{w}_{2} & \cdots & \mathbf{w}_{2}^{T}\mathbf{w}_{m} \\ \vdots & \vdots & \ddots & \vdots \\ \mathbf{w}_{m}^{T}\mathbf{w}_{1} & \mathbf{w}_{m}^{T}\mathbf{w}_{2} & \cdots & \mathbf{w}_{m}^{T}\mathbf{w}_{m} \end{bmatrix} \right) \\ &=\mathbf{w}_{1}^{T}\mathbf{w}_{1} + \mathbf{w}_{2}^{T}\mathbf{w}_{2} + \cdots + \mathbf{w}_{m}^{T}\mathbf{w}_{m} \\ &=\sum \limits_{i=1}^{m} \mathbf{w}_{i}^{T}\mathbf{w}_{i} = \sum \limits_{i=1}^{m} \left\| \mathbf{w}_{i} \right\|^{2} \\ &= \sum \limits_{i=1}^{m} \sum \limits_{j=1}^{n} \left( w_{i}^{(j)} \right)^{2} \\ &=\left\| \mathbf{W} \right\|_{F}^{2} \end{align*} $$

즉 $\mathbf{W}=\begin{bmatrix}\mathbf{w}_{1} &\cdots \mathbf{w}_{m} \end{bmatrix}$이라고 하면,

$$ \begin{equation} \left\| \mathbf{W} \right\| _{F}^{2} =\text{Tr}\left( \mathbf{W}^{T}\mathbf{W} \right)=\sum \limits_{i=1}^{m}\left\| \mathbf{w}_{i} \right\|^{2} \end{equation} $$

행렬-벡터 연산

행렬-벡터 곱

$m\times n$행렬 $\mathbf{W}$와 $n\times 1$벡터 $\mathbf{x}$의 곱은 다음과 같다.

$$ \begin{equation}\begin{aligned} \mathbf{W}\mathbf{x} &= \begin{bmatrix} \mathbf{w}_{1}^{T} \\ \mathbf{w}_{2}^{T} \\ \vdots \\ \mathbf{w}_{m}^{T} \end{bmatrix} \mathbf{x} = \begin{bmatrix} w_{1}^{(1)} & w_{1}^{(2)} & \cdots & w_{1}^{(n)} \\ w_{2}^{(1)} & w_{2}^{(2)} & \cdots & w_{2}^{(n)} \\ \vdots & \vdots & \ddots & \vdots \\ w_{m}^{(1)} & w_{m}^{(2)} & \cdots & w_{m}^{(n)} \end{bmatrix}\begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix} \\ &=\begin{bmatrix} w_{1}^{(1)}x_{1} + w_{1}^{(2)}x_{2} + \cdots + w_{1}^{(n)}x_{n} \\ w_{2}^{(1)}x_{1} + w_{2}^{(2)}x_{2} + \cdots + w_{2}^{(n)}x_{n} \\ \vdots \\ w_{m}^{(1)}x_{1} + w_{m}^{(2)}x_{2} + \cdots + w_{m}^{(n)}x_{n} \end{bmatrix} =\begin{bmatrix} \sum _{i=1} ^{n}w_{1}^{(i)}x_{i} \\ \sum _{i=1} ^{n}w_{2}^{(i)}x_{i} \\ \vdots \\ \sum _{i=1} ^{n}w_{m}^{(i)}x_{i} \end{bmatrix} \\ &= \begin{bmatrix} \mathbf{w}_{1}^{T}\mathbf{x} \\ \mathbf{w}_{2}^{T}\mathbf{x} \\ \vdots \\ \mathbf{w}_{m}^{T}\mathbf{x} \end{bmatrix}\end{aligned} \end{equation} $$

따라서 놈은 다음과 같다

$$ \begin{equation} \left\| \mathbf{W}\mathbf{x} \right\|^{2} = \sum \limits _{i=1} ^{m} \left( \mathbf{w}_{i}^{T}\mathbf{x} \right)^{2} \end{equation} $$

행렬-행렬 곱

$N \times M$행렬 $\mathbf{X}$와 $M \times K$행렬 $\mathbf{W}$의 곱은 다음과 같다.

$$ \begin{align*} \mathbf{X}\mathbf{W} &= \begin{bmatrix} \mathbf{x}_{1}^{T} \\ \mathbf{x}_{2}^{T} \\ \vdots \\ \mathbf{x}_{N}^{T} \end{bmatrix}\begin{bmatrix} \mathbf{w}_{1} & \mathbf{w}_{2} & \cdots & \mathbf{w}_{K} \end{bmatrix} \\ &= \begin{bmatrix} \begin{bmatrix} x_{1}^{(1)} & x_{1}^{(2)} & \cdots & x_{1}^{(M)} \end{bmatrix} \\ \begin{bmatrix} x_{2}^{(1)} & x_{2}^{(2)} & \cdots & x_{2}^{(M)} \end{bmatrix} \\ \vdots \\ \begin{bmatrix} x_{N}^{(1)} & x_{N}^{(2)} & \cdots & x_{N}^{(M)} \end{bmatrix} \end{bmatrix} \begin{bmatrix} \begin{bmatrix} w_{1}^{(1)} \\ w_{1}^{(2)} \\ \vdots \\ w_{1}^{(M)} \end{bmatrix} & \begin{bmatrix} w_{2}^{(1)} \\ w_{2}^{(2)} \\ \vdots \\ w_{2}^{(M)} \end{bmatrix} & \cdots & \begin{bmatrix} w_{K}^{(1)} \\ w_{K}^{(2)} \\ \vdots \\ w_{K}^{(M)} \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} \mathbf{x}_{1}^{T}\mathbf{w}_{1} & \mathbf{x}_{1}^{T}\mathbf{w}_{2} & \cdots & \mathbf{x}_{1}^{T}\mathbf{w}_{K} \\ \mathbf{x}_{2}^{T}\mathbf{w}_{1} & \mathbf{x}_{2}^{T}\mathbf{w}_{2} & \cdots & \mathbf{x}_{2}^{T}\mathbf{w}_{K} \\ \vdots & \vdots & \ddots & \vdots \\ \mathbf{x}_{N}^{T}\mathbf{w}_{1} & \mathbf{x}_{N}^{T}\mathbf{w}_{2} & \cdots & \mathbf{x}_{N}^{T}\mathbf{w}_{K} \end{bmatrix} \\ &= \begin{bmatrix} \begin{bmatrix} \mathbf{x}_{1}^{T}\mathbf{w}_{1} \\ \mathbf{x}_{2}^{T}\mathbf{w}_{1} \\ \vdots \\ \mathbf{x}_{N}^{T}\mathbf{w}_{1} \end{bmatrix} & \begin{bmatrix} \mathbf{x}_{1}^{T}\mathbf{w}_{2} \\ \mathbf{x}_{2}^{T}\mathbf{w}_{2} \\ \vdots \\ \mathbf{x}_{N}^{T}\mathbf{w}_{2} \end{bmatrix} & \cdots & \begin{bmatrix} \mathbf{x}_{1}^{T}\mathbf{w}_{K} \\ \mathbf{x}_{2}^{T}\mathbf{w}_{K} \\ \vdots \\ \mathbf{x}_{N}^{T}\mathbf{w}_{K} \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} \mathbf{X}\mathbf{w}_{1} & \mathbf{X}\mathbf{w}_{2} & \cdots & \mathbf{X}\mathbf{w}_{K} \end{bmatrix} \end{align*} $$

그러면$(1)$, $(3)$에 의해 다음의 식이 성립한다.

$$ \text{Tr}\left( \left( \mathbf{X}\mathbf{W} \right)^{T}\left( \mathbf{X}\mathbf{W} \right) \right) = \sum \limits_{k=1}^{K}\left\| \mathbf{X}\mathbf{w}_{k} \right\|^{2}=\sum \limits_{k=1}^{K}\sum \limits_{n=1}^{N}\left( \mathbf{x}_{n}^{T}\mathbf{w}_{k} \right)^{2} $$

벡터-행렬 이차 형식

$\mathbf{w}$ 를 $n \times 1$ 벡터, $\mathbf{R}$를 $n\times n$ 행렬, $\mathbf{R} = \begin{bmatrix} \mathbf{r}_{1}^{T} & \mathbf{r}_{2}^{T} & \cdots & \mathbf{r}_{n}^{T} \end{bmatrix}^{T} = \begin{bmatrix} \mathbf{r}_{1}^{T} \\ \mathbf{r}_{2}^{T} \\ \vdots \\ \mathbf{r}_{n}^{T} \end{bmatrix}$이라고 하자. 그러면 $(2)$의 식을 이용해서 다음의 결과를 얻는다.

$$ \begin{align*} \mathbf{w}^{T} \mathbf{R} \mathbf{w} &= \mathbf{w}^{T}\begin{bmatrix} \sum _{i=1} ^{n}r_{1}^{(i)}w_{i} \\ \sum _{i=1} ^{n}r_{2}^{(i)}w_{i} \\ \vdots \\ \sum _{i=1} ^{n}r_{n}^{(i)}w_{i} \end{bmatrix} \\ &= \begin{bmatrix} w_{1} & w_{2} & \cdots & w_{n} \end{bmatrix}\begin{bmatrix} \sum _{i=1} ^{n}r_{1}^{(i)}w_{i} \\ \sum _{i=1} ^{n}r_{2}^{(i)} w_{i} \\ \vdots \\ \sum _{i=1}^{n} r_{n}^{(i)} w_{i} \end{bmatrix} \\ &= w_{1}\sum _{i=1}^{n} r_{1}^{(i)} w_{i} + w_{2}\sum _{i=1} ^{n}r_{2}^{(i)}w_{i}+\cdots + w_{n}\sum _{i=1} ^{n}r_{n}^{(i)}w_{i} \\ &= \sum \limits _{j=1} ^{n}\sum \limits _{i=1} ^{n}w_{j}r_{j}^{(i)}w_{i} \end{align*} $$


  1. C. M. Bishop. (2006). Pattern Recognition and Machine Learning ↩︎

댓글