Neural Net Basics
Xavier Initialization
对于某一层的weight,初始化分布 或者 . 前者scale by 输入的neuron个数,使forward pass的每一个output neuron方差相同。后者考虑了backprop pass的gradient值方差,取了平均。
pytorch的实现用了uniform distribution (-a, a):
variance of the activations remains roughly the same across layers, preventing gradients from vanishing or exploding during training
使每一个激活层的初始值方差相同,避免梯度消失或爆炸
需要搭配tanh使用,不要搭配ReLu,确保gradient在0时为1 (近似线性)
LayerNorm
LayerNorm normalizes all dimensions except batch: (N, C, H, W) normalizes over (C, H, W)
Think about for NLP, it makes no sense to normalize over batch_size, as opposed to CV
如果像CV一样做batch norm,那么同一个句子中各个token之间的关系不被保留
大模型
大模型显存占用
1. 1B参数量,float32在推理时大约占用4G显存,fp16/bf16/int8/int4相应除以2;推理中除了模型参数其他的overhead占用<20%。
2. 微调中,除了推理的占用,还有activations, gradients, 和optimizer的state。
如何减少微调显存占用?
mixed precision
offloading: 例如优化器AdamOffloading 。。。