混淆优化器和损失函数

数据挖掘 喀拉斯 损失函数 优化 sgd
2022-03-12 18:46:53

我一直以为 SGD 是损失函数然后我在笔记本上读到了这个

model.compile(loss="sparse_categorical_crossentropy", optimizer=keras.optimizers.SGD(lr=1e-3), metrics=["accuracy"])

现在我很困惑 loss 和 optimizer 有什么区别?它们都用于输出层来计算损失吗?或者优化器是否在每一层中使用?

2个回答

想想损失函数要最小化什么,优化器如何最小化损失。

loss 可能是平均绝对误差,为了减少它,权重和偏差在每个 epoch 之后都会更新。优化器用于计算和更新它们。

您的损失是交叉熵,您的梯度下降变体是随机梯度下降,根据 keras 文档,您的随机梯度下降优化器似乎是动量优化器。https://keras.io/api/optimizers/sgd/)。这是直觉:

损失是衡量目标标签和预测标签之间差异的一种方式。有很多方法可以做到这一点,例如均方误差,对目标和预测之间的差异进行平方。交叉熵是与信息论相关的更复杂的损失公式。

批量、小批量和随机梯度下降等梯度下降算法指定在每个步骤中将使用多少个训练数据样本来计算关于模型中每个参数的损失的“梯度”(导数) ,然后它会根据梯度对参数进行更改。SGD 做了“优化”,但它不是“优化器”。

您的优化器,即:动量有助于像这样,“发明动量是为了减少 SGD 的高方差并软化收敛”。基本上更平滑的梯度可以帮助加速模型训练。(https://towardsdatascience.com/optimizers-for-training-neural-network-59450d71caf6)。