
深層学習モデルを用いたDGA生成ドメイン検出

現在、開発にはConda(Anaconda/Miniconda)を使用していますが、同梱のrequirements.txtを使用すればPipenvやvirtualenvでも利用できるはずです。
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenvも同様ですが、もはやVirtualenvをPipenvの代わりに使う理由はありません。
modelsディレクトリに学習済みモデルがチェックインされています。独自のモデルを学習したい場合は、まずS3からトレーニングデータをダウンロードする必要があります:
python degas/runner download-data
データをモデルビルダーが期待するシンプルなCSV形式に処理します:
python degas/runner process-data data/raw data/processed
これらの手順は、トレーニングデータを変更しない限り、一度だけ実行すれば十分です。
生成されたデータセットを使用してモデルを再学習するには、まず任意のパッケージマネージャ(conda install tensorflow-gpu または pip install tensorflow-gpu)でtensorflow-gpuをインストールして、GPUで高速化されたトレーニングを可能にします。
次に、以下を実行します:
python degas/runner train-model data/processed
利用可能なチューニングオプションについては、python degas/runner train-model --help を実行してください。
これはGTX 1070で約1時間半かかります。約9エポックでショートサーキットしますが、例えば5エポックでも半分のトレーニング時間で良好な精度が得られる可能性があります:python degas/runner train-model --epochs 5 data/processed
このプロジェクトは基礎となる深層学習ライブラリとしてTensorflowを使用しているため、推論に使用する推奨方法はTensorflow Servingを使用することです。
以下のようにしてサービスを提供できるはずです:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
利用可能なオプションの詳細については、Tensorflow Servingのドキュメントを参照してください。
なぜこのタスクに深層学習なのか?それはうまく機能し、実装も難しくないからです。Byu et al, 2018より:
深層ニューラルネットワークは最近、DGA検出に関する文献に登場しています(Woodbridge et al. (2016); Saxe & Berlin (2017); Yu et al. (2017))。それらは従来の機械学習手法よりも精度において大幅に優れていますが、その代償としてモデル学習の複雑さが増し、より大規模なデータセットを必要とします。
トレーニングに利用できるデータは豊富にあるため、深層学習モデルの作成は他の方法と同等かそれ以上に簡単です。
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)の最初の結果でした。ちなみに、発音は「de-gah」(エドガー・ドガのように)であり、「de-gas」(「ガスを抜く」という意味)ではありません。