텐서
1. 벡터와 행렬과 텐서
- 벡터는 숫자가 나열된 형상이며, 파이썬에서는 1차원 배열 또는 리스트로 표현함
- 행렬은 행과 열을 가지는 2차원 형상을 가진 구조임
- 3차원부터는 주로 텐서라고 부름
2. 텐서
- 0차원부터 3차원 텐서는 아래와 같이 표현됨
import numpy as np
# 0차원 텐서(스칼라)
d1 = np.array(5)
print('d1의 차원 :',d1.ndim)
print('d1의 크기(shape) :',d1.shape)
# 1차원 텐서(벡터)
d2 = np.array([1,2,3,4])
print('d2의 차원 :',d2.ndim)
print('d2의 크기(shape) :',d2.shape)
# 2차원 텐서(행렬)
d3 = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print('d3의 차원 :',d3.ndim)
print('d3의 크기(shape) :',d3.shape)
# 3차원 텐서(다차원 배열)
d4 = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]], [[1,2,3,4], [5,6,7,8], [9,10,11,12]]])
print('d4의 차원 :',d4.ndim)
print('d4의 크기(shape) :',d4.shape)
d1의 차원 : 0
d1의 크기(shape) : ()
d2의 차원 : 1
d2의 크기(shape) : (4,)
d3의 차원 : 2
d3의 크기(shape) : (3, 4)
d4의 차원 : 3
d4의 크기(shape) : (2, 3, 4)
- 자연어 처리에서 주로 보게 되는 것은 '3차원 텐서'이며, (samples, timesteps, word_dim)임
- 일괄로 처리하기 위해 데이터를 묶는 단위인 배치의 개념에서는 (batch_size, timesteps, word_dim)임
- 여기서 samples 또는 batch_size는 샘플의 개수, timesteps는 시퀀스의 길이, word_dim은 단어를 표현하는 벡터의 차원을 의미함
예시)
문서1: I like NLP
문서2: I like DL
문서3: DL is AI
- 위의 문서1, 2, 3에서 사용된 단어를 원-핫 인코딩하여 벡터로 표현하면 아래와 같음
단어 | One-hot vector |
I | [1 0 0 0 0 0] |
like | [0 1 0 0 0 0] |
NLP | [0 0 1 0 0 0] |
DL | [0 0 0 1 0 0] |
is | [0 0 0 0 1 0] |
AI | [0 0 0 0 0 1] |
- 위의 문서 1, 2, 3을 텐서 형태로 표현하면 다음과 같음 -> 크기: (3,3,6)
[[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0]],
[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0]],
[[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]]]
3. 케라스에서의 텐서
- 케라스에서는 신경망의 층에 입력의 크기(shape)를 인자로 줄 때 input_shape를 사용함
- 예를 들어 input_shape(6,5)라는 인자값을 사용한다면 이 텐서의 크기는 (?, 6, 5)를 의미함
- 만약 배치 크기까지 지정해주고 싶으면 batch_input_size=(8,2,10)과 같이 지정해주면 됨
벡터와 행렬의 연산
1. 벡터의 내적
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
print('두 벡터 의 내적 :',np.dot(A, B))
두 벡터 의 내적 : 32
2. 벡터의 행렬 곱
A = np.array([[1, 3],[2, 4]])
B = np.array([[5, 7],[6, 8]])
print('두 행렬의 행렬 곱 :')
print(np.matmul(A, B))
두 행렬의 행렬 곱 :
[[23 31]
[34 46]]
다중 선형 회귀 행렬 연산으로 이해하기
- 데이터의 샘플과 특성은 아래와 같음
- H(X)=WX+B를 행렬로 표현하면 아래와 같음
출처: 유원준/안상준, 딥러닝을 이용한 자연어 처리 입문-1권, p209-p221.
'자연어 처리' 카테고리의 다른 글
[딥러닝을 이용한 자연어 처리 입문] 심층신경망 이해하기 (1) | 2023.05.13 |
---|---|
[딥러닝을 이용한 자연어 처리 입문] 소프트맥스 회귀 (0) | 2023.04.16 |
[딥러닝을 이용한 자연어 처리 입문] 선형 회귀와 로지스틱 회귀 (0) | 2023.04.16 |
[딥러닝을 이용한 자연어 처리 입문] 머신 러닝 (0) | 2023.04.06 |
[딥러닝을 이용한 자연어 처리 입문] 벡터의 유사도 (0) | 2023.04.06 |