Centric Software

딥러닝에서 "tensor" 란, 본문

AI/Deep Learning

딥러닝에서 "tensor" 란,

jh-rrr 2022. 2. 23. 00:57

핵심 요약

"한마디로, Tensor는 수치화된 데이터를 저장하는 방식이다."

"한마디로, Tensor는 Rank, Shape, Data Type 의 요소로 구분된다."

"Tensor은 pytorch 라이브러리에서 정의한 ML계산용 클래스라 여겨도 무방할 듯 하다." -- 추후 깨달음 얻을 시 수정하겠음


pytorch 등 라이브러리를 사용하다보면 "tensor"라는 자료구조가 자주 등장된다.

배열인가? 싶으면서도 묘하게 다르고 아닌것같다.

 

    Q1. 그렇다면, AI를 공부하는 사람으로서 tensor를 어떻게 정의할 수 있어야할까?

    Q2. 배열과 비슷해보이는데 차이점은 무엇일까?

 

의 의문점이 우선 든다.

 

 

 

우선 pytorch 홈페이지의 설명을 보자.

https://tutorials.pytorch.kr/beginner/basics/tensorqs_tutorial.html

에서 공부한 내용 :

tensor는 GPU에서 사용할 수 있는 array, matrix와 유사한 "자료구조"이다.
NumPy를 알고있다면, numpy.ndarray 와 유사하다.
그리고 자동미분에 최적화 되어있다 어쩌구...

 

이것만 보곤 감이 오지 않는다...

 

 

 


Tensor의 정의

https://medium.com/@bharat.kabra/machine-learning-pytorch-590b09409236

https://medium.datadriveninvestor.com/what-is-the-tensor-in-deep-learning-77c2af7224a1

에서 공부한 내용 : 

Tensor란, 머신러닝에서 사용하는 자료구조이다.
Tensor란, 수치 데이터를 다루기위한 컨테이너이다.
Tensor란, 우리가 시스템에서 사용할 information을 저장하는 방식이다.

정리하면, 숫자계산만 가능한 컴퓨터이기에 내가 가진 데이터를 어떤 숫자로 저장을 해야하는데, 이 '데이터를 저장하는 방식'이 tensor이란 것 이다.(= tensor라는 Class로 내가 가진 다양한 data를 객체로 다룬다는 것) 그리고 머신러닝에서 데이터 계산에 이 Tensor을 이용한다.

"한마디로, Tensor는 수치화된 데이터를 저장하는 방식이다."

(그리고, 다차원 배열과 동일한 정의를 가지지만 torch에서 정의한 tensor라는 class는 연산에 GPU를 사용할 수 있다는 태생적(?)차이가 있다.)


tensor에 대한 정의는 완료했다. 그런데, 앞의 링크에서 tensor의 주요 특징을 더 설명한다. 봐야겠다. 여기서 얻을 인사이트는 무엇일까?

 

https://medium.datadriveninvestor.com/what-is-the-tensor-in-deep-learning-77c2af7224a1

에서 공부한 내용 : 

 

1. tensor의 3가지 특성

< 선형대수의 Rank 개념이해해야 이해 가능! >
tensor 는 3가지 primary attributes 에 의해 정의된다. 
1. Rank
2. Shape
3. Data type

예를 들어가며 3가지 특징을 접근해보자.

>> tensor([[1, 2, 3], [3, 4, 5]]) 가 있다.
이 텐서의 Rank는?  --> 2이다.
이 텐서의 Shape는? --> (2x3)
이 텐서의 Data type은? --> int32(일거다)
1 2 3
3 4 5

>> tensor([[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]) 가 있다.
이 텐서의 Rank는?  --> 2이다.
이 텐서의 Shape는? --> (2x5)
이 텐서의 Data type은? --> int 32
1 2 3 4 5
3 4 5 6 7

>> tensor([
[[0.123, 0.323], [0.846, 0.117], [0.146, 0.063]],
[[0.123, 0.323], [0.846, 0.117], [0.146, 0.063]]
]) 가 있다.
이 텐서의 Rank는?  --> 3이다.
이 텐서의 Shape는? --> (2x3x2)
이 텐서의 Data type은? --> float32



Further Thinking
Shape를 줄일수록 계산량이 줄겠군.
Rank를 줄일수록 데이터의 정확도(해상도)는 떨어지겠지만, 계산량또한 줄겠구나.
데이터의 차원을 줄이면(Dimension Reduction) tensor의 Shape와 Rank또한 변하겠군.

2x3x2 tensor 모양

 

"한마디로, Tensor는 Rank, Shape, Data Type 의 요소로 구분된다."

 

 

2. Common tensor 의 표현

 

Vectors : 1D -> (features)

Sequences : 2D -> (timesteps, features)

Images : 3D -> (height, width, channels[RGB])

Videos: 4D -> (frames, height, width, channels[RGB])

이다.

 

하지만, ML에선 batch로 쪼개 데이터를 다루기때문에,

Vectors : 2D -> (batch_size, features)

Sequences : 3D -> (batch_size, timesteps, features)

Images : 4D -> (batch_size, height, width, channels[RGB])

Videos: 5D -> (batch_size, frames, height, width, channels[RGB])

이다.

 

"핵심은, 우리가 주로 ML에서 다루는 데이터의 tensor들은 위와같은 Rank를 가진다."

 


사전질문 답변

 

Q1. 그렇다면, AI를 공부하는 사람으로서 tensor를 어떻게 정의할 수 있어야할까?

A1. tensor란, 머신러닝에서 사용되는 '자료구조'로, container of numerical data 이다.

 

Q2. 배열과 비슷해보이는데 차이점은 무엇일까? 왜 굳이 쓸까?

A2. tensor는 multi-dimensional array와 같으며, 사용하는 이유는 torch 라이브러리에서 정의한 이 자료형이 GPU에 연동해서 편리한 연산을 가능하게하기 때문에 사용한다. 또, torch 라이브러리의 autograd 함수들(자동미분)과 연동성이 있기에 다양한 ML의 수학적 계산을 편리하게 할 수 있는 것 같다.

 


핵심 요약

"한마디로, Tensor는 수치화된 데이터를 저장하는 방식이다."

"한마디로, Tensor는 Rank, Shape, Data Type 의 요소로 구분된다."

"Tensor은 pytorch 라이브러리에서 정의한 ML계산용 클래스라 여겨도 무방할 듯 하다." -- 추후 깨달음 얻을 시 수정하겠음

'AI > Deep Learning' 카테고리의 다른 글

PyTroch DataLoader의 병렬 프로세싱!  (0) 2023.10.30
LayerNorm 과 BatchNorm 의 차이  (5) 2023.05.17