avatar
文章
24
标签
16
分类
0

主页
博文
  • 分类
  • 标签
  • 归档
Xielei's Blog
主页
博文
  • 分类
  • 标签
  • 归档

Xielei's Blog

低秩矩阵分解
发表于2024-07-14
矩阵的秩是其线性独立行或列的最大数目,而低秩矩阵是指其秩远小于其行数或列数的矩阵。一个低秩矩阵通常意味着它包含的线性独立信息较少,这种矩阵的特性使得它们在数据压缩、降维、信号处理和计算机视觉等领域非常有用。例如,在机器学习中,低秩矩阵分解可以用于特征提取和推荐系统;在信号处理中,它们可以用于噪声过滤和信号分离;在计算机视觉中,低秩矩阵分解有助于图像去噪和三维重建。低秩矩阵通常具有稀疏性,即它们包含大量的零或近似零元素,这使得它们在存储和计算上更为高效。此外,低秩矩阵分解在数值稳定性方面也具有优势,因为它们对噪声和异常值的敏感性较低。矩阵的低秩分解问题形式化定义为:给定一个𝑚×𝑛的矩阵 𝑀,目标是找到两个低秩矩阵 𝐴和 𝐵,A 是 m × k 的矩阵,B 是 k × n 的矩阵,使得 𝑀可以近似表示为 𝐴 和 𝐵 的乘积。我们希望最小化 𝑀 和 𝐴×𝐵 之间的差异,这通常通过最小化它们的范数来实现。在实际操作中,𝐴 和 𝐵的选择旨在使 𝐴×𝐵 尽可能接近 𝑀,同时保持 𝐴和 𝐵的秩尽可能低。这通常意味着在保留数据主要特征的同时,忽略了一些较小的细节或噪 ...
深度学习编译器
发表于2024-07-14
深度学习编译器是一种专门针对深度学习应用的编译器,它的作用是将深度学习模型(通常由高级框架如TensorFlow、PyTorch等构建和训练)转换成在特定硬件平台上高效运行的低级代码。深度学习编译器通常在前端接收不同深度学习框架(如TensorFlow, PyTorch等)生成的模型,并将其转换成统一的中间表示(Intermediate Representation, IR)。IR是一种抽象的模型表示,它提供了一种平台无关的方式来描述计算图和操作。IR可以是图级别的,也可以是更低层次的。然后,在IR层面上,编译器会应用一系列的图优化技术,如节点融合、常量折叠等,以简化模型并减少计算量。根据目标硬件的特性(如CPU的SIMD指令集、GPU的线程并行性等),编译器会进行特定的优化,如算子融合、内存访问模式优化等。在调度阶段,编译器为模型中的每个操作生成具体的执行计划,包括决定循环的顺序、数据的布局、并行化策略等。最后,编译器将优化后的IR和调度信息转换成目标硬件的机器码,并在目标设备上执行编译后的模型。 TVMApache TVM是端到端的开源机器学习编译框架,使基于不同机器学习框架(如T ...
模型量化
发表于2024-07-12
在深度学习中,模型的参数和激活值通常以浮点数的形式存储在内存中,而嵌入式设备、移动设备等端侧存储空间和计算速度有限。模型量化( Quantization)是一种将深度学习模型中的参数或激活值从浮点数转换为低比特定点数的技术,通过数据存储方式的转换以减少模型的内存占用和计算成本,以较小的精度损失可以显著减少模型的内存和存储占用、降低计算成本。 3.1 整数、定点数与浮点数在计算机中,整数、定点数、浮点数数据都是以二进制形式存储的。其中整数数据是不包含小数部分的数值类型,在计算机中以二进制补码形式存储。整数数据可以是有符号的(可以表示正数、负数和零)或无符号的(只能表示非负数)。无符号整数中所有位都用来表示数值部分,不包含符号位。例如,一个8位的无符号整数可以表示范围为0到255的整数。而有符号整数中最高位通常用作符号位,0表示正数,1表示负数。其余位表示整数的数值部分。例如,一个8位的有符号整数可以表示范围为-128到+127的整数。定点数是一种用于表示实数的数值系统,其中小数点的位置是固定的,它们在计算机中以固定的位数表示整数和小数部分。例如有一个8位的定点小数,其中小数点在第4位上。 ...
模型剪枝
发表于2024-07-10
模型剪枝是深度学习模型优化技术之一,其核心目的是减少模型的参数数量和计算复杂度,以提高模型在资源受限环境中的部署效率和运行速度,剪枝问题可以形式化定义为:其中L为损失函数,x为输入,W为原始权重,Wp为剪枝后的权重,而Wp的范数为剪枝后的权重中的非零值,N剪枝目标设置的非零值的个数。剪枝可以在模型生命周期的不同阶段进行,包括训练前、训练中、训练后,以及通过增量或动态的方式进行。训练前剪枝通过减少初始参数数量来降低模型的复杂度,但可能需要特别的初始化和训练策略来维持性能。训练中剪枝允许模型逐步适应剪枝操作,但需要精心设计的剪枝策略以避免性能损失。训练后剪枝则基于训练完成的模型来识别不重要的参数,通常需要重训练或微调来补偿可能的性能下降。增量剪枝结合了训练中和训练后剪枝的优点,通过分阶段剪枝为模型提供了更多适应机会。动态剪枝则在模型推理时根据输入数据动态调整剪枝程度,以提高特定任务的效率,但实现更为复杂。模型剪枝的策略尽可能保持或恢复模型性能且尽可能减少参数数目。常见的剪枝策略包括基于权重幅度的剪枝,它进行权重排序,移除那些权重较小的连接,通过阈值选择进行剪枝;正则化策略通过鼓励权重稀疏性 ...
函数式编程与响应式编程
发表于2024-01-15
编程范式编程范式,又称为编程模型,泛指软件编程过程中使用的编程风格,常见的编程范式包括命令式编程(面向对象、面向过程等),声明式编程(响应式、函数式), 命令式编程 是面向计算机硬件的抽象,有变量、赋值语句、表达式、控制语句等,可以理解为 命令式编程就是冯诺伊曼的指令序列。 它的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。 声明式编程 是以数据结构的形式来表达程序执行的逻辑。声明式编程范式关注的焦点不是采用什么算法或者逻辑来解决问题,而是描述、声明解决的问题是什么。当你的代码匹配预先设定好规则,业务逻辑就会被自动触发执行。SQL、HTML 、XML、 CSS 都属于声明式编程。它的特点:1.它不需要创建变量用来存储数据 2.另一个特点是它不包含循环控制的代码。 如图: 函数式编程函数式编程是面向数学的抽象,将计算描述为一种表达式求值,其实,函数式程序就是一个表达式。函数式编程中的函数并部署指计算机中的函数,而是指数学中的函数,即自变量的映射。函数的值取决于函数的参数的值,不依赖于其他状态,比如abs(x)函数计算x的绝对值,只要x不变,无论何时调用、调用次 ...
NLP论文复现-paddle指南
发表于2024-01-10
论文复现赛指南-NLP方向本文为针对 NLP 方向的复现赛指南 1. 总览1.1 背景 以深度学习为核心的人工智能技术仍在高速发展,通过论文复现,开发者可以获得 学习成长:自我能力提升 技术积累:对科研或工作有所帮助和启发 社区荣誉:成果被开发者广泛使用 1.2 前序工作基于本指南复现论文过程中,建议开发者准备以下内容。 了解该模型输入输出格式。以BERT的情感分类任务为例,通过阅读论文与参考代码,了解到模型输入为[batch_size, sequence_length]的tensor,类型为int64,label为[batch, ]的label,类型为int64。 准备好训练/验证数据集,用于模型训练与评估 准备好fake input data以及label,与模型输入shape、type等保持一致,用于后续模型前向对齐。 在对齐模型前向过程中,我们不需要考虑数据集模块等其他模块,此时使用fake data是将模型结构和数据部分解耦非常合适的一种方式。 将fake data以文件的形式存储下来,也可以保证PaddlePaddle与参考代码的模型结构输 ...
CV论文复现-paddle指南
发表于2024-01-10
论文复现指南-CV方向本文为针对 CV 方向的复现指南 1. 总览1.1 背景 以深度学习为核心的人工智能技术仍在高速发展,通过论文复现,开发者可以获得 学习成长:自我能力提升 技术积累:对科研或工作有所帮助和启发 社区荣誉:成果被开发者广泛使用 1.2 前序工作基于本指南复现论文过程中,建议开发者准备以下内容。 了解该模型输入输出格式。以AlexNet图像分类任务为例,通过阅读论文与参考代码,了解到模型输入为[batch_size, 3, 224, 244]的tensor,类型为float32或者float16,label为[batch, ]的label,类型为int64。 准备好训练/验证数据集,用于模型训练与评估 准备好fake input data以及label,与模型输入shape、type等保持一致,用于后续模型前向对齐。 在对齐模型前向过程中,我们不需要考虑数据集模块等其他模块,此时使用fake data是将模型结构和数据部分解耦非常合适的一种方式。 将fake data以文件的形式存储下来,也可以保证PaddlePaddle与参考代码的 ...
python内存管理
发表于2024-01-09
内存分配python中的内存分配采用内存池的方式。( 内存池:当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低。内存池的作用就是预先在内存中申请一定数量的,大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。) 如图,为cpython(python解释器的内存架构图): level 0 以下为系统层内存管理;python实现的内存管理机制主要位于level 1~level 3; level 3: python对于每一类内置的对象(int、float、list、dict、string)设置对象间独立的私有内存池,即内存池不共享,int释放的内存,不会被分配给float使用; level 2: 当申请的内存大小小于256KB时,内存分配主要由 Python 对象分配器(Python’s object allocator)实施; level 1: 当申请的内存大小大于256KB时,由Python原生的内存分配器进行分配,本质上是调用C ...
参数初始化
发表于2023-11-13
一、参数初始化1.1 原因参数初始化又称为权重初始化(weight initialization)或权值初始化。参数初始化指的是在网络模型训练之前,对各个节点的权重和偏置进行初始化赋值的过程,用于解决梯度消失或者梯度爆炸,有利于模型的收敛速度和性能表现, 同时也可以加入自己相关领域的先验进行权重初始化。当定义好网络模型之后,需要进行权重初始化,恰当的权重初始化方法,可以加快模型的收敛,不恰当的初始化方法,可能导致梯度消失或爆炸,导致模型不可用。如果权重太小,则输入信号通过网络中的每一层时,其方差就会开始减小,输入最终会降低到非常低的值,导致梯度消失。如果权重太大,则输入数据的方差往往会随着每个传递层而迅速增加。最终,变得很大以至于梯度爆炸。 1.2 参数初始化方法参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关——激活值饱和会导致该层状态梯度信息为0,然后导致下面所有层的参数梯度为0;入激活值为0会导致对应参数梯度为0。所以如果要保证参数梯度不等于0,那么参数初始化应该使得各层激活值不会出现饱和现象且激活值不为0。我们把这两个条件总结 ...
mAP及相关概念
发表于2023-11-02
正例和负例现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive),然后我们就能得到如下的四种情况: (1)True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数); (2)True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。 (3)False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数; (4)False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数; P(精确率)P 代表 precision,即精确率,精确率表示预测样本中实际正样本数占所有正样本数的比例,计算公式为: AP(平均精度)AP 代表 Average Precision,即平均精度。 R(召回率)R 代表 recall ,即召回率,召回率表示预测样本中实际正样本数占所有预测的样本的比例,计算公式为: 一般来说,召回率越高,准确率越低。 ACC(准确率)ACC 代 ...
123
avatar
xie lei
朝闻道兮
文章
24
标签
16
分类
0
Follow Me
公告
This is my Blog
最新文章
青训营-小R的城市稳定性挑战2024-11-14
青训营-小R的三的倍数分解2024-11-13
70. 爬楼梯2024-07-16
19. 删除链表的倒数第 N 个结点2024-07-16
2956.找到两个数组中的公共元素2024-07-16
标签
NLP python 基础知识整理 命令 深度学习 动态规划 paddle 主动学习 内存管理 论文复现 leetcode刷题 基础概念 青训营 数组 链表 刷题
归档
  • 十一月 20242
  • 七月 202412
  • 一月 20244
  • 十一月 20234
  • 十月 20232
网站资讯
文章数目 :
24
本站总字数 :
46.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2024 By xie lei
框架 Hexo|主题 Butterfly