본문으로 바로가기
COMMUNITY모든 이야기

텐서란 무엇일까? 벡터·행렬부터 사진 한 장으로 이해하는 4차원 텐서

빗방울 2026.11.01 17:39 8분 읽기 조회 79 · 추천 2

AI 설명을 읽다 보면 꼭 나오는 단어가 있다. 텐서. 벡터와 행렬도 겨우 익숙해졌는데, 갑자기 더 무서운 이름이 등장한다. ‘4차원 텐서’라는 말까지 나오면 일단 창을 닫고 싶어진다.

그런데 AI 프로그래밍에서 텐서를 처음 만날 때는 이렇게 출발해도 된다. 텐서는 여러 기준으로 정리한 숫자 배열이다. 숫자 하나를 찾으려면 어떤 번호들을 알아야 하는지 생각해보면 훨씬 쉽다. 다만 수학·물리학에서는 여기에 중요한 조건이 더 붙는다. 그 이야기는 뒤에서 하자.

숫자 하나, 숫자 한 줄, 숫자 한 판

오늘 기온이 20도라고 하자. 숫자 하나면 충분하다. 이런 값을 스칼라라고 부른다. 일주일 기온을 모아 [20, 21, 19, 18, 20, 22, 23]으로 적으면 숫자가 한 줄로 늘어선다. 배열의 관점에서는 1차원이며, 이런 형식은 벡터로 다룰 수 있다.

도시가 세 곳이면 어떨까? 행은 도시, 열은 요일로 정해서 3행 7열짜리 표를 만들면 된다. 이것은 행렬 형태다. 이제 숫자 하나를 고르려면 ‘몇 번째 도시’와 ‘몇 번째 요일’이라는 두 번호가 필요하다.

image-1.png

숫자 하나는 0개 축, 한 줄은 1개 축, 표는 2개 축, 표를 여러 장 쌓으면 3개 축으로 값을 구분한다. 자체 제작.

여기에 연도까지 추가하면 ‘연도·도시·요일’이라는 세 기준으로 정리할 수 있다. 표를 연도별로 쌓아놓는다고 생각하면 된다. AI에서 말하는 텐서는 이렇게 스칼라·벡터·행렬과 그보다 축이 많은 배열을 함께 다루는 이름이다. 행렬보다 큰 것만 텐서인 것은 아니다.

핵심은 ‘축이 몇 개냐’와 ‘각 축의 크기가 얼마냐’

3개 도시의 7일 기온표는 shape = (3, 7)이라고 쓸 수 있다. shape는 배열의 모양이다. 축은 두 개이고, 각 축의 크기가 3과 7이라는 뜻이다. 이 표에는 숫자가 21개 들어간다.

예시shape축 개수값 개수
기온 하나()01
7일 기온(7,)17
3개 도시 × 7일(3, 7)221
2개 연도 × 3개 도시 × 7일(2, 3, 7)342

여기서 ‘차원’이라는 단어가 헷갈림을 만든다. 숫자 세 개를 가진 벡터는 수학에서 3차원 벡터라고 부를 수 있지만, 배열로는 축이 하나인 1차원 배열이다. 공간의 차원, 벡터 성분 수, 배열의 축 개수는 구분해야 한다.

프레임워크에서는 축 개수를 rank라고도 부른다. 그런데 선형대수의 ‘행렬의 계수(rank)’는 독립적인 행·열의 수를 뜻한다. 같은 단어지만 서로 다른 의미다. 이 글에서는 혼동을 줄이기 위해 ‘축 개수’라고 하겠다.

사진 한 장에도 이미 텐서가 숨어 있다

image-2.jpg

컬러 사진 예시. 이 사진 자체도 디코딩하면 픽셀의 색상 값을 가진 배열로 표현할 수 있다. 사진: Darakshanehaluddin, Wikimedia Commons, 원본, CC0. 아래 설명의 224 × 224는 별도의 가상 입력 크기다.

컴퓨터는 사진을 우리가 보는 풍경 그대로 저장해 계산하지 않는다. 일반적인 RGB 이미지를 다룰 때는 각 픽셀의 빨강·초록·파랑 값을 숫자로 표현할 수 있다. 빨강이 강한 픽셀이라면 R 값이 크고, 파랑이 강하면 B 값이 큰 식이다.

세로 224픽셀, 가로 224픽셀인 RGB 사진을 ‘세로·가로·색상’ 순으로 배열에 담으면 shape는 (224, 224, 3)이다. 픽셀마다 숫자가 세 개 있으므로 총 150,528개의 값이다. 8비트 RGB라면 각 채널을 보통 0~255로 나타내지만, AI에 넣기 전에 실수로 바꿔 정규화하기도 한다.

image-3.png

RGB의 세 채널을 따로 펼친 개념도. 4 × 4픽셀이라면 채널마다 16개, 총 48개 값이다. 실제 사진에서 추출한 데이터가 아닌 설명용 그림. 자체 제작.

색상 축은 사진 뒤쪽으로 튀어나온 물리적 깊이가 아니다. ‘R·G·B 중 무엇이냐’를 구분하는 칸이다. 그래서 사진은 평면이어도, 그 데이터를 담는 배열에는 축이 세 개 있을 수 있다.

