如何在Tensorflow.js中保护(模糊/ DRM)训练有素的模型权重?

时间:2019-07-07 04:41:26

标签: javascript reactjs tensorflow tensorflow.js

我正在开发一个基于React的Web应用程序,该应用程序使用Tensorflow.js在浏览器的客户端上实时运行AI模型。我已经从零开始训练了这个AI模型,并希望防止它被其他项目截取和使用。是否有任何保护措施(混淆,DRM等)?

从业务角度来看,我只是想让该模型在我的Web应用程序上运行,而在其他任何地方都不能。

我能够找到的讨论(1 2 3)更适合于本机应用程序,而不是Web应用程序。

Here是使用Tensorflow.js的示例开源Web应用程序。这些权重是我希望在应用程序中保护的一个示例。

2 个答案:

答案 0 :(得分:1)

客户端代码混淆永远不会完全阻止它。请改用服务器。

迷惑

如果您的客户端应用程序包含模型,则用户将能够以某种方式提取它。您可以为用户增加难度,但总有可能。使其变得更困难的一些技术是:

  • Obfuscating您的代码:这样,用户将无法轻松阅读您的代码和注释。根据您的构建工具,当您生成“生产就绪”的构建时,可能已经为您完成了。
  • 混淆库及其公共API :即使混淆了您的代码,用户仍然可以通过查看库的公共API调用来猜测发生了什么。示例:在model.predict函数中设置断点并从那里调试代码会非常容易。通过混淆库及其API,这将变得更加困难。
  • 在代码中添加“特殊检查” :您还可以检查正在运行代码的页面是否是您的页面(例如,域是否匹配)等。您还希望对此进行混淆代码。

即使您的代码被完全混淆并得到了很好的保护,您的客户端代码仍然将模型包含在某个地方。使用这些方法,始终可以以某种方式提取模型。

服务器端方法

要使无法获得模型,您需要使用其他方法。仅将“愚蠢的逻辑”放在客户端上。排除要保护的代码部分。相反,您在服务器上提供了执行代码“受保护部分”的API。

这样,您无需在客户端运行model.predict,而是向后端(带有参数)发出AJAX请求,然后返回结果。这样,用户只能看到输入和输出,而不能提取模型本身。

请记住,这意味着需要做很多工作,因为您不仅必须为客户端应用程序编写代码,而且还必须为服务器端应用程序(包括API)编写代码。根据您的应用程序的外观(例如:它是否具有登录名?),这可能会包含更多代码。

答案 1 :(得分:-1)

保护模型的另一种方法是将模型分成多个块。在服务器端放置一些块,在客户端放置一些块。这种方法可能还会带来很多工程工作,但是一旦这样做,您就可以权衡服务器和客户端之间的计算负载和网络延迟。如果不与服务器端模块配合,用户只能获得一些无用的模块。