trong gần như tất cả các ví dụ mã mà tôi đã thấy về VAE, các hàm mất được định nghĩa như sau (đây là mã tenorflow, nhưng tôi đã thấy tương tự đối với theano, đèn pin, v.v. Nó cũng là một mạng lưới, nhưng điều đó cũng không quá liên quan , chỉ ảnh hưởng đến các trục mà các khoản tiền được thực hiện):
# latent space loss. KL divergence between latent space distribution and unit gaussian, for each batch.
# first half of eq 10. in https://arxiv.org/abs/1312.6114
kl_loss = -0.5 * tf.reduce_sum(1 + log_sigma_sq - tf.square(mu) - tf.exp(log_sigma_sq), axis=1)
# reconstruction error, using pixel-wise L2 loss, for each batch
rec_loss = tf.reduce_sum(tf.squared_difference(y, x), axis=[1,2,3])
# or binary cross entropy (assuming 0...1 values)
y = tf.clip_by_value(y, 1e-8, 1-1e-8) # prevent nan on log(0)
rec_loss = -tf.reduce_sum(x * tf.log(y) + (1-x) * tf.log(1-y), axis=[1,2,3])
# sum the two and average over batches
loss = tf.reduce_mean(kl_loss + rec_loss)
Tuy nhiên, phạm vi số của kl_loss và rec_loss phụ thuộc rất nhiều vào độ mờ không gian tiềm ẩn và kích thước tính năng đầu vào (ví dụ: độ phân giải pixel) tương ứng. Sẽ là hợp lý nếu thay thế các_số giảm bằng giảm_mean để có được mỗi KLD z-dim và mỗi pixel (hoặc tính năng) LSE hoặc BCE? Quan trọng hơn, làm thế nào để chúng ta giảm cân tiềm ẩn với mất tái thiết khi tổng hợp lại cho sự mất mát cuối cùng? Có phải chỉ là thử nghiệm và lỗi? hoặc có một số lý thuyết (hoặc ít nhất là quy tắc của ngón tay cái) cho nó? Tôi không thể tìm thấy bất kỳ thông tin nào về điều này ở bất cứ đâu (bao gồm cả bài báo gốc).
Vấn đề tôi gặp phải là, nếu sự cân bằng giữa kích thước tính năng đầu vào (x) và kích thước không gian tiềm ẩn (z) của tôi không 'tối ưu', thì khả năng tái tạo của tôi rất tốt nhưng không gian tiềm ẩn đã học không được cấu trúc (nếu x kích thước là rất cao và lỗi tái cấu trúc chiếm ưu thế so với KLD) hoặc ngược lại (tái tạo không tốt nhưng không gian tiềm ẩn đã học được cấu trúc tốt nếu KLD chiếm ưu thế).
Tôi thấy mình phải bình thường hóa tổn thất tái cấu trúc (chia cho kích thước tính năng đầu vào) và KLD (chia cho kích thước z) và sau đó cân thủ công thuật ngữ KLD với hệ số trọng lượng tùy ý (Việc chuẩn hóa là để tôi có thể sử dụng cùng hoặc trọng lượng tương tự độc lập với kích thước của x hoặc z ). Thực tế tôi đã tìm thấy khoảng 0,1 để cung cấp một sự cân bằng tốt giữa tái thiết và không gian tiềm ẩn có cấu trúc mà cảm thấy như một 'điểm ngọt ngào' đối với tôi. Tôi đang tìm kiếm công việc trước đây trong lĩnh vực này.
Theo yêu cầu, ký hiệu toán học ở trên (tập trung vào mất L2 cho lỗi tái thiết)
Trong đó là chiều của vectơ tiềm ẩn (và trung bình tương ứng và phương sai ), là chiều của các tính năng đầu vào, là kích thước lô nhỏ, siêu ký tự biểu thị dữ liệu thứ điểm và là tổn thất cho lô nhỏ thứ .