NLP-D30-自注意力机制Transformer

news/2024/7/19 9:49:05 标签: transformer, 自然语言处理, 深度学习

—0526在啃黄瓜,已经看了一会沐沐叻。

1、Trandformer

看着看着简直要喷黄瓜了hhhhhhhh。

Tranformer也挺简单的,我一张ppt就讲完了。

不过这张ppt做的挺好的hhhh
在这里插入图片描述

-------0600看完了transformer,但对应代码还没看,看了多头的代码。打算先code一下。
越来越觉得数学美了(主要是自己渐渐能看懂了),美就美在明确、简洁。

2、多头注意力

在这里插入图片描述
我只想说,ipad+pencil真的是学习dl神奇。维度之间的事情,用笔画一画就可以解决了。

—0720
数学推导太爽了!!收拾宿舍去!

----0816回来把的多头注意力的代码写完了、趴一会,去看看夏一部分了。

–0830开始开始!

3\多头自注意力机制

其实就是把q,和k-v都换成是自己。
刚刚的多头注意力,q是x,k-v是y。也就是q和k-v不一样。
在这里插入图片描述
在这里插入图片描述

—0905听着听着感觉代码量好大哇~但也正是提高的机会呢!

4、Transformer

1\Transformer 完全基于注意力机制,没有任何卷积或者循环神经网络的操作。
在这里插入图片描述
这段文字好精华啊
总结一下:
1、编码器两个模块:多头注意力+逐位前馈网络
(1)多头注意力是自注意力,后面再加上残差和规范化(layer-normalization),而且输入和输出的shape是相同的,这样可以保证能够重复n次。
(2)逐位前馈网络
这个其实就是两层全连接,为了解决3位其中不确定的n的问题,也就是全连接啦
2、解码器三个模块:
(1)掩蔽多头注意力:和encoder比,多了掩蔽,主要是因为我们不能提前知道后面的东西.用mask实现就好。后面进行残差+layer_normalization
(2)【new-old】这个模块是encoder中么有的,但是在seq2seq模型里还是比较常见的。这个模块的Attention不是自注意力,而是普通的注意力。Q选取刚刚的masked-multi-attention的输出,而K-V选取编码器的输出。后面再加上残差和layer-normalization。
(3)第三个模块还是逐位前馈网络,实现一个三个维度的全连接。
最后通过一个FC得到结果。
在这里插入图片描述

5\疑问:基于位置的前馈网络,还是不懂为啥,不过李沐大大也没解释hhhhhhhhhh说,就是个全连接hhhhh

他的意思莫非是展开了,然后用一个mlp直接一起处理不同sample的steps?然后这个MLP的输入信息是还有sequence信息的???一会再查查叭。
啊这。。查了一下,好像就也只是。。。简单全连接的感觉
在这里插入图片描述

6、层规范化

自然语言处理任务中,输入的通常是变长序列,批量规范化,不如层规范化好。
层规范化,就是基于特征维度进行规范化,也就是说,不同batch的seq长度可能不同,虽然认为pre了相同长度,但还是有pad存在,所以不同sample之间不好做规范化,可以一句话内自己进行规范,也就是层规范化。

7\num_hiddens

num_hiddens(如标号2所示)的数量就是X的dim【2】(如标号1所示)的大小——也就是用多少个neuron表示一个token。为了做n层,输入输出的shape应该是相同的,所以最后的第三位也要转换成num_hiddens那么大(如标号3所示)
**

补充:其实这个num_hiddens就是embedding的那个num_hiddens,也就是表示一个token的神经元的个数啦。 我感觉这里ffn的第一个参数写的是input而不是num_hiddens可能是随意写的,或者是为了后期的灵活性?至少从现在看来,他这里的使用ffn_num_input的大小都和num_hiddens是一样的,(因为最初shi的输入是经过embedding来的,最后一维度大小为num_hiddens;后面的输出由于ffn的output的大小为num_hiddens,所以后面的第三维度的大小也都为num_hiddens)。这里看,着实没有必要单独写这个ffn_num_input,不知道是不是为了后期操作呢???

**
在这里插入图片描述

对输入嵌入进行缩放

在这里插入图片描述
pos_encoding是做一个位置码+原来x的embedding的操作,但我感觉是embedding时做了scale,导致的X的每个量太小了,再加上pos又都在-1和1之间,会导致pos占主导地位,而本身X的信息不matter,所以先把X放大些,调整一下和pos信息的比例。

—1024休息一下下。。

TransformerEncoder测试

TransformerEncoder之所以传入的是二维的(batch,steps),是因为我们在这个TransformerEncoder里面内置了embedding层,可以将其变为num_hiddens个。
在这里插入图片描述

