주요 컨텐츠로 이동

희소 텐서란 무엇인가요?

인덱스와 모양 정보와 함께 0이 아닌 값만 저장하는 메모리 효율적인 텐서로, 희소 데이터 세트에 대한 저장 공간과 계산량을 최적화합니다.

10 Personas Data Science
데이터 + AI 기반Less than a minute

작성자: Databricks 직원

Summary

  • 인덱스 배열(0이 아닌 위치), 값 배열(실제 데이터), 그리고 dense_shape(전체 차원 정의)의 세 가지 구성 요소를 사용하여 텐서를 인코딩합니다.
  • 텍스트 임베딩, 사용자-항목 상호작용 행렬, 3D 포인트 클라우드와 같이 희소성이 90%를 초과하는 데이터의 메모리 사용량을 획기적으로 줄입니다.
  • 희소 행렬 곱셈 및 희소 합성곱과 같은 특수 연산을 지원하지만, 일부 연산은 데이터를 밀집화하여 주의 깊게 관리하지 않으면 메모리 사용량 급증을 초래할 수 있습니다.

Python은 일명 numpy라는 기본 내장 라이브러리를 제공하여 다차원 배열을 조작합니다. pytensor 라이브러리를 개발하려면 기본적으로 이 라이브러리부터 구성하고 사용해야 합니다. Sparse Tensor(희소 텐서)Sptensor는 희소 텐서를 나타내는 클래스입니다. 희소 텐서란 대부분의 입력 항목이 0인 Dataset입니다. 대형 대각선 행렬(diagonal matrix)이 대표적인 예입니다. (값이 0인 원소가 많음). 이것은 텐서 개체의 전체 값을 저장하지 않고, 0이 아닌 값과 그에 상응하는 좌표를 저장합니다. 희소 텐서의 스토리지 형식을 이용하면 0이 아닌 값만 저장할 수 있으므로 스토리지 요구사항을 줄이고 0의 값과 관련된 불필요한 자동(silent) 연산을 없애줍니다. 주된 속성은 다음과 같습니다.

  • vals(numpy.ndarray) 희소 텐서의 0이 아닌 값을 1차원 배열한 것입니다.
  • subs(numpy.ndarray) vals의 값 좌표를 2차원 배열한 것입니다.
  • shape(tuple)

희소 텐서의 형태입니다.

  • func(binary operator) 이 함수는 희소 텐서를 누적기로 구성하는 데 쓰입니다.

이외에 주요 함수는 다음과 같습니다.

  • __init__(self, subs, vals, shape = None, func=sum.__call__) sptensor 클래스의 생성자입니다. subs와 vals(numpy.ndarray) 또는 (list)는 sptensor의 좌표와 값입니다.
  • tondarray(self) 이 함수는 sptensor와 값이 같은 numpy. ndarray 개체를 반환합니다.
  • permute(self, order) 이 함수를 적용하면 주어진 순서(list)대로 배치된 sptensor 개체를 반환합니다.
  • ipermute(self, order) 주어진 순서(list)와 반대로 배치된 sptensor 개체를 반환합니다.
  • copy(self) sptensor의 복사된 sptensor 개체를 반환합니다.
  • totensor(self) sptensor와 값이 같은 텐서 개체를 반환합니다.
  • nnz(self) sptensor의 0이 아닌 요소 수를 반환합니다.
  • ndims(self) 텐서의 차원 수를 반환합니다.
  • dimsize(self, ind)
  • 지정된 차원의 크기를 반환합니다. shape[ind]와 같습니다.

Python과 pytensor 라이브러리, 그리고 Sptensor 관련 FAQ

Python에서 다차원 배열 조작을 위한 기본 라이브러리는 무엇인가요?
Python은 다차원 배열과 행렬 연산을 위한 기본 내장 라이브러리로 numpy를 제공합니다. numpy는 배열 생성, 인덱싱, 변환, 연산 등 다양한 기능을 제공하며 pytensor 라이브러리 개발 시 기본적으로 활용됩니다.

Sptensor(희소 텐서)란 무엇이며, 왜 사용하나요?
Sptensor는 대부분 원소가 0인 희소 텐서를 효율적으로 표현하기 위한 클래스입니다. 전체 텐서 값을 저장하지 않고 0이 아닌 값들과 그 위치만 저장하여 메모리 사용을 줄이고 불필요한 연산을 방지합니다. 예를 들어 대형 대각선 행렬이 이에 해당합니다.

Sptensor 클래스는 어떤 방식으로 희소 텐서를 저장하고 사용하나요?
Sptensor는 대부분 0인 희소 텐서에서 0이 아닌 값(vals)과 그 좌표(subs)만 저장하는 효율적인 데이터 구조입니다. 이를 통해 메모리 사용량과 계산 비용을 줄이고, 생성자 및 tondarray, permute, copy, nnz, ndims 등 주요 함수로 객체 생성부터 변환과 조작까지 지원합니다.

5X 리더

Gartner®: Databricks 클라우드 데이터베이스 리더

추가 자료

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요