javascript - 如何在 Tensorflow.js 中保护(混淆/DRM)经过训练的模型权重?

标签 javascript reactjs tensorflow tensorflow.js

我正在开发一个基于 React 的 Web 应用程序,该应用程序使用 Tensorflow.js 在客户端的浏览器中实时运行 AI 模型。我从头开始训练了这个人工智能模型,我想保护它不被拦截并在其他项目中使用。是否有任何保护措施可以做到这一点(混淆、DRM 等)?

从业务 Angular 来看,我希望该模型在我的网络应用程序上运行,而不是在其他地方。

我发现有关此问题的讨论 ( 1 2 3 ) 更适合 native 应用程序,而不是 Web 应用程序。

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

最佳答案

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

混淆

如果您的客户端应用程序包含模型,那么用户将能够以某种方式提取它。你可以让用户变得更难,但这总是有可能的。一些增加难度的技巧是:

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

即使您的代码被完全混淆并受到良好保护,您的客户端代码仍然在某处包含您的模型。通过这些方法,始终可以以某种方式提取您的模型。

服务器端方法

为了使模型无法获得,您需要采用不同的方法。只把你的“愚蠢逻辑”放在客户端上。排除您想要保护的代码部分。相反,您在服务器上提供一个 API 来执行代码的“ protected 部分”。

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

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

关于javascript - 如何在 Tensorflow.js 中保护(混淆/DRM)经过训练的模型权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56919400/

相关文章:

javascript - 取消订阅其自己的回调内的封闭变量

reactjs - 如何为我的 <App/> 提供在客户端和服务器渲染上构建不同且 <App/> 及其 thunk 需要的数据?

reactjs - 导入自定义 npm 包会导致空/空对象

python - 如何使用 Keras 作为高级 API 在 tensorflow 上实现批量归一化

python - 无法在Raspberry Pi 3上通过pip3安装opencv-python

javascript - 如何仅使用日期选择器获取日期年月日

javascript - 同步 Javascript 和 PHP

javascript - 使用 javascript 单击 HTML 链接时如何添加输入表单?

javascript - React 组件无法读取未定义的属性

python - 如何使用Tensorflow输入整数向量