繁体   English   中英

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

[英]How to protect (obfuscate/DRM) trained model weights in Tensorflow.js?

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

从业务角度来看,我希望该模型适用于我的 Web 应用程序,而不是其他任何地方。

我在这方面找到的讨论 ( 1 2 3 ) 更适合本机应用程序,而不是 Web 应用程序。

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

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

混淆

如果您的客户端应用程序包含模型,那么用户将能够以某种方式提取它。 你可以让用户更难,但它永远是可能的。 一些使它更难的技术是:

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

即使您的代码已完全混淆并受到良好保护,您的客户端代码仍会在某处包含您的模型。 使用这些方法总是可以以某种方式提取您的模型。

服务器端方法

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

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

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

另一种保护模型的方法是将模型拆分为多个块。 在服务器端放置一些块,在客户端放置一些块。 这种方法也可能会引入很多工程工作,但是一旦你这样做了,你就可以权衡服务器和客户端之间的计算负载和网络延迟。 用户只能得到一些无用的模型块,而无需与服务器端块配合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM