2017-12-29 111 views
8

Tôi đang thực hiện đào tạo mô hình ngôn ngữ trên penn treebank.tính lúng túng đối với việc đào tạo LSTM trên penn treebank

Tôi đang thêm mất cho mỗi dấu thời gian và sau đó tính toán sự bối rối.

Điều này mang lại cho tôi sự phức tạp không cao về mặt ý nghĩa của hàng trăm tỷ ngay cả sau khi được đào tạo một thời gian.

Mất chính nó giảm nhưng chỉ giảm xuống còn khoảng 20 ở mức tốt nhất. (Tôi cần số có một chữ số để mất mát để có được sự bối rối hợp lý).

Điều này làm cho tôi tự hỏi liệu tính toán lúng túng của tôi có bị sai lạc hay không.

Nó có nên dựa trên sự mất mát cho từng dấu thời gian và sau đó lấy trung bình thay vì thêm tất cả chúng lên?

batch_size của tôi là 20, NUM_STEPS là 35.

def perplexity(loss): 
    perplexity = np.exp(loss) 
    return perplexity 

... 
loss = 0 
x = nn.Variable((batch_size, num_steps)) 
t = nn.Variable((batch_size, num_steps)) 
e_list = [PF.embed(x_elm, num_words, state_size, name="embed") for x_elm in F.split(x, axis=1)] 
t_list = F.split(t, axis=1) 

for i, (e_t, t_t) in enumerate(zip(e_list, t_list)): 
    h1 = l1(F.dropout(e_t,0.5)) 
    h2 = l2(F.dropout(h1,0.5)) 
    y = PF.affine(F.dropout(h2,0.5), num_words, name="pred") 
    t_t = F.reshape(t_t,[batch_size,1]) 
    loss += F.mean(F.softmax_cross_entropy(y, t_t)) 

for epoch in range(max_epoch): 
    .... 
    for i in range(iter_per_epoch): 
     x.d, t.d = get_words(train_data, i, batch_size) 
     perp = perplexity(loss.d) 
     .... 

Trả lời

4

Dường như bạn đang tính toán theo hàm mũ của tổng các tổn thất entropy chéo. Perplexity, thông qua, được định nghĩa là hai với sức mạnh của entropy.

lúng túng (M) = 2^entropy (M)

lúng túng (M) = 2^(- 1/n) (log2 (P (w1, w2, ..., wn)))

trong đó log2 = log base 2

Vì vậy, có, nên dựa trên sự mất mát cho mỗi dấu thời gian, thay vì lấy tổng hoặc giá trị trung bình. Lấy số tiền như bạn bây giờ sẽ làm tăng đáng kể sự mất entropy chéo của bạn, vì vậy sau đó nâng 2 lên sức mạnh của giá trị đó sẽ rất lớn.

Thông tin chi tiết có thể được tìm thấy here

0

Để tính lúng túng đào tạo, sự mất mát cần được exponentiated như mô tả trong here.

Tensorflow tính toán mất entropy chéo sử dụng logarit tự nhiên, vì vậy chúng tôi sử dụng tf.exp để tính toán lặp đi lặp lại tổn thất đào tạo cho mỗi timestep như tf.exp (accumulative_iteration_costs/accumulative_num_steps_iters).

Kiểm tra dòng chảy từ PTB lstm example

Các vấn đề liên quan