¿Cómo garantizar la privacidad de los datos de entrenamiento con Tensorflow Privacy?

Estás leyendo la publicación: ¿Cómo garantizar la privacidad de los datos de entrenamiento con Tensorflow Privacy?

Desarrollar un modelo preciso y de alto rendimiento es una bendición para un científico de datos, pero mantener la privacidad de los datos durante la capacitación es una de las tareas que todo científico de datos y modelador debe cuidar. Muchas veces sucede que después del modelo de entrenamiento explotan datos sensibles al usuario y esto aumenta la inseguridad de los datos. La privacidad de Tensorflow es un paquete que ayuda a mantener la privacidad de los datos mientras se entrena el modelo. Después de este artículo, podemos usar TensorFlow Privacy para entrenar modelos de aprendizaje automático con privacidad para datos de entrenamiento. Los puntos principales que se discutirán en el artículo se enumeran a continuación.

Tabla de contenidos

  1. ¿Qué es la privacidad de TensorFlow?
  2. ¿Cómo mide TensorFlow la privacidad?
  3. Implementando la privacidad de Tensorflow
    1. Importación de datos
    2. Preprocesamiento de datos
    3. Verificando datos
    4. Definición de parámetros
    5. Construyendo el modelo
    6. entrenamiento modelo
    7. Medición de la privacidad

Comencemos presentando la privacidad de TensorFlow

¿Qué es la privacidad de TensorFlow?

La privacidad de Tensorflow es un paquete de Python de código abierto que se desarrolla principalmente para proporcionar privacidad mientras se entrena el aprendizaje automático o los modelos de aprendizaje profundo. Este paquete no solo pretende brindar privacidad, sino que también facilita que los desarrolladores lo implementen en sus programas de capacitación de modelos para que puedan lograr resultados de vanguardia con garantías de privacidad.

En el escenario reciente, podemos ver que los programas de aprendizaje automático mejoran las tecnologías y la experiencia del usuario al tiempo que incorporan datos confidenciales como información personal, fotos, videos y audio. Para mantener la privacidad con dichos datos, los parámetros utilizados con los modelos deben proporcionar información general sobre el modelo, no sobre los datos. La privacidad de Tensorflow viene a ayudarnos en este escenario. Cuando los datos de entrenamiento son confidenciales, la privacidad de TensorFlow proporciona funciones que utilizan técnicas basadas en la teoría de la privacidad diferencial.

Este paquete garantiza que un modelo entrenado en datos confidenciales no reconocerá ni recordará ninguna información confidencial contenida en ninguna de las muestras en todos los datos de entrenamiento. Una de las cosas más impresionantes de este paquete es que es de código abierto, lo que significa que puede usarse libremente en el desarrollo de modelos sin restricciones, mientras que otros paquetes son de pago y requieren mucho esfuerzo.

🔥 Recomendado:  ¿Cómo usar recocido simulado para aproximar una función?

Sin tanta experiencia en privacidad y las matemáticas subyacentes, podemos usar este paquete y este paquete está desarrollado para que un experto en el mecanismo de TensorFlow pueda usar este paquete. El flujo de trabajo de esta biblioteca es simple y no necesitamos cambiar nuestras arquitecturas modelo, procedimientos de entrenamiento o procesos. Simplemente cambiando los códigos (que son simples) y ajustando los parámetros de privacidad, podemos implicar este paquete en nuestros modelos. Echemos un vistazo a cómo este paquete mide la privacidad.

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.

¿Cómo mide TensorFlow la privacidad?

