【論文紹介】OCGAN: 制約付き潜在表現を持つGANによる画像の異常検知

こんばんは。ChillStackの茶山です。

GANをはじめとする生成モデルを用いた研究は現在とても大きな成果をあげています。 さらに生成モデルはラベル情報を考慮しない教師なし学習であるという利点を活かし、異常検知に応用する研究が現在盛んに行われています。

本記事では、CVPR2019に採択された画像の異常検知に関する論文の一つである OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations をご紹介します。

概要

本論文では、OCGANという異常検知モデルを提案しています。 OCGANの特徴として、単一クラスによる学習のみでクラス外の異常データを検知することができます。 モデルはDenoising AutoencoderにGANの要素を組み込み、排他的な潜在表現を学習するような制約を設けています。

本論文では画像を扱い、4つの公開データセット(MNIST, fMNIST, COIL, CIFAR10)を用いて実験を行っています。

手法

ニューラルネットワークを用いた異常検知の手法は主に2種類のアプローチがありますが、どちらの手法も初めに与えられた入力クラスを代表する潜在表現の学習を行う点は共通しています。 一つは学習により得られた潜在表現を入力とした逆写像を行い、得られる再構成画像と入力画像の差を比較して異常検知を行う手法です。 もう一つは、分布を用いて既知のクラスの特徴を明示的に潜在空間内でモデリングを行う方法です。

OCGANは前者のアプローチをとります。全ての入力が学習したクラスの画像を再構成するようにネットワークが設計され、高いMSEをとる画像を異常データとして検知します。 例として下図の1段目の入力と3段目のOCGANによる再構成結果を確認してわかるように、MNISTの8の数字が学習されたモデルではクラス内の画像が上手に再構成できています。 一方でクラス外の画像は入力とは大きく異なる8の数字を復元します。

f:id:chillstack:20190806124057j:plain

OCGANは4つのサブネットワークから構成されます。それぞれのサブネットワークを説明します。

f:id:chillstack:20190805124635j:plain

Denoising Autoencoder

入力画像から潜在空間への写像を行うためにDenoising Autoencoder(以下DAE)を採用しています。入力画像に対して、n\sim\mathcal{N}(0, 0.2) の白色ノイズを加えています。ここで、潜在空間が有界になるように最終畳み込み層は活性化関数としてtanhを用いています。

Latent Discriminator

潜在空間上の全てのサンプルが与えられたクラスの画像を生成するような潜在空間の獲得を目指します。そのためには、クラス内の潜在表現が一様に分布するような制約を付けるためにLatent Discriminatorを導入します。これは、学習画像の潜在表現と一様分布  \mathbb{U}(-1,1)^{d} からサンプリングした偽データを見分ける識別器です。DAEと同時に学習させることで  ld の均衡時に、 \mathbb{U}(-1,1)^{d} から均等に分布するような潜在表現のマッピングをエンコーダが学習することが期待します。

Visual Discriminator

通常のDAEは恒等写像を学習するため、与えたクラス以外のサンプルを表現しないように、クラス内の画像とGeneratorによってランダムに生成された画像を区別するためのVisual Discriminatorも全体の構造に加えています。

Informative-negative Mining

上記3手法によって学習されたモデルでも、下記画像(左部)のように生成画像の一部が他クラスを表現するようなサンプルが確認されています。

f:id:chillstack:20190806164621p:plain

潜在空間の全領域をサンプリングすることは難しく、このように一部の領域から生成された画像は与えられたクラスの画像を表しません。 ここで生成が上手に行われていないサンプルをInformative-negativeサンプルと呼びます。 著者はこれらのInformative-negativeサンプルを効率よく検出するために新たな識別器(以下Classifier)を導入しました。 Classifierは、入力画像が与えられたクラスをどれほど良く表現するか判断します。勾配情報を用いて、クラス外の画像を生成する潜在空間上の点を探します。

識別器の損失関数  l_\text{classifier} はGeneratorとDiscriminatorとは別に学習され、Binary Cross-Entropy lossによって学習されます。

学習の順番

学習は2ステップからなります。 まずはじめにClassifier以外のモデルは重みが固定され、Classifierはクラス内データと生成された偽データによって学習されます。 注意としてClassifierの学習、つまりInformative-negative Samplingはモデルがある程度の品質の偽画像が生成されてから行われます。

次にClassifierは重みが固定され、DAEと2つのDiscriminatorの学習が行われます。 Generatorの学習では、Informative-negativeサンプルが  \mathbb{U}(-1,1) の分布から選択されます。 Informative-negativeサンプルとノイズが付与された学習画像の潜在表現を用いてDAEが学習されます。

再構成画像の精度を保証するために、下記のような重み付きlossになっています。 10\times l_\text{MSE}+l_\text{visual}+l_\text{latent}

結果

4つのデータセット(MNIST, fMNIST, COIL, CIFAR10)と2つの実験プロトコルによってモデルの評価が行われています。

2つの実験プロトコルは下記のように定義されています。

実験プロトコル1: 与えられたクラスの学習用データセットは8:2で学習・テストデータに分けられ、学習が行われます。クラス外のデータは負例サンプルとしてランダムに選ばれテストデータの50%を占めます。

実験プロトコル2: 各データセットの学習・評価データの割合に従い、与えられたクラスはそれを用いて学習と検証を行う。テスト時は全クラスのテストデータを用いる。

先行研究に倣い、提案手法はAUCとROCカーブによって評価されています。

f:id:chillstack:20190805124703j:plain

MNIST、COIL、fashion MNISTを用いて行われた実験プロトコル1の結果より、OCGANいずれもAUCは最も高い値を達成しています。

