questionet

선형변환과 linear layer 의 관계 본문

Deep questions/수학적 바탕

선형변환과 linear layer 의 관계

orthanc 2024. 2. 20. 23:00

PyTorch (또는 다른 딥러닝 프레임워크)에서, 
nn.linear(in_features, out_features) # 입력특성, 출력특성 
코드를 사용해 
nn.Linear(20, 30)를 실행하면
파이토치는 내부적으로 30×20 shape의 가중치 행렬 A를 초기화합니다.

한편 입력 데이터 X는 일반적으로 
(batch_size x 20)의 형태를 가집니다. 
PyTorch에서 이 두 객체의 행렬곱을 수행할 때
실제 수행되는 연산은 X @ A.T 이고  
이 연산의 결과는 (batch_size x 30) 형태의 출력입니다.

왜 x @ A.T 와 같은 꼴로 행렬곱을 할까요?
(애초에 왜 가중치 행렬을 전치된 형태로 초기화하고 실제로 연산할 땐 다시 전치시켜 계산하는 걸까요?)
 
이 방식은 딥러닝에서 배치 처리를 용이하게 하기 위함입니다.
배치는 입력 데이터 행렬 X로 표현됩니다.
(batch_size x in_features)
여기서 X의 각 행은 입력벡터를 의미합니다.
X @ A.T 꼴로 행렬곱 연산을 하면
결과적으로 (batch_size x out_features) 형태의 행렬을 얻게 되니 
배치 연산하기가 좋아집니다.

하지만 더 중요한 것은
X @ A.T가 선형대수학적으로도 의미를 갖는다는 점입니다.

X의 각 행벡터 (다시 말해 각 입력벡터 x) 는
A.T의 열벡터(다시 말해 전치되기 전 A의 각 행)들을 선형결합하는 스칼라 계수로 작용한다는 걸 의미합니다. 
이는 A.T의 각 열벡터(A의 각 행벡터)가 서로 선형독립이면, 이들이 출력공간에서 기저벡터 역할을 하고
각 입력벡터 x가 이 기저벡터들을 어떻게 결합하는지를 결정한다는 관점, 
다시말해 X의 행벡터로 A.T의 열공간의 기저벡터들(A에서 서로 선형독립인 열벡터들)을 선형결합한다는 관점과 일치합니다.


선형대수학적으로 선형변환은 
A @ X 와 같은 표현으로 나타내는 게 표준적인 방식입니다.
여기서 행렬 A의 각 열벡터들이 선형독립이라면 
A의 각 벡터들은 A의 열공간의 기저벡터가 되고
입력행렬인 X의 각 열벡터들이 scalar 역할을 하여
A @ X는 
X의 각 열벡터들을 A를 통해 새로운 공간으로 맵핑시키는 연산을 의미하며
이러한 의미에서 A는(일반화 해서 말하면 행렬은) 사상이라고 부릅니다.

A @ X와 같은 선형대수적인 표현방식에 따라
파이토치의 linear layer가 수행하는 X @ A.T 연산을 선형대수적으로 이해하는 게 헷갈릴 수 있습니다. 

X @ A.T를 어떻게 A @ X 설명으로 표현해볼 수 있을까요?

설명에 도움이 되도록
X @ A.T는
A @ X.T 의 연산결과 나온 행렬을 전치시킨 결과와 같은 셈이 라는 걸 먼저 적어두겠습니다. 
(A @ X.T).T ==  x @ A.T 

이제 (A @ X.T).T 에서 A @ X.T만 따로 떼어놓고 보면 
A @ X 꼴과 비슷해졌으니
A @ X.T 연산의 의미와 이를 전치시킨 (A @ X.T).T 의 의미를 파헤쳐보면 될 것 같습니다.


X @ A.T에서 X는 (batch_size x in_features) shape을 가지는 행렬이었으므로
이는 바꿔 말하면, X.T를 했을 때, 각 열벡터가 입력벡터가 된다는 걸 의미합니다.
참고로 X.T의 shape은 (in_features x batch_size) 
A의 shape은 (out_features, in_features) 가 됩니다.

따라서
(A @ X.T).T 에서
A @ X.T 이 연산은

만약 A의 각 행벡터들이 선형독립이라면, A의 행벡터들은 행공간의 기저벡터들이 되고
이 A의 행벡터들을 
X.T의 열벡터, 다시 말해 각 입력벡터들로 선형결합하는 연산이 되는 것과 같습니다.
이는 X.T의 각 열벡터(입력벡터)들을 A의 행공간으로 맵핑하는 것과 같습니다.

이 결과를 전치하는 것, 즉 (A @ X.T).T 연산은 
X.T의 각 열벡터를 A의 행공간으로 맵핑된 결과(A @ X.T)를,
X의 각 행벡터가 A.T의 열공간으로 맵핑되는 것으로 표현하는것과 같습니다. 
즉  (A @ X.T).T 연산, 
다시 말해 행렬X와 행렬 A.T 간의 행렬곱 연산 (X @ A.T)은 
X의 각 행벡터와 A.T의 각 열벡터 간의 선형결합으로 볼 수 있게 되는 것입니다. 


'Deep questions > 수학적 바탕' 카테고리의 다른 글

정규화  (0) 2021.08.24
단어 벡터(word vector), 코사인 유사도(cosine similarity)  (1) 2021.02.14
확률로 보기  (0) 2021.02.13
Comments