sábado, 13 de noviembre de 2021

Construyendo redes neuronales

Vamos a construir una red neuronal usando Python y Keras para clasificación con TensorFlow como backend. Keras es una biblioteca de Python poderosa y simplificada que podemos usar para construir redes neuronales y redes de aprendizaje profundo.

La primera tarea es importar todas las bibliotecas necesarias para TensorFlow y Keras. En la primera celda de código, especificamos las declaraciones para importar todas las bibliotecas necesarias para crear un entorno de TensorFlow.

from __future__ import absolute_import, division, print_function, unicode_literals

# TensorFlow y Keras

import tensorflow as tf

from tensorflow import keras

También necesitaremos algunas bibliotecas auxiliares. Importamos numpy  y matplotlib. La tarea final consiste en imprimir la versión de TensorFlow para la que hemos especificado la versión de impresión en la última línea de la celda de código.

#librerías de ayuda

import numpy as np

import matplotlib.pyplot as plt

print(tf.__version__)

Al ejecutar esta celda, la última línea nos devuelve la versión de TensorFlow que tenemos instalada

La siguiente tarea será cargar los datos para construir el modelo de red neuronal. Keras proporciona varios conjuntos de datos que podemos utilizar para construir un modelo de red neuronal. Utilizaremos un conjunto de datos llamado fashion_mnist, que contiene varias imágenes que se pueden clasificar en diferentes tipos.

dataset_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = dataset_mnist.load_data()

Para acceder al conjunto de datos fashion_mnist, declaramos una variable en la primera línea llamada dataset_mnist y le asignamos keras.datasets.fashion_mnist para cargar los datos en dicha variable. Los datos que estamos cargando ya están etiquetados, para el conjunto de entrenamiento, contamos con train_images y train_labels.

Y para el conjunto de prueba, se proporcionan test_images y test_labels. Para generar estos dos conjuntos diferentes de datos de prueba y de entrenamiento, llamamos a la función load_data. 

 

Construyendo redes neuronales

La siguiente tarea consiste en definir varios tipos de clases. Hay varios tipos de clases que se pueden encontrar en el conjunto de datos fashion_mnist.

class_types = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

Hay diez etiquetas diferentes que se almacenarán en una matriz NumPy donde la primera etiqueta es asignada al número 0 y los números apuntarán a clases particulares. Por ejemplo, la etiqueta de la camiseta / top, 'T-shirt/top' será 0. La etiqueta para los pantalones 'Trouser' será 1 y así sucesivamente.

Al ejecutar la celda, se han definen los class_types. A continuación exploraremos los datos y el formato de los datos que usaremos para entrenar la red neuronal nuestro conjunto de entrenamiento.

train_images.shape

Si ejecutamos esta instrucción,  nos muestra el número de imágenes y la forma de estas. Indica que hay 60.000 imágenes y el tamaño de cada imagen es de 28 por 28 píxeles. 

len(train_labels)

Cuando ejecutamos la instrucción len(train_labels), la salida indica que hay 60.000 etiquetas en el conjunto de entrenamiento actual. Exploraremos las etiquetas en el conjunto de entrenamiento, que debería ser un número entero dentro de un rango particular. 

train_labels

Al ejecutar esta línea, se muestra el siguiente resultado: 

