텐서
한 줄 정의
숫자를 담는 그릇 전체를 아우르는 말. 차원이 몇이든
1. 비유로 이해하기
숫자를 담는 그릇을 아파트로 생각해 보자. 방 하나, 한 층, 한 동, 여러 동. 텐서는 그중 하나가 아니라 단지 전체를 가리키는 말이다.
이게 텐서의 핵심이다. 텐서는 특정한 모양이 아니라, 모양 전체를 아우르는 이름이다.
| 이름 | 차원 | 텐서로 부르면 |
|---|---|---|
| 스칼라 | 0차원 | 0차원 텐서 |
| 벡터 | 1차원 | 1차원 텐서 |
| 행렬 | 2차원 | 2차원 텐서 |
| (그 이상) | 3차원 이상 | 3차원 텐서, 4차원 텐서… |
그래서 딥러닝 코드에서는 전부 그냥 “텐서”라고 부른다. TensorFlow라는 이름도 여기서 왔다.
2. 왜 필요한가
shape가 곧 스키마다
스키마가 “이 정보는 이런 모양이어야 한다”는 약속이라면, 텐서에서 그 역할을 하는 게 shape다.
tensor.shape # (32, 128, 768)
# ↑ ↑ ↑
# 32문장 128토큰 각 768숫자
이 한 줄이 데이터의 구조를 전부 말해 준다. 그리고 딥러닝 에러의 절대다수가 모양이 안 맞아서 난다. 코드가 틀린 게 아니라 그릇이 안 맞는 것이다.
RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x768 and 512x10)
그래서 딥러닝을 하다 막히면 가장 먼저 하는 일이 print(x.shape)다.
배치 — 텐서가 필요한 가장 흔한 이유
사진 한 장은 행렬(28, 28)이면 충분하다. 그런데 한 장씩 처리하면 너무 느리다. 그래서 32장을 겹쳐 쌓아 한꺼번에 넣는다.
사진 1장 (28, 28) ← 행렬
사진 32장 (32, 28, 28) ← 텐서
이렇게 여러 개를 묶는 걸 배치(batch)라고 한다. 3차원 이상의 텐서를 만나는 가장 흔한 이유가 배치다. 맨 앞 숫자가 “몇 개를 한꺼번에”인 경우가 많다.
그릇이 바뀌는 전 과정
“안녕 세상”이라는 입력이 글자가 되어 나오기까지, 같은 데이터가 여러 그릇을 갈아탄다.
벡터 → 행렬 → 텐서 → 벡터 → 스칼라. 그릇이 커졌다가 다시 작아진다. 마지막에 나온 스칼라 하나가 토큰 하나가 되어 화면에 글자로 찍힌다.
이게 LLM이 글을 쓰는 전 과정이다. 그리고 그 과정 내내 데이터는 계속 텐서였다.
3. 어디서 만났나
이 용어는 수업에서 정식으로 다루기 전에 따로 정리한 것이다.
다만 앞선 회차에서 배운 것들이 전부 이 그릇에 담겨 있었다. 1회차에서 LLM이 “패턴을 익혀 다음에 올 내용을 예측한다”고 배웠는데, 그 예측이 위 그림의 ④~⑥ 단계다.
7회차에서 배운 토큰과 컨텍스트도 마찬가지다. “컨텍스트가 길면 비싸다”는 말은, 위 그림에서 가운데 숫자(토큰 수)가 커진다는 뜻이다.
7회차 — 에이전트, MCP, 스킬 — 범용 AI를 내 전용 조수로
4. 헷갈리는 개념
| 이 용어 | 비슷하지만 다른 것 | 차이 |
|---|---|---|
| 텐서 | 행렬 | 행렬은 딱 2차원. 텐서는 차원 수에 제한이 없고, 행렬도 텐서에 포함된다 |
| 텐서 | shape | 텐서는 그릇 자체, shape는 그 그릇의 모양을 적어 놓은 것 |
| 텐서 | 배치 | 배치는 “여러 개를 한꺼번에 묶는 일”. 그 결과가 텐서로 나올 뿐이다 |
| 딥러닝의 텐서 | 물리학의 텐서 | 물리·수학의 텐서는 좌표계가 바뀌어도 일정한 규칙으로 변환되는 양이라는, 훨씬 까다로운 개념이다. 딥러닝은 “다차원 숫자 덩어리”라는 뜻으로만 쓴다 |
5. 많이들 오해하는 지점
ㄱ. “텐서는 3차원 이상짜리를 부르는 말”
가장 흔한 오해다. 스칼라·벡터·행렬 다음에 텐서가 나오니 네 번째 단계처럼 읽히기 때문이다.
그렇지 않다. 0차원도 텐서다. 텐서는 넷 중 하나가 아니라 넷을 전부 포함하는 말이다. 숫자 하나도 torch.tensor(5)로 만들면 어엿한 텐서다.
ㄴ. “텐서는 어려운 특수 수학이라 따로 공부해야 한다”
이름 때문에 생기는 겁이다. 물리학에서 말하는 텐서는 정말 어려운 개념이 맞다. 하지만 딥러닝에서 텐서는 그냥 다차원 숫자 덩어리다. 이름만 빌려 왔다고 봐도 크게 틀리지 않다.
실제로 필요한 건 딱 하나다. “이 데이터의 모양이 뭐지?”를 늘 확인하는 습관.
ㄷ. “TensorFlow를 써야 텐서가 나오는 것”
이름이 겹쳐서 생기는 오해다. PyTorch도, JAX도 전부 텐서라고 부른다. 라이브러리 이름이 아니라 개념 이름이다. TensorFlow가 그 개념에서 이름을 따 온 것이지 그 반대가 아니다.