0

RNN 언어 모델의 코드를 살펴 보았습니다. 1) 훈련 쌍 (x, y)이 어떻게 구성되고 그 다음에 2) 손실이 계산되는지에 관해 혼란 스럽습니다. 이 코드는 Tensorflow RNN 튜토리얼 (독자 모듈)에서 가져옵니다.Tensorflow : 반복 신경망 훈련 쌍 및 손실 함수에 대한 영향

리더 모듈 내에서 생성자 ptb_iterator이 정의됩니다. 데이터를 하나의 시퀀스로 취하고 은 배치 크기와 RNN을 '언 롤 (unroll)'하려는 단계의 수에 따라 x, y 쌍을 산출합니다. 로 설명되어 있습니다

for i in range(epoch_size): 
    x = data[:, i*num_steps:(i+1)*num_steps] 
    y = data[:, i*num_steps+1:(i+1)*num_steps+1] 
    yield (x, y) 

: 그렇다면

*Yields: 
Pairs of the batched data, each a matrix of shape [batch_size, num_steps]. 
The second element of the tuple is the same data time-shifted to the 
right by one.* 

는 데이터 시퀀스 [1 2 3 4 5 6]num_steps = 2에 대해 제대로 이해 먼저 전체 정의하지만, 저를 혼동하는 부분을보고 가장 좋은 것은 이것이다 다음 확률 경사 하강을 위해 (즉 BATCH_SIZE = 1)의 다음 쌍을 생성 할 것이다 :

  1. X = [1,2], Y = [2,3]
  2. ,536,913 63,210
  3. X = [3,4], Y = [5,6]

1)이 이렇게 올바른 방법인가? 이해서는 안되므로 쌍 있음 :

  1. X = [1,2], Y = [2,3]
  2. X = [2,3], Y = [3,4] 은 ... # 1 이상의 데이터 포인트

OR

허용
  1. X = [1,2], Y = [3]
  2. X = [2,3], Y = 4 ] ... # 모든 예측이 context length = num_step으로 이루어짐을 보장합니다. 의

2) 마지막으로, 그들은 reader 모듈에있는대로 교육에 관한 한 쌍은 손실이없는 계산 대신에 풀린 단계의 범위에서 RNN의 성능을 반영, 생성 된 주어진 num_steps이 지정 되었습니까?

예를 들어, 모델은 2가 그 앞에 왔음을 고려하지 않고 x = 3 (x = [3,4]에서)에 대한 예측을 수행합니다 (즉 RNN을 두 단계가 아닌 한 단계로 풀림).

답변

0

Re (1)의 목표는 시퀀스 크기가 2보다 훨씬 커야한다는 것입니다. 그런 다음 많은 통계 능력을 얻지 못하면 전체 데이터 세트를 N 번 복제하지 않으려 고합니다. Re (2) 그것은 훈련 시간에 사용하기위한 근사치입니다. 예측 시간에 전체 시퀀스를 예측해야합니다.