Skip to content

Commit a142d5d

Browse files
authored
Add residual scaling for stability in forward pass
Introduced a fixed residual scaling factor to stabilize LN-free training. Updated residual connections and feed-forward networks to incorporate the scaling factor.
1 parent 252bb16 commit a142d5d

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

models/model.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ def __init__(self, num_units, embed_dim=256, num_heads=4, num_layers=4, dropout=
6767
nn.init.xavier_uniform_(self.enemy_attentions[-1].in_proj_weight)
6868
nn.init.xavier_uniform_(self.friend_attentions[-1].in_proj_weight)
6969
# self.norm.append(nn.LayerNorm(embed_dim))
70+
# 为了稳定 LN-free 训练,引入固定的残差缩放因子
71+
self.res_scale = num_layers ** -0.5
7072

7173
def forward(self, left_signs, left_counts, right_signs, right_counts):
7274
# 提取TopK特征(怪物 + 场地)
@@ -125,12 +127,12 @@ def forward(self, left_signs, left_counts, right_signs, right_counts):
125127
)
126128

127129
# 残差连接
128-
left_feat = left_feat + delta_left
129-
right_feat = right_feat + delta_right
130+
left_feat = left_feat + delta_left * self.res_scale
131+
right_feat = right_feat + delta_right * self.res_scale
130132

131133
# FFN
132-
left_feat = left_feat + self.enemy_ffn[i](left_feat)
133-
right_feat = right_feat + self.enemy_ffn[i](right_feat)
134+
left_feat = left_feat + self.enemy_ffn[i](left_feat) * self.res_scale
135+
right_feat = right_feat + self.enemy_ffn[i](right_feat) * self.res_scale
134136

135137
# 友方注意力
136138
delta_left, _ = self.friend_attentions[i](
@@ -149,12 +151,12 @@ def forward(self, left_signs, left_counts, right_signs, right_counts):
149151
)
150152

151153
# 残差连接
152-
left_feat = left_feat + delta_left
153-
right_feat = right_feat + delta_right
154+
left_feat = left_feat + delta_left * self.res_scale
155+
right_feat = right_feat + delta_right * self.res_scale
154156

155157
# FFN
156-
left_feat = left_feat + self.friend_ffn[i](left_feat)
157-
right_feat = right_feat + self.friend_ffn[i](right_feat)
158+
left_feat = left_feat + self.friend_ffn[i](left_feat) * self.res_scale
159+
right_feat = right_feat + self.friend_ffn[i](right_feat) * self.res_scale
158160
# 不要归一化,数值嵌入本质是用模长表示战斗力,归一化后数值只能体现成角度变化
159161
# left_feat = self.norm[i](left_feat)
160162
# right_feat = self.norm[i](right_feat)

0 commit comments

Comments
 (0)