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

门控深度交叉网络(Gated DCN)实现正确性咨询:Loss不收敛问题

门控深度交叉网络(Gated Deep Cross Network)实现问题排查

我尝试实现门控深度交叉网络(Gated Deep Cross Network,DCN的升级版),由于目前没有成熟的官方实现,我自行修改了Cross层,添加了带sigmoid激活的门控结构,但在业务场景中模型Loss无法收敛,想确认当前实现是否正确。

我的代码片段如下:

self._gate_u = tf.keras.layers.Dense(
    self._projection_dim,
    kernel_initializer=_clone_initializer(self._kernel_initializer),
    kernel_regularizer=self._kernel_regularizer,
    use_bias=False,
    dtype=self.dtype,
)
self._gate_v = tf.keras.layers.Dense(
    last_dim,
    kernel_initializer=_clone_initializer(self._kernel_initializer),
    bias_initializer=self._bias_initializer,
    kernel_regularizer=self._kernel_regularizer,
    bias_regularizer=self._bias_regularizer,
    use_bias=self._use_bias,
    dtype=self.dtype,
    activation="sigmoid",
)
....
def call(self, x):
    return x0 * prod_output + self._gate_v(self._gate_u(x)) + x

实现问题分析

当前代码的核心问题是未对齐论文中的门控逻辑,具体问题点如下:

  1. 门控作用逻辑错误:论文中的门控是用来加权交叉项或残差项的权重,而非直接将门控输出作为独立项加入结果。你的代码将门控输出与交叉项、原始输入直接相加,完全偏离了门控的设计初衷——门控应该是作为"开关"控制信息流,而非新增一个特征分支。
  2. 维度匹配风险:需确认_projection_dim和输入x的维度是否匹配,若维度不匹配,即使代码未报错,也会导致门控输出无法正确加权目标项,干扰梯度传播。
  3. 公式还原错误:参考论文中的Gated Cross Layer公式,正确的输出形式应为交叉项与门控输出相乘后,再叠加残差项(即原始输入),类似:
    cross_term = x0 * prod_output  # 对应论文中的交叉项计算
    gate = self._gate_v(self._gate_u(x))
    return cross_term * gate + x
    
    (具体需严格对应论文公式,此处为示例逻辑)

修正建议

  1. 严格对齐论文公式:找到论文中Gated Cross Layer的数学表达式(如公式3),确保代码完全复刻公式中的运算逻辑,包括门控的作用对象、运算顺序。
  2. 调整门控初始化:sigmoid层的初始输出若接近0或1,容易导致梯度消失。建议将门控层的偏置初始化为小正值(如0.1),让初始门控输出接近0.5,保证训练初期信息流正常传递。
  3. 排查训练环节:Loss不收敛也可能与代码无关——比如数据未做归一化、学习率过高、正则化强度过大,建议先固定其他模块(如DNN分支),单独验证Cross层的有效性。

内容的提问来源于stack exchange,提问作者Ha An Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:34:51