Como se discutió anteriormente, este paquete proporciona instalaciones y técnicas para proporcionar privacidad en el desarrollo de modelos de aprendizaje automático utilizando la teoría de la privacidad diferencial. Esta teoría tiene como objetivo proporcionar un aprendizaje que no incluye información sobre una muestra individual mientras se entrena con información útil sobre los datos completos. Esto se puede lograr usando dos valores de la siguiente manera:

  • épsilon: Este valor es una medida de la probabilidad que muestra cuántos cambios hay en la salida cuando se excluye una sola muestra de entrenamiento. Un valor pequeño de épsilon representa el valor más alto de privacidad. Debe ser menos de uno. Debe ser menos de 10.
  • Delta: Este valor es también una especie de medida de probabilidad que representa el cambio en el comportamiento del modelo. Podemos establecer estos valores y necesitamos establecer menos de 1e-7 más o menos sin comprometer la utilidad. Se sugiere establecer no menos que el inverso del tamaño de los datos de entrenamiento.

Implementemos un ejemplo en el que usaremos la privacidad de TensorFlow para entrenar modelos de aprendizaje automático con privacidad para datos de entrenamiento. Antes de implementarlo estamos obligados a instalar este paquete en el entorno que se puede hacer usando los siguientes códigos.

!pip instalar tensorflow-privacidad

Después de la instalación, estamos listos para la implementación.

🔥 Recomendado:  Una guía práctica para la transferencia de estilo de vecino neuronal

Implementando la privacidad de Tensorflow

En este artículo, vamos a utilizar una red neuronal convolucional para clasificar el conjunto de datos cifar100. Puede encontrar más detalles sobre los datos aquí. Comencemos cargando los datos.

Importación de datos

importar tensorflow como tf importar numpy como np desde tf.keras importar conjuntos de datos, capas, modelos data = datasets.cifar100 (train_images, train_labels), (test_images, test_labels) = data.load_data()

Producción:

Aquí hemos importado los datos. Preprocesemos los datos

Preprocesamiento de datos

Normalizando los valores de píxel entre 0 y 1 como,

tren_imágenes = np.array(tren_imágenes, dtype=np.float32) / 255 test_images = np.array(test_images, dtype=np.float32) / 255

Remodelando los datos de las imágenes.

tren_imágenes.forma, prueba_imágenes.forma

Producción:

tren_imágenes = tren_imágenes.reshape(50000, 32, 32, 3) test_images = test_images.reshape(10000, 32, 32, 3)

Convertir las etiquetas dadas en los datos.

tren_etiquetas

Producción:

Aquí podemos ver que tenemos 100 clases. En este artículo, veremos la naturaleza del trabajo del paquete de privacidad de TensorFlow, por lo que realizaremos una clasificación binaria. Para esto, solo podemos cambiar las etiquetas usando los siguientes códigos.

etiquetas_de_entrenamiento = np.array(etiquetas_de_entrenamiento, dtype=np.int32) etiquetas_de_prueba = np.array(etiquetas_de_prueba, dtype=np.int32) etiquetas_de_entrenamiento = tf.keras.utils.to_categorical(etiquetas_de_entrenamiento, num_classes=100) etiquetas_de_prueba = tf.keras. utils.to_categorical(test_labels, num_classes=100)

Veamos cuántas etiquetas hay.

tren_etiquetas

Producción:

Verificando los datos

Verifiquemos los datos visualizándolos.

importe matplotlib.pyplot como plt plt.figure(figsize=(10,10)) for i in range(25): plt.subplot(5,5,i+1) plt.xticks([]) plt.yticks([]) plt.grid(Falso) plt.imshow(tren_images[i]) plt.mostrar()

Producción:

Aquí podemos ver nuestros datos.

Definición de parámetros

épocas = 3 tamaño_lote = 250

Los parámetros definidos anteriormente son parámetros para el entrenamiento del modelo. Definamos los parámetros que vamos a utilizar para comprobar la privacidad del entrenamiento.

l2_norm_clip = 1,5 noise_multiplier = 1,3 num_microbatches = 25 learning_rate = 0,25

Aquí hemos definido cuatro parámetros.

l2_norm_clip: Este parámetro es la norma euclidiana máxima. Esto es para cada gradiente de los parámetros del modelo.

