Vector, Matrix and Tensor

이상혁·2024년 3월 7일

Pytorch

목록 보기
1/2
post-thumbnail

본 포스팅은 유튜브에 게시된 모두를 위한 딥러닝 강좌를 바탕으로 작성하였습니다. 학습용으로 작성한 점 참고 바랍니다.


Tensor란?

일반적으로 우리는 점, 선, 면 등으로 이루어진 것들을 토대로 1차원, 2차원, 3차원으로 부르게됩니다.

앞으로 배울 딥러닝에서는 이러한 구조에 따라 연산의 크기와 방법이 달라지기에 이를 구하는 것이 매우 중요합니다.

표로 한번 살펴보죠

RankTypeCode
0스칼라(Scalar)[1]
1벡터(Vector)[1,1]
2Matrix[[1,1],[1,1]]
33D - Tensor[[[1,1],[1,1]],[[1,1],[1,1]],[[1,1],[1,1]]]

이아래는 쭉쭉 4D 텐서, 5D 텐서로 이어진다고 생각하면 될 것 같습니다. 그림을 보게 된다면 더욱 직관적으로 이해할 수 있습니다. 점을 모아둔게 선, 선을 모은게 면, 면을 모아서 면체를 만드는거와 같이 아래 차원을 모아서 다음 차원을 구별한다고 생각하면 될 것 같습니다.

  • Tensor 는 배열의 집합 즉 2차원이 모인것 입니다.
  • 앞서 Rank는 차원이랑 동일합니다.

PyTorch Tensor Shape Convention

이제 좀더 자세하게 살펴볼까요?

2D Tensor

여기 2D Tensor가 존재합니다.
사진에 나와있는 것처럼 |t| = batch size X dimension으로 나타낸 것이죠.
세로(행)가 batch size, 가로(열)가 dimension 입니다.

보통의 컴퓨터가 처리하는 기본 사이즈는 64 X 256 입니다.
256개의 데이터가 쭉 [1,2,3,4 ...]으로 존재한다고 하였을때 이러한 데이터가 몇개의 행으로든 존재할 수 있습니다. 이때 우리의 컴퓨터는 64개씩 묶어서 처리를 합니다.
따라서 2D Tensor의 크기가 (batch size × dim) = 64 × 256이 되는것이죠.

3D Tensor(Typical Computer Vision)

3D Tensor도 이와 비슷한데요. 두가지 버전이 나뉩니다. 흔히 영상처리인 컴퓨터 비전에는 그림과 같은 텐서를 사용하게 됩니다. 영상 즉 이미지는 가로와 세로의 크기를 가지고 있습니다. 이러한 것들이 몇개 존재하는지가 batch size가 되는 것입니다.

|t| = (batch size, width, height) 로 구성됩니다.

3D Tensor(Typical Natural Language Processing)

자연어 처리는 컴퓨터 비전과는 아주 약간 달라집니다.

|t| = (batch size, length, dim) 로 구성됩니다.

보통 문장들은 쭉 나열되어 있습니다. 문장의 길이, 개수 단어 벡터의 차원으로 구성되는 것이죠.

컴퓨터 비전의 이미지는 직관적으로 사이즈가 정해져 있어 이해하기 쉬울 수 있습니다. 그러나 자연어 처리와 관련해서는 약간 헷갈릴 수도 있기에 예제와 같이 설명해보겠습니다.

[[A는 정통과 학생이다], [B는 컴공과 학생이다], [C는 정통과 교수이다]]

와 같은 문자열 문장 데이터가 있다고 생각해봅시다. 각각 단어를 나누어 임베딩을 하게되면

'A는': np.array([0.1, 0.2, 0.3]),
'정통과': np.array([0.4, 0.5, 0.6]),
'학생이다': np.array([0.7, 0.8, 0.9]),
'B는': np.array([0.2, 0.3, 0.4]),
'컴공과': np.array([0.5, 0.6, 0.7]),
'C는': np.array([0.3, 0.4, 0.5]),
'교수이다': np.array([0.6, 0.7, 0.8])

이러한 방식으로 단어별로 3차원 벡터를 변환할 수 있습니다.
총 문장이 3개가 되므로 3 × 3 × 3을 가진 벡터 데이터로 변형이 됩니다.

배치 사이즈를 2로 가져 한 결과를 출력하게 되면

Batch 1:
[[[0.1 0.2 0.3][0.4 0.5 0.6]
[0.7 0.8 0.9]]
[[0.2 0.3 0.4][0.5 0.6 0.7]
[0.7 0.8 0.9]]]
Batch 2:
[[[0.3 0.4 0.5][0.4 0.5 0.6]
[0.6 0.7 0.8]]]

가 나오게 됩니다.

오늘 포스팅은 여기까지 입니다. 다음 포스팅은 이와 관련지어 Pytorch에서 Tensor들을 numpy를 사용해서 다뤄보고 유용한 함수들에 대해서 코드와 함께 올릴 예정입니다.

감사합니다!

0개의 댓글