Mask On Transformer

在 Transformer 中同时运用了两种掩码技术:

  1. 用于处理非定长序列的 padding mask
  2. 用于防止标签泄露的 causal mask

NLP 任务中,输入的长度往往不是统一的,训练的数据集里面样本长度各有不同。但是我们在实际训练中,往往需要把多个数据合成一个大的 batch 一同训练,这样可以充分利用显卡的性能。那么问题就来了,不同长度的文本如何合成一个大 batch 呢。NLP 的解决思路是:把所有输入的文本统一成一个固定长度,多余的位置用特殊字符 <PAD> 来填充。

MiniMind 学习指北(二):Tokenizer

在 CS336 的笔记中我已经完整介绍了一个 Tokenizer 是如何训练并且读取的,详情可见 cs336_assignment1

简单来说,训练一个 tokenizer 经过以下步骤:

  1. 通过正则分词,获得文本中全部 token,将其和 special_tokens 一起记录。
  2. 不断把文本中出现频率最高的 token_pair 合并得到新 token,然后用新 token 替换文本中原先的 pair。
  3. 重复上一步直到 vocab 达到指定规模。

上面的代码我们已经在 CS336 里实现过了,这一次我们通过 Huggingface 的 tokenizers 库直接生成。为了方便阅读,我先从如何得到一个 tokenizer 讲起。

MiniMind 学习指北(一):Model

这是 Minimind 学习指北系列的第一节,整个系列我们大致分为:

  1. 模型实现
  2. Tokenizer
  3. 预训练
  4. 评估
  5. 监督微调
  6. LoRA
  7. 强化学习
  8. 蒸馏
  9. 推理

RMSNorm 也是归一化 Normalization 的一种,它的提出是为了解决这样一个问题:当数据分布非常不一致的时候,模型无法很好的学习到数据里面的信息。从数学层面来看,我们举个例子:假设我们有一个函数

算法刷题记录

二分查找的原理就是不断收缩 left 和 right 指针,使得最终希望找的的元素 target 在他们围成的区域里。所以这就引申出两种写法,如果区域是左闭右闭的 [left, right],那么最终 target 就是 left==right 的那个值;如果是左闭右开的 [left, right),那么当 left+1==right 时候 target 就在左端点的位置。

CDN 加速博客和图床

把博客部署到 Github Pages 确实很方便,不过由于种种原因在内地没法直连,于是研究用 Cloudflare 加速一下。

Cloudflare 如何加速 GitHub Pages

首先,我们在域名提供商(例如我用的是阿里云的域名)将域名的 Nameserver 指向 Cloudflare:

冬游黄山

本来计划 12 月去青岛威海玩,连云港也在清单里放了很久了一直想去,但是小红书越刷就越犹豫。一会纠结 12 月青岛威海会不会下雪,一会纠结好玩的东西多不多,一会又在纠结钱会不会花太多了,所以就一拖再拖。后面考虑去太白山等等,最终看到 25 号黄山下雪就决定是你了。

CS336 Assignment 1: Tokenizer & Transformer

1. Understanding Unicode

(a) What Unicode character does chr(0) return?一个空字符。 (b) How does this character’s string representation (repr()) differ from its printed representa-
tion? repr() 输出的是它的字节表示,print 输出的是空字符。 (c) What happens when this character occurs in text? It may be helpful to play around with the
following in your Python interpreter and see if it matches your expectations: