CẬP NHẬT:
Việc thực hiện MSE ban đầu trông như sau:
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(y_pred - y_true), axis=-1)
Tôi nghĩ rằng chức năng mất tối đa hóa chính xác:
def mean_squared_error_max(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(1 / (y_pred - y_true)), axis=-1)
Bằng cách này, chúng ta luôn nhận được giá trị tổn thất dương, như trong trường hợp hàm MSE, nhưng có hiệu ứng đảo ngược.
CẬP NHẬT 2:
Ban đầu tôi đã viết, rằng suy nghĩ trực quan đầu tiên chỉ đơn giản là phủ nhận sự mất mát sẽ KHÔNG mang lại kết quả như chúng ta mong đợi vì khái niệm cơ bản của các phương pháp tối ưu hóa (bạn có thể đọc một cuộc thảo luận thú vị ở đây ). Sau khi tôi kiểm tra kỹ cả hai phương pháp để đạt kết quả trong một nhiệm vụ học tập cụ thể (Lưu ý: Tôi không thực hiện kiểm tra toàn diện) là cả hai phương pháp đều cho tối đa hóa tổn thất, mặc dù -loss
cách tiếp cận hội tụ nhanh hơn một chút. Tôi không chắc chắn nếu nó luôn đưa ra giải pháp tốt nhất hoặc bất kỳ giải pháp nào vì vấn đề có thể được mô tả ở đây . Nếu ai đó có kinh nghiệm khác, xin vui lòng cho tôi biết.
Vì vậy, nếu ai đó muốn thử -loss
quá:
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return - K.mean(K.square(y_pred - y_true), axis=-1)
Chi tiết bổ sung:
OP đã viết:
Tôi có một mạng đối nghịch rộng rãi, trong đó người phân biệt đối xử được giảm thiểu với MSE và trình tạo sẽ được tối đa hóa. Bởi vì cả hai đều là đối thủ theo đuổi mục tiêu ngược lại.
Từ liên kết được cung cấp bởi Ibragil:
Trong khi đó, trình tạo đang tạo ra những hình ảnh tổng hợp mới mà nó truyền cho người phân biệt đối xử. Nó làm như vậy với hy vọng rằng họ cũng sẽ được coi là xác thực, mặc dù chúng là giả. Mục tiêu của trình tạo là tạo ra các chữ số viết tay có thể vượt qua: nói dối mà không bị bắt. Mục tiêu của người phân biệt đối xử là xác định hình ảnh đến từ máy phát điện là giả mạo.
Vì vậy, đây là một vấn đề đặt ra:
Trong GAN, mục tiêu cuối cùng của chúng tôi là đào tạo hai bên đối tác của mình là người phân biệt đối xử và người tạo ra để thực hiện tốt nhất có thể với nhau. Điều đó có nghĩa, rằng việc học tập algorythm hai cơ sở có nhiệm vụ khác nhau nhưng hàm tổn thất mà họ có thể đạt được giải pháp tối ưu là như nhau ví dụ binary_crossentropy
, vì vậy nhiệm vụ của mô hình là để giảm thiểu này mất.
Một phân biệt mô hình là phương pháp biên dịch:
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)
Một máy phát điện mô hình là phương pháp biên dịch:
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)
Nó giống như mục tiêu của hai vận động viên là giảm thiểu thời gian đạt đến đích ngay cả khi họ là đối thủ trong nhiệm vụ này.
Vì vậy, "mục tiêu ngược lại" không có nghĩa là nhiệm vụ ngược lại tức là giảm thiểu tổn thất (tức là giảm thiểu thời gian trong ví dụ về người chạy).
Tôi hy vọng nó sẽ giúp.