常规情况
下面影响,排名不分先后
1. 已知模块降低了效果
当你的模型,增加一些模块进去时候,你知道这些模块加了后对你的效果产生了下降,可以采用:
dropout
方法去降低它对你的模型的影响。cat
原来的输入,然后进行FFC
处理。
整体如下:
# 铺垫函数
class PositionwiseFeedForward(nn.Module):
"Implements FFN equation."
def __init__(self, d_model, d_ff, d_out, dropout=0.1):
super(PositionwiseFeedForward, self).__init__()
self.w_1 = nn.Linear(d_model, d_ff)
self.w_2 = nn.Linear(d_ff, d_out)
self.dropout = nn.Dropout(dropout)
def forward(self, x):
return self.w_2(self.dropout(F.relu(self.w_1(x))))
class LayerNorm(nn.Module):
"Construct a layernorm module (See citation for details)."
def __init__(self, features, eps=1e-6):
super(LayerNorm, self).__init__()
self.a_2 = nn.Parameter(torch.ones(features))
self.b_2 = nn.Parameter(torch.zeros(features))
self.eps = eps
def forward(self, x):
mean = x.mean(-1, keepdim=True)
std = x.std(-1, keepdim=True)
return self.a_2 * (x - mean) / (std + self.eps) + self.b_2
# 这样使用。
emb = self.norm(torch.cat((word_emb, num_emb), dim=-1))
H = self.FFC(emb) + word_emb
2.同样的功能,不同的模型结构对结果有影响。
值得注意,当你的模型中一个模块完成了一个功能,但是有一些无用的初始化,你可能会考虑屏蔽或者删除它。但是要注意!!!当你删除后,哪怕你固定了随机种子,都会对结果有随机影响。是随机的。