DataWhale组队学习 fun-transformer task5
1. 词向量:单词的“身份证”
首先,我们定义了四个单词的词向量,每个向量维度为3。你可以把这些词向量想象成每个单词的“身份证”。每个身份证上有3个特征,用来描述这个单词的“性格”或“特点”。
word_1 = np.array([1, 0, 0])
word_2 = np.array([0, 1, 0])
word_3 = np.array([1, 1, 0])
word_4 = np.array([0, 0, 1])
这些词向量可以堆叠成一个矩阵 words,就像把一堆身份证放在一个文件夹里,方便我们一次性处理。
words = np.array([word_1, word_2, word_3, word_4])
2. 权重矩阵:单词的“变身器”
接下来,我们生成了三个权重矩阵 W_Q, W_K, W_V。你可以把这些权重矩阵想象成“变身器”。每个单词通过这个“变身器”后,会变成不同的形态:查询(Query)、键(Key)和值(Value)。
W_Q = np.random.randint(3, size=(3, 3))
W_K = np.random.randint(3, size=(3, 3))
W_V = np.random.randint(3, size=(3, 3))
3. 计算查询、键和值:单词的“变身”
通过矩阵乘法,我们把每个单词的“身份证”通过“变身器”变成了查询、键和值。这就像把每个单词的身份证放进变身器,然后得到了三个不同的“变身形态”。
Q = words @ W_Q
K = words @ W_K
V = words @ W_V
4. 计算得分:单词之间的“相亲”
接下来,我们计算得分矩阵 scores,这个矩阵表示每个查询向量(Query)和键向量(Key)之间的“相亲”得分。得分越高,表示这两个单词越“般配”。
scores = Q @ K.T
5. 计算权重:用Softmax“打分”
为了让这些得分更加合理,我们使用Softmax函数将得分转换为概率分布。这就像给每个“相亲”打分,得分高的“相亲”会得到更多的关注。
weights = softmax(scores / np.sqrt(K.shape[1]), axis=1)
6. 计算注意力输出:加权求和
最后,我们通过加权和的方式计算注意力输出。这就像把所有“相亲”的结果综合起来,得到一个最终的“相亲报告”。
attention = weights @ V
7. 自注意力机制:单词的“自我对话”
在自注意力机制中,每个单词会和其他所有单词进行“对话”,看看谁更重要。这就像在一个会议上,每个人都会和其他人交流,最终决定谁的意见最重要。
attention_scores = torch.matmul(query, key.T) / torch.sqrt(torch.tensor(query.size(-1), dtype=torch.float32))
attention_weights = F.softmax(attention_scores, dim=-1)
output = torch.matmul(attention_weights, value)
8. 多头注意力机制:多角度“相亲”
多头注意力机制就像有多个人同时进行“相亲”,每个人从不同的角度去看待这些单词,最后把所有人的意见综合起来。
class MultiHeadAttention(nn.Module):def __init__(self, heads, d_model, dropout=0.1):super().__init__()self.d_model = d_modelself.d_k = d_model // headsself.h = headsself.q_linear = nn.Linear(d_model, d_model)self.k_linear = nn.Linear(d_model, d_model)self.v_linear = nn.Linear(d_model, d_model)self.dropout = nn.Dropout(dropout)self.out = nn.Linear(d_model, d_model)
9. 位置编码:给单词加上“时间戳”
为了让模型知道单词的顺序,我们给每个单词加上一个“时间戳”,这就是位置编码。这就像给每个单词加上一个“出生时间”,让模型知道谁先谁后。
class PositionalEncoding(nn.Module):def __init__(self, d_model, max_len=5000):super(PositionalEncoding, self).__init__()pe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)pe = pe.unsqueeze(0)self.register_buffer('pe', pe)
10. Transformer模型:一个完整的“翻译官”
最后,我们把所有这些组件组合在一起,形成了一个完整的Transformer模型。这个模型就像一个“翻译官”,能够把一种语言翻译成另一种语言。
class Transformer(nn.Module):def __init__(self, src_vocab_size, tgt_vocab_size, d_model, num_heads, num_layers, d_ff, max_len, dropout):super(Transformer, self).__init__()self.encoder_embedding = nn.Embedding(src_vocab_size, d_model)self.decoder_embedding = nn.Embedding(tgt_vocab_size, d_model)self.positional_encoding = PositionalEncoding(d_model, max_len)self.encoder_layers = nn.ModuleList([EncoderLayer(d_model, num_heads, d_ff, dropout) for _ in range(num_layers)])self.decoder_layers = nn.ModuleList([DecoderLayer(d_model, num_heads, d_ff, dropout) for _ in range(num_layers)])self.linear = nn.Linear(d_model, tgt_vocab_size)self.dropout = nn.Dropout(dropout)
总结
通过这些步骤,我们实现了一个完整的注意力机制和Transformer模型。整个过程就像是一个复杂的“相亲”过程,每个单词通过“变身器”变成不同的形态,然后通过“相亲”来决定谁更重要,最后综合所有人的意见,得到一个最终的“翻译结果”。
相关文章:
DataWhale组队学习 fun-transformer task5
1. 词向量:单词的“身份证” 首先,我们定义了四个单词的词向量,每个向量维度为3。你可以把这些词向量想象成每个单词的“身份证”。每个身份证上有3个特征,用来描述这个单词的“性格”或“特点”。 word_1 np.array([1, 0, 0])…...
【huawei】云计算的备份和容灾
目录 1 备份和容灾 2 灾备的作用? ① 备份的作用 ② 容灾的作用 3 灾备的衡量指标 ① 数据恢复时间点(RPO,Recoyery Point Objective) ② 应用恢复时间(RTO,Recoyery Time Objective) 4…...
电力晶体管(GTR)全控性器件
电力晶体管(Giant Transistor,GTR)是一种全控性器件,以下是关于它的详细介绍:(模电普通晶体管三极管进行对比学习) 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管(BJT&am…...
LQ1052 Fibonacci斐波那契数列
题目描述 Fibonacci斐波那契数列也称为兔子数列,它的递推公式为:FnFn-1Fn-2,其中F1F21。 当n比较大时,Fn也非常大,现在小蓝想知道,Fn除以10007的余数是多少,请你编程告诉她。 输入 输入包含一…...
Cursor 帮你写一个小程序
Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述:吃什么助手 项目名称: 吃什么小程序 功能目标…...
【机器学习】嘿马机器学习(算法篇)第13篇:决策树算法,学习目标【附代码文档】
本教程的知识点为:机器学习算法定位、 K-近邻算法 1.4 k值的选择 1 K值选择说明 1.6 案例:鸢尾花种类预测--数据集介绍 1 案例:鸢尾花种类预测 1.8 案例:鸢尾花种类预测—流程实现 1 再识K-近邻算法API 1.11 案例2:预测…...
echo ‘export PATH=/usr/local/bin:$PATH‘ >> ~/.bashrc这个和直接添加到/etc/profile有什么区别
echo export PATH/usr/local/bin:$PATH >> ~/.bashrc 和直接添加到 /etc/profile 都是用于修改 PATH 环境变量,但它们适用的范围和效果有所不同: 1. 修改 ~/.bashrc 文件 作用范围:~/.bashrc 是针对当前用户的配置文件,它…...
菜鸟之路Day09一一集合进阶(二)
菜鸟之路Day09一一集合进阶(二) 作者:blue 时间:2025.1.27 文章目录 菜鸟之路Day09一一集合进阶(二)0.概述1.泛型1.1泛型概述1.2泛型类1.3泛型方法1.4泛型接口1.5泛型通配符 2.Set系列集合2.1遍历方式2.2HashSet2.3LinkedHashSet2.4TreeSet 0.概述 内…...
写在新年之际
各位关注我的小伙伴们,大家好! 在这新年来临之际,首先祝大家新年快乐!愿新的一年充满机遇与收获,愿我们在各自的领域中继续突破和成长! 回顾2024年,这是充满变革的一年,不仅世界局…...
【shell工具】编写一个批量扫描IP地址的shell脚本
批量扫描某个网段中的主机(并发) 创建目录编写脚本文件 mkdir /root/ip_scan_shell/ touch /root/ip_scan_shell/online_server.txt touch /root/ip_scan_shell/offline_server.txt touch /root/ip_scan_shell/ip_scan.sh写入下面shell到脚本文件中…...
分库分表后如何进行join操作
在分库分表后的系统中,进行表之间的 JOIN 操作比在单一数据库表中复杂得多,因为涉及的数据可能位于不同的物理节点或分片中。此时,传统的 SQL JOIN 语句不能直接用于不同分片的数据,以下是几种处理这样的跨分片 JOIN 操作的方法&a…...
004 mybatis基础应用之全局配置文件
文章目录 配置内容properties标签typeAlias标签mappers标签 配置内容 SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandler…...
vim如何设置制表符表示的空格数量
:set tabstop4 设置制表符表示的空格数量 制表符就是tab键,一般默认是四个空格的数量 示例: (vim如何使设置制表符表示的空格数量永久生效:vim如何使相关设置永久生效-CSDN博客)...
基于dlib/face recognition人脸识别推拉流实现
目录 一.环境搭建 二.推拉流代码 三.人脸检测推拉流 一.环境搭建 1.下载RTSP服务器MediaMTX与FFmpeg FFmpeg是一款功能强大的开源多媒体处理工具,而MediaMTX则是一个轻量级的流媒体服务器。两者结合,可以实现将本地视频或者实时摄像头画面推送到RTSP流,从而实现视频…...
LangChain:使用表达式语言优化提示词链
在 LangChain 里,LCEL 即 LangChain Expression Language(LangChain 表达式语言),本文为你详细介绍它的定义、作用、优势并举例说明,从简单示例到复杂组合示例,让你快速掌握LCEL表达式语言使用技巧。 定义 …...
多线程编程杂谈( 下)
问题 是否存在其它中途线程退出的方法? 通过调用Linux系统函数 pthread_cancel(...) 可中途退出线程 Linux 提供了线程取消函数 取消状态 接受取消状态: PTHREAD_CANCEL_ENABLE拒绝取消状态: PTHREAD_CANCEL_DISABLE 取消请求 延迟取消: PTHREAD_CANCEL_DEFERR…...
rdma-core debug
export MLX5_DEBUG_MASK0xff export MLX5_DEBUG_FILE/tmp/mlx5.txt git clone https://github.com/linux-rdma/rdma-core.git cd rdma-core ./build.sh 修改build/CMakeCache.txt MLX5_DEBUG:BOOLTRUE function install_rdma_core {local dir/swgwork/cmi/rdma-core/buil…...
电脑无法开机,重装系统后没有驱动且驱动安装失败
电脑无法开机,重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了,电脑卡住后,强制关机,再开机后开机马上就关机。尝试无数次开机后失败,进入BIOS界面,发现已经没有Windows系统了。重新安装系统后&…...
【Java数据结构】了解排序相关算法
基数排序 基数排序是桶排序的扩展,本质是将整数按位切割成不同的数字,然后按每个位数分别比较最后比一位较下来的顺序就是所有数的大小顺序。 先对数组中每个数的个位比大小排序然后按照队列先进先出的顺序分别拿出数据再将拿出的数据分别对十位百位千位…...
机器学习-线性回归(对于f(x;w)=w^Tx+b理解)
一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …...
RAG与GraphRAG的区别
文章目录 前言RAG 的特点核心思想数据结构优势局限性应用场景 GraphRAG 的特点核心思想数据结构优势局限性应用场景 如何选型示例场景多跳推理问题推荐系统中的复杂关系社交网络中的影响力分析 总结 前言 RAG (Retrieval-Augmented Generation) 和 GraphRAG (Graph-Based Retr…...
Ubuntu环境通过Ollama部署DeepSeek-R1模型教程
Ollama 是一个专注于简化模型部署和推理的工具,特别适合在生产环境中快速部署和运行模型。 以下是如何使用 Ollama 来安装、部署和使用模型的步骤: 一. 安装 Ollama 首先,你需要安装 Ollama。Ollama 通常支持多种平台(如 Linux、…...
使用Ollama 在Ubuntu运行deepseek大模型:以deepseek-r1为例
deepseek大模型上热搜啦! 咱们来亲身感受下DeepSeek模型的魅力吧! 整个操作流程非常简单方便,只需要2步,先安装Ollama,然后执行大模型即可。 支持的deepseek-r1模型 deepseek-r1 DeepSeek-R1-Distill-Qwen-1.5B …...
【中间件快速入门】什么是Redis
现在后端开发会用到各种中间件,一不留神项目可能在哪天就要用到一个我们之前可能听过但是从来没接触过的中间件,这个时候对于开发人员来说,如果你不知道这个中间件的设计逻辑和使用方法,那在后面的开发和维护工作中可能就会比较吃…...
poi在word中打开本地文件
poi版本 5.2.0 方法1:使用XWPFFieldRun(推荐) 比如打开当前相对路径的aaaaa.docx XWPFFieldRun run paragraph.createFieldRun();CTRPr ctrPr run.getCTR().addNewRPr();CTFonts font ctrPr.addNewRFonts();// 设置字体font.setAscii(&quo…...
27. C语言 强制类型转换详解
本章目录: 前言强制类型转换(Type Casting)强制类型转换的语法示例1:将整数转换为浮点数输出结果: 代码解析: 整数提升(Integer Promotion)示例2:整数提升输出结果: 代码…...
【1】阿里面试题整理
[1]. Kafka如何保证数据一致性? Kafka主要通过副本机制、ISR机制、持久化机制以及事务机制等多种方式共同保证了数据的一致性。副本机制是Kafka确保数据一致性的基础,使用ISR(In-Sync Replica)机制来处理副本之间的同步,将消息持久化到硬盘中…...
MySQL知识点总结(十三)
执行逻辑备份要具备哪些条件,其优缺点在哪。 逻辑备份是温备,创建逻辑备份文件时,MySQL服务器必须处于运行状态,其他应用程序在逻辑备份期间不能修改但可以执行读取操作。逻辑备份会把表结构和数据转换为SQL语句保存。 逻辑备份…...
linux 环境安装 dlib 的 gpu 版本
默认使用 pip 安装的 dlib 是不使用 gpu 的 在国内社区用百度查如何安装 gpu 版本的 dlib 感觉信息都不太对,都是说要源码编译还有点复杂 还需要自己安装 cuda 相关的包啥的,看着就头大 于是想到这个因该 conda 自己就支持了吧,然后查了一下…...
Meta 计划 2025 年投资 650 亿美元推动 AI 发展
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
