Pytorch의 weight는 왜 T(transpose)할까?

Linear regression

https://pytorch.org/docs/stable/generated/torch.nn.Linear.html 참고

 

파이토치 공식 페이지를 참고하면 Weight를 Transpose하여 계산하게 되어있다. 왜 그렇까?

결론부터 말하자면 weight 는 노드의 개수 x feature 수 의 형태로 생성이되기 때문이다.

(# nn.Linear 는 개x채x행x열에서 "채" 행렬로(1D data)로 들어오길 기대하는 녀석이다.

# 이미지 데이터가 아니면, 개 채로 읽어야한다. 키와 몸무게를 가진 데티어 5개 -> 채널이 2개다, feature가 2개다. 개가 5이다. 5개의

데이터)

 

예를 들어보면서 설명해보겠다. (x라는 데이터가 fc1 layer를 1번 통과한다고 가정)

x = 1개의 feature를 가진 데이터가 1개 [[x1]]

fc1 = input 1개, output 3개 Linear 모델 -> weight: (3, 1)[[w1], [w2], [w3]] bias: (1, 3) [[b1, b2, b3]]

 

이런 경우 수식으로 결과를 표현하자면,

[[x1 * w1 + b1, x1 * w2 + b3, x1 * w3 + b3]]로 (1,3)의 shape의 결과로 나올 것이다. 

벡터로 표기하자면, 아래와 같을 것이다.

pytorch에 weight 형식은 노드의 개수 x feature의 수 (3,1)로 되어있으니, (1,3)으로 transpose해줘야한다.

코드로 보자면 이렇다.

weight가 (3, 1)로 되어있어 (1,3)으로 transpose한 후 결과를 표기하면 fc1(x1)을 한 값과 동일한 결과를 얻을 수 있다.