gpt4 book ai didi

machine-learning - 什么是惩罚幅度和符号差异的良好损失函数

转载 作者:行者123 更新时间:2023-11-30 08:24:05 25 4
gpt4 key购买 nike

我面临的情况是,我需要训练模型来预测标量值,并且重要的是使预测值与真实值的方向相同,同时平方误差最小。

什么是损失函数的最佳选择?

例如:

假设预测值为 -1,真实值为 1。两者之间的损失应该比 3 和 1 之间的损失大很多,即使 (3, 1) 和 (- 1, 1) 相等。

非常感谢!

最佳答案

事实证明这是一个非常有趣的问题 - 感谢您提出这个问题!首先,请记住,您希望损失函数完全由微分运算定义,以便您可以通过它进行反向传播。这意味着任何旧的任意逻辑都不一定有效。重述您的问题:您想要找到两个变量的可微函数,当两个变量具有不同符号的值时,该函数会急剧增加,而当它们具有相同符号时,该函数会更慢地增加。此外,您还希望能够控制这些值相对于彼此的增长速度。因此,我们需要具有两个可配置常量的东西。我开始构建一个满足这些需求的函数,但后来想起了你可以在任何高中几何教科书中找到的一个函数:elliptic paraboloid !

A rotated elliptic paraboloid.

标准的表述不符合符号协议(protocol)对称性的要求,所以我不得不引入一个rotation 。上图就是结果。请注意,当符号不一致时,它会急剧增加,而当符号不一致时,它会急剧增加,并且控制此行为的输入常量是可配置的。下面的代码是定义和绘制损失函数所需的全部代码。我认为我以前从未使用过几何形式作为损失函数 - 非常简洁。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm


def elliptic_paraboloid_loss(x, y, c_diff_sign, c_same_sign):

# Compute a rotated elliptic parabaloid.
t = np.pi / 4

x_rot = (x * np.cos(t)) + (y * np.sin(t))

y_rot = (x * -np.sin(t)) + (y * np.cos(t))

z = ((x_rot**2) / c_diff_sign) + ((y_rot**2) / c_same_sign)

return(z)


c_diff_sign = 4

c_same_sign = 2

a = np.arange(-5, 5, 0.1)

b = np.arange(-5, 5, 0.1)

loss_map = np.zeros((len(a), len(b)))

for i, a_i in enumerate(a):

for j, b_j in enumerate(b):

loss_map[i, j] = elliptic_paraboloid_loss(a_i, b_j, c_diff_sign, c_same_sign)



fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y = np.meshgrid(a, b)
surf = ax.plot_surface(X, Y, loss_map, cmap=cm.coolwarm,
linewidth=0, antialiased=False)

plt.show()

关于machine-learning - 什么是惩罚幅度和符号差异的良好损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com