当前位置:   article > 正文

在 BSV 上构建机器学习竞赛市场_机器学习构建比特币项目

机器学习构建比特币项目

我们提出了一种在 BSV 上实现去中心化机器学习 (ML) 市场的新方法。任何人都可以通过发布附带奖励的智能合约来外包机器学习任务。任何提交表现最佳模型的人都将通过区块链交易获得奖励,而无需通过中心化机构。

在这里插入图片描述

如何在 BSV 上进行机器学习竞赛

Kaggle 是一个流行的数据建模和数据分析分析竞赛平台,之前已被 Google 收购。Kaggle 竞赛中包括了很多由 Kaggle 、Facebook 、微软等其他公司制作的机器学习任务。如果竞争成功,参赛者可以获得金钱奖励,有时超过一百万美元。

与 Kaggle 比赛类似,在 BSV 上实现机器学习建模比赛包括以下步骤:

  1. 比赛主办方通过部署智能合约准备数据和问题描述。为避免对训练数据集过度拟合,所有提交的模型都将在一个独立的测试数据集上进行评估,这个测试数据集的比特承诺也会事先提交;
  2. 参赛者从合约下载训练数据并在链下训练他们的模型;
  3. 参赛者将他们的模型提交给合约;
  4. 主办方公开测试数据集支付给创建最优模型的参与者,通常是当他找到一个令人满意的模型,或者到了截止日期,或者收到了最大数量的提交时,就会触发这个事件。

整个 ML 竞赛都编码在智能合约中并受其监管。与传统的 ML 竞赛相比,在 BSV 上运行它们具有显着优势:

  • 去信任/透明: BSV 区块链中的一切都是公开和公开的,没有交易对手风险,也没有作弊;
  • 支持小额比赛:得益于 BSV 对小额支付的支持,甚至可以举办奖励低于1美分的比赛,这在以前是不可能的;
  • 没有中间人:任何人都可以在未经 Kaggle 等任何中心化机构许可的情况下举办比赛或提交机器学习模型;

以性别分类感知器为例

为了演示这个想法在实践中是如何工作的,我们使用感知器来解决一个简单的分类问题,类似我们之前所做的例子。用测试数据集评估时,错误率最低的模型获胜并赢得奖品,所有这些都在链上执行。示例合约如下:

// submit a solution
    public function submit(SigHashPreimage txPreimage, Submission subm) {
        require(Tx.checkPreimage(txPreimage));
        bytes scriptCode = Util.scriptCode(txPreimage);

        // read/deserialize state
        int stateStart = Reader.getStateStart(scriptCode);
        State state = this.deserialize(scriptCode[stateStart :]);

        // append the submission to the candidates
        if (++state.count < S) {
            loop (S) : i {
                if (i == state.count)
                    state.submissions[i] = subm;
            }
        }

        // write/serialize state
        bytes stateBuf = serialize(state);

        bytes scriptCode_ = scriptCode[: stateStart] + stateBuf;
        bytes output = Util.buildOutput(scriptCode_, Util.value(txPreimage));
        require(hash256(output) == Util.hashOutputs(txPreimage));
    }

    // reveal the testing dataset and pay the winner with smallest error
    public function evaluate(SigHashPreimage txPreimage, DataPoint[T] testingDataset) {
        require(Tx.checkPreimage(txPreimage));
        bytes scriptCode = Util.scriptCode(txPreimage);

        // read/deserialize state
        int stateStart = Reader.getStateStart(scriptCode);
        State state = this.deserialize(scriptCode[stateStart :]);

        // validate testing dataset is what was committed
        require(this.validateTestData(testingDataset));

        // find the winner with the miminal predicted error
        Ripemd160 winner = Ripemd160(b'');
        int minError = 0xFFFFFFFFFFF;
        loop (S) : i {
            if (i < state.count) {
                auto subm = state.submissions[i];
                auto error = calcError(subm, testingDataset);
                if (error < minError) {
                    minError = error;
                    winner = subm.addr;
                }
            }
        }
        
        bytes output = Util.buildOutput(Util.buildPublicKeyHashScript(winner), Util.value(txPreimage));
        require(hash256(output) == Util.hashOutputs(txPreimage));
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

实际考虑

如果主办方决定不公开测试数据集,则建模者无法获得报酬。解决此问题的一种方法是添加另一个支付条件(例如,sCrypt 中的另一个公共函数)以便在特定时间后领取赏金,其中所有建模者都可以根据其在训练数据集上的准确性来分配赏金。

总结

一个开放透明的机器学习模型市场将使 ML 模型的交易和使用成本变得更低,也更有助于产业繁荣。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/159627
推荐阅读
相关标签
  

闽ICP备14008679号