array([9, 0, 0, ..., 3, 0, 5], dtype = uint8

Esta matriz representa las etiquetas que están dentro del rango de 0 y 9. 

Para ver el número de imágenes y su dimensión en el conjunto de datos de prueba, ejecutaremos.

test_images.shape

Después de la ejecución, se muestra el siguiente resultado: (10000, 28, 28). Que indica que hay 10.000 imágenes y el tamaño de cada imagen es de 28 por 28 píxeles. 

Ahora vamos a preprocesar los datos de las imágenes. Para ello utilizaremos  plt, que es un objeto de Matplotlib que importamos anteriormente.

plt.figure()

plt.imshow(train_images[0])

plt.colorbar()

plt.grid(False)

plt.show()

Queremos inspeccionar la primera imagen y, para ello, hemos especificado las declaraciones plt.figure y plt.imshow. A la que le estamos pasando el índice 0 para obtener la primera imagen del conjunto de entrenamiento. 

 

Red neuronal con MNIST

Tras la ejecución, se nos proporciona la primera imagen, pero no se escala correctamente. Así que la siguiente tarea consistirá en escalar la imagen. 

train_images = train_images /  255

test_images = test_images /  255

Hacemos lo mismo con test_images, para asegurarnos de que estamos escalando correctamente el valor de las imágenes de entrenamiento y las imágenes de prueba antes de que se envíen a la red neuronal. Las imágenes de entrenamiento de prueba se factorizarán en 255. 

Ahora verificamos los datos, para ello, trazamos ciertos rangos de los datos, y usamos un tamaño de figura de 10 por 10.  Y especificamos xticks e yticks, que representan el eje x y eje y.

plt.figure(figsize=(10,10))

for i in range(25):

    plt.subplot(5,5,i+1)

    plt.xticks([ ])

    plt.yticks([ ])

    plt.grid(False)

    plt.imshow(train_images[i], cmap=plt.cm.binary)

    plt.xlabel(class_types[train_labels[i]])

    plt.show()

La declaración plt.imshow mostrará las imágenes. Después de extraerlas de  train_images, la instrucción que tiene justo debajo garantiza que las imágenes estén etiquetadas con los tipos de clase adecuados.

 

Redes neuronales con Keras

Podemos observar que cada una de las imágenes están etiquetadas con sus respectivos tipos de clases. Habiendo explorado los datos, la siguiente tarea es construir el modelo de red neuronal. Para construir el modelo, primero configuraremos la etiqueta del modelo y luego compilaremos el modelo.

model = keras.Sequential([

     keras.layers.Flatten(input_shape=(28, 28)),

     keras.layers.Dense(128, activation=tf.nn.relu),

     keras.layers.Dense(10, activation=tf.nn.softmax)

 ])

Hemos especificado el modelo utilizando la declaración model = keras.Sequential.  Y hemos agregado tres capas diferentes, la primera capa es la capa de entrada. La segunda capa es la capa oculta y la tercera capa es la capa de salida.

En la capa de entrada, estamos usando la función Aplanar (Flatten), a la que le estamos pasando el tamaño de entrada como 28 por 28, que es el tamaño real de la imagen. En la capa oculta, estamos usando la función Dense, a la que le estamos pasando un 128 como el número de nodos o neuronas, seguido de la función de activación relu. Finalmente, en la capa de salida estamos usando la función Dense y estamos pasando el valor del nodo como 10 seguido de la función de activación softmax. 

La tarea final es compilar el modelo. Tenemos que compilar y configurar el modelo con ciertas configuraciones importantes antes de que el modelo esté listo para entrenarlo. 

model.compile(optimizer='adam',

    loss='sparse_categorical_crossentropy',

    metrics=['accuracy'])

La primera parte contiene el optimizador, que indica cómo se actualiza el modelo en función de los datos proporcionados y la función de pérdida aplicada. La función de pérdida es la medida de precisión que generalmente está involucrada durante el proceso de entrenamiento.

La función de pérdida que hemos especificado es sparse_categorical_crossentropy. Las métricas, son el elemento de configuración final, se utilizan para especificar el aspecto de monitoreo de los pasos o procesos de capacitación y prueba. La métrica que hemos especificado es la precisión:  accuracy.  

Hemos construido y compilado nuestro modelo con éxito, y podemos comenzar a usar la red neuronal para entrenar. Hay una última línea que entrena el modelo.

model.fit(train_images, train_labels, epochs = 5)

 

Redes neuronales Keras con Python


sábado, 6 de noviembre de 2021

SQL frente a NoSQL

No se puede hablar sobre arquitectura de datos sin estudiar el almacenamiento de datos, ya sean archivos almacenados en el sistema de archivos o elementos almacenados dentro de una tabla de base de datos. Un sistema de base de datos compatible con SQL o lenguaje de consulta estructurado es un sistema de base de datos relacional. Incluye productos como Oracle SQL, Microsoft SQL Server o MySQL. Estos productos se pueden implementar en las instalaciones, pero también podemos implementarlos en una nube pública, donde no tenemos que preocuparnos por el hardware, el almacenamiento o la adquisición del software. 

SQL frente a NoSQL

SQL 

En un sistema de base de datos relacional, la razón por la que se llama relacional es porque podemos relacionar o vincular tablas. lo hacemos usando lo que se llaman claves externas. Por ejemplo, si tenemos una tabla Cliente y Transacciones, donde almacenamos información del cliente y almacenamos, digamos, artículos comprados, respectivamente. Para mantener un vínculo entre esas dos tablas separadas, lo que podemos hacer es usar una columna en ambas. Cada una de ellas tendría una columna de identificación de cliente única. Para que podamos establecer una relación entre los clientes y sus transacciones. Con un tipo de base de datos SQL, cada tabla, fila o registro almacena el mismo tipo de datos, como el nombre del cliente, número de teléfono, dirección de correo electrónico, dirección postal, etc.  Eso sería igual para cada fila o para cada cliente. Esto se llama esquema estructurado, donde el esquema es simplemente el plano que definimos, qué se almacenará y cómo se almacenará en el entorno de base de datos compatible con SQL. 

Las bases de datos SQL normalmente aprovechan el escalado vertical. Es decir, si necesitamos aumentar la potencia en la máquina donde está alojada la base de datos,  ya sea una máquina física o virtual, aumentamos la cantidad de RAM cuando escalamos,  o aumentamos la cantidad de CPU o el tipo de CPU a algo más rápido. O bien aumentando las IOPS del disco, (operaciones de entradas y salidas por segundo), lo que aumenta el rendimiento del disco. Estamos ampliando la escala. Reducir la escala significa que está disminuyendo la cantidad de potencia, tal vez reduciendo la cantidad de RAM o reduciendo la cantidad de núcleos de CPU disponibles para fines informáticos. 

NoSQL

NoSQL está diseñado para escalabilidad a gran escala. Por tanto, está diseñado para procesar macrodatos (Big Data). Ejemplos de productos que son NoSQL son MongoDB, IBM Domino, Redis, etc. A diferencia de una base de datos SQL, En NoSQL cada fila o registro de datos puede almacenar tipos de datos completamente diferentes. NoSQL utiliza un esquema semi o no estructurado. A diferencia de las bases de datos compatibles con SQL que usan un esquema o plano rígido o fijo de lo que se va a almacenar, ese no es el caso con NoSQL. Por eso escala tan bien. Podemos almacenar métricas de dispositivos de IoT, publicaciones en redes sociales, archivos de audio y video. Todas esas cosas se almacenan de manera muy diferente, tienen diferentes tipos de formatos, pero eso es exactamente para lo que está diseñado NoSQL. Y así, En este caso la  escalabilidad, se denomina horizontal.

Que es el escalado se utiliza más a menudo con NoSQL. Escalado horizontal significa que estamos agregando múltiples nodos de cómputo para manejar la carga de trabajo para un mejor rendimiento o para el procesamiento en paralelo de grandes conjuntos de datos.  Puede implementarse mediante la agrupación en clústeres, donde tenemos un montón de máquinas trabajando juntas para ofrecer el mismo servicio. O mediante el equilibrio de carga, de modo que si un servidor deja de funcionar, los usuarios son dirigidos a otro servidor que permanece en ejecución. Todos los servidores siempre ejecutan lo mismo al mismo tiempo. También podríamos utilizar la replicación en varios servidores para poder tener varias copias para la disponibilidad de datos.


sábado, 30 de octubre de 2021

Algoritmos evolutivos y descenso de gradiente

 En esta entrada veremos el concepto y las características de los algoritmos evolutivos, los algoritmos genéticos y el descenso de gradiente.

El objetivo de implementar redes neuronales es lograr un aprendizaje optimizado de los modelos informáticos. La informática evolutiva es un grupo de algoritmos destinados a la optimización. Y están fuertemente inspirados por la evolución biológica. La idea fundamental detrás de la computación evolutiva es impulsar un conjunto de soluciones que se generen y actualicen de forma iterativa. Hay tres algoritmos esenciales que evolucionaron a partir de propiedades matemáticas y genéticas. Y comparten algunas características comunes que se derivan de la computación evolutiva. El primero es el algoritmo evolutivo, el segundo es el algoritmo genético y el tercero es el gradiente de descenso. El algoritmo evolutivo es esencialmente un algoritmo de optimización genérico basado en poblaciones, se utiliza de forma destacada para realizar aproximaciones de soluciones para los problemas identificados o dados. El algoritmo genético se considera uno de los algoritmos evolutivos más populares, que generalmente se usa para problemas de optimización, está inspirado en los principios biológicos de recombinación y mutación. El algoritmo de descenso de gradiente, es otro algoritmo de optimización esencial que se utiliza de forma destacada para minimizar las funciones de coste y actualizar los parámetros de los modelos de redes neuronales. Los parámetros pueden ser coeficientes para regresión lineal o pesos para redes neuronales. 

 

Algoritmos evolutivos y descenso de gradiente

Algoritmos evolutivos

Se considera un subconjunto de la computación evolutiva. Se implementan en sistemas informáticos y resuelven problemas incorporando las técnicas de algoritmo evolutivo, evolución diferencial, algoritmo genético y búsqueda. El algoritmo evolutivo utiliza ciertos mecanismos que se inspiran en la evolución biológica. La evolución biológica se refiere a cualquier cambio genético en una población que se hereda durante varias generaciones. 

La imagen muestra el diagrama de flujo que involucra la implementación de algoritmos evolutivos. La implementación es un proceso iterativo y comenzamos generando la población inicial. Después de haber generado la población inicial, calcularemos los valores de aptitud.

 

Algoritmos evolutivos

Si hemos alcanzado la condición de optimización o el umbral de aptitud, finalizamos el proceso. De lo contrario, generaremos una nueva población, calcularemos la aptitud y evaluaremos hasta que hayamos alcanzado el umbral de valor de aptitud óptima o la condición de optimización. 

Algoritmos genéticos

Se inspiran en el proceso de selección natural. Con la implementación de este algoritmo, seleccionamos una parte de la población existente de generaciones sucesivas para crear una nueva generación y luego aplicamos procesos basados en la aptitud.

Los algoritmos genéticos se utilizan para generar soluciones de alta calidad para manejar y gestionar problemas de optimización y búsqueda. Las soluciones se construyen utilizando funciones de aptitud que se definen sobre representaciones genéticas, lo que a su vez proporciona la capacidad de medir la calidad de las soluciones generadas. El algoritmo genético se basa en la teoría de la evolución propuesta por Charles Darwin. Un enfoque científico que explica y predice fenómenos que ocurren naturalmente en base a observaciones y experimentación.

 

Algoritmos genéticos

La figura muestra el diagrama de flujo de la implementación de algoritmos genéticos. El proceso comienza con el muestreo de la población inicial. Después se aplica el proceso de selección, mejoramiento, cruce y transformación para generar una nueva población. Todo el proceso se repite hasta que hayamos obtenido una población correctamente ajustada.

Descenso de gradiente

Es otro algoritmo esencial que se utiliza con frecuencia en el aprendizaje automático y el aprendizaje profundo para optimizar los modelos. Es un algoritmo de optimización iterativo de primer orden que podemos usar para encontrar el mínimo de una función. El descenso de gradiente se puede implementar de forma iterativa para identificar los parámetros óptimos para los modelos. Se implementa ampliamente para derivar el mínimo local de una función y también se utiliza para entrenar redes neuronales.

Para optimizar los modelos y derivar el mínimo local de una función, el descenso de gradiente utiliza tres parámetros importantes. Estos parámetros incluyen ponderaciones, sesgos y función de costos. Para mejorar un conjunto dado de ponderaciones, obtenemos el valor de la función de costo para dichas ponderaciones y calculamos el gradiente. Después nos movemos en una dirección que reduzca la función de costo, Comenzamos inicializando los pesos al azar, luego calculamos el gradiente de la función de costo con respecto a los parámetros. Esto se hace mediante diferenciación parcial. Pues el valor del gradiente depende de la entrada, los valores actuales de los parámetros del modelo y de la función de costo. Después, se actualizan los pesos con valores proporcionales a los valores del gradiente.  

E iteramos los primeros tres pasos hasta que los valores de la función de costo dejen de reducirse. Cuando estamos actualizando los pesos, implica una tasa de aprendizaje. Y esta tasa de aprendizaje determina el tamaño de los pasos que damos para alcanzar un mínimo. Debemos ser cautelosos al definir la tasa de aprendizaje. Una tasa de aprendizaje alta puede superar el mínimo y una tasa de apren


sábado, 23 de octubre de 2021

El ciclo de vida de los datos

Existe un período de tiempo en el que los datos tienen utilidad para una organización, y esto se denomina ciclo de vida de los datos. Se refiere a la vida útil que tienen los datos y está dividido en varias fases diferentes. La gestión de datos debe aplicarse a cada fase,  por lo tanto, debemos asegurarnos de gestionar los datos correctamente desde su inicio, su creación, hasta su eventual desmantelamiento o eliminación. Y a menudo tenemos que hacer esto para el cumplimiento legal y regulatorio. Por supuesto, también debemos asegurarnos de cumplir con las pautas de gestión de la política de datos de la organización. Las políticas de seguridad también dictarán cómo se tratan los datos a lo largo de su vida útil. El ciclo de vida de los datos, que se enumera aquí, comienza con la creación. después, el almacenamiento, uso e intercambio de datos.

El ciclo de vida de los datos

Crear

La creación de datos puede presentarse de muchas formas diferentes. Por ejemplo recopilación de datos. Ya sea a través de formularios on-line o físicos que escaneamos.  Realizando encuestas, métricas para anuncios que pueden rastrear ciertas preferencias de un usuario y luego mostrar los anuncios adecuados. Métricas de dispositivos de IoT que se envían de vuelta a un repositorio central. Incluso las cookies del navegador web se pueden utilizar para recopilar datos sobre las preferencias del usuario y los sitios visitados. Incluso cosas como el escaneo de códigos de barras para fines de control de inventario. Podemos automatizar acciones relacionadas con la creación de datos.

El ciclo de vida de los datos, creación
La clasificación de datos también es importante para organizar los diferentes tipos de datos a los que tenemos acceso. Y también pueden relacionarse con los datos con los que deben archivarse o qué datos deben almacenarse en los medios de almacenamiento más rápidos. También es importante saber que datos necesitan cifrado. Podemos automatizar el cifrado de datos, de modo que a medida que introducimos los datos en la  nube, se cifren automáticamente. También podemos hacerlo localmente encriptando una carpeta de Windows utilizando un sistema de encriptación.

Almacenar

Una de las consideraciones para el almacenamiento es la accesibilidad a los datos. La alta disponibilidad significa que los datos están disponibles cuando se necesitan. Y eso se puede lograr de muchas formas diferentes, como mediante el uso de técnicas de organización de disco, como RAID 1. El nivel 1 de RAID se denomina duplicación de disco. Requiere al menos dos discos, donde todos los datos que se escriben en una partición de disco también se reflejan o se escriben en el segundo disco. Así que siempre tenemos una segunda copia de los datos actualizados. También podríamos habilitar RAID 5, que requiere un mínimo de tres discos, donde tenemos bandas de discos con paridad distribuida. De modo que cuando se escriben datos en la matriz de discos RAID 5, los datos están divididos en trozos más pequeños escritos en esos discos. Tenemos varios discos trabajando juntos como uno. La paridad distribuida significa que la información de recuperación se escribe en una variedad de diferentes discos dentro del sistema RAID 5. Y puede tolerar la falla de un disco.

El ciclo de vida de los datos, almacenamiento
También podríamos proporcionar alta disponibilidad de datos a través de la replicación. Al replicar los datos en otra ubicación, tenemos esos datos disponibles allí. Ahora, la pregunta es ¿Con qué frecuencia estamos replicando datos entre estos diferentes conjuntos de réplicas? El almacenamiento también incluye la clasificación de datos, como comentamos, para organizar nuestros datos. Que también se puede utilizar para asignar permisos a datos clasificados de cierta manera. Y tenemos que pensar en el cifrado de datos que están en reposo o en medios de almacenamiento, utilizando una variedad de algoritmos de cifrado. Es posible que tengamos que usar un tipo específico de algoritmo de cifrado, como AES-256, para cumplir con ciertas regulaciones.

Utilizar

Debemos adherirnos al principio de privilegio mínimo, o PoLP, donde solo se asignan los permisos necesarios para realizar una función de trabajo para el uso de datos, y nada más. También podemos auditar el uso de datos para determinar si se está abusando de los privilegios, si los privilegios se están utilizando correctamente o si necesitamos otorgar o revocar permisos. Solo lo sabremos si auditamos datos a lo largo del tiempo.

El ciclo de vida de los datos, utilizar


También podemos configurar la prevención de pérdida de datos o políticas DLP. Las políticas de DLP generalmente requieren un agente de software en los dispositivos del usuario que monitorea cómo se manejan los datos confidenciales. Y evita que, por ejemplo, se envíe fuera de la empresa a través del uso de las redes sociales o mediante archivos adjuntos de correo electrónico. El uso también incluye resumir datos en informes.

Compartir

Puede ser interna o externamente. Por ejemplo, podríamos tener datos que deben compartirse en un servidor de archivos con acceso controlado a algunos empleados dentro de la organización. O podríamos compartir datos externamente, con datos clasificados como públicos. También podemos controlar nuestro intercambio utilizando las leyes de privacidad de datos como pautas y regulaciones. Las políticas de prevención de pérdida de datos, o DLP, se aplican nuevamente a la fase de uso compartido. Queremos asegurarnos de que estamos compartiendo datos de manera adecuada, solo con las partes que deberían tener acceso a esos datos. Por lo tanto, debemos controlar el intercambio de información confidencial, como información de identificación personal, PII o información médica protegida, PHI.

El ciclo de vida de los datos, compartir
Y nuevamente, eso suele estar bajo el paraguas de las regulaciones que determinan cómo se recopilan, usan y comparten esos datos. Por lo tanto, también podemos limitar la cantidad de custodios de datos, aquellos administradores de datos que tienen acceso a los datos y controlan los permisos. Por lo tanto, la custodia de datos establece permisos sobre los datos de acuerdo con las políticas de seguridad de la organización.

Archivar

Debemos establecer políticas de respaldo de datos. También contamos con políticas de retención de datos que pueden estipular que la copia de seguridad o el archivo de datos a largo plazo se realice en un medio de almacenamiento diferente al de la copia de seguridad de datos normal. Quizás la copia de seguridad de datos regular vaya a la biblioteca de copias de seguridad en cinta de red del área de almacenamiento. Mientras que la retención o el archivo de datos a largo plazo pueden ir a la nube en medios de almacenamiento lentos, ya que no se accede a ellos con frecuencia. También tenemos que determinar si los datos archivados están encriptados o no para su custodia, y eso podría ser requerido por leyes o regulaciones. 

El ciclo de vida de los datos, archivar

La migración de datos a medios de almacenamiento de rendimiento lento puede ser un proceso automatizado. Por lo tanto, podemos implementar políticas que digan, por ejemplo, que queremos mover datos a los que no se ha accedido en 60 días a medios de almacenamiento más lentos. De este modo liberando espacio para un rendimiento más rápido.

Eliminar

Consiste en la eliminación de los datos una vez que han llegado al final de su vida útil los datos deben ser eliminados. Esto tiene que hacerse de acuerdo con las leyes, regulaciones y políticas organizacionales que pueden tener reglas que determinen qué período de tiempo debe transcurrir antes de que los datos se puedan eliminar de forma permanente. Este lapso de tiempo es muy importante. Además, tenemos que considerar cómo se eliminan esos datos. Incluso puede ser necesaria la destrucción física de dispositivos de almacenamiento.

El ciclo de vida de los datos, eliminar
O borrado de datos, utilizando herramientas que evitan que los datos se recuperen, a menudo esto se consigue sobrescribiendo en múltiples pasadas en dispositivos de disco. Además, debemos considerar la posibilidad de borrar datos utilizando algunas herramientas del sistema operativo, o de aplicaciones de terceros, para borrar datos de forma segura.


sábado, 16 de octubre de 2021

Componentes de construcción de redes neuronales

En esta entrada veremos los bloques de construcción y componentes esenciales que se utilizan o participan en la construcción de redes neuronales artificiales. Veremos la arquitectura de estas, y los componentes que se utilizan para construir el modelo correcto para dar soluciones predictivas a diversas aplicaciones comerciales. Los componentes principales incluyen las capas de entrada de salida y ocultas.

Las capas están formadas por distintas neuronas con enlaces de conexión que conectan las neuronas para facilitar el flujo de información. Existen varios tipos de redes neuronales que podemos construir alineando los elementos arquitectónicos según nuestros requisitos. Por ejemplo, podemos construir una red neuronal directa, una red neuronal de retroalimentación, o una red recurrente, donde las salidas alimentan de nuevo las entradas. En la figura inferior se muestra un esquema de la arquitectura de una red neuronal de alimentación directa, donde la información fluye solo en una dirección.

 

Red neuronal directa

Podemos observar un flujo de información unidireccional. Comienza desde la capa de entrada y termina en la capa de salida. No existe el concepto de retroalimentación o bucles en las redes neuronales directas. Y a menudo se las conoce como redes neuronales sencillas que identifican directamente la relación entre las entradas y las salidas. La implementación de redes neuronales de alimentación directa se puede encontrar en aplicaciones que involucran generación de patrones, reconocimiento de patrones y clasificación. 

En una red de retroalimentación el flujo de información es bidireccional, este tipo de red involucra bucles de retroalimentación. En este caso,  el estado de la red tiende a cambiar con frecuencia, también se conoce comúnmente como red neuronal dinámica. Podemos observar claramente el flujo de información bidireccional causado por los bucles de retroalimentación de la figura.

 

Red neuronal con realimentación

La tercera figura ilustra la arquitectura de una red neuronal recurrente. Esta red en particular utiliza memoria para almacenar toda la información de los pasos anteriores para facilitar el siguiente paso de aprendizaje.

Red neuronal recurrente

La figura ilustra el uso de la información de los pasos anteriores o del estado anterior para generar el estado actual. Con las redes neuronales tradicionales, las entradas y las salidas tienden a ser independientes entre sí. Pero surgen ciertos escenarios en los que necesitaríamos la red neuronal para almacenar y utilizar resultados anteriores. Tales escenarios requieren la implementación de una arquitectura de red neuronal recurrente. 

La estructura de una red neuronal artificial está inspirada en el cerebro humano, el cual está formado por una gran cantidad de elementos de procesamiento altamente conectados llamados neuronas. Podemos configurar redes neuronales artificiales con tareas específicas mediante un proceso de aprendizaje que imita al sistema biológico.

Las neuronas de las redes neuronales artificiales suelen estar organizadas en tres capas diferentes, la capa de entrada, la capa oculta y la capa de salida.

 

Estructura general de una red neuronal

Como buena práctica, se sugiere que combinemos redes neuronales usando reglas de lógica estructurada. 

Para entrenar una red neuronal necesitamos entrenarla con unos datos, y ajustar algunos parámetros para inicializar la red y evitar el sobreajuste o sesgo de esta. Después de inicializar la red neuronal, tenemos que iniciar el proceso de aprendizaje que generalmente es de naturaleza iterativa y repite ciertos pasos para cada parámetro de entrada. A continuación creamos una muestra  o lote que es un subconjunto de los datos de entrenamiento, Con cada salida de la red comparamos los datos obtenidos con la muestra y se reajusta la red con el objetivo de que el próximo paso la salida esté más cercana a la que debería tener. 

Repetiremos estos pasos hasta que la salida de la red converja y se ajuste a nuestro modelo. Finalmente, cuando termina la iteración, el resultado que obtenemos es una red entrenada.

Ahora, veremos algunos de los parámetros esenciales que juegan un papel crítico e importante en la construcción de redes neuronales. El primer tipo de parámetros es la arquitectura del modelo. Debemos controlar el número de capas, el número de neuronas por capa y el tipo de capa, ya sea de entrada, salida u oculta.

El segundo tipo de parámetro es el parámetro a tener en cuenta es la función de aprendizaje. Este parámetro en particular ayuda a orientar el enfoque y la tasa de aprendizaje que podemos establecer para optimizar el proceso de aprendizaje. Uno de los parámetros de aprendizaje más importantes en uso es la tasa de aprendizaje. Si establecemos una tasa de aprendizaje pequeña, el proceso de aprendizaje puede llevar mucho tiempo. Y si establecemos una gran tasa de aprendizaje, puede afectar negativamente el rendimiento del aprendizaje.

Otro tipo de parámetro es el parámetro de optimización. Este parámetro se utiliza para optimizar el modelo de red neuronal. Algunos de los parámetros de optimización esenciales que debemos configurar incluyen el tamaño del lote, el impulso y los pesos. El último parámetro es el parámetro de ajuste. Los parámetros de ajuste se utilizan para ajustar las redes con el fin de proporcionar mejores resultados de aprendizaje después de haber aplicado los datos de entrada.

Algunos de los parámetros de ajuste esenciales incluyen el número de épocas y el tamaño del lote


sábado, 9 de octubre de 2021

Privacidad de datos

Uno de los mayores desafíos en el uso de los sistemas informáticos actuales se relaciona con la privacidad de los datos. Y esto se aplicaría a individuos, agencias gubernamentales y organizaciones. Por eso es importante que las organizaciones creen e implementen políticas de seguridad y privacidad. Los usuarios finales deben saber que existen políticas de seguridad. Y cuáles son los procedimientos adecuados en la protección de datos. Pero también, es importante que los usuarios comprendan la relevancia de por qué existen esas políticas de seguridad.

Privacidad de datos
La privacidad de los datos se puede lograr de muchas formas, incluida la seguridad física. Por ejemplo, cerraduras de puertas , ventanas y sistemas de alarma. Además, los controles técnicos de seguridad pueden proteger los datos en forma de cortafuegos, que pueden implementarse en el borde de la red para controlar el tráfico que entra y sale de la red. O firewalls implementados en todos y cada uno de los dispositivos informáticos para controlar el tráfico que entra y sale de esos dispositivos. También tenemos el cifrado y la codificación de datos. De modo que mientras se transmiten los datos, solo el poseedor de la clave de descifrado adecuada podrá ver los datos originales. Lo mismo se aplicaría a los datos en reposo o los datos que se están almacenandos y que deben protegerse de miradas indiscretas. También deberían estar cifrados. Para que las políticas de seguridad sigan siendo relevantes, debemos realizar una revisión periódica de las políticas. Pues las amenazas cambian con el tiempo y también las soluciones tecnológicas y los controles de seguridad existentes implementados para proteger los activos de datos podrían haber funcionado al mismo tiempo, pero podrían volverse cada vez menos efectivos con el tiempo. Es importante que revisemos estas cosas periódicamente para hacer mejoras para reforzar la seguridad. 

Información de identificación personal, o PII

Es cualquier cosa que identifique de forma única a un individuo. Puede ser el nombre, apellido, la dirección postal, el número de seguridad social, el número de la tarjeta de crédito. En cuanto a datos sanitarios, se conocen como información médica protegida o PHI. Esto incluiría los registros médicos de los pacientes, cómo se administró y pagó la atención médica, etc.

HIPAA, la Ley de responsabilidad de portabilidad de seguros médicos de Estados Unidos. Se ocupa de la protección de la PHI, información médica protegida o información médica. PIPEDA es una ley del Parlamento de Canadá. Significa Ley de Protección de Información Personal y Documentos Electrónicos. Y se ocupa de la recopilación y el uso del sector privado de información de identificación personal. GDPR es el Reglamento general de protección de datos 2016/679 de la Unión Europea. Es la recopilación y el uso de PII por parte del sector privado tanto dentro como fuera de la UE.

La Ley de Privacidad de 1988 se refiere a Australia. Una vez más, se trata de la protección de la PII. y es aplicable a agencias gubernamentales y al sector privado.  Estas leyes suelen incluir disposiciones relacionadas con la notificación de violación de datos a los usuarios afectados cuyos datos podrían haber sido comprometidos. PCI DSS no es una ley, son las siglas en inglés de Payment Card Industry Data Security Standard. Su enfoque es la protección de los datos de los titulares de tarjetas de débito y crédito para comercio a través de elementos como cifrado y firewalls, etc. El cifrado está realmente diseñado para proteger datos confidenciales, proporciona confidencialidad. Uno de sus requisitos, llamado 3.4, es el cifrado de los datos del titular de la tarjeta. Con el cifrado, los datos originales se denominan texto sin formato. Una vez que los datos se cifran o codifican, se denominan texto cifrado. 

Encriptado de datos
El texto sin formato se introduce en un algoritmo de cifrado. Un algoritmo de cifrado es realmente una fórmula matemática complicada. El texto sin formato se introduce en un algoritmo de cifrado con una clave y el resultado es texto cifrado. No podremos encontrar sentido a ese texto cifrado a menos que tengamos la clave de descifrado correcta.  

Suele utilizarse un cifrado simétrico esto significa que tenemos una clave única  que se usa para el cifrado y el descifrado. El problema es ¿cómo podemos hacer llegar esa clave de forma segura a través de Internet a todos los usuarios que la necesitan para el cifrado o descifrado? por eso encontraremos a menudo que el cifrado simétrico y asimétrico se utilizan juntos. 

Encriptación simétrica
El cifrado asimétrico, utiliza dos claves relacionadas matemáticamente. La clave pública se puede compartir públicamente con cualquier persona y no hay riesgo de seguridad. Está diseñada para esto. Sin embargo, no ocurre lo mismo con la clave privada. La clave privada debe mantenerse privada para el propietario de la clave. No debería compartirse con nadie. Imaginemos que estamos enviando un mensaje de correo electrónico encriptado a alguien. Para ello necesitamos la clave pública del destinatario. Para  descifrarlo, necesitamos la clave privada relacionada. Aquí es donde entra en juego el cifrado asimétrico. 

Encriptación asimétrica
Al final estamos hablando de privacidad de datos, y un aspecto de esto es cifrar los datos en reposo y los datos que se transmiten a través de una red.