![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度学习
文章平均质量分 66
重剑DS
学的越多,越觉无知
展开
-
训练集、验证集、测试集的本质区别
这时候就需要验证集了,我们可以这样:当我们train一个epoch,也就是完整过完一遍训练集,就把验证集扔进模型,然后产生指标,如果产生的指标在连续若干个epoch都没有精进,那么说明模型泛化能力在走下坡路,赶紧停止train了,这就是早停策略。我们都知道训练集的数据扔进模型,模型前向传播,过损失函数,然后反向传播来更新模型的参数,但是想想,要是没有验证集,我怎么知道什么时候停下来呢?早早学习深度学习,就了解到了训练集、验证集、测试集的概念,训练集好理解,但是验证集和测试集这两个越看越像。原创 2024-04-22 00:02:47 · 292 阅读 · 0 评论 -
xavier_uniform_、均匀分布、高斯分布初始化嵌入权重
(也叫Glorot uniform initialization) 我觉得是特殊的uniform。原创 2024-04-08 14:57:02 · 359 阅读 · 0 评论 -
使用subprocess包来在python代码实时查看GPU利用率
最近又被GPU利用率问题导致训练不高效的问题搞到了(恼),所以在py使用代码看看是哪出了问题。原创 2024-04-04 11:08:42 · 271 阅读 · 0 评论 -
variational approximation posterior distribution (变分近似)
在统计和机器学习领域,我们经常会遇到需要估计后验分布的情况,后验分布是指在给定观测数据后,我们对未知量(比如模型的参数)的不确定性的概率描述。想象你有一堆数据,你想根据这些数据来猜测某些你不知道的量(比如一个事件发生的概率)。在贝叶斯统计中,你会用到后验分布来表达你的猜测。但问题在于,对于很多复杂的模型,这个后验分布非常难以直接计算。这个简单的分布有一些参数,通过调整这些参数,我们使得这个简单的分布尽可能地接近真实的后验分布。这个过程有点像是在不同的简单分布中找到最佳的“替身”来扮演复杂后验分布的角色。原创 2024-03-27 12:42:50 · 261 阅读 · 0 评论 -
Full-batch Training、Mini-batch Training、Stochastic Training (SGD)
在Mini-batch训练中,数据集被划分为多个较小的批次,每个批次包含多个样本(例如,32、64或128个样本)。这种方法试图在嘈杂的SGD更新和缓慢的全批量更新之间找到平衡,通常可以提供更稳定的收敛,并且相对于全批量训练,可以更有效地利用内存。: 在最纯粹的形式中,SGD每次使用一个训练样本来更新模型的参数。因此,主要区别在于样本数量:SGD理论上每次更新只使用单个样本,而Mini-batch Training每次更新使用多个样本(但不是全部样本,与Full-batch Training相对)。原创 2024-03-24 19:53:47 · 286 阅读 · 0 评论 -
model.to(‘cuda:0‘) 时,被移动到显存的变量类型
如果你的模型中包含了 Python 原生类型的列表或者 NumPy 数组,它们将保留在 CPU 上的内存中。时,它会将模型的所有参数和缓存(buffers)转移到指定的GPU设备上。这里提到的“参数”通常指的是模型的权重,它们是。仍然在 CPU 的内存中。记住,当你完成 GPU 上的计算后,如果需要将数据从 GPU 再传回 CPU,你可以使用。如果你需要将这些数据结构中的数据用于 GPU 计算,你必须手动将它们转换为 PyTorch 张量,并使用。类型,而“缓存”是指注册为持久状态的张量。原创 2024-03-19 11:14:18 · 316 阅读 · 0 评论 -
dropout函数和Dropout 类的区别
在 PyTorch 中,dropout 可以以两种方式使用:一种是作为一个独立的函数,另一种是作为一个层。虽然它们在操作上是相似的,但它们在使用上有所不同。原创 2024-03-18 15:57:09 · 204 阅读 · 0 评论 -
AutoDL使用conda运行pytorch、dgl
环境配置要是出现兼容问题还是挺繁琐的。所以这里记录下成功的配置情况。测试代码test.py。原创 2024-01-30 12:17:24 · 830 阅读 · 0 评论 -
二元交叉熵损失函数(Binary Cross Entropy Loss,BCELoss)是交叉熵损失函数(CrossEntropyLoss)的特殊情况
一直以来看到还以为是很复杂的东西,原来其实是,也就是二元交叉熵损失函数其实就是交叉熵损失函数。原创 2023-11-11 15:41:27 · 3159 阅读 · 0 评论 -
注意力机制QKV在GAT(Graph Attention Network)的体现
GAT(Graph Attention Network)被称为注意力机制的一种图神经网络,它使用了注意力机制的思想。在GAT中,每个节点与其邻居节点之间的关系被建模为具有不同权重的注意力权重。这就涉及到了注意力机制中的Q(查询)、K(键)和V(数值)的概念。在GAT中,Q、K和V是通过线性变换从节点的特征向量中获得的,那么就和自注意力机制self-attention一样,是和节点的特征向量同源的,也就是Q、K、V都是来源于节点的特征向量,只不过Q、K、V是节点的特征向量的线性变换的产物罢了。这些变换将原创 2023-10-26 17:07:20 · 560 阅读 · 0 评论 -
对知识蒸馏的一些理解
知识蒸馏是一种模型压缩技术,它通过从一个大模型(教师模型)中传输知识到一个小模型(学生模型)中来提高学生模型的性能。总损失就是一个软损失和硬损失的加权求和。软损失soft loss就是拿。原创 2023-10-23 19:32:30 · 250 阅读 · 0 评论 -
Reparameterization trick(重参数化技巧)
这个确定性函数通常是一个线性变换,将从标准高斯分布(均值为0,方差为1)中采样的随机噪声与潜在变量的均值和标准差相结合。然后,通过一个神经网络或其他可微分的映射函数,将这个随机噪声向量与模型的均值和标准差参数相结合,生成最终的潜在变量。总之,“Reparameterization trick” 允许模型在训练过程中通过随机采样得到的潜在变量,同时保持了可微性,从而使生成模型更容易优化。:在生成模型中,通常会有一个随机性的潜在变量,例如高斯分布中的均值和方差,用于生成样本。原创 2023-10-22 11:03:34 · 3222 阅读 · 0 评论 -
nvcc -V和nvidia-smi的关系
nvcc -V的版本号是CUDA工具包的版本信息,而nvdia-smi上面写的很清楚,是cuda的版本号了。都与NVIDIA GPU相关,但它们提供的信息和功能有所不同。原创 2023-10-19 16:04:07 · 2831 阅读 · 1 评论 -
Hard negtive node(硬负样本节点)与 Easy negative nodes(简单样本节点)
顾名思义,是比较硬的,难区分的。"硬负样本"通常指的是那些与positive node正样本节点相似度非常高,难以在潜在空间中与正样本区分开来的负样本。这些节点通常对于训练机器学习模型来说是挑战性的,因为模型需要学会正确地将它们分类为负样本。使用对比学习contrastive learning可能有效开采Hard negtive node。上面的区分开,我觉得都是指节点都变为嵌入向量后再来进行区分,因为在嵌入空间的区分感觉更方便和直观。:和上面一比较,意思是很容易与正样本节点区分开的。原创 2023-10-15 14:43:49 · 343 阅读 · 0 评论 -
推荐系统领域,over-uniform和oversmoothing问题
总的来说,over-uniform 强调了过度依赖热门物品的问题,而 oversmoothing 强调了过度平滑导致推荐结果不够个性化和多样性的问题。在推荐系统领域,“over-uniform” 和 “oversmoothing” 是与模型性能和推荐结果相关的两个概念,它们通常用于描述模型的行为和性能问题。Oversmoothing 可能会导致推荐结果缺乏多样性,用户得到的推荐很可能与他们以前的行为相似,而忽视了可能的新兴趋势或个性化需求。原创 2023-10-13 15:11:49 · 146 阅读 · 0 评论 -
可选的优化器:Adam、SGD、Adagrad、RMSprop、Sparse Adam
Adagrad 是一种自适应学习率算法,它根据每个参数的历史梯度来调整学习率。这些优化算法在深度学习中起到关键作用,不同的算法适用于不同的问题和数据集。Adam 通常被认为是一种默认的选择,因为它在许多情况下表现良好。它结合了动量和自适应学习率的特性,能够在训练过程中自动调整学习率。RMSprop 也是一种自适应学习率算法,它使用了类似 Adagrad 的思想,但引入了一个衰减系数来限制历史梯度的影响。这是一些用于训练神经网络和深度学习模型的优化算法,它们用于更新模型的权重以最小化损失函数。原创 2023-10-10 18:42:12 · 546 阅读 · 0 评论 -
对负采样(negative sampling)的一些理解
这是负采样的一部分,目的是与已观察到的物品 i 进行比较,以计算 BPR 损失,以便推动模型更好地区分用户对已观察到的物品和未观察到的物品的兴趣。这是通过负采样来实现的。具体来说,负采样在这里用于生成未观察到的物品(负样本),以便在BPR损失中比较已观察到的物品和未观察到的物品之间的差异。通过随机或其他采样策略,从未观察到的物品中选择一些物品作为负样本,然后计算它们与已观察到的物品之间的兴趣差异,如公式(15)所示。BPR损失函数的目标是鼓励模型使观察到的物品的预测兴趣高于未观察到的物品的预测兴趣。原创 2023-09-30 10:36:52 · 790 阅读 · 0 评论 -
图卷积网络(GCN)中应用于推荐系统时,“oversmoothing“(过度平滑)问题
在图卷积网络(GCN)中应用于推荐系统时,"oversmoothing"(过度平滑)是一个重要的问题。这个问题涉及到节点在图中传播信息的过程中逐渐丧失了其初始特征信息,导致节点的嵌入变得过于相似,难以区分不同节点之间的差异。具体来说,oversmoothing 表示在多层 GCN 中,当信息在图上传播时,每一层节点的嵌入变得越来越相似,最终导致节点之间的区分度减弱。这是因为每一层的图卷积操作都会对节点的嵌入进行加权平均(GCN特有的聚合操作),而这种平均会导致信息的混合和平滑。原创 2023-09-29 15:45:16 · 354 阅读 · 0 评论 -
机器学习---冷启动(Cold Start)、热启动(Warm Start)问题
在冷启动情况下,系统需要处理缺乏历史数据的情况,而在热启动情况下,系统可以充分利用历史数据来进行推荐。解决冷启动问题是推荐系统领域的一个重要挑战,需要创新的方法和技术来应对。在热启动阶段,推荐系统可以依赖用户的历史行为和交互数据来进行推荐,因为系统已经了解了用户的兴趣和喜好。在机器学习和推荐系统领域,“冷启动”(Cold Start)和"热启动"(Warm Start)是两个常用的概念,它们用来描述不同阶段或情境下的推荐问题。冷启动指的是当推荐系统面临一些新的或没有足够历史数据的情况下,如何进行推荐。原创 2023-09-26 10:51:08 · 2345 阅读 · 0 评论 -
Node2Vec实战---《悲惨世界》人物图嵌入
4. 接下来导入Node2Vec模型,并设置其模型参数,并将最终得到的各个节点的嵌入向量embedding赋予给变量X。上图的效果其实很像原论文里所谓DFS的效果,也就是挖掘同质社群,我觉得更通俗一点,就是相邻的节点其实就是一类。6. 将Embedding用PCA降维到2维,进行节点embedding降维可视化。3. 可视化图,with_labels=True,以此给每个节点的名称显示出来。将词汇表的节点顺序转为networkx中的节点顺序。7. 找到和拿破仑相似的节点。2. 导入内置的数据集。原创 2023-09-23 13:04:55 · 567 阅读 · 0 评论 -
DeepWalk实战---Wiki词条图嵌入可视化
3. 创建好后,安装必要的工具包,gensim是NLP领域的经常要用的工具包,因为DeepWalk其实就是把NLP中的Word2Vec直接用到图上,所以可以直接用NLP领域的工具包gensim。随机森林这一个节点的具体embedding向量如下,完全符合论文中说的那样,embedding是低维(相比起邻接矩阵n*n,已经变小成n*k了,n为节点数量,k为embedding向量长度)、连续(都是大大小小的连续实数)、稠密(向量中无没用的0元素,如one-hot就一大堆0)的向量。原创 2023-09-21 15:00:21 · 704 阅读 · 0 评论 -
PageRank实战---西游记人物节点重要度
然后使用zip函数将head和tail两列数据组合成一个新的列表edges,其中每个元素是一个元组,包含一对节点。9. 接着给每个节点、每条边颜色绘制,并且设置每个连接边的透明度等,透明度当然是越靠前的节点越不透明,因为越靠前的节点的PageRank越高,自然越重要,越不能透明。2. 安装完后,导入所需工具包,并且将matplotlib所画的图内嵌到jupyter中,并且设置中文字体等来正确显示汉字。如下,每个节点的名称可以使用G.nodes打印及,len(G)能够打印出来节点的数量。原创 2023-09-19 18:53:42 · 442 阅读 · 0 评论 -
【深度学习】日常笔记16
X表示该小批次的特征,形状为[batch_size, feature_dim],其中batch_size是小批次的大小,feature_dim是特征的维度。通过独热编码,我们可以将每个类别表示为一个二进制的指示符特征,其中只有一个特征为1,表示当前观测值所属的类别,其余特征都为0。这样做的好处是,通过一次性处理多个样本,可以利用硬件加速的优势,提高训练的效率和速度。在实际应用中,了解数据集的特点和目标任务的要求,以及适应性地选择合适的划分策略,是确保K折交叉验证的有效性的关键。原创 2023-08-11 14:25:47 · 581 阅读 · 0 评论 -
【深度学习】日常笔记15
样本生成和增强:对目标域的数据进行样本生成和数据增强操作,以增加目标域的样本多样性和丰富性,减小协变量偏移的影响。校正样本权重:通过调整目标域样本的权重,使其在训练中获得更大的关注度,以减小协变量偏移的影响。在实施协变量偏移纠正前,建议首先对数据进行详细的分析和了解协变量偏移的特点,并进行预实验和模型评估来决定合适的方法和策略。如果在训练数据中选择的特征在真实数据中没有重要性或相关性,模型在真实数据上的性能可能会下降。是从真实分布中抽取的所有数据的总体损失的预期,然⽽,这个数据总体通常是⽆法获得的。原创 2023-07-24 09:37:37 · 453 阅读 · 0 评论 -
【深度学习】日常笔记14
在这个网络中,每一层的隐藏变量h(l)通过变换函数fl(h(l-1))得到,其中l表示层数,h(l-1)表示上一层的隐藏变量。在深层网络中,我们有一系列的变换函数f(l),其中每个函数都作用在前一层的隐藏变量h(l-1)上,以产生当前层的隐藏变量h(l)。· ∂W(l)h(l) 表示将所有∂h(L-1) h(L),∂h(l)h(l+1),∂W(l)h(l)这些项依次相乘。②初始化权重的对称性:如果网络的初始权重具有某种对称性,比如在对称的权重矩阵中,不同的神经元连接具有相同的权重值。原创 2023-07-24 09:36:40 · 470 阅读 · 0 评论 -
【深度学习】日常笔记13
某个带有x的公式,但是这个x是未知数,还得带入前向传播计算后存储的中间值x才能算出具体的导数值,也就是梯度值。这也是训练⽐单纯的预测需要更多的内存(显存)的原因之⼀,因为预测只需要进行前向传播即可,我们不需要更新参数,因此也不需要进行反向传播。计算的顺序 与前向传播中执⾏的顺序相反,因为我们需要从计算图的结果开始,并朝着参数的⽅向努⼒。综上所述,计算二阶导数需要更多的计算量和内存消耗,预计会比计算一阶导数花费更长的时间。预计计算二阶导数需要更多的计算量和内存消耗,因为需要保留和计算更多的中间结果。原创 2023-07-17 13:23:51 · 358 阅读 · 0 评论 -
【深度学习】日常笔记12
假设标签是随机均匀分配的,并且有10个类别,那么分类器在测试数据上很难取得⾼于10%的精度,那么这⾥的泛 化差距就⾼达90%,如此严重的过拟合。然⽽也有⼀些例外:⼀些研究⼈员在测试时使⽤暂退法,⽤于估计神经⽹络预测的“不确定性”:如果通过许多不同的暂退法遮盖后得到的预测结果都是⼀致的,那么我们可以说⽹络发挥更稳定。因此,当用这种训练方式得到的网络去处理新的、与训练集不相关的图像时,它的预测能力非常有限,准确率会很低,可能只有不到10%。5. 以本节中的模型为例,⽐较使⽤暂退法和权重衰减的效果。原创 2023-07-17 13:22:50 · 371 阅读 · 0 评论 -
【深度学习】日常笔记11
在这个例子中,通过将特定参数的梯度计算和更新置于with torch.no_grad()中,with torch.no_grad() 包裹了这个操作,确保在禁用梯度计算这段时间内,PyTorch不会记录这些操作的梯度信息,然后可以将这些参数的requires_grad属性设置为False,从而使得这些参数的梯度计算被禁用,不参与优化过程。当梯度计算出来时,与梯度下降法相比,L1正则化会添加一个额外的惩罚项lambda * sign(w),导致权重向量的更新同时受到梯度和正则化项的影响。原创 2023-07-17 12:37:46 · 471 阅读 · 0 评论 -
【深度学习】日常笔记10
常常使⽤L2范数的⼀个原因是它对权重向量的⼤分量施加了巨⼤的惩罚,因为开了平方,那大分量开平方会更大,那么惩罚力度也就越大,这使得学习算法偏向于训练出一个在大量特征上均匀分布权重的模型。而L2正则化通过惩罚大型参数,迫使模型在进行优化时更倾向于选择较小的参数值,从而限制了模型的复杂度,减少了过拟合的风险。),会导致训练模型时出现数值不稳定的情况,因为每个特征的尺度不同,可能会导致某些特征对模型的影响更大,从而影响模型的性能。,而不是计算后的结果。较小的λ值对权重w的约束小,较大的λ值对权重w的约束大。原创 2023-07-07 16:27:26 · 1509 阅读 · 0 评论 -
【深度学习】日常笔记9
神经网络适用于处理大规模的数据集和复杂的非线性问题,具有较强的拟合能力和泛化能力。(generalization error)是指,模型应⽤在同样从原始样本的分布中 抽取的⽆限多数据样本时,模型误差的期望。横轴表示模型复杂度越高,说明d越大,多项式的阶数也就越大,这时候通过观察泛化损失可以很好的看多项式拟合是欠拟合、最佳还是过拟合了。测试数据集应该是模型之前未见过的数据,用于检验模型的真实性能。1. 可调整参数的数量。两种写法是等价的,它们都选择了相同的行,没有指定列的范围,因此默认选择所有列。原创 2023-07-07 16:26:25 · 605 阅读 · 0 评论 -
【深度学习】日常笔记8
总之,涉及多个超参数的模型训练更具挑战性,因为它涉及到更多的复杂性、难以解释的行为、过拟合和欠拟合的风险、计算资源需求以及时间需求。K折交叉验证是一种常用的模型评估方法,它将数据集分成K个子集,每次使用其中的K-1个子集作为训练集,剩下的一个子集作为测试集。总之,要构建一个聪明的策略来搜索多个超参数,需要选择合适的超参数空间、使用网格搜索、随机搜索或贝叶斯优化等方法来搜索最优的超参数组合,并使用交叉验证来评估不同超参数组合的性能。这意味着需要更多的数据来确定每个超参数的最佳值,从而增加了模型训练的复杂性。原创 2023-07-01 14:35:11 · 647 阅读 · 0 评论 -
【深度学习】日常笔记7
对于简单的问题,单隐层网络可能足够,而对于更复杂的问题,需要更深的网络结构,并且可能需要更多的神经元来确保网络的表达能力。具体来说,假设X是一个n×d的矩阵,W是一个d×h的矩阵,b是一个1×h的行向量,那么XW是一个n×h的矩阵,b也可以被扩展为一个n×h的矩阵,使得在矩阵加法时可以直接与XW相加。但是,在每个线性段内部,都是连续的,也就是说,对于每个线性段,输出在该段上是连续的。类似于复合函数,每一层隐藏单元的输出都会作为下一层隐藏单元的输入,通过多层的组合运算,模型能够学习更加复杂和高级的表示。原创 2023-06-25 16:14:36 · 749 阅读 · 0 评论 -
【深度学习】日常笔记5
因此,如果在模型训练过程中,出现预测概率为0的情况,即模型完全错误地预测了某个样本的类别,那么使用交叉熵损失函数就会遇到问题,因为在对数运算中,0是无意义的,对数值为0的情况没有定义,这会导致计算出错。为了避免这样的数值稳定性问题,在实际应用中,通常会采用一些数值稳定的技巧来实现softmax函数,例如将输入向量中的每个元素减去向量中的最大值,或者使用一些近似方法等。因此,尽管最大概率在许多情况下是有效的,但在关键应用场景下,我们需要考虑更多的因素,并采用可靠的方法来进行分类。这将导致模型的表现不如期望。原创 2023-06-24 15:12:10 · 1043 阅读 · 1 评论 -
【深度学习】日常笔记6
在softmax回归中,由于只有输入层和输出层,没有任何隐藏层,因此可以将输出层视为唯一的层,这时候该模型的总层数就是1,符合这种计算方法。增加迭代周期的数量可能会在一定程度上提高模型的训练精度,但是如果迭代周期过多,测试精度可能会出现下降的趋势。神经网络的层数通常指的是包含多少个隐藏层,因为输入层和输出层的存在是确定的。同时每⼀层也与它的下⼀层相连,影响当前层的神经元。softmax回归是一种单层神经网络,这是因为在softmax回归中,只存在一个输出层,而没有隐藏层,所以被称为单层神经网络。原创 2023-06-24 15:14:49 · 1333 阅读 · 0 评论 -
【深度学习】日常笔记4
softmax(o)给出的分布⽅差,并与softmax交叉熵损失l(y, yˆ)的⼆阶导数匹配。Softmax函数可以将一组任意实数值转换为一个概率分布,它的输出值是各个类别的概率估计。如果我们用softmax函数得到的概率分布与真实分布非常相似,那么交叉熵损失函数就会趋近于0,表示模型的预测结果和真实结果非常接近。而关于softmax函数的方差,它可以衡量这个概率分布的分散程度,也就是模型对不同类别的预测置信度的稳定性。原创 2023-06-13 15:40:02 · 1477 阅读 · 0 评论 -
【深度学习】日常笔记2
这个问题与正态分布的关系在于,如果我们假设这些数据是从一个服从正态分布的总体中抽取出来的样本,并且忽略掉方差,则最小化 ∑(xi−b)2 的问题就等价于用最小二乘法估计这个正态分布总体的均值参数 μ 的问题。这种情况下,网络中的每个层将执行相同的功能,并且在进行反向传播时,每个权重都会获得相同的更新值,因此神经网络无法学习输入数据中的复杂模式,并且无法收敛到最优解。在正态分布中,样本均值是对总体均值的一个无偏估计,而这个估计的方差与样本量 n 成反比,即随着样本量的增加,样本均值的估计精度会提高。原创 2023-06-08 15:43:23 · 862 阅读 · 0 评论 -
【深度学习】日常笔记
在基础1---Neural Collaborative Filtering中,提到了协同过滤的概念:个性化推荐系统的关键是根据用户过去的互动(例如,评分和点击)对商品的偏好进行建模,这被称为协同过滤。我认为这篇论文是推荐系统领域非常重要的一篇研究成果,尤其是对于深度学习和协同过滤结合的研究具有很大的启示和借鉴意义,而且看着上面的文字描述,应该是开创了将DNN应用到推荐系统的先河。如上面,隐向量是三维的,隐向量一般难以理解,我觉得是在还原后才有其具体含义,且往往隐向量的长度k是作为参数来调整的。原创 2023-06-06 15:52:49 · 445 阅读 · 3 评论