- 博客(84)
- 收藏
- 关注
原创 关于词向量的思考
最近刚学习。NNLM网络在训练过程中为每个单词生成了一个词向量,但从表示每个单词语义信息的的角度来说,生成质量不佳,于是有了后来的word2vec,转么学习高质量的词向量表示。.4f.4f可以发现,word2vec网络更简洁了。
2025-05-15 18:56:27
233
原创 pytorch nn.RNN demo
可以看到,nn.RNN默认会输出两个张量:一个是最后一个时间步的所有层,一个是最后一层的所有时间步。它是不会输出“所有时间步的所有层”的。
2025-05-15 17:13:12
295
原创 pytorch RNNCell
可以看到,每一次把输入送入RNNCell的过程,就是把输入部分和隐藏状态部分分别经过简单全连接层,并接上激活函数的过程。pytorch RNNCell的一次前馈本质上就是一个线性层。
2025-05-15 00:58:29
248
原创 NNLM神经网络语言模型总结
一开始还以为很复杂,总结一下就是:NNLM 将某个单词前 n−1 个词各自转为 embedding,拼接成一个 (n−1)⋅d 维的向量,再通过隐藏层 + 输出层 + softmax,预测下一个词的概率分布可以发现,这个2003年提出的模型在架构上和GPT,都是用之前的文字预测下一个文字;都是用之前文字的embedding经过一个特殊层(前者是FFN,后者是transformer decoder)来得到一个词表向量,根据向量的分量大小选择某个单词。
2025-05-14 17:26:38
334
原创 【bag of n-grams】 N-gram词袋模型 简介
Bag of n-grams是Bag of Words的扩展,它的核心思想是:忽略语序,只统计各个 N-gram 在文本中出现的次数或是否出现。
2025-05-13 20:39:37
332
原创 Sliding Window Attention(Longformer)
最简单的自注意力大家肯定都会啦。但这种全连接的自注意力(即每个 token 需要 attend 到输入序列中的所有其他 token)计算与内存开销是On2。为了缓解这个问题,研究者们提出了 Sliding Window Attention。
2025-05-05 22:48:16
866
原创 pytorch checkpointing
是一种在训练深度神经网络时通过增加计算代价来换取显存优化的技术。它的核心思想是:在反向传播过程中动态重新计算中间激活值(activations),而不是保存所有中间结果。这对于显存受限的场景(如训练大型模型)非常有用。
2025-05-05 14:24:14
352
原创 python hasattr()
是 Python 内置函数之一,用于检查对象是否具有指定名称的属性或方法。如果对象具有指定名称的属性或方法,则返回 True;否则返回 False。
2025-05-04 21:52:21
272
原创 batch normalization和layer normalization区别
Normalization无非就是这样一个操作:其中x是输入数据,维度为(B,T,C),其中B是batchsize,T是序列长度,C是embedding维度;括号内是标准化操作,γ和β是仿射变换参数。
2025-05-03 22:30:05
386
原创 Rotary Positional Embedding
当embedding维度为2时,position的位置每往后一个,就把embedding对应维度旋转θ角度,这就是RoPE的核心思想。问题:理论上讲,位置1,2对应的PE应该在距离上比位置1,500的PE更接近,但APE做不到这一点。的操作是完全一样的(如果去掉Attention Is All You Need中的PE的话)。解决了APE中的问题,但也带来了计算效率低下等问题。而矩阵的第一项,就是把矩阵做一个简单的旋转,这一点我们已经提到过了。矩阵乘法的后两项,就是把二维的embedding映射到。
2025-05-03 20:57:05
776
原创 旋转矩阵公式理解
也就是说,二者在x轴和y轴方向上都有分量。接下来将两个向量分别顺时针旋转。,我们可以将它分解为两个向量。设原始直角坐标系下的坐标为。
2025-05-03 19:38:54
219
原创 多头注意力FLOPs计算
假如矩阵A维度为m*n,矩阵B维度为n*p,那么二者相乘,得到C矩阵m*p,其中每个元素需要计算n次乘法和n-1次加法才能得到。也就是说,在一次矩阵乘法中,FLOPs为。
2025-04-30 16:26:05
198
原创 Precision-Recall曲线
这里和ROC曲线有一点不同:我们的虚线并不是”随机猜“的曲线,而是将所有样本都分为正类的曲线。另外,Precision和Recall都是越大越好。同样地,真实曲线(蓝色曲线)越靠近右上角越好。那么,我们同样可以用AUC来衡量真实分类器曲线的性能,一般分类器的性能同样是0.5到1之间的一个值。
2025-04-26 10:55:00
183
原创 ROC 曲线 和 AUC
而二元分类时输出的是0~1的概率,那么threshold的选取不同,就会导致不同的分类结果。于是,我们分别选取多个不同的threshold,就会得到多个不同的二元组(TPR,FPR),从而绘制出点图。注意,ROC曲线一定会经过(0,0)和(1,1)两点,代表全部分类为负和全部分类为正的结果。也就是说,(TPR,FPR)离(0,1)越近越好。不难观察到,紫色曲线的AUC,也就是在0到1区间上的积分为1,虚线(乱猜)的AUC为0.5,一般分类器的AUC在0.5到1之间。TPR越大越好,FPR越小越好。
2025-04-26 10:33:11
239
原创 怎样记忆Precision、Recall?
现在对所有样本进行预测。其中蓝色圆圈以内预测为正,蓝色圆圈以外预测为负。其中大矩形表示所有样本,左边的矩形表示正样本,右边的矩形表示负样本。FP(False Positive):标签为负,预测为正。FN(False Negative):标签为正,预测为负。TN(True Negative):标签为负,预测为负。TP(True Posive):标签为正,预测为正。Precision:TP在圆形中的比例。Recall:TP在左边矩形中的比例。TP+FP:预测为正的所有样本。TP+FN:标签为正的所有样本。
2025-04-24 22:17:47
299
原创 R-CNN,Fast-R-CNN-Faster-R-CNN个人笔记
注:此博客主要为了方便笔者快速复习,只讲大致框架,只讲推理,不讲训练,因此内容不会很详实。
2025-04-24 20:14:49
682
原创 Grouped Query Attention (GQA) PyTorch实现
一旦读懂了MQA,GQA的实现思路几乎完全一样,只是多用了一个不太常用的函数。关于这个函数,直接点击链接看笔者相关文章就行了,挺好懂的。为了读懂GQA,建议读者了解一下。的实现,这样顺着读下来会更顺手。
2025-04-19 17:38:38
425
原创 tensor.repeat和tensor.repeat_interleave
repeat和都可以用于在张量的某个维度上进行扩展,但适用的场景略有不同。选择哪个函数取决于你想要的复制粒度:块级 还是 行/元素级。
2025-04-19 17:20:52
241
原创 Multi-Query Attention (MQA) PyTorch 实现
和多头注意力机制的唯一区别:K、V在不同的head之间实现了复用,而对于不同的头,Q依然不同。
2025-04-19 10:56:30
279
原创 vscode ctrl+鼠标左键不能跳转
本人怀疑是重装vscode后,1.99版本的python插件残留下来的问题。bug果然可以存在于任何地方QAQ。语句中的包的颜色从之前的青色变成了现在的白色。再用ctrl+左键点击包名试图进行跳转,发现没有任何反应。笔者使用的vscode版本是1.85.2(一周前从1.99降下来的,因为版本过高连不上服务器)。最后在reddit一个小角落发现有人重装了python插件,然后就没问题了。试了一下,果然如此。再试了一下在光标处按下F12,依然不能跳转。,发现自己的设置和帖子一样,于是继续踩坑。
2025-04-08 11:20:51
467
原创 python 字符串 unicode和utf-8的区别,一文看懂!
在不同长度(1、2、3、4)字节的 UTF-8 编码中,每个 unit 的开头通常会有 0 或 1 的标识位。这是因为计算机在处理时,并不能预先知道某个字节是单一 unit 的 UTF-8 编码,还是多字节(双字节、三字节或四字节)的一部分。简短地说:最开始,一个byte(8个bit,可以表示128个不同的符号)就可以表示英文系统里的常见符号,于是就有了ASCII码。它的意思是,处理时以8个bit作为一个单元(unit),同理,UTF-16、32就分别以16、32个bit作为一个单元。
2025-03-15 00:52:24
245
原创 python str repr方法区别
方法的返回值会被预先定义为“含有相关有效信息”的字符串,比如。方法的返回值会被预先为用户友好型字符串,同样是打印,第二种打印方式就明确地表达了。但如果把上述代码中的。
2025-03-12 23:53:28
174
原创 pytorch detach,clone的区别
detach生成原始张量的view而不保留计算图;clone生成的张量附带计算图,计算该张量的梯度时,梯度会回传到原始张量。但clone张量不是原张量的view。另外,可以对clone张量的值进行局部修改,但局部修改以后,梯度更新时,该处的梯度不会回传。
2025-03-08 14:39:51
511
原创 pytorch retain_grad vs requires_grad
requires_grad大家都挺熟悉的,因此穿插在retain_grad的例子里进行捎带讲解就行。属性并不会在反向传播的过程中被自动保存下来(这是为了节省内存,毕竟我们只需要计算那些手动设置。的张量的梯度,并进行梯度更新,对吧?警告的大致意思是:访问了非叶子节点的。的梯度也在反向传播以后被正确保存了!因此,我们只需要添加一行代码。可以看到,现在非叶子节点。属性,但非叶子节点的。
2025-03-08 11:48:39
415
原创 linux软链接使用相对路径的问题
总结:在被链接的文件处,使用绝对路径,就没这么多事;如果使用相对路径,就要确保这个相对路径是相对于软链接文件所在目录的位置而言的,不然就会直接生成无效的软链接。这里的第一个路径如果是绝对路径,就没有任何问题。如果是相对路径,就要确保这个相对路径是相对于。中,查看当前目录结构,有。读者可以自行查看,此时。就是一个无效的软链接。这是因为执行命令时,
2025-02-06 00:58:08
268
原创 We couldn‘t connect to ‘https://huggingface.co‘ huggingface不能连接
可以在代码中设置环境变量。之后就可以正常访问了。
2025-01-24 14:53:50
267
原创 在pc上使用jupyter跑服务器上的代码
将该进程始终在后台进行,这样以后不用打开服务器,直接在本地就能访问服务器的jupyter了。就可以来到jupyter页面了。现在输入你之前设置好的密码,就可以访问你的服务器了。下一步,在服务器上来到你想要作为jupyter根目录的文件夹,使用命令。命令,创建你的jupyter密码。这一步很简单,就不截图了。在红框处看到的端口号8888就是你之后要使用的端口号了。最后,来到本地,在浏览器URL输入。现在ctrl+c退出,使用命令。首先,在服务器上使用。
2024-05-21 13:43:02
390
原创 如何在python中管理windows路径?使用斜杠还是反斜杠?遇到转义字符怎么办?
方法3:使用原始字符串加反斜杠。方法2:使用2个反斜杠。方法1:直接使用斜杠。
2024-05-16 09:30:05
460
原创 使用sed命令将txt文本中的所有序号加上10000
之后才弄清楚为什么错。g是global的缩写,表全局,即对每一行的所有符合“被替换内容”的文本生效。但由于我们只需要替换开头,其实是不需要g参数的。错误的原因在于,以为为了全局生效,必须使用g参数。其实s前如果不加任何数字,已经表示对所有行生效了。\1指代左边小括号括起来的内容,可以达到引用的目的。最后e的作用是:将替换部分当成shell指令执行。这里的-E是使用扩展的正则表达式的意思。本人最近处理数据,需要将txt文件中的。一开始,使用了如下命令。
2024-05-05 18:27:08
358
1
原创 bash执行sh文件和source(或.)执行sh文件,得到变量的作用域
bash执行文件时会在当前shell下开启一个子shell,于是在当前shell下是不能通过。得到的变量是可以在当前shell访问到的。来访问生成的变量的。
2024-05-03 22:42:41
237
原创 conda换源和pip换源
conda的换源网上教程很多了,我在这里就不提了,随便找个赞数高的教程参考即可。但是,conda换源成功后,只能运用于conda install命令,而pip install命令不会自动选取之前换的源。最近在anaconda虚拟环境里时,pip下载实在过慢,忍不住怀疑换源到底成功了没,最后发现conda和pip的换源不是一个东西。后成功换源的,之后的pip下载速度也是从若干kb成功变成了10多兆。本人的pip源是通过以下命令。
2024-05-03 13:33:14
659
2
原创 jupyter notebook切换conda虚拟环境
此外,进入ipy文件以后,点击kernel,再点击change kernel,如图中箭头所示,依然可以切换虚拟环境。其中,前一个d2l指虚拟环境名,后一个d2l指jupyter notebook中的虚拟环境名,二者可以不同。可以发现,在new中出现了d2l环境,接下来只需要手动选择一下,就可以切换环境了。最后,进入jupyter notebook。然后,如代码所示安装ipykernel包。
2024-05-02 16:34:39
504
1
原创 李宏毅2022机器学习/深度学习 个人笔记(3)
接下来李宏毅教授介绍了梯度下降的优化方案,如采用动量、RMSProp、Learning Rate Decay、Warm Up等。接下来介绍遇到鞍点时的优化办法。接下来探讨,当optimization不佳的时候,如何判断是遇到了鞍点还是遇到了局部最小值点?而红框是一个二次型,若二次型矩阵是正定或者负定的,则可直接判断出该点是局部最小还是局部最大。本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点。当然,这个方法不多用,只是介绍,顺便复习有关知识即可。关于多元函数泰勒公式,可参考。
2024-04-22 12:31:07
329
原创 多元函数泰勒公式(含黑塞矩阵)
即二元与一元函数的泰勒公式的微分形式是一样的。这里中间的矩阵就是黑塞矩阵。三元函数类似,读者可手推一下。中,应把dx看作一个整体,即一个微小变量的n次方。这里蓝色等号处需假设二阶偏导数连续。这就是含黑塞矩阵的泰勒公式。
2024-04-22 10:24:27
797
原创 李宏毅2022机器学习/深度学习 个人笔记(2)
假设它们之间独立,则协方差矩阵为对角矩阵,使用了Naive Bayes Classifier。可以发现,最终所求量为sigmoid(wx+b)的形式,且wx+b的形式正好说明了边界为直线。我们不一定采用高斯几率模型,也开始采用其他模型,这不是死板的。本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点。如图,boundary变为直线,结果也有上升。接下来,算一下z到底是什么。
2024-04-21 01:15:41
286
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人