关于CIDEr的介绍可以看这里,个人感觉讲的比较清楚 唯一有个问题是计算TF的时候,提供的公式是term_freq/sum(all term_freqs),但是已知的代码库(如pyciderevalcap)里只有term_freq项,提了一个issue在这里 https://github.com/tylin/coco-caption/issues/66
RoPEv1: chatglm/baichuan中使用 RoPEv2: Llama中使用 两者区别 v1代码较为繁琐,但是和原始算法对应 v2使用torch.complex实现,更加明了,不过没有严格遵循原算法,qk转到复数域时,并没有使用相邻的神经元作为复数的实部和虚部,而是直接在特征维度上切分,一半实部,一半虚部 Su的解释:神经元是无序的(dot attention做内积,不依赖于维度顺序) import torch import torch.nn as nn import torch.nn.functional as F import math ### RoPEv1 def sinusoidal_position_embedding(batch_size, nums_head, max_len, output_dim, device = 'cpu'): # (max_len, 1) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(-1) # (output_dim//
Pytorch中的kaiming_uniform中标准差stdv乘了一个因子$\sqrt{3}$ def kaiming_uniform_( tensor: Tensor, a: float = 0, mode: str = 'fan_in', nonlinearity: str = 'leaky_relu' ): #...... std = gain / math.sqrt(fan) bound = math.sqrt(3.0) * std # Calculate uniform bounds from standard deviation with torch.no_grad(): return tensor.uniform_(-bound, bound) 为什么会出现这个因子,原因其实和物理实验里B类误差需要除去$\sqrt{3}$一样。 均匀分布的方差是$Var = \frac {(b-a)^2}{12}$,而我们真正想要的bound是$(b-a)/2$,所以有$Var = \frac{1}{3} {bound}^2$,
BPE -> Transformer -> Benchmark 非常好教程 https://github.com/karpathy/minGPT (semi-archived) https://github.com/karpathy/nanoGPT
http://arxiv.org/abs/2305.14314 Quantization + LoRA,了解一下呢。 LoRA之前写过博客了,这里主要想说一些如何与量化结合起来,以及用到的一些新的tech 当然像分页优化这种就掠过了...需要用到Nvidia统一内存去做内存/GPU交换,cuda编程不会捏,感兴趣可以看论文附的链接https://docs.nvidia.com/cuda/cuda-c-programming-guide/ 4-bit NormalFloat(NF4) 之前谈量化说到INT8/INT4,是把浮点数量化成定点数。量化操作一般是除去一个量化因子$s = \frac {2^{N-1}} {ABSMAX}$,这个其实潜在地假设了数据满足的是均匀分布,实际上LLM权重满足的是一个正态分布。 那么NF4就把概率作为量化间隔,而不是把实际的数值差作为量化间隔。看以下这个图就明白了。p满足等差数列,而X明显不满足,越近0,X的分布越密集。 图源 https://zhuanlan.zhihu.com/p/654967425 这个时候把X归一化到到[-1,1],得到
Axuanz
Updating as per fate.