
Detección de dominios generados por DGA mediante modelos de aprendizaje profundo
Detección de dominios generados por DGA mediante modelos de aprendizaje profundo

Actualmente estoy usando Conda (Anaconda/Miniconda) para el desarrollo, pero también deberías poder usar Pipenv o virtualenv con el requirements.txt incluido.
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv es similar, pero realmente ya no hay motivo para usar virtualenv en lugar de Pipenv.
Hay un modelo entrenado incluido en el directorio models. Si quieres entrenar el tuyo propio, primero tendrás que descargar los datos de entrenamiento desde S3:
python degas/runner download-data
Procesa los datos al formato CSV simple que espera el constructor de modelos:
python degas/runner process-data data/raw data/processed
Esos pasos solo necesitan ejecutarse una vez, a menos que cambies los datos de entrenamiento.
Para reentrenar el modelo con el conjunto de datos generado, instala primero tensorflow-gpu con el gestor de paquetes que prefieras (conda install tensorflow-gpu o pip install tensorflow-gpu) para que el entrenamiento esté acelerado por GPU.
Luego, ejecuta:
python degas/runner train-model data/processed
Ejecuta python degas/runner train-model --help para ver algunas opciones de ajuste disponibles.
Esto tarda aproximadamente una hora y media en una GTX 1070. Solo ejecuta unas 9 épocas antes de interrumpirse; podrías ejecutarlo, digamos, durante 5 épocas y aun así obtener una buena precisión con la mitad del tiempo de entrenamiento:
python degas/runner train-model --epochs 5 data/processed
Dado que este proyecto usa Tensorflow como librería de aprendizaje profundo subyacente, la forma recomendada de usarlo para inferencia es mediante Tensorflow Serving.
Deberías poder servirlo con:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
Consulta la documentación de Tensorflow Serving para obtener más información sobre las opciones disponibles.
¿Por qué aprendizaje profundo para esta tarea? Porque funciona bien y no es difícil de implementar. De Byu et al, 2018:
"Las redes neuronales profundas han aparecido recientemente en la literatura sobre detección de DGA Woodbridge et al. (2016); Saxe & Berlin (2017); Yu et al. (2017). Superan significativamente a los métodos tradicionales de aprendizaje automático en precisión, a costa de aumentar la complejidad de entrenar el modelo y de requerir conjuntos de datos más grandes."
Dado que hay abundantes datos disponibles con los que entrenar, crear un modelo de aprendizaje profundo es tan fácil o más fácil que las alternativas.
https://openreview.net/forum?id=BJLmN8xRW¬eId=BJLmN8xRW http://faculty.washington.edu/mdecock/papers/byu2018a.pdf
egrep -i '^d.*g.*a.* /usr/share/dict/words )Para que conste, yo lo pronuncio "de-gah", como Edgar Degas, no "de-gas", como en "quitar todo el gas".