冬游黄山

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

LSTM

LSTM 在 RNN 的基础上很好的解决了长距离详细传递的问题,它引入了 Cell State 和三个门 Forget Gate, Input Gate 和 Output Gate 来传输记忆和决定哪些记忆是需要的,哪些不需要。

Standford-CS336

!!! abstract 本节主要讲解常见的几种 Tokenizer 以及它们的优劣,最后介绍了 BPE 的实现思路。

  1. Character-based

    • 优点:不会出现 Out of vocabulary 的情况
    • 缺点:词表大小爆炸,需要涵盖每一种语言的每一个字符
  2. Byte-based

KVCache

KVCache 的应用场景
KV Cache 的主要目的是 “加速自回归生成”,在生成下一个 token 时,只需要计算当前 token 的 query、key、value。之前的 key/value 被缓存,直接拼接使用,避免重复计算整个历史序列的 attention,这在推理阶段能显著提升速度。但是在预训练阶段,例如 LLaMa 或者 GPT 采用的都是 Teacher-Forcing 这种并行训练,我们把 logits 和 labels 错位。这种计算是并行的,不需要“增量”生成,所以使用 KV Cache 反而会增加代码复杂度和内存开销,收益很小甚至为负。

Teacher-Forcing vs 自回归生成

Optimizer

深度学习一般的过程为:前向传播 → 计算 loss → 反向传播 → 计算梯度 → 更新参数,optimizer 的作用就是利用梯度来更新参数。梯度下降是一种流行的优化算法,算法计算出损失函数相对于神经网络中每个参数的梯度,然后在负梯度方向上更新参数,这样就能减少损失函数。

RoPE

RoPE 相对于正余弦位置编码和可学习位置编码,更能够表达相对位置信息,便于模型捕捉序列中元素之间的关系,还便于模型泛化到更长的序列,支持超长文本推理。

Bilateral LSTM

有些时候预测可能需要由前面若干输入和后面若干输入共同决定,这样会更加准确。因此提出了双向循环神经网络,网络结构如下图。可以看到 Forward 层和 Backward 层共同连接着输出层,其中包含了 6 个共享权值 w1-w6。

RNN

在 CS224N 的课程中学习了 RNN 的基本知识,为了深入了解背后的机制和代码实现,我让 GPT 设计了一个 RNN 相关的深度学习任务,通过 PyTorch 手搓一个 RNN 网络。

使用 RNN 实现英文字母序列预测任务(Character-Level Sequence Prediction)