자연어처리

Attention RNN 알고리듬에서의 shape 변경 기법

coding art 2023. 1. 20. 02:13
728x90

 

 

LSTM Attention 알고리듬을 살펴보wk. hs 벡터에 포함된 각 단어 별 중요도를 나타내는 확률 가중치 벡터 a와 hs 벡터를 아마디르 곱셈 후 특정 축을 중심으로 합산하여 shape을 변경하는 기법을 볼 수 있다. 이 과정을 학습하자.

 

텐서플로우 리스트 데이터 A에 대해서 shape 과 argmax 값을 살펴보자.

일차원적 리스트 구조의 데이터는 (5,)로 표현된다.

argmax(A)에서 numpy=2는 A의 최대값이 위치한 30의 위치를 나타낸다.

1 import tensorflow as tf
A = tf.constant([2, 20, 30, 3, 6])
print(A.shape)
tf.math.argmax(A)

 

텐서플로우 2차원 리스트 데이터 B에 대해서 shape 과 argmax 값을 살펴보자.

2차원적 리스트 구조의 데이터는 (3,5)로 표현된다.

argmax 연산 결과는 최대값을 가지는 위치를 니타낸다.

2 B = tf.constant([[2, 20, 30, 3, 6], [3, 11, 16, 1, 8],[14, 45, 23, 5, 27]])
print(B.shape)
tf.math.argmax(B)

다음과 같이 리스트 데이터 B를 정렬하여 출력해 보자. 매트릭스로 관점에서 보면 행이 3이고 열이 5인 3X5 가 된다. argmax(B)는 argmax(B,0) 즉 axis=0 조건과 같으며 axis=0은 아래 왼쪽 그림에서처럼 컬럼을 뜻한다. 따라서 각 컬럼의 최대값 위치는 [2, 2, 0, 2, 2]가 된다.

 

argmax(B,1) 에서 숫자 1 은 axis=1 즉 윗 그림에서처럼 행 즉 row를 뜻한다. 따라서 각 행의 최대값 위치는 [2, 2, 1]이 된다.

 

reduce_sum() 명령에서 axis = 0과 axis =1을 적용해 보자.

2 B = tf.constant([[2, 20, 30, 3, 6], [3, 11, 16, 1, 8],[14, 45, 23, 5, 27]])
print(tf.reduce_sum(B,axis=0))
print(tf.reduce_sum(B,axis=1))


tf.Tensor([19 76 69 9 41], shape=(5,), dtype=int32)
tf.Tensor([ 61 39 114], shape=(3,), dtype=int32)

 

아래 그림의 axis 방향을 참조하여 합을 계산해 보자.

Tensornumpy() 로 상속받아 shape 과 결과를 출력해보자.

shapeTensor와 동일하며 결과 CTensor에서 파이선 NumPyarray([19,76,69,9,31])로 변환되었음을 알 수 있다.

3 C = tf.reduce_sum(B,axis=0).numpy()
print(C.shape)
C