come proteggersi dal furto di una classe. (classe di rete neurale) [duplicato]

-3

Sto scrivendo un software che fa uso di una rete neurale. Ciò che rende la mia rete speciale rispetto agli altri, è il modo in cui li alleno. Non è standard, è qualcosa che non voglio dare ad un'altra compagnia. Quindi ho pensato a come proteggermi dal mancato uso / furto del mio codice di addestramento alla rete neurale. La società che sta acquistando questo software ha assunto circa 12 programmatori C ++, mentre io scrivo esclusivamente in C # e dubito che potrei mantenere alcune parti segrete per loro, poiché è probabile che si verifichi il reverse engineering. Quando il software che faccio diventa un successo.

Quindi all'inizio permetto di inserire una chiave sicura come requisito per creare un'istanza di questa classe e, senza quell'esecuzione, una sorta di costruzione della licenza. Suona bene, ma per quanto riguarda le reti neurali l'addestramento è una parte essenziale; i metodi di allenamento dovrebbero essere in grado di creare reti neurali. Quindi un allenatore avrebbe bisogno anche di un generatore di chiavi ...

Poi stavo pensando a come abbandonare l'opzione per la formazione dei dati. Quindi l'altra compagnia è in grado di caricare solo il cervello addestrato. Ma non per addestrare la rete neurale, inserendo tutto il codice relativo alla formazione in un file .cs separato come una classe parziale. Poi ho semplicemente sviluppato la classe della rete neurale nel suo intero github privato. Prendi solo lo snippet senza routine di formazione da utilizzare nel mio programma cliente.
Mi chiedo se sarebbe una cosa saggia da fare, o se risultasse in qualche schema anti. ???

un modello anti, per esempio, sta mantenendo il codice della rete neurale.
"Copiare" un file di un progetto github in un altro progetto non è ideale.

Questo non è un duplicato generale di un'altra domanda di protezioni. Si tratta di un programma che richiede l'addestramento di parti A + B, ma solo A per eseguirlo e non fornire la parte B.

    
posta user3800527 19.06.2017 - 15:24
fonte

3 risposte

1

Crea due assiemi. L'Assembly A contiene tutte le classi necessarie per utilizzare il modello addestrato, ma nessuno del codice che forma il modello. L'assembly B contiene solo le classi che addestrano i modelli e nient'altro. Assemblaggio dei riferimenti del gruppo B A.

Consegna l'assemblea A e tieni l'assemblea B da solo.

La tua domanda e i tuoi commenti fanno sembrare che tu abbia una "classe di rete neurale" che contiene il codice sia per l'utilizzo che per l'addestramento del modello. Non farlo. Sembra anche che stiate pensando di avere due versioni del codice della rete neurale, una con funzionalità di allenamento e una senza funzionalità di allenamento. Neanche farlo.

Invece, avere una classe Model (nell'assembly A) che contiene il codice necessario per usare il modello, ma nessuno del codice che è essenziale per addestrare il modello; e avere una classe di Trainer separata (nell'assembly B) che allena il modello interagendo con gli oggetti del Modello. L'assembly B non deve contenere alcuna funzionalità della classe Model.

    
risposta data 19.06.2017 - 20:26
fonte
4

Quando una società acquista il tuo software, avrai un contratto che indica ciò che offri e cosa possono fare.

È probabile che ciò che stai pianificando gli impedirà di firmare un contratto in primo luogo. Non ottengono ciò che vogliono e devono lavorare con qualcuno che potrebbe venire in mente con altre idee interessanti in futuro. Vorrei correre.

Ricorda, c'è un contratto. Una compagnia non può semplicemente rubare le cose. La maggior parte delle aziende no. E quelli che di solito si fanno fottere il culo.

    
risposta data 19.06.2017 - 17:04
fonte
2

Il software è un tipo di conoscenza e la conoscenza è estremamente difficile da proteggere.

Puoi proteggere il tuo software con mezzi tecnici?

Non puoi fare nulla nel tuo codice sul furto, se è autosufficiente. Anche senza il codice sorgente, qualsiasi meccanismo di protezione che avresti potuto implementare, avrebbe bisogno di alcune funzionalità nel tuo codice per essere gestito. Reverse engineering potrebbe quindi trovare i dettagli, anche la chiave di decodifica.

L'unica protezione tecnica attiva che potresti prendere in considerazione sarebbe quella di rendere il tuo software dipendente da alcuni servizi Web sotto il tuo controllo (ad esempio addestrando la rete come un servizio) o un dispositivo fisico che contiene una parte del tuo codice in una crittografia area (es. l'approccio "dongle"). Tuttavia entrambi richiedono uno sforzo supplementare da parte tua e potrebbero non essere accettati dal cliente.

Puoi proteggere legalmente il tuo software?

Dal punto di vista legale potresti considerare di richiedere un brevetto se la tua invenzione è nuova e se stai vivendo o facendo affari in uno dei paesi rari che consente brevetto software . Ma sappi che sono stati compiuti enormi sforzi di ricerca sull'apprendimento automatico e sulle reti neurali, e non è da escludere che la tua invenzione sia stata già inventata da alcuni laboratori in tutto il mondo, senza che tu te ne accorga.

Un altro approccio è fare affidamento su un restrittivo accordo di licenza per proibire legalmente alla società di utilizzare il codice in modo improprio per un altro scopo. Questo dovrebbe essere combinato con un accordo di non divulgazione che deve applicare la protezione legale anche in caso di furto del dipendente del tuo cliente che potrebbe andare via con la conoscenza. Il principio è che l'azienda firma un accordo con la NDA (e questo potrebbe essere indipendente dal contratto finale e dai dettagli finanziari), e poi si impegna a organizzare la NDA con chiunque abbia accesso al codice.

La protezione legale è una protezione teorica, perché spetterà a te scoprire qualsiasi violazione e dimostrare che sarà un furto, e pagare per tutte le competenze legali, a meno che tu vinca una prova e ti venga rimborsato. Ma un serio partner commerciale può avere molto più incentivo ad avere un buon rapporto con te e rispettare i termini del contratto se aggiungi valore ai suoi prodotti.

In ogni caso, e soprattutto se si tratta di grandi affari, per gli aspetti legali, è meglio consultare un esperto legale qualificato o un avvocato nella propria giurisdizione, piuttosto che affidarsi a opinioni personali su alcuni forum su Internet. ( A proposito, non sono un avvocato e questo non è un consiglio legale qualificato )

Ulteriori letture

  • Il manuale IP detective del software di Bob Zeidman offre un'ottima introduzione sulla proprietà intellettuale e concetti correlati per non avvocati e ingegneri del software.
risposta data 19.06.2017 - 20:05
fonte

Leggi altre domande sui tag