Tag: 搜广推
荣耀20刷机—–从吃灰到变砖
·约 2561 字·6 分钟
本文记录了作者尝试将荣耀20手机从鸿蒙系统降级到Magic系统并最终导致设备变砖的整个过程。文章详细描述了刷机前的准备工作、使用的工具和软件,以及在降级过程中遇到的具体问题和挑战。尽管作者投入了大量的时间和金钱,但最终由于操作失误导致手机无法正常使用。...
阿里云OSS client实现单例模式流水账
·约 8276 字·17 分钟
本文主要介绍了阿里云OSS客户端实现单例模式流水账。在原有的代码中,每次用户对bucket内部文件的请求,都会在后端create和destory一遍,造成了极大的性能浪费。下载文件采用的方式是:oss下载文件到后端,后端通过通过输入输出流将文件内容传输到前端,这也对后端造成了极大的压力。原来代码的流程图如下:...
火车站选址---曼哈顿距离之和
·约 3976 字·9 分钟
这个题目设计到曼哈顿距离,曼哈顿距离有一个性质,就是在中位数的位置,到其余所有为止的曼哈顿距离之和最小。但是这个题目并不需要用到这个性质,而是转化为前缀和的方法。...
AUC代码实现
·约 3381 字·7 分钟
本文详细介绍了AUC(Area Under Curve)的两种计算方法,包括时间复杂度为O(N^2)的方法和更高效的O(log N)的方法。文章通过公式推导和Python代码示例,解释了如何根据正负样本的预测概率来计算AUC值。...
BatchNorm和Dropout在训练和测试的区别
·约 834 字·2 分钟
本文探讨了BatchNorm和Dropout在训练和测试阶段的区别,并解释了它们各自的作用。BatchNorm通过滑动平均计算全局均值和方差,用于加快数值稳定性和加速训练过程。同时,它保留这些参数至测试阶段以供使用。Dropout则在训练过程中对神经元输出进行随机冻结,减少过拟合,并在测试时将输出结果放缩1-r倍,保证激活函数输入的稳定。文章还指出Dropout的本质是Bagging思想,通过随机选择不同的神经元来降低模型的方差。...
KL散度,交叉熵和编码之间的关系
·约 2479 字·6 分钟
本文介绍了KL散度与交叉熵的关系,指出信息量的期望为$-log(p)$,而熵是期望的和。通过KL散度衡量两个概率分布的差异,并解释了其非对称性和不对称性。进一步地,文章探讨了信息熵与编码之间的关系,以及如何利用香农编码定理来计算熵,从而导出平均编码长度的概念。最后,文章讨论了条件熵和极大似然估计在交叉熵损失函数中的应用,强调了交叉熵作为损失函数的另一种理解。...
BPE Tokenizer 讲解
·约 3348 字·7 分钟
本文介绍了Byte Pair Encoding(BPE)算法在分词场景中的应用。传统对文本的分词方式包括基于单词和字符两种方式,而针对中文还有基于常用词的分词方式。在LLM时代,BPE算法因其适合海量数据的特性而被采用。文章通过对比不同级别的分词方法,如char level、word level以及sub word level等,指出了各自的优缺点及适用场景。...
Linux系统文件目录介绍
·约 2378 字·6 分钟
本文介绍了Linux系统的文件目录分布,包括`/bin`, `/sbin`, `/boot`, `/dev`, `/etc`, `/lib`, `/media`, `/mnt`, `/opt`, `/proc`, `/root`, `/run`, `/sys`, `/srv`, `/tmp`, `/usr`, `/var`, `/home`等。...
请求防抖:多场景解决方案
·约 3905 字·9 分钟
本文介绍了请求防抖:多场景解决方案。在维护博客系统时,作者遇到了并发导致的多次请求问题。通过记录各种解决方案,包括内存锁方案、Promise缓存方案、数据库锁方案和Redis分布式锁方案,展示了如何根据不同场景选择合适的技术方案来避免重复请求和提高性能。...
Adam优化方法显存占用情况
·约 1834 字·4 分钟
Adam优化方法显存占用情况。一般来说,Adam用到的信息更多,所以需要的内存占用更大。曾有个实验,Optimizer选择SGD的时候,Batch Size能选择20,但是换成Adam时候,Batch Size只能选择2。Adam的自适应体现之处在于指数平滑,缓解了梯度方向剧变,使收敛路径更平滑一点。...
拟牛顿法推导
·约 4818 字·10 分钟
本文介绍了拟牛顿法的两种主要形式:BFGS法和L-BFGS法。BFGS法利用曲率信息来预处理梯度,从而避免了传统方法中对Hessian矩阵进行完整计算的需要。L-BFGS法进一步优化了这种预处理,通过仅保存最近m次迭代的曲率信息来计算Hessian矩阵的近似值,显著减少了内存使用和计算量。...
关于梯度消失/爆炸产生原因和缓解办法
·约 1213 字·3 分钟
本文探讨了神经网络中梯度消失/爆炸产生的原因及其缓解方法。首先,文章指出梯度下降法在处理复杂网络时会遇到梯度消失或爆炸的问题,这主要是由于链式求导和梯度爆炸/消失导致的。接着,文章列举了几种常见的改进方法:预训练加微调、梯度裁剪和正则化、使用批规范化(batchnorm)、残差结构以及LSTM等。这些方法旨在优化神经网络的训练过程,减少梯度消失或爆炸的风险,提高模型的性能。...
Java动态代理
·约 3493 字·8 分钟
本文介绍了Java动态代理的两种实现方式:JDK动态代理和CGLIB动态代理。JDK动态代理通过`InvocationHandler`接口和`Proxy`类实现,避免了手动编写代理类,提高了开发效率。而CGLIB动态代理则通过反射机制在目标类的字节码中生成子类并重写方法来实现代理,适用于需要彻底增强各种类的场景。...
B树、B+树
·约 1013 字·3 分钟
本文探讨了B树和B+树在数据结构中的应用,特别是在处理大量数据和进行高效查询时的优势。首先,文章指出平衡二叉树虽然简单但不适合处理海量数据,因为其高度限制导致磁盘IO次数增多。接着,B树通过在每个节点内部排序来提高读取速度,而B+树则通过将数据存放在叶子节点中并使用链表连接所有叶子节点来减少磁盘IO次数,同时保证查询速度的稳定性。最后,文章提供了参考资料链接,供有兴趣深入了解的读者参考。...
命令行美化教程(powershell)
·约 1762 字·4 分钟
本文介绍了如何在Windows下的`powershell`中进行美化,包括修改主题、更改背景图片和透明度等操作。文章首先介绍了如何安装.net版本的`Powershell`,然后通过运行特定命令来修改主题和设置背景图片。最后,作者强调了保持对基本DOM操作的理解,不应过度依赖现代前端工具。...
Wide&Deep模型与DCN模型
·约 4248 字·9 分钟
本文介绍了Wide & Deep模型和DCN(Deep & Cross Network)模型的原理、实现及其在处理特征学习中的应用。文章详细描述了Wide部分的简单线性变换和Deep部分的多层感知机结构,并解释了如何通过Cross Network改进Wide部分以显式建模特征之间的交叉。...
Java中String, StringBuilder, StringBuffer比较
·约 1012 字·3 分钟
本文比较了Java中的String, StringBuilder, StringBuffer三种字符串类,指出它们在性能和线程安全方面的不同。String是不可变的,频繁修改效率低;StringBuilder是线程安全的,但效率较低;StringBuffer既线程安全又高效,但需要加锁。最后,文章还提到了Golang中处理字符串拼接的性能问题,以及与Java的对比。...
手写多头注意力(MHA)的实现
·约 2765 字·6 分钟
本文介绍了手写多头注意力(MHA)的实现。文章首先定义了MultiHeadAttention类,该类用于处理多维输入数据并生成输出。在实现过程中,作者详细描述了如何通过线性变换、Scaled Dot-Product Attention和Softmax操作来构建注意力机制。实验结果表明,使用einsum表示法可以简化代码编写,提高可读性。...
大文件上传优化方案
·约 8826 字·18 分钟
本文介绍了一个医学影像分割项目,该项目使用Vue3和Django框架进行开发。前端使用Vue3创建表单,后端使用Django处理文件上传和分片上传。...
技术感想随笔
·约 1645 字·4 分钟
本文讲述了作者在接了一个简单的红娘小程序外包项目后的一些感悟。项目虽然简单,但花费了作者大量时间,主要是在后台管理界面和前端页面的开发上。同时,作者也反思了独立开发的现实,强调了独立开发者需要专注于解决用户痛点,而不是仅仅追求技术难度。此外,还提到了冷启动和推广的重要性,以及在技术选择上的一些心得。...
ThreadLocal简单讲解
·约 1738 字·4 分钟
本文介绍了Java中的ThreadLocal类,它是一种用于处理共享变量的线程安全机制。ThreadLocal为每个线程提供一个独立的数据副本,通过get(), set()和remove()方法来管理这些副本。尽管ThreadLocal可以解决线程安全问题,但更好的解决方案是使用synchronized关键字。文章还提供了一个示例代码,展示了如何使用ThreadLocal实现多线程编程。...
Rand7生成Rand10
·约 1832 字·4 分钟
本文介绍了如何使用数学原理和C++代码生成等概率的随机数。首先,通过数学公式$(randX() - 1) * Y + randY()$可以生成等概率的$[1, X * Y]$范围内的随机数。证明过程基于$randX()$和$randY()$分别生成$[1, X]$和$[1, Y]$之间的等概率随机数。联合概率表展示了如何从这些随机数中采样得到均匀分布的$[1, XY]$之间的随机数。接着,文章提供了使用C++编写的代码示例,演示了如何通过构造特定表达式来生成在指定范围内的均匀随机数。然而,这种方法效率较低,因为只有当采样到$[1, 10]$之间时才会停止,而$[11, 49]$之间的数会被丢弃。为了提高效率,文章提出了一种优化方法,通过模除操作将范围缩小到$[1, 10]$,并进一步优化为只采样$[41, 49]$之间的数,从而提高了效率。最后,文章还探讨了从进制的角度解决问题的方法,指出如果给定$rand1()$只能生成$[0, 1]$之间的均匀随机数,那么可以通过二进制编码的方式生成$[a, b]$之间的均匀随机数。...
ID3、C4.5和Cart树
·约 7053 字·15 分钟
This is a blog post on the implementation of DecisionTree algorithm using C++....
Http1.0~2演变与实践
·约 3698 字·8 分钟
本文介绍了HTTP协议的演变,从HTTP1.0到HTTP2.0,并探讨了其优缺点。文章还讨论了如何在Nginx配置中启用HTTP2.0以提升浏览速度。...
浅出消息队列Kafka
·约 2611 字·6 分钟
本文介绍了消息队列Kafka的工作原理、使用和重要性。Kafka是互联网企业常用的中间件,用于实现业务解耦和处理性能。文章解释了其关键概念如Topic、Partition和Broker,并讨论了高可用性和可靠性的实现方式。同时,还提到了如何通过分拆策略提高系统性能,以及Kafka特有的高性能和扩展性优化措施,如零拷贝技术。...
分类问题常用CE而不是MSE
·约 1477 字·4 分钟
本文分析了机器学习中分类任务常用MSE而非CE的原因,并从分布角度、优化角度进行了详细讨论。文章指出,MSE假设数据服从高斯分布,而现实中长尾分布也很常见,直接使用MSE可能导致效果不佳。同时,文中还提到在优化的角度上,如果分类问题使用MSE作为损失函数,是非凸优化,难以求出最优解。...
Let's Encrypt, 为nextjs加密
·约 2058 字·5 分钟
本文介绍了如何在 Let's Encrypt 中为 Next.js 添加 TLS。由于缺少 TLS 证书,网站只能通过 HTTPS 访问,而 Chrome 浏览器更新后默认开启了安全 DNS,导致无法打开。了解到 Let's Encrypt 可以免费获取 TLS 证书后,决定为网站安装该证书。文章详细解释了 TLS 加密过程,包括银行与客户之间的信任建立和密码加密解密的过程。最后,通过执行特定命令,成功为 Next.js 应用部署了免费的 TLS 证书,并设置了定时更新功能。...
LLM的Token多样性生成策略
·约 1107 字·3 分钟
本文探讨了LLM(Language Model)在生成预测Token时采用的三种策略:贪心策略、Beam Search和Top-K sampling。贪心策略倾向于生成重复内容,而Beam Search通过保留概率最大的Token序列来引入多样性,但可能仍导致模型陷入局部最优解。Top-K sampling则通过随机采样概率最高的k个token来增加多样性,同时丢弃低概率词。此外,文章还讨论了温度参数对sigmoid函数归一化效果的影响,以及如何通过调整温度来控制生成文本的创造性和多样性。...
聚簇索引和非聚簇索引
·约 836 字·2 分钟
本文介绍了聚簇索引和非聚簇索引在MySQL中的物理存储方式。聚簇索引将表的索引和数据存放在一起,而非聚簇索引则分开存放。文章进一步分析了这两种索引结构在查询和修改操作中的性能差异:聚簇索引在查询时速度更快,但修改时可能导致B+树分裂和合并,非聚簇索引则相对耗时较少。...
git rebase和merge处理冲突
·约 1139 字·3 分钟
当远程仓库有新的修改而本地仓库未同步时,继续在本地进行修改会导致冲突。Git提供了两种处理方式:Merge和Rebase。Merge会生成一个新的提交来汇总C和D的提交,但可能产生冲突,需要手动解决。Rebase则按照线性提交处理,历史记录更整洁。使用建议上,个人分支上使用Rebase较为安全,公共分支上要谨慎。...
疑难错误:/usr/bin/ld: cannot find -lxxx
·约 2157 字·5 分钟
本文讲述了在开发过程中遇到的一个编译错误,即`/usr/bin/ld: cannot find -lLLVM-13-rust-1.58.0-nightly`。原因是该库的路径被写入了zshrc的配置文件中的`LD_LIBRARY_PATH`位置,导致编译器无法找到。通过查阅资料,发现`LIBRARY_PATH`和`LD_LIBRARY_PATH`的区别,并了解到它们在编译和运行时的作用及影响工具。同时,文章还提供了如何同时使用这两个变量的建议,以及在使用时应考虑的安全性问题、调试问题和持久化配置。...
最好用的C盘扩容工具
·约 521 字·2 分钟
本文讲述了作者在寻找C盘扩容工具时的经历。作者发现,尽管市面上有许多扩容软件可供选择,但多数方法并不理想。通过使用Windows自带的磁盘管理工具,以及尝试傲梅分区助手和易我等软件,作者最终选择了NiuBi软件,因其完全免费且操作简单,速度非常快,解决了作者的C盘容量不足问题。...
Oauth2和SSO登录疑难点
·约 2689 字·6 分钟
本文介绍了OAuth2.0和单点登录的实现方法,以及它们在现代应用中的使用。文章首先解释了SSO(Single Sign-On)的概念及其核心流程,接着讨论了单点注销的功能和挑战。此外,还探讨了JWT(JSON Web Tokens)作为认证登录方式的优势与局限性,包括其无状态特性带来的权限更新问题。最后,文章详细描述了微信、飞书等第三方授权平台的实现原理及安全性考量。...
Java 反射机制原理
·约 941 字·2 分钟
本文探讨了Java反射机制的原理,强调了其强大的运行时获取类信息的能力。文章首先介绍了基本的反射代码示例,然后深入分析了反射的实现过程,包括编译、加载和运行阶段。最后指出,由于Java中的对象创建机制涉及Class类对象存储类的具体信息,因此反射能够实现动态获取类信息。...
Java和Go的内存管理学习
·约 2411 字·6 分钟
本文介绍了Java和Go的内存管理学习,通过GC实现自动内存管理,有助于深入理解性能瓶颈。GC分为三种:Series GC、Parallel GC和Concurrent GC,各有其特点和适用场景。GC策略包括Copying GC、Mark-sweep GC和Mark-compact GC,每种策略都有其优缺点。引用计数是判断死亡对象的一种方法,但存在缺点如线程不安全和无法处理环形结构。Java内存管理技术经过多代发展,采用分代回收法,根据对象的存活时间长短选择不同的清理策略。Golang采用三色标记法来追踪死亡对象,通过白色、灰色和黑色分别表示可以回收、正在检查和不能回收的对象。...
jq_schema基础语法
·约 2831 字·7 分钟
本文介绍了如何使用LangChain对JSON文件数据进行RAG处理时遇到的jq_schema语法。jq_schema是jq工具的查询语法,用于解析、过滤和转换JSON数据。文章记录了常见的jq_schema语法,包括选择整个JSON数据、特定键的选择、嵌套对象中的键选择、数组元素的选择以及数组中特定元素的选择等。同时,文章还提供了高级语法,如筛选和条件、管道操作符`|`、字符串处理、计算和数学运算等。最后,通过案例分析展示了如何提取JSON对象中的多个字段以及将数组元素提取为特定格式。...
常见PEFT方法原理
·约 2458 字·6 分钟
本文讨论了在大规模通用数据集上训练的LLM模型微调方法,特别是如何通过适配器(Adapter)、前缀(Prefix)和引导词(Prompt)等方法来适应特定任务。特别介绍了微软提出的低秩自适应(LoRA)技术,该方法通过分解更新量矩阵为两个低秩矩阵的乘积来减少运算量,并取得了与全量微调相近的效果。文章还探讨了LoRA的具体原理、应用以及面临的挑战。...
KV Cache
·约 1628 字·4 分钟
本文介绍了LLM(大型语言模型)中KV Cache的重要性,它是加速运算的关键步骤,确保在对话过程中输入文本增长时,推理速度不受影响。文章详细解释了Self Attention机制和因果掩码的概念,并讨论了KV Cache如何通过缓存计算结果来优化预测过程。...
vLLM讲解
·约 1111 字·3 分钟
本文探讨了LLM(Language Model)中KV Cache的不足,包括其计算过程中的冗余重复、显存利用率问题以及内存碎片问题。文章指出,尽管通过KV Cache可以缓存中间结果以提升推理速度,但在显存利用率上存在多个不足,如预分配显存未充分利用、显存碎片问题以及无法有效处理不同长度的Prompt导致的显存浪费。接着,文章介绍了操作系统中的Page Attention技术,该技术通过将内存划分为多个page和虚拟内存来优化进程内存分配,为vLLM提供了一种类似解决方案。最后,文章讨论了共享KV blocks的概念,旨在减少显存占用并提高吞吐量。...
常见位置编码及其实现
·约 6885 字·15 分钟
本文介绍了可学习位置编码(Learnable Position Encoding)的概念、实现方式以及在Transformer模型中的应用。可学习位置编码是一种无需训练即可直接应用的位置嵌入方法,操作简单易懂,易于理解。...
最好用的内存清理软件:Mem Reduct
·约 505 字·2 分钟
本文介绍了一款名为Mem Reduct的内存清理工具,它专为Windows系统设计,能够有效监控和管理计算机的内存使用。Mem Reduct体积小巧,仅400-500KB大小,并提供安装版和便携版。它通过实时分析系统占用情况来识别并自动清理无用内存,支持多语言界面,并且具有自动清理功能和定时清理设置。...
2024Fall 软件测试 期末回忆
·约 326 字·1 分钟
本文回顾了2024年秋季软件测试期末考试的内容,包括选择题、简单题和应用题。选择题主要涉及PPT上的概念,如隐式语言和显示语言的判断等。简单题部分要求介绍并举例变异测试、差分测试以及基于文本和图像的软件测试方法。应用题则涉及到贪心算法及其相关计算、为LCS设计蜕变测试关系和用例,以及为语音识别系统设计模糊测试的策略、规则和评价指标。...
2024Fall 统计模型 期末回忆
·约 354 字·1 分钟
本文回顾了2024Fall统计模型课程期末考试的内容,包括简答题和计算题两部分。简答题涉及了C4.5与ID3的比较、EM算法介绍、词项-文档矩阵实现步骤、NLP常见任务及特征应用、聚类概念及方法、数据集划分的作用与区别以及概率分布函数。计算题部分则要求学生掌握正态分布的似然函数推导、Kmeans算法的应用、朴素贝叶斯分类器模板题目解答以及n-gram模型在句子概率计算中的应用等知识点。...
LLM 分布式训练技术
·约 3369 字·7 分钟
本文介绍了LLM分布式训练技术,包括单机训练的瓶颈、三种主要的并行方式(数据并行、模型/流水线/层间并行和张量/层内并行),以及去中心化架构下的通讯原语和加速策略。还讨论了NVIDIA Megatron和Microsoft DeepSpeed在工业实现中的应用,特别是DeepSpeed提供的参数冗余消除能力。...
Pyinstaller打包常见问题
·约 1110 字·3 分钟
本文介绍了使用PyInstaller打包Python程序时遇到的常见问题及解决方案。首先,文章提供了PyInstaller的基本命令和参数解释,如-Fw用于生成单个可执行文件并隐藏控制台窗口,--add-data用于添加资源文件。接着,文章讨论了两个主要问题:一是由于使用Anaconda导致打包后的程序体积过大的问题,建议通过创建虚拟环境并仅安装必要库来解决;二是打包后缺少资源文件的问题,提出了两种解决方法:一种是编写hook脚本来指定需要包含的资源文件夹或文件;另一种是利用--add-data选项直接在命令行中指定要添加的数据路径和目标位置。...
统计模型: Beta分布
·约 1989 字·5 分钟
本文详细介绍了四种常见的统计分布:二项分布、泊松分布、指数分布和正态分布,并深入探讨了Beta分布在概率建模中的应用。文章不仅解释了每种分布的数学定义和性质,还提供了它们在实际应用中的场景。特别是对Beta分布的分析,强调了其在贝叶斯分析中作为先验概率模型的重要性。...
XGBoost原理必知必会
·约 4289 字·9 分钟
本文详细推导了XGBoost的原理,包括损失函数的定义、目标函数的优化以及正则化方法。文章还介绍了XGBoost的训练方法和常见的疑难点,如训练速度慢、并行化问题、高维特征处理和过拟合缓解等。...
统计模型: Gamma函数
·约 1551 字·4 分钟
本文详细介绍了数学中的Gamma函数,包括其在实数域和复数域上的定义、性质以及与其他数学概念的关系。文章首先定义了Gamma函数并展示了其与阶乘之间的关系,然后通过积分表达式推导出Gamma函数的性质,并通过换元法计算了一些特殊值。此外,还讨论了如何利用这些性质简化某些类型的积分计算。...
2023中流211保研面经(南软,南大AI,北航cs,东南,浙软等)
·约 9558 字·20 分钟
2023年中流211保研经验分享,涵盖夏令营和预推免的详细经历。包括北航cs、复旦AI、上交电院等多所高校的考核情况及面试技巧。...
协同过滤模型
·约 1528 字·4 分钟
本文深入探讨了协同过滤算法,包括User CF和Item CF两种基本方法及其优缺点。同时,文章还详细讨论了矩阵分解技术在推荐系统中的应用,包括特征值分解、奇异值分解(SVD)和梯度下降法的基本原理、优点与缺点。此外,文章指出了当前协同过滤模型面临的挑战以及潜在的改进方向。...
异步:Python的asyncio/greenlet,Java的CompletableFuture
·约 3822 字·8 分钟
本文介绍了Python和Java中实现异步编程的几种方法,包括Python中的threading、asyncio和greenlet,以及Java中的CompletableFuture。文章详细比较了这些工具在控制权、调度方式和生态支持方面的差异,并提供了相应的代码示例来说明它们的使用方法。...
MySQL的ACID实现原理
·约 2787 字·6 分钟
本文介绍了MySQL的ACID实现原理,包括原子性、一致性、隔离性和持久性。Innodb作为MySQL最常用的存储引擎,其内部构造包括buffer pool、redo log和undo log。Atomic实现原理主要通过undo log保证事务的原子性,Consistency由业务逻辑或约束实现,Isolation采用MVCC提高事务并发性能。Durability通过redo log防止数据库崩溃造成数据丢失。...
DIN模型
·约 2158 字·5 分钟
本文介绍了DIN模型,它通过注意力机制来衡量用户历史中每个物品与目标物品的相关性。文章详细阐述了DIN的原理、注意力机制的计算方法、初始化模型参数的策略以及解决冷启动和数据不平衡问题的方法。...