텐서(Tensor)는 기본적으로 가장 임베딩전 특정 인덱스(Index)로 만들어진 다차원의 배열(array)로 이루어진 데이터 형태를 말한다.
여기에서 인덱스란 데이터를 컴퓨터가 이해할 수 있도록 변환된 값과 매칭되는 키라고 할 수 있다.
텐서는 배열을 표현하는 방식을 수학적으로 접근하여 얘기하는 것이고, 이를 프로그램 입장에서는 다차원(여러 차원)을 가진 배열이라고 할 수 있다.
그리고 텐서는 배열의 형태에 따라 다음과 같이 불리울 수 있다.
Rank Type(타입)
0 scalar(스칼라): [1]
1 vector(벡터): [1,1]
2 matrix(메트릭스): [[1,1],[1,1]]
3 3 tensor: [[[1,1],[1,1]],[[1,1],[1,1]]]
n N tensor
위에 우리가 알고 있는 스칼라, 벡터들이 이 배열을 타입이라고 할 수 있다.
그럼 조금 더 이해하기 위해서 만약에 아래와 같은 데이터가 있다고 생각하고 테스트는 0번 인덱스 첫번째 두번째 세번째는 각 1번, 2번 3번 인덱스를 사용한다고 가정해보자.
인덱스 단어
0 테스트
1 첫번째
2 두번째
3 세번째
그리고 여기에 원 핫 인코딩 방식(One hot encoding vector, 1과 0으로 표현) 까지 더해져서 최종적으로 다음과 같은 모습이 된다.
인덱스 단어 원 핫 인코딩 방식(One hot encoding vector)
0 테스트 [1,0,0,0,0]
1 첫번째 [0,1,0,0,0]
2 두번째 [0,0,1,0,0]
3 세번째 [0,0,0,1,0]
4 네번째 [0,0,0,0,1]
이를 배열로 표현하면 다음과 같다.
데이터 벡터화
테스트 첫번째 [[1,0,0,0,0],[0,1,0,0,0]]
테스트 두번째 [[1,0,0,0,0],[0,0,1,0,0]]
테스트 세번째 [[1,0,0,0,0],[0,0,0,1,0]]
테스트 네번째 [[1,0,0,0,0],[0,0,0,0,1]]
그리고 위 데이터를 보통 딥러닝에서는 한번에 데이터를 만들어 넣기 때문에 다시한번 아래와 같이 한번 더 배열을 합치게 된다.
[[[1,0,0,0,0],[0,1,0,0,0]],[[1,0,0,0,0],[0,0,1,0,0]],[[1,0,0,0,0],[0,0,0,1,0]],[[1,0,0,0,0],[0,0,0,0,1]]]
그래서 여기를 보면, []배열로 감싼 부분으로 tensor를 얘기할 수 있는데,
이를 표현할 때에는 가장 큰 []배열부터 순차적으로 표현한다고 이해하면 된다.
예제를 예를 들면, []배열이 사용된 데이터 값이 총 4개 사용되었고, 각 []배열의 값은 2개로 이루어져 있고, 총 데이터에 표현된 인덱스는 5개 이기 때문에 다음과 같이 정리가 (4,2,5) 로 요약할 수 있고, 표현이 3개의 가능하기 때문에 3 tensor 라고 한다.
그림으로 정리해보면 다음과 같다.
여기에 colums 에 구분값이 추가된다면 어떻게 될까? 5 tensor 가 되며, 가장 마지막에 구분되는 값의 인덱스 크기를 기입하면 된다.
즉 영어, 한글으로 데이터를 추가 구분을 한다면, 0,1 이 인덱스일 것이며, (4,2,2,5,2) 로 표현이 가능하다. 이유는 배열이 []추가되고 추가 된 배열의 크기, 이후 앞과 같이 각 컬럼 값인 (5, 2)을 표현해주면 된다.
'Bigdata' 카테고리의 다른 글
LLM - fine-tuning GPT 계열 공식 이해 (0) | 2024.08.11 |
---|---|
PEFT(Parameter Efficient Fine-Tuning) - LoRA, QLoRA (0) | 2024.08.11 |
RNN 단점 - 기울기 소실(vanishing gradient)과 장기 의존성 문제(long-term dependency problem) (0) | 2024.08.11 |
머신러닝 - 결정계수와 과대/과소적합 (0) | 2024.08.11 |
FFNN - 순방향 신경망(feedforward neural network) (0) | 2024.08.11 |