resnet残差思想和dropout在transformer中的一点小细节

看transformer代码代码然后看到nn.dropout()一个不一样的应用,这里我就来好好分享一下这个细节:
resnet残差思想和dropout在transformer中的一点小细节_第1张图片

下面代码实现的是上方红框的部分,重点在于平常我们的nn.dropout是在训练的时候增加网络的健壮性,但这里它是用于相加。
self.dropout = nn.Dropout(p=0.5),
x = x+g(f(x)) g(t)为dropout
在这里主要是为了x = x+f(x)中保持f(x)的稀疏性。还有个好处我认为这样可以增强f(x)的泛化性吧。
所以这个应该是resnet 残差思想加dropout一种结合思想.

resnet残差思想和dropout在transformer中的一点小细节_第2张图片
对了怕不知道稀疏性的好处,我这里给大家总结下。
当使用 ReLU 激活函数时,我们不会得到非常小的值(比如前面 sigmoid 函数的 0.0000000438)。相反,它要么是 0(导致某些梯度不返回任何东西),要么是 1。
但这又催生出另一个问题:死亡 ReLU 问题。
如果在计算梯度时有太多值都低于 0 会怎样呢?我们会得到相当多不会更新的权重和偏置,因为其更新的量为 0。

死亡 ReLU:优势和缺点
当我们将 ReLU 函数引入神经网络时,我们也引入了很大的稀疏性。那么稀疏性这个术语究竟是什么意思?
稀疏:数量少,通常分散在很大的区域。在神经网络中,这意味着激活的矩阵含有许多 0。这种稀疏性能让我们得到什么?当某个比例(比如 50%)的激活饱和时,我们就称这个神经网络是稀疏的。这能提升时间和空间复杂度方面的效率——常数值(通常)所需空间更少,计算成本也更低

原文:https://baijiahao.baidu.com/s?id=1653421414340022957&wfr=spider&for=pc

你可能感兴趣的:(人工智能机器学习,transformer,神经网络,深度学习)