Tokenizer
Norm

Batch Norm
好处
- 使得模型训练收敛的速度更快 
  - 每层的数据分布都不一样的话(解决Internal Covariance Shift),将会导致网络非常难收敛和训练,而如果把每层的数据都在转换在均值为零,方差为1的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。
 
- 防止梯度消失 
  - 使得数据不落入饱和性激活函数(如sigmoid,tanh等)饱和区间,避免梯度消失的问题
 
- 防止过拟合 
  - 在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络都是随机取batch,这样就会使得整个网络不会朝这一个方向使劲学习。一定程度上避免了过拟合。
 
但其实MIT在2019年说好处不是解决了ICS, 而是能让loss曲线更平滑
BN为什么训练时用batch的mean, 而推理时用全局的mean

 ?
 因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合。
 也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。
Layer Norm
为什么LLM用LN而不是BN
- 句子长短不同
- 没有道理, 在身高这个维度做normalization是有道理的, 这改变了分布之后并没有改变相对大小的意义, 比如高个子仍然是高个子. 但是如果在NLP中做这种归一化是没有道理的, 第一句话的"We", 第二句话的"I"之间是不存在这样的关系的
- 假设我们有一个向量是[身高, 体重], 做了BN之后, 身高和体重之间没有直接的关系了, 他们都有各自自己的分布, 但是如果在句子上用BN, 不同维度之间的信息丧失之后, 何谈用注意力机制呢
Instance Norm
对一个channel内进行归一化, 多见于CV中的迁移学习
Group Norm
将多个channel组合到一起, 所以也是在NLP没多大用
Activation Function
sigmoid
 
     
      
       
       
         σ 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
         = 
        
        
        
          1 
         
         
         
           1 
          
         
           + 
          
          
          
            e 
           
           
           
             − 
            
           
             x 
            
           
          
         
        
       
      
        σ(x) = \frac{1}{1 + e^{-x}} 
       
      
    σ(x)=1+e−x1
 缺点: 1. 均值不为0
 2.导数小, 梯度消失
 3. 计算复杂
tanh
 
     
      
       
       
         tanh 
        
       
          
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
         = 
        
        
         
          
          
            e 
           
          
            x 
           
          
         
           − 
          
          
          
            e 
           
           
           
             − 
            
           
             x 
            
           
          
         
         
          
          
            e 
           
          
            x 
           
          
         
           + 
          
          
          
            e 
           
           
           
             − 
            
           
             x 
            
           
          
         
        
       
      
        \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} 
       
      
    tanh(x)=ex+e−xex−e−x, 导数为 
     
      
       
        
        
          d 
         
         
         
           d 
          
         
           x 
          
         
        
       
         tanh 
        
       
          
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
         = 
        
       
         1 
        
       
         − 
        
        
         
         
           tanh 
          
         
            
          
         
        
          2 
         
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        \frac{d}{dx}\tanh(x) = 1 - \tanh^2(x) 
       
      
    dxdtanh(x)=1−tanh2(x)
 解决了均值不为0, 但是仍然梯度小, 计算复杂
sigmoid和tanh这种bounded反而很适合概率门, 比如LSTM中各种门
ReLU
f ( x ) = { x if x > 0 0 if x ≤ 0 f(x) = \begin{cases} x &\text{if } x > 0 \\ 0 &\text{if } x \leq 0 \end{cases} f(x)={x0if x>0if x≤0
- 好处 
  - 计算简单
- 不会梯度消失
- 实验证明收敛更快
- 缓解过拟合: ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。网络的稀疏性可以理解为让不同的神经元各司其职
 
- 缺点: 
  - “死亡ReLU"问题:如果学习率设置不当,可能导致某些神经元永远不会被激活,使得相应的参数无法得到更新。这种现象被称为"死亡ReLU”。
- 均值不为0
 
Leaky ReLU
解决坏死
PReLU
f ( x ) = { x if x > 0 α x if x ≤ 0 f(x) = \begin{cases} x &\text{if } x > 0 \\ αx &\text{if } x \leq 0 \end{cases} f(x)={xαxif x>0if x≤0
ELU
f ( x ) = { x if x > 0 α ( e x − 1 ) if x ≤ 0 f(x) = \begin{cases} x &\text{if } x > 0 \\ α(e^x - 1) &\text{if } x \leq 0 \end{cases} f(x)={xα(ex−1)if x>0if x≤0
α \alpha α是学习的参数,
- 缓解"死亡ReLU"问题:
 ELU在负值区间有非零输出,这意味着即使对于负输入,梯度也能够流过。这有助于减少"死亡神经元"的问题,使得网络中的更多单元能够持续学习和更新。
- 输出均值更接近零:
 由于ELU在负值区间的非线性特性,它能够将激活的平均值推向零。这有助于缓解Internal Covariate Shift问题,可能会加速学习过程。
- 平滑的梯度:
 ELU在整个定义域内都是平滑的,包括在零点附近。这种平滑性可以带来更稳定的梯度流,有利于优化过程。
- 负值饱和:
 与Leaky ReLU不同,ELU在负值区间会逐渐饱和到-α。这种特性可以增强对噪声和异常值的鲁棒性。
GeLU (Gaussian Error Linear Unit)
 
     
      
       
       
         f 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
         = 
        
       
         x 
        
       
         ∗ 
        
       
         Φ 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        f(x) = x * Φ(x) 
       
      
    f(x)=x∗Φ(x)
 BERT, GPT2, Roberta都在用
 motivation是对于较大x, 进行恒等映射, 对于很小的x, 直接map为0, 对于之间的得有梯度进行更新
 
Swish
 
     
      
       
       
         f 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
         = 
        
       
         x 
        
       
         ∗ 
        
       
         s 
        
       
         i 
        
       
         g 
        
       
         m 
        
       
         o 
        
       
         i 
        
       
         d 
        
       
         ( 
        
       
         β 
        
       
         x 
        
       
         ) 
        
       
      
        f(x) = x * sigmoid(βx) 
       
      
    f(x)=x∗sigmoid(βx)
 
LLM参数量计算
- seq_length: L— 序列中的token数量
- d_model: D— Transformer模型的隐藏层维度
- d_head: d— 每个注意力头处理的维度
- n_tokens: V— 词表数量
- embedding matrix 
  - V * D
 
- 多头注意力的参数主要来源于四个矩阵:W^Q,W^K,W^V, 和W^O。- 每个矩阵的维度为 [D, d]。
- 因为有 H个头,所以每个头有一组独立的参数。
- 总参数量为:3 * D * d * H = 3 * D * D。
 
- 每个矩阵的维度为 
- W^O:- 输出矩阵的维度为 [D, D]。
- 总参数量为:D * D。
 
- 输出矩阵的维度为 
每个block总计4 * D* D, 总计4 * D * D * n_layers
-  FFN参数量 
 FNN先投射到4 * D, 再投射回来, 所以有两个矩阵:[D, 4 * D]和[4 * D, D]
-  其他 
 LN: 一个 γ \gamma γ一个 β \beta β, 共计2 * D * n_layers
 Bias:D * n_layers
 positional_encoding: 固定, 可忽略
Attention Mechanism
Encoder, Decoder, Both
KV Cache
PEFT
Alignment
Loss(及代码)
link
正则化
link
为什么L1假设前验是拉普拉斯, L2是高斯 (to be done)



