-------1051去打饭干饭啦!!!!!!

-------1356
看一个小时,争取把bert看完,就去做核酸啦~

本来这里有点不清楚,又看了一遍,懂了。
在预测的时候,我们的注意力是去看之前的输入和现在的输入,
我们在这里把他们cat起来,然后赋给key_values。一点点叠。
i表示第i个块,所以每个块都是分别叠的。
在这里插入图片描述
—1549做完核酸回来啦~顺便快把bert的代码视频看完了!!!棒棒!!!先看完最后一点

----1554顺便把微调看了叭!!但我感觉自己基本也知道啦!

—1622感觉要下雨了诶,想去跑个步!!!BERT微调也看完了哦!!一会把两课的QA看了!

—1829外面太阳好大,一会再去跑步。

—1838两个Q&A都看完啦~敲敲代码啦

8decoder的第二个attention做了类似于seq2seq的连接

从代码上看,应该是n个encoder和decoder对应的之间都做了query的。

因为在decoder里面之间forloop了num_layers个blk,每个blk都是三个模块,第二个模块介绍一个attention。
刚开始传过来encoder的state;
然后返回decoder i=1的state;
下次再更新为i=2的state

额鹅鹅鹅这么看,就相互查了1次呀。

在这里插入图片描述
在这里插入图片描述

9EncoderDecoder复习

主要是在forward中运行encoder,得到enc_outputs,再放入decoder.init得到dec_state,最后返回decoder结果。
所以,decoder里面的init_state就是根据enc_outputs【&enc_valid_lens】得到decoder初始化的一些信息【dec_state】。
再将dec_state放入decoder,和dec_X一起,得到最后的值。
妙蛙!
在这里插入图片描述

----2224嗯嗯搞明白了,transformer的每个decoder都会去查询最后一个encoder的output。代码上也是这个意思,尽管state一直在更新,但其实state[0]和state[1]并没有update,只是state[2]在变。
我在周五答辩,期待回家!
明天把bert代码跑一跑,可以结束沐沐的课,开nlp和读论文啦!!1


http://www.niftyadmin.cn/n/1264191.html

相关文章

Gradient Descent

视频:《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili 由于是寻找最小值,因此朝着导数为负数的方向进行,学习率可以理解每次走的步数,尽量设小一点,其本质上是贪心算法,因此最终的结果可能在局部最优而…

NLP-D31-《动手学pytorch》完结BERTLayer_norm

---------0439我感觉今天终于可以阶段性地看完沐沐的课了!!!狂喜!马上终于可以看看宝可梦了嘿嘿嘿! 1、ELMo&GPT&BERT对比 2\位置嵌入参数 全局来看,应该也就只有一个位置嵌入参数 3\BERT的val…

NLP-D31-ARIMA《人类语言处理》开课考试放松

--------0918刚刚把《动手学pytorch》看完敲完了hhh,所以重新开了一个blog。 想去看看ARIMA,这也是我之前挖的一个坑,感觉现在可以看了~嗯,去试试吧! ----0927EEE好像也不是很难挖。。。还是落实在代码上,…

Back propagation

当面对复杂的网络时,就无法用解释式。 当第一层输入为5个变量时,第二层的为6个变量,那么此时用矩阵进行计算,每个h都由五个input的权重构成,此时需要6*5个权重,以此类推,下一层需要42个权重。 …

NLP-D32-毕设答辩准备-《人类语言处理》03-04

—0446呜呜呜,怎么会有人给我的csdn打赏呢???惊!感谢!!! 今天的主要任务应该准备毕设的答辩&&下阶段学习任务确定&&日常学习 ------0453可以开始该ppt啦~~ 《人类…

使用idea开发Servlet

此时我们已经配置好了tomcat服务器 视频来源:B站动力节点老杜的Javaweb零基础 1.new project 在空工程下新建module模块 2.新建模块(File-->new-->Module)这里新建一个普通的java模块 3.让模块编程javaEE的模块(让Module变…

NLP-D33-毕设答辩-《人类语言处理》04-05-Location-aware-attentionCTC大数据比赛报名答辩被从源头上暴

—0452虽然今天答辩,还是很早就起了,ppt还想改一遍,论文还想读一下。早上听了会《人类语言处理》04,就是补昨天的坑啦。讲到的是Location-aware attention,主要是说我们直接用attention做语音辨识的话,弹性…

HttpServlet的使用

get与post请求 get 请求只能发送普通的字符串,并且发送的字符串长度有限。get在请求行上发送数据 Request URL: http://localhost:8081/htt/getservlet?usernamesza002415&userpwddasspost 请求可以发送任何类型的数据,包括普通字符串&#xff0c…