tag 标签: 机器算法

相关帖子
相关博文
  • 热度 2
    2020-3-3 12:47
    2749 次阅读|
    0 个评论
    建立更结构化的大脑模型是理解大脑如何组织自身的关键步骤,这可以帮助我们从fMRI,EEG等大脑测量数据中获得更多的数据意义。 数据科学是查看数据并从中提取有用知识的艺术。数据无处不在。数据意味着图像、音频、文本、股市趋势。 数据是我们查询世界时出现的一种方式。 获得有用的知识具有巨大的优势,无论是对于物种的生存还是对公司的生存而言。 因此,数据科学家的追求与生命地球本身一样古老:所有生命形式都一直在从来自环境的数据流中提取知识,以一种或另一种方式为他们的生存目标服务。有些长达数亿甚至数十亿年。 大脑以最复杂的方式带头完成了这项工作。 科学查询 科学的追求同样是从世界中提取知识,尽管这是一个更加刻意的过程。这个过程大致分为两个要素:建立世界模型并将这些模型与数据进行比较。 用更抽象的术语讲,这两个步骤类似于诸如自动编码器之类的生成模型的两个部分。 1、编码器:数据→模型 在第一阶段,可以称为 编码器阶段 ,我们从数据中提取某种 表示/模型 ,我们希望以某种方式反映数据背后的某种真实( 因果/概率 等)结构。 2、解码器:模型→预测(新数据) 第二阶段通过对模型进行有关世界的预测来对模型进行解码,然后在实验中将其与观测结果进行比较。 模型反演 但是,我们还需要采取另一步骤。如果我们只有很少的信息或我们的预测不成立(信息不确定性),我们如何建立和更改模型?如果我们的模型由于建立模型的世界发生变化或包含某种固有的不确定性(环境不确定性)而不再足够好,那会发生什么呢?物理定律可能始终保持不变,但是如果我们改而模拟某些善变的事物,比如像一个人行为不确定,该怎么办? 因此,我们需要另一个阶段,将有关世界的预测与现实世界进行比较,并调整模型以适应预测误差。 3、模型反演:预测的数据 vs. 传入的数据→改进模型 如何使用数据最有效地改善模型?如何同时拧紧复杂模型的许多螺钉而不拧脱口? 正如我在开始时提到的,大脑真的非常擅长从数据中提取相关知识。值得一提的是,他们是才华横溢的直觉科学家,即使他们有数百种偏见。他们不断建立世界模型,基于这些模型进行预测,如果预测不正确,则将其反转和改善。 这就是为什么进化过程首先将它们置于我们的脑海。 大脑是执行各种任务的高效学习者。与我们当前的机器学习算法相比,它们趋向于更好地推广和更灵活地学习,这也意味着快速适应不断变化的环境。 他们对难以置信的复杂过程做出了预测,例如 "我几分钟前遇到的这个人下一步要做什么?" ,这意味着我们的大脑会为我们遇到的每个人建立一个模型,并将这个模型集成到预先创建的模型中。现有的人的模型,进一步整合几种数据模式(该人的外观/说话/气味/移动方式)来微调模型,然后使用该人的新的近似模型在实际情况中进行预测,谈论他或她的行为,或迅速将其归类为朋友或敌人。 如果该人的行为与我们的预测相抵触,我们的大脑将无缝地更新其模型,而大多数时候我们不会注意到它。但是,正如机器学习和人工智能领域的当前标准所表明的那样,用计算机来完成这些事情需要花费更长的时间,花费更多的资源并需要更多的数据。 向大脑学习“如何学习” fMRI数据 神经科学家研究大脑已有一百多年了。但是大脑是很难破解的。我们从中收集的数据通常是混乱且难以解释的。有时候,只能是放弃。但是大脑每天都面临类似的情况。 大脑经不起借口 。如果我们的大脑只是屈服并说"世界太复杂了,就不可能从中学习任何有用的东西",那我们早就死了。 因此,即使我们没有大量的干净数据可用,我们也不会放弃,如何学习良好的大脑模型? 在一个光怪陆离的恶性循环中,我们可以看看自己研究的主题以提供指导:我们可以从大脑中学习大脑的学习方式, 找到有关如何改进和构建算法的灵感,进而帮助我们更好分析和建模大脑数据和行为数据 。 大脑中的分层模型 大脑可以有效地推断和改善其变化的世界模型。 层次模型 是对此进行概念化的一种方法。可以将认知视为层次结构中的结构化,这也适用于思想本身。 层次模型是用于逐步建立越来越复杂的对象表示的好工具。他们可以捕捉深刻非平凡的结构和数据背后的概率分布,可用于高效地生成预测。 它们的潜力激发了神经科学家寻找大脑中的分层模型的能力。我们在一个充满不确定性的世界中度过了自己的一生,有证据表明,大脑可能在使用大脑 中概率分布的 隐式 表示 来解释这种不确定性。有一些关于如何在神经元水平上将它们构建到大脑中的理论。 这些世界概率模型的不同层可以分布在不同的大脑区域和前额叶皮层的不同层中,因此我们的世界模型也将物理分布在大脑上。 高斯滤波器模型 作为一种可以以某种形式在大脑中实施的简单层次模型。 感知总是包含有关环境隐藏状态的不确定性。有没有一种方法可以直接对这种不确定性进行建模? 高斯滤波器的目的是了解 隐变量x 随时间变化的概率结构。这个 隐藏的变量可以代表您可能想到的任何类型的数据 ,无论是股票可能如何变化或您最好的朋友的决定。 该模型表示代理对该变量信念如何在时间上表现,并提供可以对变量进行预测的生成模型。 一个 高斯滤波模型 被构建在彼此顶部堆叠的几个高斯随机分布上。每个高斯都有各自的 均值 和 方差 ,从直觉上讲,其 均值 的倒数称为 精确度 ,因为如果高斯方差是由它产生的高估计值,它将 不会非常精确 。 这些高斯函数随时间进行离散的,这意味着每个高斯函数在时间t的新均值是通过从相同的高斯时间t-1绘制得出的。 为了对模型进行预测,我们从顶部开始,并从N个高斯层次中最高的,具有固定精度的高斯中提取值。该高斯给定的值通过某些函数确定其下一层的高斯精度,然后从中进行绘制。该高斯反过来确定下面的高斯的各自协方差。 冲洗,清洗并重复直到到达底层。 我们试图预测的 隐藏变量x 连接到高斯层次的最底层。如果变量是二进制的(在决策过程中采用布尔值,如"是"或"否"),则可以将底部高斯函数连接至像 单位平方的S形 函数 。 如果x本身被假定为高斯,则底部高斯直接 对随机变量x的概率分布进行建模 。 到目前为止,这似乎都还有点抽象,因此让我们对这里发生的事情有一些直觉。 高斯滤波器模型的学习行为 两条路在树林里分叉。我们如何告诉代理确定选哪一条? 高斯滤波器模型不仅被提议以 某种方式在大脑中实现 ,而且可以被"转过身"以分析来自行为实验的数据,为 真实的大脑在现实生活中的学习建模 。 让我们以最简单的情况为例:两个高斯叠加在每个高斯之上,它们通过单位平方的S型函数连接到布尔变量/决策。 假设我们正在让一个代理选择"是"还是"否",这是由某些 隐藏状态 决定的。我们可以将它们视为我们正在观察的主体的内部过程,就像他的 思想和动机一样 。它们当然可以 随着时间 而 改变 (我假设您曾经对某件事说"是",并很遗憾在您的世界模式改变之后稍后再说"是")。 底层的高斯编码表示代理趋向于"是"或"否"的趋势。现在,位于上一层的第二个高斯模型模拟了 底部高斯 模型的 波动性 :代理人趋向于是或否的趋势随时间变化的程度有多强,以及我们对代理人会说是或否的预测又有多大信心? ? 如果我们在两个现有的高斯函数之上叠加其他高斯函数,它们将对 波动率进行 建模,依此类推,以此类推,从而使模型能够捕获代理中隐藏状态的越来越复杂的概率分布。 层次模型中的模型反演 我们还没有完成。正如我在开始时所述,每个模型的第三个也是至关重要的步骤是 模型反演。 神经网络通常通过反向传播进行训练。采用损失函数的梯度并调整网络参数以减小损失。 高斯滤波器模型中的模型反演在结构上有些相似。的预测作出后,其层通过更新 最小化变自由能 ,由逆精度加权,通过对这些层向上该模型。 通过进行平均场近似(假设分布保持高斯分布并独立更新),该方案相对简单且计算效率高,并且可以在试验和实时方式下进行。 基于相应的预测误差来调整参数。从底部开始的事实遵循与反向传播完全相同的逻辑,在反向传播中,您也从连接到输出的网络层开始。 高斯的均值和精度根据预测误差的大小进行更新 。这样想:如果预测确实很好,几乎完全匹配观察结果,则传播的误差很小,并且一旦上移层次结构,误差就会越来越小。 首先,如果预测很差,但是猜测的准确性确实很小,这意味着该模型在此级别上对其预测高度不确定,那么该模型也不会调整得太强,因为它已经假设了预测可能会不确定,甚至可能会失效。 学习大脑如何学习 这个模型真的向我们展示了大脑如何学习吗?答案仍然不确定(问题是我们的大脑如何对这种不确定性进行建模),而且我们可以成功地使用该模型来学习行为的事实并不表明大脑确实是通过这种方式实现的。 尽管如此,伊格莱西亚斯等。 Al声称从神经影像学研究中发现了证据,可以做到这一点,即根据预测误差的大小,观察预测误差传播到不同的大脑区域/层级,然后将它们链接到不同的神经递质,例如参与奖励预测的多巴胺。 根据想法,该模型可以与神经解剖学联系起来:预测可能由 深部锥体细胞 传递,而预测错误则由例如 浅表锥体细胞 编码。 但是仍然存在许多悬而未决的问题,例如如何在解剖上实现模型的高斯,如何根据来自锥体细胞的信号更新其均值和协方差,如何计算预测误差等。 我们不仅可以通过用大脑启发的模型预测大脑的行为来学习大脑如何学习世界。 但是从更一般的意义上讲,层次模型在许多深度学习和数据科学应用中是有用的工具,因为它们在构造推理网络方面具有强大的功能,例如, 动态系统的摊销推理,自然语言处理或在变分自动编码中学习更好的近似后验,并可以使它们更具解释性 。由于我们对世界的感知是分层的,因此拥有分层模型可以轻松地将它们与我们的直觉和日常语言联系起来。 建立更结构化的大脑模型是理解大脑如何组织自身的关键步骤,这可以帮助我们从fMRI,EEG等大脑测量数据中获得更多的数据意义。 学习 无监督的数据生成模型 是AI开发的重要一步。我认为,分层方法是考虑它的更有希望的方法之一。
  • 热度 17
    2020-2-28 12:04
    5567 次阅读|
    0 个评论
    新型冠状病毒 确诊人数上升,我们在这个图中看到治愈数和死亡数差距将不断增大,我们有信心打赢这场战争! 新型冠状病毒渲染图 新型冠状病毒(以前的名称为2019-nCov,后来改为COVID-19¹)目前正席卷中国。到2020年2月13日,它引发了全球卫生紧急情况,并夺走了1000多条生命。新闻,谣言,混乱和恐慌不断轰炸着世界各地的人们。 为了帮助人们更好地评估情况并促进理性反应,流行数据必须易于公众获取。许多网站已经实时发布了一些流行病数字。例如,,等。这些网站向公众提供及时的信息,但是它们没有提供足够的数据进行分析。例如,使用上述网站回答以下任何简单问题将非常困难或几乎不可能: Q1:过去7天内,湖北省确诊病例数是多少? Q2:湖北外确诊数比较多的省份广东省和浙江省每天新确诊病例的比较情况如何? Q3:截至2020年2月13日,死亡人数最高的前5个城市是? Q4:能否对未来的预期发展规模做一个简单预测? 本文主要目的如下: 分析新型冠状病毒流行的某些方面,预测新型冠状病毒未来发展趋势 本文将从实时疫情报告丁香园上获得原始数据,然后进行数据清理:对原始数据汇总为每日,由于报告方案不一致,报告缺失等原因,执行关键清洁。每日添加新的确认/治愈/死亡数字。这样我们可以对上面问题进行回答: Q1、过去7天内,湖北省确诊病例数是多少? 我们可以看到从2月12号到2月13号有了迅速的增加,这是因为改变了计算感染者数目的方法,把临床也算上了。 Q2、广东省和浙江省每天新确诊病例的比较情况如何? 浙江和广东感染者数量上大体一致,且上升和下降趋势整体一致 我们在绘制中国已确诊,死亡和治愈病例的总数: 虽然确诊人数依然在上升,但是我们在这个图中看到治愈数和死亡数差距将不断增大,我们有信心这次战争肯定胜利。 同样,我们可以使用来自特定城市/省的数据。以下是武汉流行病情况统计的示例。 在这里武汉因为确诊人数过多,医护人员不够,死亡人数超过了1000,形势比较严峻。 我们比较一下所有省的确诊人数: 很显然,这是抗疫情主战场在湖北。 我们按2020年2月5号新确诊的最高计数对前10个城市进行比较: 基本这些城市大都来自与湖北,而武汉则是主战场中主战场。 下面将进入本文最精彩的部分: 疫情形式的预测 我们进行预测的数据来自于中国疾病预防控制中心从2019年12月1日至2020年2月16日发布报告。 我们用传染病模型研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制。常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型等,按照传播机理又分为基于常微分方程、偏微分方程、网络动力学的不同类型。 一般把传染病流行范围内的人群分成如下几类: S 类,易感者 (Susceptible) ,指未得病者,但缺乏免疫能力,与感染者接触后容易受到感染; 2. E 类,暴露者 (Exposed) ,指接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用; 3. I 类,感病者 (Infectious) ,指染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员; 4. R 类,康复者 (Recovered) ,指被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类。 使用SEIR模型进行预测 如果所研究的传染病有一定的,与病人接触过的健康人并不马上患病,而是成为病原体的,归入 E 类。 在SEIR模型中,在传染病传播过程中,允许节点将其状态从易感(S)改为暴露(E)再到已受感染(I),然后更改为删除(R)。 SEIR假设,如果在一个通用迭代中,一个易受感染的节点与一个受感染的节点接触,它在与概率为beta的暴露期后被感染,那么它可以切换到以概率gamma来移除(唯一允许的变化顺序是S→E→I→R)。 我们的模型假设感染的平均持续时间是14天,在初始状态下,假设所有人都未被感染,除了一个感染病例,没有人死亡或康复。潜伏期平均为7天。在1月23日之前,假设确诊病例每日接触人数的平均值为5。(K = 5)(戴口罩的几率低,然后假设1月23日以后,确诊病例每日接触人数的平均值为5 (2019-nCoV的高亲和性),然后被治愈的人将不再具有传染性。 这里我们先用SEIR模型构建出政府不进行控制后的后果: 1月23号前 最大感染病例降将达到:2107865例 1月23号后,由于政府控制和个人保护意识的提升,我们假设每个确诊者每日平均接触一人。 我们根据官方报告留在武汉的人数大约为900万进行建模: 最大感染病例:14219例 这时,平均每人将感染2.9人 如果我们假设每个确诊者每日平均接触两人,而不是一人,因为有些患者不能正确或立即检测到,也不能完全隔离。 这时平均每个人将感染3.7人 最大感染人数将达到101156例 最后,以上的预测是基于一些假设的,真实情况有着各种因素,但无论如何我们坚信,这次疫站肯定胜利,只要政府坚持严格管控!
  • 热度 4
    2020-2-28 12:01
    4706 次阅读|
    2 个评论
    傅里叶变换的作用是将我们从时域移到频域。 介绍 傅里叶变换是有史以来最深刻的数学见解之一,但不幸的是,其含义深深地埋在了一些荒谬的方程式中。 傅立叶变换是一种将某些东西分解为一堆正弦波的方法。像往常一样,这个名字来自一个很久以前的数学家,叫做傅里叶。 用数学术语来说,傅立叶变换是一种将信号转换为其组成成分和频率的技术。 傅里叶变换不仅广泛用于信号(无线电,声音等)处理,而且还广泛用于图像分析(例如,傅里叶变换)。边缘检测,图像过滤,图像重建和图像压缩。一个例子:透射电子显微镜图像的傅立叶变换有助于检查样品的周期性。周期性-表示模式。数据的傅立叶变换可以扩展有关分析样品的可访问信息。为了更好地理解它,请考虑信号x(t): 如果我们对另一个信号执行相同操作,并选择相同的时间点,我们将测量其幅度。 考虑另一个信号y(t): 当我们同时发出这两个信号或将它们加在一起时会发生什么? 当我们在同一时间发射这两个信号时,我们得到一个新信号,它是这两个信号的振幅之和。之所以如此,是因为这两个信号被加在一起。 将两个信号相加:z(t)= x(t)+ y(t) 如果只给出一个信号(x(t)和y(t)之和),我们能否恢复原始信号x(t)和y(t)? 是。这就是傅立叶变换的作用。它吸收信号并将其分解为组成它的频率。 在我们的示例中,傅立叶变换会将信号z(t)分解成其组成频率,如信号x(t)和y(t)。 傅里叶变换的作用是将我们 从时域移到频域。 如果有人怀疑,我们是否要从频域回到时域呢? 我们可以使用傅立叶逆变换(IFT)来实现。 " 时域中的任何连续信号都可以由无穷多个正弦波来唯一唯一地表示。" 这是什么意思? 这意味着,如果我们有某个函数生成的信号,则x(t)可以提出另一个函数,f(t)例如: 因此,无论信号有多强,我们都可以找到一个函数f(t),该函数是无限多个正弦曲线之和, 实际上可以完美地代表信号。 现在的问题是,如何在上式中找到系数,因为这些值将决定输出的形状,从而决定信号的形状。 因此,为了获得这些系数,我们使用傅立叶变换,并且傅立叶变换的结果是一组系数。因此,我们X(w)用来表示傅立叶系数,它是频率的函数,是通过求解以下积分得到的: 傅立叶变换表示为不定积分: X(w):傅立叶变换x(t):傅立叶逆变换 傅立叶变换和傅立叶逆变换 同样,当我们实际求解上述积分时,我们会在以下位置得到这些复数a并b对应于我们所要求的系数。 连续傅立叶变换将无限持续时间的时域信号转换成由无限数量的正弦波组成的连续频谱。 实际上,我们处理的是离散采样的信号,通常以固定间隔,有限的持续时间或周期性地进行。为此,经典傅里叶变换算法可以表示为离散傅里叶变换(DFT),该函数将函数的等距样本的有限序列转换为离散时间的等距样本的等长序列傅里叶变换: 因此,这本质上是离散傅立叶变换。我们可以进行此计算,并且将产生一个复数,形式是我们在傅里叶级数中有两个系数a + ib 现在,我们知道了如何对信号进行采样以及如何应用离散傅立叶变换。我们希望做的最后一件事是,我们想摆脱复数的i,因为它不支持的mllib或者systemML使用一些被称为欧拉公式的规定: 因此,如果将欧拉公式代入傅立叶变换方程并求解,它将产生实部和虚部。 X由复数形式的a+ib或组成a-ib。因此,如果求解上述方程,将获得傅立叶系数 a 和 b 。 现在,如果只是将 a 和 b 的值放在等式中,f(t) 则可以根据信号的频率定义信号。 在一般实践中,我们使用快速傅里叶变换(FFT)算法,该算法将DFT递归地划分为较小的DFT,从而大大减少了所需的计算时间。DFT的时间复杂度为2N²,而FFT 的时间复杂度为2NlogN。 为什么表示信号时要使用余弦和正弦函数? 虽然正弦和余弦函数最初是基于直角三角形定义的,但在当前情况下,从那种角度来看并不是最好的事情。传统观点中正弦函数是"斜边对立的",但是现在是时候有一点不同的观点了。 考虑单位圆: 在笛卡尔平面上。假设通过原点的直线与轴在逆时针方向上形成角度θ,则直线与圆的交点为(cos⁡θ,sin⁡θ)。 想一想。这种观点与较早的观点相关吗?这两个定义是相同的。 假设我们通过使θ线性增加开始旋转直线。你会得到这样的东西: 正弦和余弦函数在某些情况下可以说是最重要的周期函数: SHM振荡器中位移,速度和加速度如何随时间变化的周期性函数是正弦函数。 2.每个粒子都有波动的性质,反之亦然。这是 德布罗意的波粒对偶 。波浪始终是某种物理量的正弦函数,例如EM波的电场和声波的压力。 声音本身就是压力扰动,它通过能够压缩和扩展的材料介质传播。与声波一起的一点处的压力随时间呈正弦变化。 傅立叶变换的收敛 如果一个点以恒定的速度绕圆运动,则其在地面上方的高度将跟踪正弦函数。点移动的速度对应于频率,圆的半径对应于振幅。 再增加1个圆圈, 再添加2个圆圈, 再添加9个圆圈: 几乎是离散的波形。 由于傅立叶定理,我们可以生成具有适当频率和半径的圆的任何信号。 人工智能中的傅立叶变换 傅立叶变换是线性函数,可引起非线性。使用卷积。 2个信号的乘积的傅立叶变换是2个信号的卷积。 令x(t)和y(t)是两个具有卷积X(t)* Y(t)的函数,而F表示傅立叶变换,则 F {x(t).y(t)} = X(t)* Y(t) 请记住, 时域中的卷积是频域中的乘法。这就是傅立叶变换主要用于机器学习,尤其是深度学习算法的方式。 我将以 卷积神经网络(CNN) 为例; CNN中 90% 的计算是卷积,并且有许多方法可以降低这种计算的强度,其中之一是快速傅立叶变换(FFT)。 代替卷积,输入和滤波器矩阵通过FFT转换到频域,以进行乘法。然后,通过逆 FFT(IFFT)将输出转换回时域。 FFT的另一用途是可用于降维或特征提取。 当数据集中的每个样本都是信号(时间序列或图像等)时,它可能包含数千个样本。但是它们实际上可能只对应于傅立叶域中的几个点(特别是如果存在一定的周期性)。这大大简化了问题。 有时使用傅立叶域可能会提供平移不变性。也就是说,即使信号之间存在滞后,这种方差也不会影响它们在傅立叶域中的表示。 傅立叶变换的Python实现 可以使用numpy和scipy python库完成FFT的最简单实现。 %matplotlib inline import numpy as np import matplotlib.pyplot as plt import scipy.fftpack # Number of samplepoints N = 600 # sample spacing T = 1.0 / 800.0 x = np.linspace(0.0, N*T, N) y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x) yf = scipy.fftpack.fft(y) xf = np.linspace(0.0, 1.0/(2.0*T), N/2) fig, ax = plt.subplots() ax.plot(xf, 2.0/N * np.abs(yf )) plt.show() FFT图
  • 热度 6
    2019-11-22 11:12
    32363 次阅读|
    2 个评论
    把任意一个整数拆成三个不同正整数的和 先前看蓝桥杯类的题,有道填空题把2019分为3个不同正整数和不考虑顺序问题)有多少方法。 今天修改了一下,可以求任意正整数。 思路:分为3个不同整数,假如a b c这3个数则他们需要满足a
  • 热度 2
    2019-11-22 11:00
    2244 次阅读|
    1 个评论
    1 引用 Bartolucci, Silvia , P. Bernat , and D. Joseph . "SHARVOT: Secret SHARe-Based VOTing on the Blockchain." 2018 IEEE/ACM 1st International Workshop on Emerging Trends in Software Engineering for Blockchain (WETSEB) IEEE Computer Society, 2018. 2 摘要 最近,人们越来越关注使用在线技术来设计用于安全电子投票的协议。主要挑战包括投票隐私和匿名,在整个计票过程中投票不可撤销和透明度。区块链作为加密货币协议的基础的引入,提供了对这些分布式分类账的不变性和透明性的利用。 在本文中,我们讨论区块链技术的可能用途,以实现安全和公平的投票系统。特别是,我们在区块链上引入了一个基于秘密共享的投票系统,即所谓的SHARVOT协议。我们的解决方案使用Shamir的秘密共享来实现链上共享,即在事务脚本中,提交投票并赢得候选人的决定。该协议还使用了一种改组技术Circle Shuffle来将选民从他们提交的内容中去除。 3 技术介绍 考虑 n 选民 U 1 ,......,U n ,希望在几个候选人之间表达他们的偏好。为简单起见,我们假设在两个候选者A和B之间做出选择。SharvOT协议包含一个利用比特币区块链的投票解决方案;该协议基于Shamir的秘密共享方案和改组技术Circle Spuffle。 私人密钥份额被分配给在n-1个输出交易中进行收费的投票者,然后永久记录投票。每个输入对应于选民支付的费用。获胜候选人必须同时获得多数票和超过指定门槛的票数才能收取费用。 SHARVOT协议设计有故障保护,如果没有候选人收集足够的关键份额以在选民签署的交易中花费UTXO,则选民所承诺的任何比特币都是可以恢复的。基于经销商的密钥份额分配方案被预期用于SHARVOT协议的大部分实施,因为让经销商承担对合格选民列表的权限控制的角色。 密钥生成。公共/私人密钥对由发牌人分配给两个候选者A和B中的每一个,P A =K A ×G和P B =K B ×G。候选者还拥有公钥/私钥对,分别为M A =S A ×G和M B =S B ×G,并发布他们的公钥。经销商还发布公钥P A 和P B ,同时保持K A 和K B 私有。对于每个秘密,经销商计算密钥份额,K A,i ,i=1,...,n和K B,i ,i=1,...,n,并分配一对密钥份额(K A,i ,K B.i )每个选民U i 。因此,只有当选民为特定候选人提交足够数量的票t+1时,才能确定K A 和K B 值。 投票提交。每个选民Ui都会为他们选择的候选人加密他们的选票。例如,假设U i 将他们的投票给候选人B,因此组成v i =EncB(K B,i ||IdB)。洗牌的清单发送给经销商。 P2SH地址。经销商在从当时选民那里收到所选择的关键份额后,生成P2SH地址。多重签名输出中允许的最大公钥数为15(参见公式1)。因此,多签名脚本中的13个字段可用于存储参与者的投票,而剩余的两个字段可用于存储候选人(M A 或M B )提供的公钥以及经销商分配给后者的公钥(P A 或P B )。 因此,P2SH脚本基于if-else语句,其中每个语句都是一个多重签名脚本,包含多达13票和候选人的上述键。如果在一段时间ΔT之后没有候选人获得足够数量的投票,则添加以scriptPubKey(S=K×G)的形式的最终陈述。 图1-1在SHARVOT协议中创建的交易:投票承诺交易投票和支付选民费用,每个候选人拥有的交易,以及退款交易,如果没有候选人获胜,退还费用给选民 投票承诺交易。然后,经销商创建投票承诺交易(VCT),其包括一个输出,其中n×x比特币被发送到P2SH地址。如图1-1所示,该交易被发送给添加其输入(x比特币)并对VCT签名的选民。签署VCT的最后一位参与者将其发送给经销商,经销商将其提交以包含在区块链中。请注意,在签署VCT时,选民可以完全匿名地核实公共记录中包含的投票的正确性。 退款交易。在VCT实际在网络上广播之前,经销商创建退款交易(RT),其将输出花费在VCT中并将x比特币重新分配给每个选民。交易商使用解锁第三选项的私钥k签署交易(尽管后者包括阻止UTXO在ΔT之前花费的锁定时间)。经销商将签名的RT发送给选民。然后,只有这时才提交VCT以包含在区块链中。 理想情况下,秘密k应该由交易商和选民控制,以便在任何情况下交易商都不能窃取投票费用。例如,可以在脚本中添加1-of-n多重签名,以便需要经销商的签名和至少一个选民的签名来花费投票承诺交易的UTXO。 选举结果。在一个候选者成功解密P2SH脚本中包括的混洗列表中的t+1个或更多个密钥份额的情况下,候选者可以重建解锁VCT中的n×x比特币所需的秘密密钥。如果没有候选人获得足够的关键份额,选民可以广播转发并收回费用。 4 本文主要贡献 在本文中,我们提出了使用区块链技术来宣布和建立选举并确定获胜候选人的解决方案。特别是,我们专注于如何在交易脚本中广播投票并正确计算它们,同时(i)保护选民的隐私和匿名(不需要知情证明),(ii)只允许符合条件的用户投出他们的偏好,(iii)防止旨在使选票无效的攻击。