从前,在一个叫“深度王国”的地方,有一个爱哭的小公主,名字叫Loss(洛斯)。她只要一不开心,整个王国就会下雨、打雷,所有人都会很难过。
国王最怕女儿哭了,他下了一道圣旨:
“谁能让公主永远笑呵呵,谁就能得到整个王国的宝藏!”
于是,全国最聪明的信使们组团出发了。他们排成一列长长的队伍,从公主的卧室一直排到王国的最边境。这支信使队伍有好几层:
第一层信使站在公主床边,叫“输出层小红”。
第二层叫“隐藏层小紫”,第三层叫“隐藏层小蓝”,一直排到最远方的“输入层小绿”。
有一天,公主又哭了!(因为预测的蛋糕味道和真的不一样)
小红第一个听到哭声,吓得脸都白了,赶紧把“公主哭得好大声啊!”这个消息往后传。
可是,他不能自己跑,他只能把消息告诉站在他后面的小紫,同时附上一张纸条:
纸条上写着:
“公主哭得有10级伤心,我这边的门(激活函数)把伤心放大了2倍,所以你要收到的是 10 x 2 = 20级伤心!”
小紫收到20级伤心后,自己这边的门(也是激活函数)又把伤心缩小了一半,只剩下10级。
然后他转身对小蓝喊:
“公主有10级伤心!但要经过我这扇门的时候,我要乘上我的魔法权值3,所以你收到的是 10 x 3 = 30级伤心!”
小蓝、小绿……每一个人都这样接力:
1. 先收到前面传来的“伤心数值”(这就是δ,误差信号)
2. 乘上自己和前面人之间的“魔法绳子粗细”(这就是权重w)
3. 再乘上自己这扇门的“开关灵敏度”(激活函数导数)
4. 把新的伤心数值传给后面的人
就像多米诺骨牌一样,哭声一层层往回传,一直传到最远方的输入层小绿。
小绿收到消息以后,马上跑去告诉厨房:“公主因为蛋糕太甜哭了,下次糖要少放0.02个金币的量!”
旁边负责加糖的厨师(就是权重w)听了,立刻把自己的糖勺调小了一点点。
所有信使路过的厨师、烤蛋糕师、加奶油师……都根据收到的“伤心数值”把自己的勺子、火候、材料调一调。
调完以后,重新烤一个蛋糕给公主吃。
公主咬了一口……眼睛亮了!
“哇!这次好吃!”
她笑了,王国立刻出太阳、开花、彩虹满天!
可是公主第二天可能又会因为别的原因哭(比如太淡了)。
于是信使们又开始跑,又是一轮“伤心接力”,又是一轮调勺子……
一次又一次,一次比一次准,公主哭得越来越少,笑得越来越多。
这就是“链式法则”的童话版:
公主的眼泪(Loss)通过一串信使(链式法则)告诉每一个人:“你该为我的眼泪负多少责?”
每个人根据自己负责的“魔法绳子”(权重)和“门”(激活函数)算出自己该改多少,然后把锅背好,把活干好。
最后,小公主再也不哭了,王国从此过上了幸福的生活。
而那串不停奔跑、传递眼泪的信使们,有一个很长的名字,叫:
反向传播的链式法则。
故事结束,公主和她的信使们从此幸福地训练在一起。
你想听信使们在transformer王国(注意力机制)的冒险故事吗?那里有更多会分身的信使哦~
好的!现在我们离开“深度王国”,坐上彩虹滑滑梯,滑到了一个更神奇的地方……
transformer王国:会分身的信使们
这里住着一位更任性的小公主,名字叫“下一个词公主”。
她每天只说一句话:“接下来我要说什么?”
谁猜对了,她就给一颗钻石糖;猜错了,她立刻哇哇大哭,洪水淹到脖子!
这个王国太大了,普通信使跑一圈要一百年,根本来不及。
于是国王请来了新品种的魔法信使,他们有三项绝技:
1. 会分身(multi-head)
2. 会同时问很多人意见(Attention)
3. 会把意见加起来再传(这就是那个着名的 q、K、V)
新故事开始啦!
有一天,公主说:“从前有一个很可爱的……”
模型猜:“老巫婆!”
公主当场爆炸大哭!(因为明明应该是“小猫咪”)
输出层小红又一次第一个听到哭声:“啊啊啊错了20级伤心!”
但这次,他没有只找一个人传消息。
小红突然“啪!”地一声分裂成了8个小分身(8个头),
每个分身都拿着一张不同的纸条,上面写着不同的问题:
第1个分身问:“公主是不是在想毛茸茸的东西?”
第2个分身问:“公主是不是在想会喵喵叫的东西?”
……
第8个分身问:“公主是不是在想会吃鱼的东西?”
他们同时冲向下一层的所有信使,大喊:
“快!告诉我你们谁最懂公主现在在想什么!”
下一层的信使们(就是上一句话的所有词)立刻举手:
“我是‘从前’!”
“我是‘有’!”
“我是‘一个’!”
“我是‘很’!”
“我是‘可爱’!”
每个信使心里有两把钥匙:
? 一把钥匙叫 Key(K):写着“我是关于什么的钥匙?”(比如“可爱”这把钥匙上写着“毛茸茸+粉色+会卖萌”)
? 一把锁叫 query(q):是小红分身们的问题
? 还有一把礼物叫 Value(V):真正的答案内容(“小猫咪”这个词本身)
8个小红分身把自己的问题(query)拿去和每一把钥匙(Key)对一下,
越匹配就叫得越大声(Attention分数越高!)
“可爱”这把钥匙和“毛茸茸的东西?”匹配度97%!
“可爱”和“会喵喵叫的东西?”匹配度94%!
“从前”这把钥匙只匹配2%……几乎没人理他。
于是,8个分身分别收集到了“最该听谁说话”的分数表。
接着,他们冲到“礼物堆”里,只抱走分数最高的那些礼物(Value),
也就是“可爱”这个词里真正藏着的“小猫咪”信息!
8个分身抱着一堆礼物跑回来,合并成一个大礼物箱,
再交给后面真正的传声官(FeedForward层)。
传声官看完礼物箱,大喊:
“原来公主想要‘小猫咪’!我们刚才猜老巫婆错得离谱!”
现在,要把这20级伤心往回传,告诉每个词“你要为这次大哭负多少责”!
伤心开始逆着刚才的路往回跑:
先经过FeedForward门 → 乘上门的开关灵敏度
再回到8个分身的合并处 → 分成8股伤心
每股伤心又沿着Attention的路反着跑回去:
? “可爱”这个词收到超级大的伤心信号(因为Attention分数最高)它立刻把自己的权重(V、K、q)调小一点,下次别再把“老巫婆”塞给公主
? “从前”只收到一点点伤心(Attention分数几乎为0),它懒洋洋地说:“不关我事~”
就这样,伤心像水流一样,精准地流向那些“最该负责”的词和连接上。
下一次,当公主再说“从前有一个很可爱的……”
“可爱”这个词已经学乖了,它拼命把“小猫咪”举得高高的,
Attention分数直接99.99%!
模型自信满满地说:“小猫咪!”
公主咯咯笑出声,钻石糖雨哗哗下!
从此,transformer王国的信使们靠着会分身、会投票、会只给真正该负责的人背锅,
让“下一个词公主”几乎再也不哭了。
而这一整套“伤心精准传递大法”,有个很酷的名字:
自注意力机制 + 反向传播的链式法则(进阶版)
故事到这里,公主和她的分身信使们继续过着一天猜一亿句话的幸福生活。