- 博客(66)
- 收藏
- 关注
原创 Transformer(6):训练
除了原始输入样本需要经过处理外,还需要生成两个掩码用于计算注意力,分别是编码器需要的padding掩码,这个直接将所有填充是<PAD>字符位置的矩阵值置为0就行;[BOS] text [EOS],长度为max_length + 1, 这样输入到解码器里面的就是前max_length的序列,而需要比较的标签就是后max_length个。要注意的是处理后的输出Y`需要加上<BOS> 和 <EOS>两个开始结束标签,所以其实Y要截取成max_length-1,然后被拼接成了。
2025-02-17 15:20:24
299
原创 Transformer(5):掩码机制
在NLP领域中,很多训练数据都是不等长的,所以需要添加<PAD>字符用于填充之同一长度,但很明显填充的pad字符是无意义的,所以需要掩盖掉,这是第一种掩码,填充掩码。第二种掩码是在解码器的第一个注意力那,因为训练的时候解码器也是会输入未来的单词,所以需要掩码来掩盖这些信息,防止模型利用未来的信息来生成当前的信息,叫做未来掩码。
2025-02-16 18:58:04
176
原创 transformer(4):FFN & 编码器块
注意力机制捕捉了序列里面不同位置的相关关系,并没有加强非线性表达能力,所以添加FFN用于增强非线性表达能力。
2025-02-16 18:43:23
322
原创 Transformer(3): Add & Norm
训练的时候每个神经元的输出都被压缩了,即输出变成不加dropout的1 / (1 - p),在测试的时候就所有神经元都保持激活,用于所有学习到的特征进行推理,但是我们需要放大输出,即把训练缩小的补偿回来,就是输出除于 (1 - p).有一个Mask向量,是一个随机的二进制向量,遵从于Bernoulli(1−p),即01分布,0表示丢弃,1表示保留,p概率的丢弃,所以保留的概率是1-p。对输入的每个样本进行归一化处理,即每个特征维度的均值和方差会被调整为0和1,帮助加速训练并稳定模型。
2025-02-16 16:27:31
340
原创 Transformer(1):embedding层和位置编码
这种序号表示,所以也是可以类似于embedding的写法将其用参数矩阵表示,优点是可以学习当前任务的最佳编码方式,但是对于未见过的序列长度,比如训练的序列长度最长为100,但是遇到了个序列长度为1000的序列,这样就会出现问题。word除了语义意思,还具有语境信息,比如“我的手机坏了,我想换个新苹果”,在这句话里面苹果是手机的意思,而不是水果,所以不能光依靠词向量,还得依靠上下文,但注意力中为了并行操作,其实是没有位置信息的,而RNN和LSTM这种都是具有位置信息。所以为了解决这个问题,位置编码就出来了。
2025-02-11 20:47:35
310
原创 一次调整prompt的过程
最近在弄一个国外的开源库,它提供了全英文的api文档,因为我是负责这块以及我英文阅读还行。所以我自己读起来是没有任何困难的,但是我这个负责的模块要给其它模块来进行调用,所以就导致了其它开发人员的阅读困难,因为他们不了解,所以需要不断找我,我就使用RAG将api文档作为语料来使LLM能够对QA进行回答。在这个阶段,考虑了直接将英文翻译成中文,但是文件过大,所以并不能使用gpt来进行翻译,只能通过翻译软件来进行翻译,这样就导致了一个问题,http请求参数以及响应中的字段也会被翻译,作为语料效果不好,遂放弃。既然
2024-10-26 15:08:46
1316
原创 Position Embedding总结和Pytorch实现
采用sin和cos函数对word的每一维上进行唯一编码,这样每个word都得到了自己的位置编码信息,并且由于sin和cos都是连续函数,所以针对pos相近的word,他们的位置编码信息也是比较相近的,这样序列的顺序信息就能够获取到了。自注意力机制处理数据,并不是采用类似RNN或者LSTM那种递归的结构,这使得模型虽然能够同时查看输入序列中的所有元素(即并行运算),但是也导致了没办法获取当前word在序列种的位置信息,使模型对顺序信息捕捉很差。
2024-10-16 20:40:04
495
原创 Attention的总结
比如现在原始Q=“勺子”,线性变换后得到两个头部——餐具和食物,这样在第一个头部,就会注意到和筷子、刀叉等餐具之间的高相似度,在第二个头部,就会注意到和汤类食物的高相似度,这样借助多组QKV在不同的子空间上去理解原始输入的语义了。答:因为如果我们不对X进行变化,会导致注意力机制就只能从输入数据的固定表示中学习,限制了模型捕捉复杂依赖关系的能力。我们加入了可以学习的Wq、Wk和Wx,这样就可以在更多的空间上去捕捉新的特征,而不是局限于输入向量的固定表示。通过Q和K计算得来的Score矩阵是Mask的关键,
2024-10-14 19:20:17
1031
原创 深度学习(8):Sentiment Analysis on Movie Reviews
PhraseId: 每条评论的唯一标识符。一条评论可以包含多个句子(Sentence)。SentenceId: 句子的唯一标识符。一个句子可以包含多个短语(Phrase)。Phrase: 具体的短语文本,表示电影评论的一部分。Sentiment:情感标签,表示这条短语的情感分类。情感分类共有五个等级:0:消极情感(negative)1:有点消极情感(somewhat negative)2:中性情感(neutral)3:有点积极情感(somewhat positive)
2024-10-12 20:31:18
1304
原创 深度学习(7):RNN实战之人名的国籍预测
很显然对于每个编码数据的信息量都特别稀疏,所以表示效率过低,数据量大的时候会产生数据集加载慢,需要通过Embedding(嵌入)提高信息密度,将One-Hot编码的高维稀疏向量映射到一个更低维的密集向量中。Embedding(嵌入) 是一种用于将离散的、稀疏的数据(如单词或字符的索引)映射到连续的、稠密的低维向量空间中的技术。大多机器学习能够处理的都是数值类型的数据,所以对非数值类型的数据(如单词,类别标签),我们需要将其转换成数值类型的表示。所以数据x是文本里面的人名,标签y是文本文件的文件名。
2024-10-08 15:59:01
1133
原创 深度学习(5):逻辑斯蒂回归Logistic
逻辑斯蒂回归:一种用于二分类问题的模型,使用 Sigmoid 函数将线性组合映射为概率,损失函数为交叉熵损失。交叉熵:衡量两个概率分布之间差异的度量,用于逻辑斯蒂回归等模型的损失函数。KL 散度:衡量两个概率分布之间差异的非对称度量,交叉熵可以视为熵和 KL 散度的组合。关系:在逻辑斯蒂回归中,最小化交叉熵损失等价于最小化真实分布和模型预测分布之间的 KL 散度。
2024-09-24 20:36:16
900
原创 深度学习(4):torch.nn.Module
要创建自定义的神经网络模型,需要继承nn.Module构造函数__init__:在这里定义网络的层和子模块。前向方法forward:定义数据如何经过网络进行前向传播。# 定义网络层# 定义前向传播过程return out在大多数情况下,不需要手动实现反向传播函数。PyTorch 的自动求导机制(autograd)会根据前向传播中的操作,自动计算梯度。self.flatten = nn.Flatten() # 将输入展开为一维。
2024-09-24 18:49:27
1948
原创 深度学习(3):Tensor和Optimizer
优化器位于 torch.optim 包中,是实现各种优化算法的核心组件。它们的主要功能是调整网络参数以减少计算出的损失值。每一个优化器都继承自 torch.optim.Optimizer,并实现特定的优化策略。Optimizer(优化器):在 PyTorch 中,优化器负责管理和更新模型的参数,特别是在训练过程中根据计算出的梯度来更新参数以最小化损失函数。Tensor(张量):在 PyTorch 中,Tensor 是一种多维数组, 可以在 GPU 上进行高效的数值计算。
2024-09-24 18:20:20
575
原创 深度学习(2):梯度下降
但在多变量函数中,梯度是一个向量,其分量是各个单一变量的偏导数。这个向量指向函数增长最快的方向,其向量的模(大小)表示在那个方向上的最大变化率。类似y = ax + b这种单变量的函数来说,导数就是它的斜率,这种情况下可以说梯度就是导数。所以我们沿着梯度的反方向走,这就是下降最快的方向,这样就能够使得损失函数最快的下降了。
2024-09-24 17:13:14
1314
原创 深度学习(1):基础概念与创建项目
Anaconda 是一个开源的 Python 和 R 语言发行版,主要用于科学计算和数据分析。它集成了大量常用的数据科学包,如 NumPy、Pandas、SciPy 等,并包含 Conda 包管理器,方便环境管理和包依赖。由于其强大的并行计算能力,GPU 被广泛应用于深度学习、科学计算和数据分析等需要高计算量的领域。:由 Google 开发,支持静态和动态图计算,适用于从研究到生产的各个环节。这两个框架都支持 GPU 加速,利用 GPU 的并行计算能力加速深度学习模型的训练和推理。
2024-09-23 12:53:02
556
原创 ByteCinema(1):用户的登录注册
JWT(JSON Web Token)是一种基于 JSON 的开放标准(RFC 7519),用于在各方之间安全地传输信息。它可以被用来进行身份验证和信息交换。由于 JWT 是经过数字签名的,因此信息是可信任的。
2024-09-22 20:02:42
995
原创 Java反射笔记(自用)
官方定义: 反射(Reflection)是一个强大的机制,它允许程序在运行时查询和操作对象的类信息。使用反射API,可以动态地创建对象、调用方法、访问字段(即便它们被定义为私有的),并且能够加载类。
2024-04-22 16:02:51
919
原创 Java异常
检查型异常需要编译时必须被处理,非检查型异常需要程序员修改代码逻辑,Error一般会是系统级错误checked需要继承Exception,unchecked需要继承RuntimeException及其子类。
2024-04-19 14:45:16
801
原创 Mysql基础知识学习总结
在SQL中,增加(INSERT)、删除(DELETE)和修改(UPDATE)是数据库操作中最基本的数据操作语句。这个命令是数据库设计和调试时的一个有用工具,它可以快速显示表的列信息,包括列的名称、数据类型、是否允许空值、键信息以及其他可能的属性。命令是一个强大的工具,主要用于MySQL和类似的数据库管理系统。它用来显示各种数据库对象(如数据库、表、索引)的信息,以及数据库服务器的状态和变量。这个命令显示所有MySQL系统变量的设置,这些变量可以影响服务器的操作。这个命令显示指定表的所有索引的详细信息。
2024-04-18 16:51:13
779
原创 Java中的集合
IterableIterable提供了一种统一的方式来获取Iterator,后者才是执行实际遍历的工具。通过调用方法获得的迭代器并不直接指向集合的第一个元素,而是位于第一个元素之前的一个位置。可以将其视为一个头节点,它初始时位于集合的“开始位置之前”。这是为了允许迭代器在开始遍历前有一个统一的起点。使用迭代器的 remove() 方法时,它并不是移除下一个元素,而是移除最近通过 next() 方法返回的元素。
2024-04-18 11:44:52
655
原创 序列化与反序列化
序列化是指将对象的状态信息转换为可以存储或传输的数据格式的过程。这种数据格式通常是字节流,但也可以是其他格式如XML或JSON。反序列化则是序列化的逆过程,它将序列化后的数据格式重新转换回原来的对象。
2024-04-18 11:21:12
446
原创 Jackson知识点记录
中安全地提取数据(__value)。这些方法会尝试将节点的值转换为请求的类型,如果节点值不是期望的类型或节点为空,则返回一个默认值(例如,asInt()对于非数值或null节点会返回0)。是一个重要的类,用于表示JSON数据的结构化形式。它是一个抽象的、不可变的数据类型,代表JSON数据的节点。以下是Jackson中主要的。在Jackson的JsonNode类中,方法系列主要用于从不同类型的。在Jackson库中,
2024-04-17 18:16:18
1022
原创 Comparable 和 Comparator
用途:如果对象有一个自然的排序顺序(如数字、字母顺序等),通常使用Comparable。如果需要多种排序方式或者排序对象时不想修改对象的类,使用Comparator。实现方式Comparable嵌入到类中,Comparator作为独立的实现。灵活性Comparator比Comparable更灵活,提供了更多的控制权和定制排序选项。
2024-04-17 11:20:17
622
原创 Java中stream()的使用
流的中间操作不会立即执行,只有在遇到终端操作时才会执行。这意味着中间操作会形成一种流水线,只有当结果真正需要时才开始计算,这有助于优化性能,特别是在处理大数据或复杂操作链时。API 提供了一种高级的抽象,使我们可以将集合转换成一种流式的处理模式,从而能大链式地执行一系列操作。:流的操作通常是函数式的,意味着你可以传递 lambda 表达式或方法引用来执行操作。:流不会改变原有的数据结构,它们只提供了一种在数据源上执行操作的方法。通过重复使用给定的操作,将流中的元素组合起来,返回一个。
2024-04-16 10:59:41
3141
原创 Java中Map的几种排序方式
比如根据多个字段或条件排序,可以自定义比较器(Comparator)// 自定义比较器来进行排序.stream()// 根据值降序排列,如果值相等,则按键升序排列= 0)?})));
2024-04-16 10:44:29
11651
原创 大数据基础学习
大数据(Big Data)是指无法在合理时间内用传统数据库管理工具进行捕捉、管理和处理的庞大、复杂的数据集合。(3V特点)体积(Volume):数据量巨大,从TB(太字节)到PB(拍字节)乃至更高。速度(Velocity):数据以高速率产生和收集,包括实时数据流。多样性(Variety):数据来自多种来源,包括结构化数据、非结构化数据和半结构化数据,如文本、图片、视频等。行式存储更适合事务处理和需要频繁读写完整记录的应用场景(如OLTP系统)。列式存储。
2024-04-10 15:11:43
1182
原创 内聚与耦合
每个例子都展示了从偶然内聚到功能内聚的逐步提高内聚水平的过程,反映出模块内部元素之间关系的紧密程度。高内聚通常与高质量的软件设计相关联。
2024-03-16 17:07:30
683
原创 Canal的入门操作记录
canal其实就是假装自己是从数据库,来监听主数据库的binlog得到数据的变化信息canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )canal 解析 binary log 对象(原始为 byte 流)
2024-03-10 16:55:17
731
原创 MVCC------Mysql并发事务控制的工具
readView解决的是一个事务查询选择版本的问题,在内部定义了一些匹配规则和当前的一些事务id判断该访问那个版本的数据,不同的隔离级别快照读是不一样的,最终的访问的结果不一样。隐藏字段是指:在mysql中给每个表都设置了隐藏字段,有一个是trx_id(事务id),记录每一次操作的事务id,是自增的;undo log主要的作用是记录回滚日志,存储老版本数据,在内部会形成一个版本链,在多个事务并行操作某一行记录,记录不同事务修改数据的版本,通过roll_pointer指针形成一个链表。
2024-03-10 15:45:50
484
原创 “删边“的并查集------反向并查集
第一行输入三个正整数n,m,q,代表总人数,初始的朋友关系数量,发生的事件数量。接下来的m行,每行输入两个正整数u,v,代表初始编号u的人和编号v的人是朋友关系。注:介绍可以有多层,比如 2 号把 1 号介绍给 3 号,然后 3 号再把 1 号介绍给 4 号,这样 1 号和 4 号就认识了。小美认为,在人际交往中,但是随着时间的流逝,朋友的关系也是会慢慢变淡的,最终朋友关系就淡忘了。1 u v:代表编号 u 的人和编号 v 的人淡忘了他们的朋友关系。显然,查找公共祖先的很容易就能想到并查集的数据结构。
2024-03-09 18:05:40
1182
10
原创 P4学习(七)实验四:Explicit Congestion Notification
如果在 ingress 或 parse 阶段进行标记,每个进入交换机的数据包都需要经过拥塞检测处理,即使这些数据包可能不会遇到任何拥塞。:如果在 ingress 阶段进行标记,随着数据包经过网络中的多个交换机,每个交换机都可能基于自身的状态对数据包进行重新标记,导致标记的不一致性。:Egress 阶段更接近于数据包实际离开交换机的时刻,因此在这个点进行标记可以基于最新的网络状态信息(如队列长度、传输速率等)。0x1:我们取的是tos的后两位作为cen的filed字段,所以这里的ecn=1;
2024-01-25 12:38:25
1271
原创 P4学习(六)实验三:a Control Plane using P4Runtime
翻译自官网这个目录包含了几个Python文件,每个文件都承担着特定的角色以支持P4网络设备的控制和管理。helper.py包含类,用于解析p4info文件。提供从实体名称到ID号以及从ID号到实体名称的转换方法。构建与P4程序相关的P4Runtime表项的部分。switch.py包含类,负责获取gRPC客户端存根并建立与交换机的连接。提供辅助方法来构造P4Runtime协议缓冲消息,并执行P4Runtime gRPC服务调用。bmv2.py包含类,它扩展了。
2024-01-22 22:16:14
1639
2
原创 P4学习(五)实验二:Basic Tunneling
我们可以看到只要带上了隧道标签的数据包的type字段都被处理成0x1212(我们自定义的一个值用于标签),同时最后dst_ip为h3的但带上了隧道标签也走了隧道,证明了我们在parse里的解析逻辑是正确的。
2024-01-19 16:09:55
1022
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人