面向数据安全共享的联邦学习研究综述
开放隐私计算
摘 要:跨部门、跨地域、跨系统间的数据共享是充分发挥分布式数据价值的有效途径,但是现阶段日益严峻的数据安全威胁和严格的法律法规对数据共享造成了诸多挑战。联邦学习可以联合多个用户在不传输本地数据的情况下协同训练机器学习模型,是实现数据安全共享的新范式。对联邦学习的工作原理及与其密切相关的技术进行了简要介绍,并系统地总结联邦学习的隐私安全性以及其与区块链结合的研究现状,最后对下一步的研究方向做出了展望。
内容目录:
1 相关技术介绍
1.1 隐私计算框架
1.2 联邦学习
1.3 区块链技术
1.4 相关密码学技术
2 联邦学习的隐私安全性研究
3 联邦学习与区块链的结合研究
4 结 语
伴随着云计算、边缘计算等新一代信息技术的快速发展,全球数据量呈爆发式增长。数据已经成为影响全球竞争的重要战略性资源,各国陆续出台相应政策大力支持数字经济的发展。然而,现阶段海量的数据分布在不同的组织机构和信息系统中,需要实现跨部门、跨地域、跨系统间的数据共享,才能充分发挥数据价值。但是数据安全与合规问题却对数据共享造成了诸多挑战,一方面,数据易被复制的特性使得数据主体担心自己的商业秘密或用户隐私泄露,导致他们不愿共享数据;另一方面,日益严格的数据安全法规对个人数据的流通和使用提出了诸多限制。
隐私计算技术的兴起为保障数据在安全合规的前提下发挥价值提供了破局思路,它是一个涵盖密码学、人工智能、安全硬件等众多领域的跨学科技术体系。联邦学习是隐私计算的代表性技术之一,可以使分布式用户无须传输本地数据即可实现联合建模,成为数据安全共享的新范式。由于联邦学习可以与安全多方计算、可信执行环境以及其他密码学技术相结合,因此被学术界和工业界广泛研究,并应用于智能家居、智慧城市、工业互联网等场景。本文首先对隐私计算框架、联邦学习、区块链以及相关密码学技术进行简要的概述,然后介绍了联邦学习的隐私安全性以及其与区块链相结合的两方面研究成果,最后对未来的研究热点进行展望。
1
相关技术介绍
1.1 隐私计算框架
隐私计算技术为数据在融合应用中保障数据安全合规提供了关键技术路径,当前已经成为政、学、研、产等各界的关注焦点。据国际权威调研机构 Gartner 预测 ,2025 年将有一半的大型企业使用隐私计算技术在不可信的环境中处理敏感数据。隐私计算联盟、中国信息通信研究院云计算与大数据研究所于 2021 年发布的《隐私计算白皮书》 中将隐私计算定义为在保证数据提供方不泄露原始数据的前提下,对数据进行分析计算的一系列信息技术,保障数据在流通与融合过程中的“可用不可见”。从技术原理上讲,隐私计算交叉融合了密码学、人工智能、安全硬件等众多学科,以联邦学习、安全多方计算、可信执行环境 3 种主流技术为代表,同态加密、差分隐私、零知识证明、秘密共享等为底层密码学技术,同时与区块链技术紧密结合。其技术体系如图 1 所示。
图 1 隐私计算技术框架
本文主要关注联邦学习与区块链技术以及相关密码学技术的结合应用现状。其技术原理如下文所述。
1.2 联邦学习
联邦学习是谷歌于 2016 年提出的一种分布式机器学习框架 ,被用于联合大量分布式用户的数据训练一个高质量的机器学习模型。联邦学习能够在用户数据不出本地的情况下联合利用多方数据,是解决“数据孤岛”问题的重要框架,其核心思想是“数据不动模型动,数据可用不可见”。传统的集中式机器学习算法需要将数据集中到中心服务器来训练模型,这不仅会消耗大量的通信资源,数据在传输过程中也可能面临隐私泄露风险。而联邦学习仅需要用户向服务器上传本地训练得到的模型参数,由服务器协调多用户来协同训练机器学习模型。联邦学习一般流程如图 2 所示。
图 2 联邦学习一般流程
步骤 1:在初始化阶段,服务器根据训练任务将初始化模型下发给所有参与训练的用户。
步骤 2:每个用户将收到的模型作为本地模型,以最小化损失函数为目标,利用梯度下降等优化算法在本地数据集上进行训练。迭代若干次后将模型参数(例如梯度、权重参数等)上传至中心服务器。
步骤 3:中心服务器通过加权平均方法聚合来自所有用户的参数,得到全局模型,并将其下发至所有用户。用户按照步骤 2 开始新一轮的训练。上述联邦学习过程将反复迭代,直至模型收敛或达到最大训练轮数。
根据分布式用户持有数据的情况,可以将联邦学习分为横向联邦、纵向联邦和联邦迁移。其中,横向联邦适用于数据集中的用户特征重叠较多而用户重叠较少的情况,例如两个金融公司的用户数据;纵向联邦适用于数据集中的用户特征重叠较少而用户重叠较多的情况,例如同一地区的互联网公司和金融公司中共同用户的数据;联邦迁移适用于数据集中的用户特征重叠和用户重叠均较少的情况,此时需要利用迁移学习来克服数据或标签不足的问题,例如位于两个不同国家的互联网公司和金融公司的用户数据。当前,由于模型逆向 、模型提取 等更加先进的隐私攻击手段的出现,使得联邦学习需要与区块链、差分隐私、安全多方计算等其他隐私计算技术互相融合来提高安全性,并解决计算开销、通信开销、训练效率等问题以适用于更加实际的应用场景。
1.3 区块链技术
自 2008 年中本聪第一次提出比特币 以来,区块链作为比特币的底层框架开始被学术界和工业界深入研究。国际权威调研机构 Gartner 更是将“实用型区块链”列为 2020 年十大战略科技发展趋势之一。
从本质上讲,区块链是一个分布式账本,以透明且不可篡改的方式记录各方之间的交易。区块链的一般结构如图 3 所示,每个区块由区块头和包含一系列事务的区块体组成,区块头中含有前一个区块的散列值,用于将当前区块链接至前一个区块。每个区块链节点均存储一个由若干个区块组成的账本,并且通过共识协议保证各个节点的账本都是一致的。
图 3 区块链结构
现有的共识协议主要包括工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、委托股权证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错协议(Practical Byzantine Fault Tolerance,PBFT)等。这些协议在安全性、响应时间、吞吐量等方面有各自的特点,但核心都是解决记账权分配的问题。其中 PoW 是比特币网络使用的共识协议,它分配记账权的原理是让网络中的每个节点都计算特定的哈希值。哈希值满足一定条件的首个节点得到生成新区块的权利。新区块通过验证后会广播给网络中的其他节点以保持账本的一致性。这种机制是完全去中心化的,且由于犯错成本非常高,使其安全性得到有效保证。但是争夺记账权的过程会浪费大量的计算资源,效率低下。PoS 分配记账权的原理是节点通过证明自己的持股数来竞争生成新区块的权利,相比之下,其避免了不必要的资源浪费,但是会导致一定的权力集中,有些违背去中心化的初衷。为此,DPoS 通过节点投票选举出一定数量的代理节点负责区块的生成和验证,资源开销更少、交易效率更高,但是由于记账节点的减少,该协议可能面临被部分恶意节点操控的风险。PBFT 则可以在有部分恶意节点存在的情况下达成共识,更常用于联盟链中。
1.4 相关密码学技术
1.4.1 差分隐私
差分隐私(Differential Privacy,DP)是 Dwork于 2006 年提出的一种严格可证明的隐私保护技术,可以抵抗攻击者任意背景知识,其基本思想是对原始数据转换或对输出结果添加噪声来保护数据隐私,确保数据集中任何单个记录的修改都不会对统计结果造成显著影响。差分隐私所加入的噪声量与数据集规模无关,在大型数据集上只需要添加少量的噪声即可实现较高水平的隐私保护。其相关定义如下:
定义差分隐私为
令
为随机算法, D 和 D′为最多相差一条记录的相邻数据集,若 A 在 D 和 D′ 上的任意输出结果
都满足式(1),则称 A 实现差分隐私
式中:参数ε 为隐私预算,代表差分隐私技术所实现的隐私保护程度,ε 值越小,则表示隐私保护程度越高;δ 为违背严格差分隐私的概率。
1.4.2 同态加密
同态加密是基于数学难题的计算复杂性理论的密码学技术,是指在密文状态下对加密消息进行计算的结果再进行同态解密后的明文结果与明文数据进行加密再解密的处理结果一致。根据所支持的计算形式,同态加密可分为全同态和半同态,其中,全同态加密支持对密文进行任意形式的计算,计算开销较大,应用场景受限;半同态加密仅支持对密文进行加法或乘法计算,计算开销相对较小,目前常应用于联邦学习中的半同态加密算法包括 ElGamal 算法和Paillier 算法。
1.4.3 秘密共享
秘密共享是一类重要的密码学原语,是指将秘密拆分成若干份额,分别交于若干参与者保存。当达到门限数的参与者将它们持有的秘密份额联合起来进行计算时,即可恢复秘密,而任意一个参与者所持有的秘密份额均不会泄露原始秘密的任何信息。例如,应用较为广泛的 Shamir 秘密共享协议 [9],它基于 Lagrange 插值定理。构造一个 m −1次的多项式:
式中:p 为素数,
为常数,
为多项式的系数。令
,即把常数项设定为待保护的秘密,且满足
,其他 m −1个系数随机选取。任取 n 个不同的点
并计算出函数值
,则这 n 组
即为分给 n 个参与者的秘密份额。任意 m 组秘密份额均可以重建出多项式
,进而得到秘密
2
联邦学习的隐私安全性研究
联邦学习让分布式的用户无须上传原始数据即可协同训练机器学习模型,在保护数据隐私的同时打破了数据孤岛壁垒,被广泛用于实现智能家居、智慧城市等场景下的数据安全共享。但是最新出现的模型逆向 、模型提取攻击显示攻击者通过模型梯度依然可以恢复原始训练数据的部分信息,说明原始的联邦学习框架已不足以应对先进的隐私攻击手段。为此,差分隐私和安全多方计算经常被用来加强联邦学习中隐私保护力度。
Shokri 等人 首次在分布式机器学习方法中的模型参数上添加噪声来确保差分隐私,但是参数数量过大会消耗过量的隐私预算,导致实际的隐私保护效果不佳。Geyer 等人 在服务器端的聚合模型上添加差分隐私噪声,用来保护用户是否参与训练这一信息,以抵抗成员推理攻击。但是攻击者可以通过服务器观察到用户上传的模型参数,进而窃取用户隐私信息。Huang 等人根据每个参与者拥有的数据量不平衡的特点,分配不同的隐私预算,并设计自适应梯度下降算法进行协同训练,在不平衡的数据集上取得了较好的效果。Liu 等人根据特征向量对模型输出的贡献程度分配不同的隐私预算,进而减少总体隐私预算的消耗。Truex等人 将差分隐私和安全多方计算相结合来减小噪声的规模,实现多方数据协作的准确性和数据隐私保护强度的平衡,并可抵抗用户间的共谋攻击。由此可见,基于差分隐私的联邦学习方法主要关注如何在保护数据隐私的前提下,尽量减少噪声对于数据协作准确性的影响。
Phong 等人采用同态加密算法加密用户的模型参数再上传给服务器,服务器只能通过聚合得到密文的全局模型而无法解密单个用户上传的数据。Ma 等人结合 ELGamal 加密协议、Diffie-Hellman 密钥交换协议和聚合签名,设计了一个满足隐私性和可验证性的联邦学习方法。Li 等人 针对云计算场景提出基于多密钥全同态加密的联邦学习隐私保护方法,每个用户都使用自己的密钥来加密模型参数,能够实现较高的模型准确率,但是需要消耗较大的计算开销。为了减小安全多方计算技术的计算开销,Bonawitz 等人 结合随机数生成器和秘密共享生成掩码,可快速加密用户梯度,并且使得服务器只能获取全体用户的梯度之和,而无法获取单个用户的梯度信息。Zhang 等人 基于门限秘密共享保护模型梯度信息,只有当服务器收集到足够多的用户梯度后才能解密得到全局梯度,并进一步提出了一种异步优化方案来提高秘密共享的效率。由此可见,基于安全多方计算的联邦学习方法主要致力于如何以较小的计算开销实现对数据的隐私保护。
3
联邦学习与区块链的结合研究
联邦学习需要一个中心服务器来协调处理用户的参数,因此可能遭受单点故障攻击。而区块链具有集体维护特性,可以代替中心服务器完成参数聚合操作,不仅有效避免了单点故障攻击,还为训练过程提供了可审计能力。因此,近年来陆续有学者将区块链和联邦学习相结合,应用于数据安全共享。在该结构中,各用户将本地数据映射为机器学习模型,然后基于区块链的共识机制交换模型,而无任何集中的数据训练或协调,实现了数据价值的安全共享。Kim等人 提出了一个设备间的数据共享模型,将设备上的模型参数经过验证和共识后记录到区块链中,提高了安全性。Qu 等人结合区块链和联邦学习设计了一个去中心化的认知计算平台,以解决工业 4.0 中的数据孤岛问题,同时改进马尔可夫决策过程来防范内部用户发起的中毒攻击。但是上述方法均使用工作量证明作为共识协议,会造成大量不必要的计算开销,无法适用于计算资源受限的本地用户。为此,Lu等人采用委托股权证明作为共识协议,并提出了一个由许可区块链和本地有向无环图组成的混合区块链结构,同时设计异步联邦学习方法来提高车联网数据共享的效率。
上述方法均将明文的模型参数作为事务记录存储在区块链中,而区块链账本的透明性与数据共享的隐私要求相矛盾,具体而言就是攻击者可以通过获取区块链中存储的模型参数来推断训练数据的信息。为了进一步提高隐私安全性,Weng 等人 使用 Paillier 算法加密用户的模型参数后再上传至区块链,模型更新完毕后由t 个用户协作完成解密。但是当训练次数过多时,该方法将消耗大量的计算开销。Lu 等人 和 Qi 等人 分别针对工业互联网和智慧交通领域的数据安全共享需求,运用本地差分隐私技术,在原始数据上添加噪声后再进行特征提取和共享,可以防止隐私攻击。但是如何平衡隐私保护力度与数据效用仍然是差分隐私技术面临的痛点。
4
结 语
日益严峻的数据安全威胁是数字经济时代面临的重要挑战。如何兼顾发展和安全,实现多用户间的数据共享,是充分发挥数据价值的重要课题。以联邦学习为代表的隐私计算技术为共享过程中的数据“可用不可见”提供了有效的解决方案。本文主要介绍了联邦学习的应用背景和技术原理,并总结分析了现阶段联邦学习与其他技术相结合的研究现状。联邦学习的下一步研究方向包括以下几个方面:
(1)模型鲁棒性问题。在原始联邦学习框架中,都是假设各个用户会诚实地上传本地训练的梯度,但是在实际网络环境下,可能存在部分拜占庭用户上传虚假的甚至恶意的梯度来误导联邦学习过程,因此,需要研究鲁棒性联邦学习模型。当前已有部分学者提出拜占庭鲁棒聚合算法,但是在适用范围和训练效率方面仍有待进一步研究。
(2)通信开销问题。联邦学习虽然无须传输原始数据,但是在模型结构较为复杂的情况下通常需要进行上百甚至上千轮次的训练,对于本地用户的通信带宽提出了较高的要求。目前已有部分学者提出了梯度压缩、梯度稀疏化等多种策略来减少通信开销,但是均会对模型收敛速度或者准确性造成较大的影响。如何提出一种更为合理的通信压缩方案,是决定联邦学习能否应用于边缘计算场景的关键。
(3)隐私保护方案与模型性能的平衡。为了应对针对梯度的隐私攻击手段,差分隐私和安全多方计算被广泛用于保护用户的本地梯度。但是二者对模型准确性或训练效率均造成不同程度的影响。如何减少隐私保护方案对模型性能的影响,是联邦学习落地应用的关键问题。
引用格式
引用格式:方晨 , 郭渊博 . 面向数据安全共享的联邦学习研究综述 [J]. 信息安全与通信保密 ,2022(10):66-73.
END
往期推荐:
隐私计算头条周刊(2.27-3.5)
数据最高管理部门——国家数据局成立!
开放隐私计算火热招聘,优质岗位 “职”等你来!
ChatGPT今日正式开放API服务中小企业
开放隐私计算社区征稿啦!
热门文章:
数据最高管理部门——国家数据局成立!
附下载 | 2022年隐私计算技术与行业应用报告合集(33份)
联邦学习前沿 | 基于图神经网络的联邦推荐系统研究
招标 | 近期隐私计算项目招标18(联通、不动产、股权市场、银联等)
未来十年,将会有95%的企业采用隐私计算技术
相关文章:
面向数据安全共享的联邦学习研究综述
开放隐私计算 摘 要:跨部门、跨地域、跨系统间的数据共享是充分发挥分布式数据价值的有效途径,但是现阶段日益严峻的数据安全威胁和严格的法律法规对数据共享造成了诸多挑战。联邦学习可以联合多个用户在不传输本地数据的情况下协同训练机器学习模型&am…...
Redis经典五种数据类型底层实现原理解析
目录总纲redis的k,v键值对新的三大类型五种经典数据类型redisObject结构图示结构讲解数据类型与数据结构关系图示string数据类型三大编码格式SDS详解代码结构为什么要重新设计源码解析三大编码格式hash数据类型ziplist和hashtable编码格式ziplist详解结构剖析ziplist的优势(为什…...
Jackson 返回前端的 Response结果字段大小问题
目录 1、问题产生的背景 2、出现的现象 3、解决方案 4、成果展现 5、总结 6、参考文章 1、问题产生的背景 因为本人最近工作相关的对接外部项目,在我们国内有很多程序员都是使用汉语拼音或者部分字母加上英文复合体定义返回实体VO,这样为了能够符合…...
每天五分钟机器学习:你理解贝叶斯公式吗?
本文重点 贝叶斯算法是机器学习算法中非常经典的算法,也是非常古老的一个算法,但是它至今仍然发挥着重大的作用,本节课程及其以后的专栏将会对贝叶斯算法来做一个简单的介绍。 贝叶斯公式 贝叶斯公式是由联合概率推导而来 其中p(Y|X)称为后验概率,P(Y)称为先验概率…...
C++的入门
C的关键字 C总计63个关键字,C语言32个关键字 命名空间 我们C的就是建立在C语言之上,但是是高于C语言的,将C语言的不足都弥补上了,而命名空间就是为了弥补C语言的不足。 看一下这个例子。在C语言中会报错 #include<stdio.h>…...
数据的存储
类型的意义:使用这个类型开辟内存空间的大小(大小决定了使用范围)如何看待内存空间视角类型的基本归类整型家族浮点数家族构造类型指针类型空类型整型存储解构:整型在计算机中占用四个字节,整型分为无符号整型和有符号整型在计算机…...
Linux查看UTC时间
先了解一下几个时间概念。 GMT时间:Greenwich Mean Time,格林尼治平时,又称格林尼治平均时间或格林尼治标准时间。是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。 GMT时间存在较大误差,因此不再被作为标准时间使用。现在…...
SpringBoot修改启动图标(详细步骤)
目录 一、介绍 二、操作步骤 三、介绍Java学习(题外话) 四、关于基础知识 一、介绍 修改图标就是在资源加载目录(resources)下放一个banner.txt文件。这样运行加载的时候就会扫描到这个文件,然后启动的时候就会显…...
【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表
面试题 17.05. 字母与数字 给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。 返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。…...
Go 内置运算符 if for switch
算数运算符fmt.Println("103", 103) //103 13 fmt.Println("10-3", 10-3) //10-3 7 fmt.Println("10*3", 10*3) //10*3 30 //除法注意:如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分 f…...
C语言指针数组实际应用(嵌入式)
C语言指针数组详细学习 指针是C语言中非常重要的概念之一,它可以让我们直接访问内存中的数据。指针数组则是由多个指针组成的数组,每个指针都可以指向内存中的某个位置。以下是一些指针数组的实际代码应用: 字符串数组 char* names[] {&q…...
常用的Java注解详解
Java是一种常用的编程语言,而注解是Java语言中非常重要的一部分。在这篇文章中,我们将介绍一些常用的Java注解,以及它们的作用和使用方法。 Override override注解是用于表示一个方法是被覆盖的。在Java中,如果子类要覆盖父类的方…...
华为OD机试题 - 第 K 个最小码值的字母(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:第 K 个最小码值的字母题目输入输出示例一输入输出说明示例一输…...
vscode环境配置(支持跳转,阅读linux kernel)
目录 1.卸载clangd插件 2.安装C插件 3. 搜索框内输入 “intell”,将 C_Cpp:Intelli Sense Engine 开关设置为 Default。 4.ubuntu安装global工具 5.vscode安装插件 6.验证是否生效 7.建立索引 1.卸载clangd插件 在插件管理中卸载clangd插件 2.安…...
zigbee学习笔记:IO操作
1、IAR新建工程 (1)Projetc→Create New Projetc→OK→选择位置,确定 (2)新建一个c文件,保存在路径中 (3)点击工程,右键→add→加入c文件 (4)…...
华为OD机试题 - 最少数量线段覆盖(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:最少数量线段覆盖题目输入输出示例一输入输出说明Code解题思路版…...
python趣味编程-2048游戏
在上一期我们用Python实现了一个盒子追逐者的游戏,这一期我们继续使用Python实现一个简单的2048游戏,让我们开始今天的旅程吧~ 在 Python 免费源代码中使用 Tkinter 的简单 2048 游戏 使用 Tkinter 的简单 2048 游戏是一个用Python编程语言编码的桌面游…...
求解完全背包问题
题目描述实现一个算法求解完全背包问题。完全背包问题的介绍如下:已知一个容量为 totalweight 的背包,有不同重量不同价值的物品,问怎样在背包容量限制下达到利益最大化。完全背包问题的每个物品可以无限选用背包问题求解方法的介绍如下&…...
我们为什么使用docker 优点 作用
1. 我们为什么使用Docker? 当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。 就好比我…...
Python每日一练(20230311)
目录 1. 合并两个有序数组 2. 二叉树的右视图 3. 拼接最大数 🌟 每日一练刷题专栏 C/C 每日一练 专栏 Python 每日一练 专栏 1. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为…...
202109-3 CCF 脉冲神经网络 66分题解 + 解题思路 + 解题过程
解题思路 根据题意,脉冲源的阈值大于随机数时,会向其所有出点发送脉冲 神经元当v>30时,会向其所有出点发送脉冲,unordered_map <int, vector > ne; //存储神经元/脉冲源的所有出点集合vector 所有脉冲会有一定的延迟&am…...
Aurora简介
Amazon Aurora是一种兼容MySQL和PostgreSQL的商用级别关系数据库,它既有商用数据库的性能和可用性(比如Oracle数据库),又具有开源数据库的成本效益(比如MySQL数据库)。 Aurora的速度可以达到MySQL数据库的…...
【python实操】用python写软件弹窗
文章目录前言组件label 与 多行文本复选框组件Radiobutton单选组件Frame框架组件labelframe标签框架列表框Listboxscrollbar滚动条组件scale刻度条组件spinbox组件Toplevel子窗体组件PanedWindow组件Menu下拉菜单弹出菜单总结针对组件前言 python学习之路任重而道远࿰…...
Ubuntu 常用操作
版本22.04 1、开启 root # 输入新密码 sudo passwd rootUbuntu以root账号登录桌面 默认情况是不允许用root帐号直接登录图形界面的。 Ubuntu 默认使用 GNOME,GNOME 使用 GDM 显示管理器。 为了允许以 root 身份登录到 GNOME,你需要对位于 /etc/…...
井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)
实例2:井字棋 井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条…...
谷粒学院开发(三):统一日志、异常及前端准备工作
特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…...
华为OD机试题 - 招聘(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:招聘题目输入输出示例一输入输出说明示例二输入输出说明示例三输…...
关于SQL优化的几点说明
1. ORACLE DBA是如何进行SQL优化的 作为一个Oracle数据库管理员(DBA),SQL优化是他们的日常工作之一,主要目标是优化查询性能,减少查询时间,并提高数据库的整体性能。 以下是Oracle DBA如何进行SQL优化的一般流程: 监控…...
使用高精度秒表StopWatch测试DateTime.Now的精度
StopWatch使用的命名空间:using System.Diagnostics;StopWatch的使用方法:创建Stopwatch对象:stopwatch;stopwatch计时表开启:stopwatch.Start();stopwatch计时表关闭:stopwatch.Stop();计算stopwatch.Stop…...
【C++】vector的使用及其模拟实现
这里写目录标题一、vector的介绍及使用1. vector的介绍2. 构造函数3. 遍历方式4. 容量操作及空间增长问题5. 增删查改6. vector二维数组二、vector的模拟实现1. 构造函数2. 迭代器和基本接口3. reserve和resize4. push_back和pop_back5. insert和erase5. 迭代器失效问题5. 浅拷…...
[洛谷-P2585][ZJOI2006]三色二叉树(树形DP+状态机DP)
[洛谷-P2585][ZJOI2006]三色二叉树(树形DP状态机DP)一、题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示数据规模与约定二、分析1、递归建树2、树形DP 状态机DP(1)状态表示(2)状态转移三、…...
BI技巧丨计算组
PowerBI有三大工具,分别是DAX Studio,Tabular Editor和Bravo。 DAX Studio通常我们会用来进行性能分析和DAX调优使用,Bravo一般用来批量格式化DAX,而Tabular Editor主要的功能就是计算组。 计算组这个名词,相信很多小伙…...
PMP项目管理项目范围管理
目录1 项目范围管理概述2 规划范围管理3 收集需求4 定义范围5 创建 WBS6 确认范围7 控制范围1 项目范围管理概述 项目范围管理包括确保项目做且只做所需的全部工作,以成功完成项目的各 个过程。管理项目范围主要在于定义和控制哪些工作应在项目内,哪些工…...
Flink 定时加载数据源
一、简介 flink 自定义实时数据源使用流处理比较简单,比如 Kafka、MQ 等,如果使用 MySQL、redis 批处理也比较简单 如果需要定时加载数据作为 flink 数据源使用流处理,比如定时从 mysql 或者 redis 获取一批数据,传入 flink 做处…...
ChatGPT、人工智能、人类和一些酒桌闲聊
© 2023 Conmajia Initiated 10th March, 2023 昨天跟某化学家喝酒,期间提到了 ChatGPT。他的评价是:这鬼东西大量输出毫无意义、错漏百出甚至是虚假的信息,“in a confident accent”。例如某次 GPT 针对“描述某某记者”这一问题&#…...
WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查
目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常,程序闪退 5、VS调试时看不到有效的函数调用堆…...
Golang并发编程
Golang并发编程 文章目录Golang并发编程1. 协程2. channel2.1 channel的创建2.2 使用waitGroup实现同步3. 并发编程3.1 并发编程之runtime包3.2 mutex互斥锁3.3 channel遍历3.3.1 for if遍历3.3.2 for range3.4 select switch3.5 Timer3.5.1 time.NewTimer()3.5.2 Stop、reset…...
windows+Anaconda环境下安装BERT成功安装方法及问题汇总
前言 在WindowsAnaconda环境下安装BERT,遇到各种问题,几经磨难,最终成功。接下来,先介绍成功的安装方法,再附上遇到的问题汇总 成功的安装方法 1、创建虚拟环境 注意:必须加上python3.7.12以创建环境&a…...
git - 简易指南
git - 简易指南 创建新仓库 创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。 检出仓库 执行如下命令以创建一个本地仓库的克隆版本: git clone /path/to/repository 如果是远端服务器上的仓库,你的命令会是这个样…...
[论文笔记]Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
引言 我们知道Transformer很好用,但它设定的最长长度是512。像一篇文章超过512个token是很容易的,那么我们在处理这种长文本的情况下也想利用Transformer的强大表达能力需要怎么做呢? 本文就带来一种处理长文本的Transformer变种——Transf…...
华为OD机试题 - 找目标字符串(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:找目标字符串题目输入输出示例一输入输出说明Code解题思路版权说…...
C++面向对象编程之六:重载操作符(<<,>>,+,+=,==,!=,=)
重载操作符C允许我们重新定义操作符(例如:,-,*,/)等,使其对于我们自定义的类类型对象,也能像内置数据类型(例如:int,float,double&…...
JS_wangEditor富文本编辑器
官网:https://www.wangeditor.com/ 引入 CSS 定义样式 <link href"https://unpkg.com/wangeditor/editorlatest/dist/css/style.css" rel"stylesheet"> <style>#editor—wrapper {border: 1px solid #ccc;z-index: 100; /* 按需定…...
Django实践-06导出excel/pdf/echarts
文章目录Django实践-06导出excel/pdf/echartsDjango实践-06导出excel/pdf/echarts导出excel安装依赖库修改views.py添加excel导出函数修改urls.py添加excel/运行测试导出pdf安装依赖库修改views.py添加pdf导出函数修改urls.py添加pdf/生成前端统计图表修改views.py添加get_teac…...
java并发入门(一)共享模型—Synchronized、Wait/Notify、pack/unpack
一、共享模型—管程 1、共享存在的问题 1.1 共享变量案例 package com.yyds.juc.monitor;import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.MTest1") public class MTest1 {static int counter 0;public static void main(String[] args) throws InterruptedEx…...
Ast2500增加用户自定义功能
备注:这里使用的AMI的开发环境MegaRAC进行AST2500软件开发,并非openlinux版本。1、添加上电后自动执行的任务在PDKAccess.c中列出了系统启动过程中的所有任务,若需要添加功能,在相应的任务中添加自定义线程。一般在两个任务里面添…...
用Python暴力求解德·梅齐里亚克的砝码问题
文章目录固定个数的砝码可称量重量砝码的组合方法40镑砝码的组合问 一个商人有一个40磅的砝码,由于跌落在地而碎成4块。后来,称得每块碎片的重量都是整磅数,而且可以用这4 块来称从1 至40 磅之间的任意整数磅的重物。问这4 块砝码片各重多少&…...
离散Hopfield神经网络的分类——高校科研能力评价
离散Hopfield网络离散Hopfield网络是一种经典的神经网络模型,它的基本原理是利用离散化的神经元和离散化的权值矩阵来实现模式识别和模式恢复的功能。它最初由美国物理学家John Hopfield在1982年提出,是一种单层的全连接神经网络,被广泛应用于…...
Retrofit核心源码分析(三)- Call逻辑分析和扩展机制
在前面的两篇文章中,我们已经对 Retrofit 的注解解析、动态代理、网络请求和响应处理机制有了一定的了解。在这篇文章中,我们将深入分析 Retrofit 的 Call 逻辑,并介绍 Retrofit 的扩展机制。 一、Call 逻辑分析 Call 是 Retrofit 中最基本…...
源码分析spring如和对@Component注解进行BeanDefinition注册的
Spring ioc主要职责为依赖进行处理(依赖注入、依赖查找)、容器以及托管的(java bean、资源配置、事件)资源声明周期管理;在ioc容器启动对元信息进行读取(比如xml bean注解等)、事件管理、国际化等处理;首先…...