4차원 텐서는 초능력이 필요하지 않다

사진 여덟 장을 한꺼번에 처리한다고 해보자. 기존의 세 기준 앞에 ‘몇 번째 사진인가’만 붙이면 된다.

(8, 224, 224, 3) = 사진 8장 × 세로 224 × 가로 224 × 색상 3개.

image-4.png

사진 번호·행·열·채널이라는 네 가지 인덱스로 숫자 하나를 찾는다. 그림의 인덱스는 0부터 시작한다. 자체 제작.

예를 들어 image[5, 100, 80, 2]는 여섯 번째 사진의 지정한 위치에서 파랑 채널 값 하나를 고른다. 배열의 번호를 0부터 세기 때문이다. 네 개의 번호가 필요한 것이지, 사람이 4차원 공간을 상상해야 하는 것은 아니다.

사진 여러 장을 묶은 것을 배치(batch)라고 부른다. 다만 축 순서는 약속에 따라 달라진다. 위는 NHWC 순서이며, PyTorch 이미지 모델에서는 흔히 NCHW, 즉 (8, 3, 224, 224)를 쓴다. 크기만 읽지 말고 각 자리가 무슨 뜻인지 확인해야 한다.

언어와 영상도 같은 방식으로 정리한다

문장을 모델에 넣어 토큰마다 숫자 벡터로 표현했다면 ‘문장 번호·토큰 위치·특징 번호’로 정리할 수 있다. 예를 들어 같은 길이로 맞춘 16개 문장, 문장마다 100개 토큰, 토큰마다 256개 특징이면 (16, 100, 256)이다.

영상에는 프레임 번호가 더해진다. ‘영상 번호·프레임·세로·가로·색상’으로 배열을 만들면 축이 다섯 개다. 축의 이름이 늘어났을 뿐, 숫자 하나를 찾는 주소가 길어진다는 생각은 같다. 물론 실제 데이터 구조와 축 순서는 모델마다 다르다.

텐서가 있으면 AI가 되는 걸까?

아니다. 텐서는 데이터를 담고 연산하는 형식이다. 그 자체가 학습하거나 판단하지는 않는다. 모델은 텐서로 표현한 입력과 가중치 등에 연산을 적용해 결과를 만든다. PyTorch 같은 도구는 GPU 연산과 자동미분을 지원해 이 과정을 편하게 해준다. 모든 텐서가 GPU에 있거나 미분을 추적하는 것은 아니다.

그리고 ‘텐서끼리 곱한다’는 말만으로는 계산이 정해지지 않는다. 같은 위치의 숫자끼리 곱할 수도 있고, 행렬 곱을 할 수도 있다.

image-5.png

2차원 PyTorch 텐서의 예: *는 원소별 곱, @는 행렬 곱이다. 첫 결과 19는 1 × 5 + 2 × 7로 계산한다. 자체 제작.

reshape도 자주 만난다. 숫자 12개를 한 줄에서 3행 4열로 다시 묶는 식이다. 원소 수는 그대로지만 배열을 해석하는 모양이 바뀐다. RGB 순서를 바꾸거나 가로와 세로를 교환하는 일이 단순 reshape로 해결되는 것은 아니다. 그런 작업에는 축을 바꾸는 연산이 필요하다.

그런데 물리학 책의 텐서는 왜 더 어렵게 설명할까?

지금까지는 AI 프로그래밍에서 쓰는 배열의 관점이었다. 수학·물리학의 텐서는 좌표나 기저 선택과 독립적인 대상을 나타내고, 기준을 바꾸면 성분이 정해진 규칙으로 변한다는 점이 중요하다. 일반적인 정의는 텐서곱이나 다중선형 관계로 정리한다.

같은 화살표도 좌표축을 돌리면 가로·세로 성분은 달라진다. 그렇다고 실제 화살표가 바뀌지는 않는다. 텐서도 이런 생각을 더 넓게 확장한 것이다. 물체 내부의 응력처럼, 면의 방향에 따라 어떤 방향의 힘이 작용하는지 나타내는 데에도 쓰인다.

따라서 숫자를 네모나게 적었다는 사실만으로 물리학적 텐서라는 성질이 자동으로 생기지는 않는다. 어떤 대상을 나타내고, 기준을 바꾸었을 때 어떻게 변하는지를 알아야 한다. 반면 AI 라이브러리의 Tensor라는 이름은 일반적인 다차원 배열을 폭넓게 가리킨다.

처음 배울 때는 두 설명을 한꺼번에 외울 필요가 없다. AI 코드를 읽는 중이라면 먼저 “축이 몇 개이고, 각 축은 무엇이며, 크기는 얼마인가?”를 확인하자. (8, 224, 224, 3)이 낯선 숫자 묶음이 아니라 사진 여덟 장으로 보이기 시작하면, 텐서라는 단어도 한결 덜 무서워진다.


참고 자료

숫자 예시와 설명 그림은 이 글을 위해 제작했다. 사진의 큐브 자체와 사진 데이터를 담는 텐서는 서로 다른 대상이다.

모든 이야기1447

가벼운 안부부터 깊은 생각까지, 함께 나눠요.

글쓰기
총 1447개의 이야기
댓글