f:id:chillstack:20190805124536j:plain

Table 2よりMNISTは実験プロトコル2においても、最高のMean AUC、10クラス中9クラスで最も高いAUCの値をとっています。

一方でTable 3からわかるように、CIFAR10では先行研究のdeep-SVDDと同じ前処理を施し、平均画像を差し引いたことにより従来手法と比べて高いmean AUCを獲得することができました。

このように、OCGANは補正済みのシンプルな画像に対しては性能がよく、CIFAR10のような多種多様な撮影条件の自然画像からなるデータセットには改善の余地があります。

コメント

単一クラスによる学習で異常検知が可能なため、ラベル付与済みデータが限られている実データに有効なモデルだと考えられます。

ChillStackではこのような最新の研究技術を取り入れ、お客様のニーズに合った検知モデルを作成しております。 無料で不正検知・異常検知に関するご相談を受け付けておりますので、お気軽にご連絡ください。

docs.google.com

論文情報・リンク

【論文紹介】Deep learningを用いたWebコンテンツの異常検知

こんにちは。ChillStackの谷です。

近年、フィッシングサイトなど悪性なWebコンテンツによる被害は深刻化しており、悪意のあるWebサイトかどうかを事前に判断し防ぐシステムの高性能化が必要とされています。

そのため、悪性なWebコンテンツと正常なWebコンテンツを静的ファイル情報のみで高速かつ高性能に機械学習で識別する様々な研究が行われています。

本記事では、悪性HTMLの検知に関する論文の一つである A Deep Learning Approach to Fast, Format-Agnostic Detection of Malicious Web Content をご紹介します。

概要

Webコンテンツの検出に関するこれまでの研究は、機能を抽出するために構文解析またはHTMLおよびJavascriptのエミュレーションに依存していました。 本論文の提案手法では、単純な正規表現で静的HTMLファイルから直接抽出された特徴を用いて悪性かどうかを判定します。 静的HTMLの情報のみを用いることにより、ファイアウォールやWebプロキシなどの高頻度のデータコンテキストでの動作が十分に速くなり、様々なコストが激減します。

手法

悪意あるHTMLは、基本的に可変で巨大な通常のHTMLの中に小さな悪意あるコンテンツが埋め込まれています。 解析の手法として以下のようなものが考えられます。

1 明示的なHTMLファイルのパース

HTML、CSS、JSが展開されて初めて悪意のあるコードとして動作するためベストな方法ではありません。

2 動的解析、シンボリック実行(部分的な実行)

計算のオーバーヘッドがあると検出器の中で攻撃の挙動を開始させてしまうため、コスト大きくなる問題点があります。

そのため、本研究では、まずbag-of-wordsでtoken表現を獲得しています。文章全体から局所的な集約表現を獲得するため、たくさんの良性なHTMLコードに埋め込まれた僅かな悪性表現を見つけることができます。 獲得したtoken表現を用いて、shared-weight NNをつかって分類を行なっています。

f:id:chillstack:20190717150431p:plain:w300
アーキテクチャ

feature extraction

まず、アルファベット以外のところで区切ってトークンを作ります。区切ったトークンを16個の同じ長さのチャンクに分けます。そのあと、ハッシュ技術を使って1024個のバイナリ値の bag-of-words style 表現を獲得します。

獲得した16個の表現 x[0]...x[15] から、隣り合った要素で平均をとった x(0, 1), x(2, 3), ... , x(14, 15) を計算します。それを繰り返していき、x(all) まで行ったら、元の x[0]...x[15] と計算した値全て(計31個)を使い、入力ベクトルとします。

ここで、合計するのではなく平均をとることで、異なる長さのドキュメント同士でも各表現レベルのノルムを均一に保つことができます。 そのあと、Layer norm -> FC(10241024) -> ReLU -> Layer norm -> dropout -> FC(10241024) -> ReLU -> Layer norm と続きます。

maximum activation

inspectorのあと、31個のフィルターの中で同じ位置の各ニューロン内で最大値をとって、1024の長さのベクトルを作ります。

master

2回FCしたあと、最後のFCで出力を26個にして、それぞれにsigmoidをかけます。 1つ目のoutputは文章が悪性であるかどうかを判定します。 残りの25個は、フィッシングサイトかどうか、exploit kitのインスタンスかどうかなどを判定しています。 lossはbinary-cross-entropyで、26個のoutputsの結果の勾配の平均をとってアップデートしています。

結果

以下の2つの方法で検証しています。

  1. 標準的な文書分類タスクとしての評価
  2. 様々な方法でアーキテクチャを変更して実験した評価

しかし既存の異常検知モデルとの直接的な精度比較は行なわれていません。 このアーキテクチャは速度面で優れていることが強みだからです。

データセットVirusTotalから10ヶ月分取得したものを用いています。 全ベンダーで良性と判断されたデータはnormal、3つ以上のベンダーで悪性と判断されたデータはmaliciousとしています。

詳細な識別結果は、論文を参考にしてください。

異なるマルウェアファミリーの検知精度
異なるマルウェアファミリーの検知精度

コメント

特徴抽出がユニークで、興味深い論文でした。

CNNをむやみに用いるよりドメイン知識を活用した特徴量設計をした方が有効な場合もあり、かけるコストと得られる効果を考慮し、それぞれのタスクに最適な手法の選定を行う必要があります。

ChillStackでは無料で不正検知・異常検知に関するご相談を受けていますので、お気軽にご連絡ください。

docs.google.com

論文情報・リンク

https://arxiv.org/pdf/1804.05020.pdf