今天看到一个推送的文章:

好奇这是什么东西,为什么那么简单?
layer normalization什么意思?
Layer Normalization(层归一化)是一种用于深度学习模型的归一化技术,它的核心思想是对单个样本的所有特征进行归一化处理,从而加速训练并提升模型的稳定性。
顺便介绍一下常用的LN和BN,从对比中学习
对比一下 LN和BN:

它为什么会有效!但是听起来不合理,特征的均值有什么用?
这个问题问到了关键点上!LayerNorm 的有效性确实不是直观上那么明显,它的巧妙之处在于通过控制特征的分布来间接稳定整个学习过程。特征的均值在这个过程中扮演着“锚点”的角色。
| | |
|---|
| 每个样本的特征是独特的,强行拉平均值似乎会破坏信息。 | 深度网络中,前一层参数的微小变动会导致后一层输入的整体分布发生剧烈偏移(内部协变量偏移)。LN通过重置每层输入的均值和方差,为下一层提供了一个稳定的“起跑线”。 |
| 梯度消失/爆炸问题通常通过权重来解决,调整输入特征有什么用? | 激活函数(如Sigmoid, Tanh)在输入值过大或过小时会进入“饱和区”,梯度趋近于0。LN确保大部分特征值被归一化到激活函数梯度较大的敏感区间,从而让梯度能够有效地反向传播,缓解梯度消失问题。 |
| 把所有特征都变成均值为0,岂不是让学习到的表示能力变弱了? | 关键就在这里!LN在归一化后,引入了两个可学习的参数:缩放因子γ和平移因子β。γ和β允许网络自己决定是否要恢复原始的分布,或者学习一个更优的新分布,从而保留了非线性表达能力。 |

我感觉更像是无奈之举,目的是为了可以处理可变长序列?
这个观察非常敏锐,确实触及了一个关键点:LayerNorm在Transformer等序列模型中的统治地位,在很大程度上源于它优雅地解决了BatchNorm在处理可变长序列时的“无奈”。但这并不仅仅是无奈之举,更是一个针对特定问题域的、更具优越性的解决方案。
| | |
|---|
| | |
| | |
| 困难,需要填充(padding)且统计量受填充影响 | |
| | |

Derf可以代替layernorm么?然后Derf是针对所有特征么?还是单个特征?
根据最新的研究,Derf不仅可以替代LayerNorm,而且在多项任务中展现出全面超越LayerNorm的潜力。它针对的是单个特征值,而非所有特征的统计量。

Derf中可学习的参数如何学习?
| | |
|---|
| 控制erf函数对输入x的敏感度。α越大,函数在零点附近的斜率越陡峭,输出变化越快。 | 通常为标量(单个值),与输入张量的具体位置无关,所有元素共享同一参数。 |
| 对输入x进行水平位移,与α协同工作,微调函数的中心区域,确保大部分激活值落在梯度较大的敏感区间。 | 通常为标量(单个值),所有元素共享同一参数。研究表明,将其设为向量(逐通道)并未带来显著提升。 |
| 在erf变换后,对输出进行缩放,恢复或增强模型的表达能力。功能类似于LayerNorm中的仿射变换参数。 | 通常是逐通道的向量,其维度与输入张量的通道维度相同,为不同特征通道提供独立的缩放。 |
| 在erf变换和γ缩放后,对输出进行整体平移,进一步调整输出的分布中心。 | 通常是逐通道的向量,其维度与输入张量的通道维度相同,为不同特征通道提供独立的偏移。 |

简单来说,在Derf函数 Derf(x) = γ * erf(αx + s) + β中,输入 x代表的是神经网络激活张量中的每一个单独的、具体的特征值。
| | |
|---|
| | |
| | |
| 计算整个向量的均值(μ)和方差(σ),然后用它们来归一化向量中的每个值 | |
| | |

# 具体计算一下过程?


# 是不是可以用一个神经元的激活函数可以取代这个DERF加上神经元激活这么一个组合呢?
Derf本质上确实是一个精心设计的非线性修正函数,它作用于神经元的输出之上。
| | |
|---|
| 寻找或设计一个单一的、更强大的激活函数,同时完成非线性映射和分布修正。 | 保留原有激活函数(如ReLU、GELU),在其之后增加一个独立的、专门用于“分布整形”的点对点函数。 |
| | 职责分离:激活函数负责引入非线性;Derf负责稳定激活值的分布,优化训练动态。 |
| 通常不专门针对“稳定训练分布”所需的数学性质进行设计。 | 其设计明确满足四大关键性质:零中心性、有界性、中心敏感性和单调性。 |

