【问题标题】:How to protect (obfuscate/DRM) trained model weights in Tensorflow.js?如何在 Tensorflow.js 中保护(混淆/DRM)训练的模型权重?
【发布时间】:2019-07-07 04:41:26
【问题描述】:

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

从业务角度来看,我希望该模型可以在我的网络应用程序上运行,其他任何地方都没有。

我发现的讨论 (123) 更倾向于原生应用,而不是网络应用。

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

【问题讨论】:

    标签: javascript reactjs tensorflow tensorflow.js


    【解决方案1】:

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

    混淆

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

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

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

    服务器端方法

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-16
        • 2021-09-11
        • 1970-01-01
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2018-08-03
        相关资源
        最近更新 更多