PSI算法经典论文算法概述

文章目录

  • 什么是隐私求交PSI
  • PSI协议分类
  • PSI算法的分类
    • 基于哈希函数的PSI算法
    • 基于不经意传输(OT)的 PSI算法
    • 基于GC的PSI算法
    • 基于公钥加密的PSI算法
      • 基于DH的PSI算法
      • 基于RSA盲签名的PSI算法
      • 基于同态加密的PSI算法
    • 基于差分隐私的PSI算法
  • 总结
  • 参考文献

什么是隐私求交PSI

隐私求交是多方安全计算中的密码学技术,它允许数据持有方通过比较加密集合计算得到交集,且任何一方都不会获得其他信息。PSI还存在一种变体,即CS场景。客户端可以获取其与服务器的交集但是服务器无法学习到该集合。如果在一个小的可以预测的域上通过密码哈希比较数据集合,应该采取预防措施来防止字典攻击。

PSI在日常生活中也有许多应用案例。Apple 在密码监控中使用了这种技术。 它已提议将该技术用于其宣布的扩大对儿童的保护。

PSI协议分类

根据数据的托管方式,PSI 协议可分为两大类:传统 PSI 和 委托 PSI。

  1. 在传统的 PSI 类别中,数据所有者直接相互交互,并且在计算时需要拥有其集合的副本,参考论文《Efficient Private Matching and Set Intersection》。
  2. 在委托 PSI 中,PSI 的计算和/或集合的存储可以委托给第三方服务器(它本身可能是被动或主动的对手)。 委托 PSI 类别可以进一步分为两类:(a) 支持一次性委托的类别,以及 (b) 支持重复委托的类别。 支持一次性委托的 PSI 协议要求数据所有者重新编码其数据并将编码后的数据发送到服务器以进行每次计算。 那些支持重复委托的允许数据所有者只将他们的(加密的)数据上传到服务器一次,然后在服务器之外的每次计算中多次重复使用它。

最近,研究人员提出了一种支持数据更新的 PSI 协议变体(包括传统类别和委托类别。 这种类型的 PSI 协议允许数据所有者以低开销和保护隐私的方式将集合元素插入/删除其数据。参考论文《Updatable Private Set Intersection》、《Multi-party Updatable Delegated Private Set Intersection》。

PSI算法的分类

PSI算法大致可用分为以下4类。

  1. 基于哈希函数的PSI算法:这类算法使用哈希函数对数据集中的元素进行哈希,并将哈希值发送给其他参与方进行比对。其中一种常见的算法是Bloom Filter,它使用多个哈希函数将元素映射到一个位向量中。该类型的方法是一种不安全的交集协议,当双方输入域很小的时候,存在字典攻击的风险。

  2. 基于不经意传输(OT)的 PSI算法:这类算法利用零知识证明或者类似的技术,使得参与方可以获取另一方拥有的特定元素,而不了解其他元素的信息。最早提出基于OT的PSI算法是在2014年《Faster Private Set Intersection Based on OT Extension》中。在安全的PSI算法中,基于OT的PSI算法是最快速的,但是通信代价并不是最低的。

  3. 基于GC PSI算法:该算法采用Garbled Circuit(GC)协议作为核心方法,并结合了OT协议来实现PSI。此类协议的每一个交集内元素会带有一个“负载”(payload),可以用来计算交集的一些函数。然而,基于GC方案的性能与其他类型的方案相比仍有较大差距,随着数据规模的增加,电路深度不断增加,导致电路规模快速膨胀,通信、计算、内存开销都随之膨胀。基于GC的PSI方案虽然不如基于OT的PSI算法快速高效,但是其更灵活,并且可以轻松适应计算集合交集功能的变体。

  4. 基于公钥加密的PSI算法:在基于公钥的PSI算法中,参与方通常采用非对称加密算,如RSA、椭圆曲线或同态加密技术将隐私集合中的原始进行加解密计算,找到共同的元素。基于公钥的PSI算法是相对安全且通信消耗最少的PSI算法。

  5. 基于差分隐私的PSI算法:为了防止PSI结果的隐私泄露,提出了交集满足差分隐私的方法,即在PSI结果中添加一定要求的噪声,从而保证敌手无法通过交集结果推测数据集合。交集满足差分隐私广泛应用于数据分析场景,比如社交网络分析、医疗研究、用户行为分析等。基于差分隐私的PSI方案在前述的PSI算法中提供了对结果的安全保护,具有更严格的隐私保护。可以通过需求调整噪声参数平衡隐私保护和数据准确性要求。

基于哈希函数的PSI算法

基于哈希函数的PSI(Private Set Intersection)算法主要包括以下几种常见算法:

  1. Bloom Filter:Bloom Filter是一种经典的基于哈希函数的PSI算法。它使用多个哈希函数对数据集中的元素进行哈希,并将哈希值映射到一个位向量中。通过比对位向量,可以确定两个数据集之间的交集元素。参考文献《Private set intersection with Bloom filters》进行详细了解。

  2. Count-Min Sketch:Count-Min Sketch是一种概率型数据结构,常用于基于哈希函数的PSI算法。它利用多个哈希函数将元素映射到一个二维计数表中,通过对计数进行累加,可以估计元素的出现频率。在PSI中,Count-Min Sketch可以用于判断两个数据集是否存在交集。参考文献《 An improved data stream summary: the CountMin sketch and its applications》。

  3. Cuckoo Filter:Cuckoo Filter是一种近似集合成员检测的数据结构,也可以应用于基于哈希函数的PSI算法。它使用两个哈希函数将元素映射到一个哈希表中,通过检查哈希表中的位来判断元素是否存在。参考文献《Efficient Circuit-based PSI via Cuckoo Hashing》。

  4. MinHash:MinHash是一种用于近似计算集合相似度的算法,也可以用于PSI。它通过将元素进行哈希,选择哈希值中的最小值,将最小值组成一个签名,通过比对签名来判断集合之间的交集。参考文献《EsPRESSo: Efficient Privacy-Preserving Evaluation of Sample Set Similarity∗》。

基于哈希的PSI算法,由于需要随时随机访问操作,所以需要将过滤器全部存储在内存中,所以会占用一定的内存空间。基于布谷鸟哈希的PSI算法空间占用优于基于布隆过滤的PSI算法方案。

基于不经意传输(OT)的 PSI算法

基于OT的PSI算法流程如下:
假设有两个集合 A A A B B B,其中 A A A包含元素 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1a2...an B B B包含元素 b 1 , b 2 , . . . , b m b_1,b_2,...,b_m b1b2...bm。使用OT方式计算PSI,相当于求解 m m m ( N 1 ) O T \binom{N}{1} OT (1N)OT 问题,其中 B B B 中的元素 b i b_i bi 就是每次的选择队列。

基于OT的PSI算法可以分为以下几类:

  1. 基于哈希技术的OT PSI算法:该算法利用哈希函数来生成OT所需的参数,并使用它们执行OT协议,该算法可以降低通信次数到 O ( n l o g n ) O(nlogn) O(nlogn)。参考文献《Phasing: Private Set Intersection using Permutation-based Hashing》。

  2. 基于伪随机函数(Pseudo Random Function, PRF)的OT PSI算法:该算法使用PRF来生成OT所需的参数,然后利用这些参数执行OT协议来实现PSI,该算法为KKRT PSI 算法。参考文献2016年《Efficient batched oblivious PRF with applications to private set intersection》,该算法是将《Phasing: Private Set Intersection using Permutation-based Hashing》中的组件使用BaRK-OPRF(来源于IKNP OT)进行替换,从而提高了长数据和大数据集的效率,比起高2.3至3.6倍。

  3. 基于承诺方案(Commitment Scheme)的OT PSI算法:该算法使用承诺方案来实现随机选择,然后利用这些随机数执行OT协议来实现PSI。参考文献《Malicious-Secure Private Set Intersection via Dual Execution》(该算法目前是恶意敌手模型下最快的PSI算法)、《Actively Secure 1-out-of-N OT Extension with Application to Private Set Intersection》。

  4. 基于Bloom Filter的PSI算法:Bloom Filter是一种可以高效地判断某个元素是否在集合中的数据结构。这类算法使用Bloom Filter存储集合元素的哈希值,从而减少通信和计算成本。该想法首先通过《Fast private set operations with sepia》提出。在《Outsourced private set intersection using homomorphic encryption》中又将Bloom Filter与同态加密方法进行结合。为了解决论文上述两篇文章中的安全和效率问题,《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》提出一种Oblivious Bloom Filter算法,在该算法中,客户端使用Bloom Filter(BF)对其私有集进行编码,服务端使用GBF(Garbled Bloom Filter)对其私有集合进行编码,再通过OT协议进行求交运算。该算法有标准和增强版本,可以从半诚实敌手模型扩展到敌手模型。该算法拥有较好的效率,计算 200 万个元素集的交集,在并行模式下的中等硬件上仅需要 41 秒(80 位安全性)和 339 秒(256 位安全性)。在《Quantum private set intersection cardinality based on bloom filter》中还提出了抗量子攻击的基于Bloom Filter的PSI算法。

《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》的硬件配置:服务器是 Mac Pro,配备 2 个 Intel E5645 6 核 2.4GHz CPU、32 GB RAM,运行 Mac OS X 10.8。 客户端是一台 Macbook Pro 笔记本电脑,配备 Intel 2720QM 四核 2.2 GHz CPU、16 GB RAM,运行 Mac OS X 10.7。 两台电脑通过1000M以太网连接。

基于GC的PSI算法

基于GC的PSI算法最早在2012年《Private set intersection_Are garbled circuits better than custom protocols?》中提出。该方案基于半诚实敌手模型,文中提出的基于GC的PSI算法主要思想是各方在本地对他们的集合进行排序,私下将他们的排序集合并到一个排序列表中。 然后不经意地比较每个相邻的元素对,如果该对中的元素相等,则保留该值,否则用虚拟值替换。 最后,在显示整个列表之前,所得到的匹配元素列表会被明显地打乱。 这个混洗步骤是必要的,因为否则有关匹配元素的位置信息会泄漏有关各方集合中不匹配元素的信息。该过程中,GC过程可以看作是一个黑盒。

基于GC的PSI算法由于比较和混洗步骤不同,其对应的复杂度也不相同。

  • 比较算法Bitwise-AND(BWA),只适用于小数量级。
  • 比较算法Pairwise-Compare (PWC) protocol,最坏的情况下复杂度是 Θ ( n 2 ) Θ(n^2) Θ(n2),其中 n n n 是输入数据集大小。
  • 不经意洗牌算法Sort-Compare-Shuffle, 在小数量级的情况下是 Θ ( n log ⁡ n ) Θ(n\log n) Θ(nlogn)。该算法的主要思想是各方在本地对他们的集合进行排序,然后(私下)将他们的排序集合并到一个排序列表中。
ProtocolNumber of Non-Free Gates
BWA 2 σ 2^σ 2σ
PWC ( ( 2 n − n ^ ) 2 + n ^ ) ( σ − 1 ) / 4 ((2n-\hat{n})^2+\hat{n})(σ-1)/4 ((2nn^)2+n^)(σ1)/4
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + 2 σ n l o g 2 ( 2 n ^ ) 2\sigma nlog(2n)+((3n−1)\sigma −n) + 2\sigma nlog^2(2\hat{n}) 2σnlog(2n)+((3n1)σn)+2σnlog2(2n^)
Sort-Compare-Shuffle-HE 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + ( σ + 32 ) n 2\sigma nlog(2n)+((3n−1)\sigma −n) + (\sigma +32)n 2σnlog(2n)+((3n1)σn)+(σ+32)n
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + σ ( n log ⁡ n − n + 1 ) 3 2\sigma nlog(2n)+((3n−1)\sigma −n) + \frac{\sigma (n\log n-n+1)}{3} 2σnlog(2n)+((3n1)σn)+3σ(nlognn+1)

在GC中,计算过程需要转换为一系列的门,而门可以是 Free Gates 和 Non-Free Gates。Free Gates 表示计算结果直接从密文获得,不需要解密密钥,所以计算成本极低。而Non-Free Gates 表示具有更高的计算成本,Non-Free Gates越多,计算成本越高,所需计算量更大,所以Non-Free Gates的数量代表了GC的计算效率和速度。所以在GC中通过控制Non-Free Gates的数量可以优化GC的效率和速度。

为了解决基于GC的PSI算法中通信开销、计算和内存开销都较大的问题,有如下的改进方案提出:

  1. 基于哈希的改进算法:这类算法采用哈希函数将集合中的元素映射到一个固定长度的哈希值,并在比较时只比较哈希值,从而减少通信和计算成本。比如2015年的《Phasing: Private Set Intersection using Permutation-based Hashing》一文中通过应用Phasing(使用基于排列的散列来减少表示的位长度) 改进上述不经意洗牌过程,减低了Non-Free Gates的数量和电路门的深度,从而使得效率比Sort-Compare-Shuffle算法快5倍以上。2018年的《Efficient Circuit-Based PSI via Cuckoo Hashing》优化 Cuckoo 哈希算法,将参与方扩展到多方。

  2. 基于OT的改进算法:2019年Benny Pinkas等人通过《Efficient Circuit-based PSI with Linear Communication》一文提出了线性复杂度的基于GC的PSI算法。该算法基于用于计算不经意的可编程伪随机函数 (OPPRF) 的协议的使用,将多次调用 OPPRF 的成本分摊到一起,从而使得通信成本是线性的。

基于公钥加密的PSI算法

基于DH的PSI算法

基于DH的PSI算法是在通信条件受限下最好的PSI协议,参考《Enhancing privacy and trust in electronic communities》(1999年)。该算法流程是双方计算其集合中每个隐私元素的共享密钥值,并将该共享密钥值组成散列,接收方进行比较,得到对应的交集。《Private set intersection with ECDH》(2020年)通过将隐私集合中每个元素映射为椭圆曲线上的点后再计算对应的共享密钥散列,从而得到对应的交集。ECDH算法使用椭圆曲线只需要更小的私钥来实现相同级别的安全性。

基于RSA盲签名的PSI算法

2009年《Practical Private Set Intersection Protocols with Linear Computational and Bandwidth Complexity》中提出了基于RSA盲签名的PSI算法,该算法在上述DH-PSI算法基础上,通过盲签名机制对隐私元素进行盲化和签名,从而计算隐私集合交集。

基于同态加密的PSI算法

同态加密是一种加密技术,允许在密文状态下进行计算,而无需解密。这类算法使用同态加密技术对数据进行加密,并在加密状态下执行集合交集运算。代表性的同态加密算法包括基于Paillier、BGV、BFV同态加密的PSI算法。

  1. 首先将同态加密用于PSI的是在2004年《Efficient Private Matching and Set Intersection》中。该文提出了基于同态加密技术和平衡散列的PSI协议,可以对抗两方的恶意敌手模型。在半诚实敌手模型下,该算法中,双方首先通过多项式对数据集合中每项展开得到加密值 P ( y ) P(y) P(y),然后生成随机扰动 r r r,最后通过同态加得到每项的加密值 E n c ( r ⋅ P ( r ) + y ) Enc(r\cdot P(r)+y) Enc(rP(r)+y)。在恶意安全模型下,客户端和服务端都增加一个 k c k_c kc k s k_s ks根校验,从而对抗恶意的客户端或服务端。

  2. 2010年《Efficient Set Operations in the Presence of Malicious Adversaries》提出了一种基于同态加密和零知识证明的方案,可以保证在恶意攻击者存在的情况下仍然能够保护集合的隐私并实现高效的集合操作。

  3. 《Fast Private Set Intersection from Homomorphic Encryption》(2017年)中提出了一种基于同态加密的高效私有集合交集算法,该算法使用 Paillier 同态加密算法对集合元素进行加密,并利用同态加法和同态乘法实现集合交集计算。该算法通过将批处理与布谷鸟散列和基于排列的散列结合使用优化同态加密算法,同时通过加窗和分区技术将同态加密的电路深度从原来的 O ( log ⁡ N x ) O(\log N_x) O(logNx)降低到:

    其中 N x N_x Nx X X X 数据集大小, B B B是数据集切分之后的大小, α \alpha α 是电路切分后子集大小。

  4. 《Outsourced Private Set Intersection Using Homomorphic Encryption》(2017年)通过同态加密技术将集合交集计算任务安全地外包给第三方计算服务商,该算法具有较低的计算和通信开销,但是需要信任第三方计算服务商,并且在实现中需要解决数据隐私保护和安全性等问题。

  5. 《Private set intersection with linear communication from general assumptions》(2019年)提出了一种基于广义假设的线性通信私有集合交集算法,使用同态加密实现加密和计算,并通过引入新的技术,将通信复杂度降低到线性级别。

  6. 《Labeled PSI from Fully Homomorphic Encryption with Malicious Security》(2018)和《Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication》(2021)分别实现了基于层次全同态的PSI算法。二者底层采用标记PSI(LPSI)技术,该技术为每个数据项增加标记,然后使用HE技术等进行加密。LPSI技术可以应用于有针对性的价格歧视、移动通信中的密钥检索等。二者都使用层次同态(leveled FHE)BFV或BGV算法(SEAL库),文章2通过改进SIMD打包技术,使用Paterson-Stockmeyer 算法降低计算复杂度,修改窗口技术降低通信成本,从而提高计算效率。

基于差分隐私的PSI算法

差分隐私最早是微软研究院Cynthia Dwork在2006年《Differential Privacy》中提出,该论文提出差分隐私算法的目的是为了防止恶意敌手从直方图、K-匿名化结果等中预测出其他隐私数据信息,从而造成数据库的隐私泄露。

2012年,《DJoin: Differentially Private Join Queries over Distributed Databases》首次将差分隐私应用用于PSI中,该论文提出的DJoin 可以支持许多 SQL 风格的查询,包括由不同实体维护的数据库的联接,只需要将原SQL转换为其对应的原语表达即可:BN-PSI-CA(私有集交集基数的差分私有形式)和 DCR(多方组合运算符,可以聚合噪声基数而不复合各个噪声项。2019年《Cheaper Private Set Intersection via Differentially Private Leakage》提出了一种用于恶意安全 2PC 中差分隐私泄露的安全模型,同时还引入了两种新的改进机制,用于“差分隐私直方图高估”,这是差分隐私 PSI 的主要技术挑战。2020年《Differentially Private Two-Party Set Operations》将差分隐私、同态加密和电路进行结合,使得通信复杂度能达到 O ( m ) O(m) O(m),其中 m m m是数据集最小的规模。2023年《Split, Count, and Share: A Differentially Private Set Intersection Cardinality Estimation Protocol》介绍了如何通过差分隐私PSI进行交集基数的估计,通过其测试结果,该算法可以较好地替代传统交集基数(PSI-CA)协议。

私有交集基数(PSI-CA)协议是计算两个隐私集合中同时存在的隐私元素数量,即这两个隐私集合的交集的大小。

总结

在实际应用中,需要权衡通信复杂度、计算复杂度、安全性要求:(1)如果网络是计算瓶颈,则可以考虑通信复杂度低的基于公钥加密的PSI算法;(2)如果计算资源是瓶颈可以考虑基于哈希或OT的PSI算法;(3)而对安全性较高的应用场景,推荐使用基于GC、同态和差分的PSI算法。同时,在考虑选择PSI的时候,需要考虑双方数据集大小是否一致,上述许多论文中的算法是在假设双方数据集一致的情况下(平衡PSI)。而非平衡PSI场景下,通信量和计算量一般是受数据集较大一方决定的。

目前PSI在社交网络中的关系路径发现、 僵尸网络检测、全测序人类基因组测试、接近度测试、在线作弊者检测游戏、情报收集等方面都有显著应用。

参考文献

  • Wiki PSI介绍:Private set intersection
  • 多方安全计算热点:隐私保护集合求交技术 (PSI) 分析研究报告
  • 上述论文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了实现上网自由,我做了一个多功能串口服务器

项目作者:小华的物联网嵌入式之旅 介绍:从事电气自动化行业,多次获得物联网设计竞赛,爱好嵌入式设计开发,物联网开发。 设计方案思路的由来,是因为我们现在的开发板基本需要通过串口与WIFI模组或以太网模…

[Linux] 最基础简单的线程池 及其 单例模式的实现

本篇文章主要用到线程相关内容, 下面是博主关于线程相关内容的文章: [Linux] 线程同步分析:什么是条件变量?生产者消费者模型是什么?POSIX信号量怎么用?阻塞队列和环形队列模拟生产者消费者模型 [Linux] 线程互斥分析: 多线程的问…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …

华为发布大模型时代AI存储新品

7月14日,华为发布大模型时代AI存储新品,为基础模型训练、行业模型训练,细分场景模型训练推理提供存储最优解,释放AI新动能。 企业在开发及实施大模型应用过程中,面临四大挑战: 首先,数据准备时…

剑指offer刷题笔记--Num41-50

1--数据流中的中位数(41) 主要思路: 维护两个优先队列,Q1大数优先,存储比中位数小的数;Q2小数优先,存储比中位数大的数; 当存储的数为偶数时,Q1.size() Q2.size(), 中位…

解决github无法拉取submodule子模块的问题

引言 当使用git clone --recursive url 拉取一个配置了子模块的仓库后,会卡住。 同时在使用git clone 拉去https的url时,同样可能会出现一直卡在cloning int reposity...本文提供一个简单的脚本来解决该问题。 前置准备 需要配置好git的相关配置&…

快速配置 Rust 开发环境并编写一个小应用

安装: curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 更新: Rust 的升级非常频繁. 如果安装 Rustup 后已有一段时间,那么很可能 Rust 版本已经过时, 运行 rustup update 获取最新版本的 Rust rustc:编译Rust程序 rustc只适合简单的Rust程序&#xf…

qt和vue的交互

1、首先在vue项目中引入qwebchannel /******************************************************************************** Copyright (C) 2016 The Qt Company Ltd.** Copyright (C) 2016 Klarlvdalens Datakonsult AB, a KDAB Group company, infokdab.com, author Milian …

记录--再也不用手动改package.json的版本号

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本文的起因是有在代码仓库发包后,同事问我“为什么package.json 里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每…

阿里云无影云电脑具体价格_云桌面不同配置1元报价

阿里云无影云电脑配置费用,4核8G企业办公型云电脑可以免费使用3个月,无影云电脑地域不同费用不同,无影云电脑是由云桌面配置、云盘、互联网访问带宽、AD Connector、桌面组共用桌面session等费用组成,阿里云百科分享阿里云无影云电…

什么是分布式软件系统

:什么是分布式软件系统?分布式软件系统是什么意思? 分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分…

Unity 2D骨骼动画+IK反向动力学

本文言简意赅的完成这个流程,废话不多说!干! 等等,先看看效果 第一步:导入2D Animation包 当前环境:Unity3D 2021(不需要完全一样也可以) 进入unity后点击Window->PackageManager打开如下界面 按Insta…

LangChain 联合创始人下场揭秘:如何用 LangChain 和向量数据库搞定语义搜索?

近期,关于 ChatGPT 的访问量有所下降的消息引发激烈讨论,不过这并不意味着开发者对于 AIGC 的热情有所减弱,例如素有【2023 最潮大语言模型 Web 开发框架】之称的大网红 LangChain 的热度就只增不减。 原因在于 LangChain 作为大模型能力“B2…

Vue3_简介、CompositionVPI、新的组件

文章目录 Vue3快速上手1.Vue3简介2.Vue3带来了什么1.性能的提升2.源码的升级3.拥抱TypeScript4.新的特性 一、创建Vue3.0工程1.使用 vue-cli 创建2.使用 vite 创建 二、常用 Composition API1.拉开序幕的setup2.ref函数3.reactive函数4.Vue3.0中的响应式原理vue2.x的响应式Vue3…

万字长文 | Hadoop 上云: 存算分离架构设计与迁移实践

一面数据原有的技术架构是在线下机房中使用 CDH 构建的大数据集群。自公司成立以来,每年都保持着高速增长,业务的增长带来了数据量的剧增。 在过去几年中,我们按照每 1 到 2 年的规划扩容硬件,但往往在半年之后就不得不再次扩容。…

《Redis 核心技术与实战》课程学习笔记(八)

String 类型为什么不好用了? String 类型可以保存二进制字节流,只要把数据转成二进制字节数组,就可以保存了。String 类型并不是适用于所有场合的,它有一个明显的短板,就是它保存数据时所消耗的内存空间较多。 为什么…

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别

起因 因另一个TA同学问了一个问题 我抱着怀疑的心态,测试了一下 发现 varying 中的 sv_position 和 texcoord 的值再 fragment shader 阶段还真的不一样 而且 sv_position 还不是简单的 clipPos/clipPos.w 的操作 因此我自己做了一个试验: 结果还是不一…

电脑应用程序发生异常怎么办?

有时候我们打开电脑上面的某个软件时,会打不开,并且会弹出如下的错误提示“应用程序发生异常 未知的软件异常(xxx),位置为xx”。相信大多数的人在使用电脑的时…

Pytorch基本使用—激活函数

✨1 介绍 ⛄ 1.1 概念 激活函数是神经网络中的一种数学函数,它被应用于神经元的输出,以决定神经元是否应该被激活并传递信号给下一层。常见的激活函数包括Sigmoid函数、ReLU函数、Tanh函数等。 🎄 1.2 性质 激活函数是神经网络中的一种重…

为什么单片机可以直接烧录程序的原因是什么?

单片机(Microcontroller)可以直接烧录程序的原因主要有以下几点: 集成性:单片机是一种高度集成的芯片,内部包含了处理器核心(CPU)、存储器(如闪存、EEPROM、RAM等)、输入…