multiplicador_de_ruido: Este parámetro aplicará el ruido a los gradientes durante el entrenamiento.

núm_microlotes: Este parámetro es una especie de sublote de los lotes que hemos definido. Esto debe ser múltiplo de los tamaños de lote principales.

tasa de aprendizaje: Este parámetro ayuda a definir el efecto de cada actualización.

Construyendo el modelo

modelo = modelos.Sequential() modelo.add(capas.Conv2D(32, (3, 3), activación=’relu’, input_shape=(32, 32, 3))) modelo.add(capas.MaxPooling2D((2 , 2))) modelo.añadir(capas.Conv2D(64, (3, 3), activación=’relu’)) modelo.añadir(capas.MaxPooling2D((2, 2))) modelo.añadir(capas.Conv2D (64, (3, 3), activación=’relu’)) modelo.añadir(capas.Flatten()) modelo.añadir(capas.Densa(64, activación=’relu’)) modelo.añadir(capas.Densa (100))

Visualicemos el modelo.

dot_img_file=”/tmp/model_1.png” tf.keras.utils.plot_model(modelo, to_file=dot_img_file, show_shapes=True)

Producción:

Aquí podemos ver la estructura de nuestro modelo.

Definición de optimizador y función de pérdida

Este paso es nuestro paso principal en el que definiremos instancias del paquete de privacidad de TensorFlow. Aquí usaremos el optimizador de descenso de gradiente estocástico definido por privacidad diferencial que capturará la medida de privacidad mientras entrenamos nuestro modelo.

🔥 Recomendado:  Los aspectos más importantes a considerar al elegir el almacenamiento en la nube

import tensorflow_privacy from tensorflow_privacy.privacy.analysis import compute_dp_sgd_privacy Optimizer = tensorflow_privacy.DPKerasSGDOptimizer( l2_norm_clip=l2_norm_clip, noise_multiplier=noise_multiplier, num_microbatches=num_microbatches, learning_rate=learning_rate) loss = tf.keras.loss es.CategoricalCrossentropy( from_logits=Verdadero, reducción=tf. pérdidas.Reducción.NINGUNA)

Aquí hemos definido la función de optimización y pérdida utilizando el paquete de privacidad TensorFlow.

entrenamiento modelo

Ahora normalmente podemos entrenar nuestro modelo usando las siguientes líneas de códigos.

model.compile(optimizador=optimizador, pérdida=pérdida, métricas=[‘accuracy’]) model.fit(imágenes_de_entrenamiento, etiquetas_de_entrenamiento, épocas=épocas, datos_de_validación=(imágenes_de_prueba, etiquetas_de_prueba), tamaño_de_lote=tamaño_de_lote)

Producción:

Aquí podemos ver que nuestro modelo está entrenado. Aunque la precisión del modelo es muy baja, estamos aquí para medir la privacidad mientras entrenamos al modelo para que este funcione para nosotros.

Medición de la privacidad

En la sección anterior del artículo, hemos discutido cómo este paquete mide la privacidad. Hablar de las herramientas proporcionadas por el paquete es compute_dp_sgd_privacy. Esta herramienta nos ayudará a calcular épsilon mientras damos un valor de delta. Usando los siguientes códigos podemos calcular el valor épsilon.

compute_dp_sgd_privacy.compute_dp_sgd_privacy(n=entrenar_imágenes.forma[0]tamaño_lote=tamaño_lote, multiplicador_ruido=multiplicador_ruido, épocas=épocas, delta=1e-5)

Producción:

En lo anterior, podemos ver que el valor de épsilon es 17 en un delta dado de 1e-5.

Ultimas palabras

En este artículo, hemos discutido la privacidad de TensorFlow que nos ayuda a medir la privacidad de los datos mientras entrenamos nuestro modelo. Junto con esto, hemos discutido qué medidas nos reporta este paquete y cómo podemos implementar un modelo mientras medimos el nivel de privacidad.

Referencias

Tabla de Contenido