我们提出了一种在比特币上实现去中心化机器学习 (ML) 市场的新方法。任何人都可以通过发布附带奖励的智能合约来外包机器学习任务。任何提交表现最佳模型的人都将通过区块链交易获得奖励,而无需通过中心化机构。
如何在比特币上进行机器学习竞赛
Kaggle 是一个流行的数据建模和数据分析分析竞赛平台,之前已被 Google 收购。Kaggle 竞赛中包括了很多由 Kaggle 、Facebook 、微软等其他公司制作的机器学习任务。如果竞争成功,参赛者可以获得金钱奖励,有时超过一百万美元。
与 Kaggle 比赛类似,在比特币上实现机器学习建模比赛包括以下步骤:
- 比赛主办方通过部署智能合约准备数据和问题描述。为避免对训练数据集过度拟合,所有提交的模型都将在一个独立的测试数据集上进行评估,这个测试数据集的比特承诺也会事先提交;
- 参赛者从合约下载训练数据并在链下训练他们的模型;
- 参赛者将他们的模型提交给合约;
- 主办方公开测试数据集支付给创建最优模型的参与者,通常是当他找到一个令人满意的模型,或者到了截止日期,或者收到了最大数量的提交时,就会触发这个事件。
整个 ML 竞赛都编码在智能合约中并受其监管。与传统的 ML 竞赛相比,在比特币上运行它们具有显着优势:
- 去信任/透明:比特币区块链中的一切都是公开和公开的,没有交易对手风险,也没有作弊;
- 支持小额比赛:得益于比特币对小额支付的支持,甚至可以举办奖励低于1美分的比赛,这在以前是不可能的;
- 没有中间人:任何人都可以在未经 Kaggle 等任何中心化机构许可的情况下举办比赛或提交机器学习模型;
以性别分类感知器为例
为了演示这个想法在实践中是如何工作的,我们使用感知器来解决一个简单的分类问题,类似我们之前所做的例子。用测试数据集评估时,错误率最低的模型获胜并赢得奖品,所有这些都在链上执行。示例合约如下:
public function submit(SigHashPreimage txPreimage, Submission subm) {
require(Tx.checkPreimage(txPreimage));
bytes scriptCode = Util.scriptCode(txPreimage);
int stateStart = Reader.getStateStart(scriptCode);
State state = this.deserialize(scriptCode[stateStart :]);
if (++state.count < S) {
loop (S) : i {
if (i == state.count)
state.submissions[i] = subm;
}
}
bytes stateBuf = serialize(state);
bytes scriptCode_ = scriptCode[: stateStart] + stateBuf;
bytes output = Util.buildOutput(scriptCode_, Util.value(txPreimage));
require(hash256(output) == Util.hashOutputs(txPreimage));
}
public function evaluate(SigHashPreimage txPreimage, DataPoint[T] testingDataset) {
require(Tx.checkPreimage(txPreimage));
bytes scriptCode = Util.scriptCode(txPreimage);
int stateStart = Reader.getStateStart(scriptCode);
State state = this.deserialize(scriptCode[stateStart :]);
require(this.validateTestData(testingDataset));
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));
}
实际考虑
如果主办方决定不公开测试数据集,则建模者无法获得报酬。解决此问题的一种方法是添加另一个支付条件(例如,sCrypt 中的另一个公共函数)以便在特定时间后领取赏金,其中所有建模者都可以根据其在训练数据集上的准确性来分配赏金。
总结
一个开放透明的机器学习模型市场将使 ML 模型的交易和使用成本变得更低,也更有助于产业繁荣。
|