You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则化应加在损失函数还是神经网络层?Keras中最终损失如何计算

正则化使用位置与多层不同正则下的损失计算疑问
  • 理论认知:正则化项需要与损失函数结合,共同构成模型的优化目标,参考示意图:
    正则化与损失函数结合理论示意图
  • 代码实现差异:使用Keras搭建网络时,正则化通常是直接配置在具体网络层上的,示例代码如下:
from keras import regularizers
model.add(Dense(64, input_dim=64, kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(28, input_dim=64, kernel_regularizer=regularizers.l1(0.05)))
  • 核心疑问:不同网络层分别配置L1、L2正则化时,模型最终的损失函数是如何计算的?

解答

两种表述没有本质矛盾,Keras把正则化配置在层上只是工程实现上的便捷封装,最终训练用的总损失依然是「任务本身的损失 + 所有正则项惩罚值」的和,计算逻辑非常清晰:

  • 第一步计算任务基础损失:也就是你在model.compile()阶段指定的损失函数(比如分类任务的交叉熵、回归任务的MSE)在当前batch上的计算结果,这部分和正则化配置无关。
  • 第二步逐层计算正则惩罚值:每一层配置的正则化器只会针对当前层的对应参数计算惩罚,你代码中使用的kernel_regularizer默认只惩罚层的权重矩阵,不包含偏置参数:
    • 第一个64单元Dense层配置了系数0.01的L2正则,对应惩罚值为 0.01 * 该层权重矩阵所有元素的平方和
    • 第二个28单元Dense层配置了系数0.05的L1正则,对应惩罚值为 0.05 * 该层权重矩阵所有元素的绝对值之和
  • 第三步加和得到总损失:把所有层计算得到的正则惩罚值全部累加,再和第一步得到的任务基础损失相加,最终结果就是反向传播时用来更新参数的优化目标。

举个直观的计算示例:如果某个训练batch上计算得到的交叉熵基础损失是0.8,第一层L2正则的惩罚值是0.03,第二层L1正则的惩罚值是0.07,那当前步模型用来优化的总损失就是 0.8 + 0.03 + 0.07 = 0.9。

这种层级别配置正则的设计纯粹是为了使用灵活:你可以随意给不同层设置不同类型、不同惩罚系数的正则,甚至可以单独给偏置、层输出值加正则,不需要手动在总损失函数里拼接大量正则项,底层逻辑和理论学习中“正则项加在损失函数上”的定义完全一致。


内容的提问来源于stack exchange,提问作者kowser66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:42:31