哈喽,我是子牙老师。前面花了五年时间通关了计算机:手写操作系统、手写CPU虚拟机、手写Linux系统、手写GDB调试器、手写编程语言...,后面准备通关AI,研发出所有大家想学却没人教或者学不到的AI领域课程。如果你感兴趣,可以关注我的公众号【硬核子牙】
今天咱们来聊聊:y=wx+b。你可能想说:这有啥好聊的,在数学上,这就是一个线性函数;在大模型上,它是最简单的神经网络模型(单层神经元)......但是,它真的非常非常重要!
回归一下上篇文章(完整文章:真刀真枪讲大模型底层)
你猜对了!y=wx+b,就是鼎鼎大名的LM head!
LM head的作用是什么呢?将transformer输出的hidden state映射到vocab_size
你现在是不是听不懂这段话,容我解释一番,包让你听懂!(AI普及以后,很多人说不需要老师了。其实你在学习过程中,经常会遇到类似的问题,AI是可以给你答案,但是你看不懂,你自己又受自己的认知限制,又不知道自己为什么看不懂,需要怎么问AI......这就是个死循环。老师,他自己学过,他有经验,你一句听不懂,他就知道你什么问题,怎么讲你才能听得懂!所以,老师的价值会永远存在,只是老师的门槛在提高!)
先说第一个问题:transformer输出的hidden state,这是个啥?要讲清楚这个问题,你先得理解一件事:其实我们今天讲大模型,是把很多东西包含在里面了,比如:tokenizer、embedding、LM head、softmax,其实大模型,只是指transformer block。每个transformer block,就是包含:attention、qkv attention、masked multi head attention、Add&Norm、FNN
从图中的第 3、4、5 步,你应该能理解 hidden_dim 是什么了。在我写的 ChatGPT 中,embed_dim=4,表示一个 Token 使用一个包含 4 个数字的向量表示。由于 Transformer 内部始终保持这个向量维度不变,所以这里的 hidden_dim 也等于 4。Embedding 输出的是 Token 的初始向量,经过 Transformer 计算后得到的向量叫作 Hidden State。它们的维度都是 4,但里面的数值和包含的信息已经不同了。
这里顺便提一句:embed_dim必须能被num_heads整除!比如我写的Chatgpt中,多头注意力机制是2个head,每个head分两个数字进行计算
再打个比方帮你理解:你拿到一张蒙着灰尘的旧照片,一开始只能隐约看到照片中的人物,这就像初始的 Embedding。经过 Transformer 一层层分析和处理,就像把照片上的灰尘擦掉,并结合照片中的场景、人物关系判断谁是小时候的你。最终得到的 Hidden State 包含了更完整的上下文信息,LM Head 再根据它预测下一个 Token。
我又想起来一件事,通常hidden_dim=embed_dim,但是FNN的ff_hidden_dim,通常是hidd_dim的4倍。FNN具体是怎么玩的呢?你们可以问问AI,看看能不能看得懂,我后面再写文章分享。对大模型底层感兴趣的小伙伴可以关注我的公众号【硬核子牙】,看计算机底层、大模型底层,硬核文章。
第二个问题:hidden state为什么要映射到vocab_size(词表大小)。因为大模型底层预测token的本质就是:拿到hidden state,丢给LM head,得到一组向量logits,再丢给softmax,算出每个index位置的token的概率,取最大的那个(文章【真刀真枪讲大模型底层】细讲了,这里不展开了)

至此,你对y=wx+b为何重要、LM head到底是啥玩意、大模型预测token的本质......这些问题的理解,应该又上了一个台阶吧!
如果你想更多了解我,欢迎去我公众号【硬核子牙】看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,应该会对你有很大启发
若有收获,就点个赞吧