pytorch 之 torch.nn.functional.LayerNorm()

torch.nn.LayerNorm(
        normalized_shape: Union[int, List[int], torch.Size],
        eps: float = 1e-05,
        elementwise_affine: bool = True)
————————————————
 

LayerNorm前向传播(以normalized_shape为一个int举例)

如下所示:

输入数据的shape是(3, 4)

此时normalized_shape传入4(输入维度最后一维的size)

则沿着最后一维(沿着最后一维的意思就是对最后一维的数据进行操作)求和,并用这两个结果把batch沿着最后一维归一化,使其均值为0,方差为1。归一化公式用到了eps(),即。
tensor = torch.FloatTensor([[1, 2, 4, 1],
                                                [6, 3, 2, 4],
                                                [2, 4, 6, 1]])

此时,(有偏样本方差),归一化后的值如下,

举例说明:第0行第2列的数字4,减去第0行的均值2.0等于2,然后除以即2/1.224749≈1.6330。
[[-0.8165,  0.0000,  1.6330, -0.8165],
 [ 1.5213, -0.5071, -1.1832,  0.1690],
 [-0.6509,  0.3906,  1.4321, -1.1717]]


如果elementwise_affine==True,则对归一化后的batch进行仿射变换,即乘以模块内部的weight(初值是[1., 1., 1., 1.])然后加上模块内部的bias(初值是[0., 0., 0., 0.]),这两个变量会在反向传播时得到更新。


如果elementwise_affine==False,则LayerNorm中不含有weight和bias两个变量,只做归一化,不会进行仿射变换。
总结

在使用LayerNorm时,通常只需要指定normalized_shape就可以了。
 

你可能感兴趣的:(pytorch,pytorch,深度学习,人工智能)