文字認識をWatermarkで騙す手法の論文:「Attacking Optical Character Recognition (OCR) Systems with Adversarial Watermarks」

Attacking Optical Character Recognition (OCR) Systems with Adversarial Watermarks」という論文を読んだ。

概要

OCRシステムを騙すためのAdversarial Exampleを作成する手法の論文。OCRにかけるような文書は写真などとは異なり背景が白・文字が黒、となっているので写真データに対するAdversarial Exampleの手法を使うと、人間が見ておかしいことに気づく。
そこでこの論文ではWatermarkと呼ばれるスタンプを文書に付与することで、文書読み取りの結果を改変することを目指している。
Watermarkは例えば「Sample」や会社名みたいなスタンプを文書に重ね合わせる。そのWatermarkと重なる部分のピクセルを上手い具合に変えると、文書の意味を反転するような形でのAdversarial Exampleをいくつか作成できている。

基本的には評価はモデルがホワイトボックスだと仮定したうえで行っているが、ブラックボックスのOCRシステムとしてTesseract OCRに対してもWatermark を付与したAdversarial Exampleが働くことを確認している。ブラックボックスシステムに対しては、ホワイトボックスモデルに対してAdversarial Exampleを作成して、そのAdversarial Exampleを入力とすることで確認している。

アルゴリズム

具体的なアルゴリズムとしては、元文書とAdversarial Exampleのノルムを閾値以下である・Watermarkの中に含まれるピクセルをのみを変更する、という制約の下でCTC loss functionと呼ばれる最終層で出力される値から正解のデータ列になりうる確率を元に計算する損失関数を最小化するように最適化問題を解いていく。論文では、再急降下法+モーメンタムのようにして文書ベクトルを更新していくと述べられている。

実験結果

具体的な実験では以下の図のように、いくつかの文の意味を変えるように改変することができたことを示している。免許証の番号を変える例も示されている。

Future Work

この論文ではWatermarkの位置は固定なので、任意の箇所を改変できるようになっていないが、今後は自由な位置・形状でWatermarkを追加することも考えている。

所感

WatermarkがつけられたらそもそもOCRは上手くいかなさそうなので、Watermarkがついた部分は人間がチェックするべきではないかと思った。手法としてWatermark付与以外にも文字のエッジの部分を改変することで、印刷がかすれているように見せかけて人間とOCRを騙す方法も述べられており、これが進んでいくと悪用される可能性もありそうに思った。

論文読み:Squeeze-and-Excitation Networks

元論文:Squeeze-and-Excitation Networks

最近良くCNN関連のタスクでよく使われる手法なので、論文を読んでみたときのメモ。
ググると他にも詳しい解説記事があるので、あくまでも個人的なメモとして残します。

概要

Squeeze-and-Excitationブロック(SEブロック)というモジュールを導入することで、明示的にチャンネル間の相互作用をモデル化できる手法。
チャネル間の相互作用はイメージがつきにくかったが、例えばある特徴マップとまた別の特徴マップが同時に強く反応する場合に、特定のクラスと判定されるといったケースだろうか。チャンネル方向でSEブロックの処理を行うことで、チャンネル間の相互作用を表せるということのようだ。
SEブロックい色々なCNNに組み込んだSENetは様々なデータセットに対して効果的であったことを確認した。既存のCNNに少しの計算コストを追加するだけで性能を高めることもできた。

Introduction

CNNは画像認識の分野で広く使われている。CNNは畳み込みフィルタによって局所的な特徴をつかみ、層を重ねることで局所から大局までの広い範囲の画像特徴をつかむことができる。近年は高精度なネットワーク構造を作ることが研究のフロンティアであるが、いくつかの研究では既存のネットワークにモジュールを追加することで精度向上を目指す取り組みもある。

この論文で提案されたSEブロックはそのような取り組みの一つにあたる。SEブロックは特徴の再調整(論文ではfeature recalibrationと書かれている)を果たすように設計されている。

論文中Fig.1にあるように、SEブロックは特徴マップを受けとってチャンネルごとに空間情報を凝縮する(Squeeze)。そして、Excitationと呼ぶ操作によりチャンネルごとの重みづけを行ったベクトルとしてSqueeze後の情報を変換する。これによって生成されたベクトルを元の特徴マップにかけ合わせることで、特徴マップがチャンネル間の相互作用をモデル化することができる。つまり価値の高いチャンネルを強調することで表現の質を挙げることを目指している。
目的に応じてSEブロックをどこに配置するかを決めることもできる。例えば、ネットワークの初めの方の層にSEブロックを入れると、クラスに依存しない局所的な特徴を共有することができ、後ろの方の層に入れるとクラスに依存した特徴の相互作用を共有することができる。

Related Work

モジュールを追加することでネットワークの性能を向上させる手法は色々と研究されている。多くの手法はチャンネル間の相互作用はクラスに無関係な関数の合成で表すことができると仮定しており、チャンネル間の相互作用を取り入れていない。一方、この論文では、チャンネル間の相互作用を非線形の変換を用いて調整することで、効果的に学習を進めることができるようになるというのが著者らの主張。

Squeeze and Excitation Blocks

Squeeze: 各特徴マップはフィルタがかけられた局所的な部分の情報の集まりであり、大局的な情報を持っていない。そのためSqueeze処理でチャネルごとの統計情報を取得する。具体的にはGlobal Average Poolingをかける。もっと複雑な処理を使っても良いかもしれないと著者らは述べている。

Excitation: 非線形なチャネル間の相互関係を学習し、複数チャネルが強調されることを許可するような設計になるように、ReLUを挟んでSigmoidを使っている。2層の全結合層で途中で削減率rをもちいてネットワークをいったんくびれさせている。

そして最後に元の特徴マップにSEブロックの結果をかけ合わせることで、特徴マップを強調することができる。
前述の通り、SEブロックはCNNの特徴マップを出力するところなら組み込むことができ、VGG, Inception, RexNet, ResNeXtなどに適用できる。

Model and Computational Complexity

SEブロックを追加してもパラメータ数の増加はSE-ResNet-50で約10%程度。推論速度も数ミリ秒程度の増加に抑えられており効率的。
SEブロックをCNNの最後の方に置くと、特徴マップの枚数が多いため計算量がその分増えるが、最後の層にSEブロックを追加するのを止めても性能はそれほど変わらずパラメータ数を削減できると論文中で議論している。

Experiments

様々なデータセットでSEブロックを追加してあげることでSoTAを達成した。

Ablation Study

Ablation Studyとは構成要素を1つだけ抜いた手法を比較すること。他のパラメータを固定して、あるパラメータを変化させた場合の挙動を調査している。
Reduction ratio r: Reduction ratioを増やしていくと精度は落ちていくが、線形の関係ではない。Reduction ratioが小さいと精度が上がるがパラメータ数が増える。16くらいが精度とパラメータ数のバランスが良いと述べられている

Squeeze Operator: Global Average PoolingとGlobal Max Poolingを比較したが大差はない。ここの選択にはSEブロックは頑健

Excitation Operator: 最後のSigmoidをReLUやTanhに置き換えた結果が示されているが、Sigmoidが一番良い。

Different Stages: ResNetのステージのどこにSEブロックを入れるかで実験しているが、どこでも精度は向上する。どこに入れるかは互いに補いあう関係なので、複数個所入れると精度がさらに上がると述べられている。

Integration Strategy: SEブロックをどこに入れ込むか。大差がないので、入れ込む一に関しては頑健だろうと述べている。

Role of SE Blocks

SEブロックの役割を現実的なレベルで理解するための考察が述べられている。Global Average Poolingを行わないNoSqueezeというモジュールを構成し、精度を見るとSEブロックよりも下がる。これはSEブロックが特徴マップ全体の情報を活用していることを示している。また、Excitationの理解のために、ImageNetの異なるクラスの画像に対して特徴マップが各層でどのように反応しているかを見ている。

Conclusion

SEブロックは強力。チャネル間の相互関係を利用した精度向上手法であり、今後はこのような方向性の研究が出てくることを期待している。著者らは最後にチャネルの重みづけを、ネットワークの枝刈りに使えるのではないかと提案している。

所感

非常に簡単な構成で、精度が向上するのが驚き。Kaggleなどでも使われるようになってきており、解説記事も多いので理解はしやすかった。

小規模データセットに対するニューラルネットの汎化性能の理由に迫る論文:Modern Neural Networks Generalize on Small Data Sets

NeurIPS 2018の論文で「Modern Neural Networks Generalize on Small Data Sets」という論文があったので読んでみた。

ニューラルネットは大規模データで成功を収めてきているが、小規模なデータに対しても過学習しすぎることはなく結構良い精度が出る。大規模パラメータを持つネットワークであっても上手くいく理由はパラドックスだと言われていた。
この論文ではニューラルネットを複数の小規模なネットワークに分解して性能を見ることで、大規模ニューラルネットがランダムフォレストのように複数のモデルのアンサンブルとして予測を行っていることを示している。
このようなサブネットワークを集めることによって、過学習しすぎることなく小規模なデータセットに対しても良い性能を出せている。

ニューラルネットの分解方法として、線形計画法を用いて各サブネットワーク同士の相関が低くなり、サブネットワーク自体の性能も高くなる分割を探している。

実験として、確率的に生成された2次元疑似データセットでベイズルール、ニューラルネット、ランダムフォレストの境界を可視化している。ランダムフォレストでは一つ一つの木は高いバリアンスを持っているが、集計することでバリアンスを減らせていることが分かる。同様にニューラルネットも分割した複数のサブネットワークたちはバリアンスが高いが、1つのニューラルネットにまとまると集計されてバリアンスが減っている様子が分かる。

実際に、UCI Machine Learning Repositoryから小規模データの116データセットを用いてニューラルネットとランダムフォレストの精度比較も行っている。ニューラルネットは10層、各層は100ノードと比較的大規模なものであるが、大体のデータセットでランダムフォレストに近い性能が出せている。また、ドロップアウトを使うとさらにランダムフォレストの結果に近づくことができており、ドロップアウトが正則化の一手法として機能していることが分かる。

小規模データに対するニューラルネットワークの活用可能性については、最近気になってい分野なので継続して論文を読んでいきたい。

Attentionによるニュース推薦の論文「NPA: Neural News Recommendation with Personalized Attention」

KDD2019のApplied Data Science Track Paperからピックアップして「NPA: Neural News Recommendation with Personalized Attention」という論文を読んだ。

ニュースをユーザ毎にパーソナライズして推薦する手法の論文で、Attentionのメカニズムをユーザとニュースタイトルの両方に用いることで高い精度を実現している。
この考え方の背景には、異なるユーザは普通異なった興味関心を持っており、同じユーザであっても複数の興味を持っているため、異なったユーザ同士が同じ記事を違う興味からクリックする可能性が考慮されている。つまり、あるニュースのタイトルがあったときにユーザによって着目した単語が異なってクリックしたということをモデル化している。

細かい精度向上のためのポイントとしては、推薦分野の特徴として興味を持たれない負例サンプルが非常に多く不均衡なデータのため、Negative samplingを施した方が精度が向上している。

いくつかの従来のアルゴリズムと精度比較を行っているが、複数の指標で有意性を持って精度向上を達成している。
実験結果を見てみると、異なるユーザごとにニュースタイトルのどこに着目しているかが分かり、あるユーザはスポーツに興味があり、他のあるユーザは映画に興味があるなどの指向が見えてくる。

この研究ではユーザとニュースタイトルのAttentionを使って推薦を行っていたが、次はニュース本文も使っていく方向に進んでいくと考えられる。そうなると入力が長くなるので、どのように計算量を減らしたり無駄な文章を減らすかなどの方向もポイントになっていくのかもしれないと思った。

Microsoftでの時系列データ異常検知手法の論文:「Time-Series Anomaly Detection Service at Microsoft」

KDD2019の論文を少しずつ読んでいってる。特にApplied Data Science Track Paperの方は、企業で実際に機械学習を運用している際の話が書かれているので面白く読める。

今回はMicrosoftの時系列異常検知の論文を読んだ。
https://arxiv.org/pdf/1906.03821.pdf

Microsoftでは定常的にモニターしている時系列データとして400万件ほどのデータがあるらしい。これだけの規模になると何らかの自動化の仕組みで異常検知をしないと追いつかない。
実際にMicrosoftではこの論文の手法を用いて、異常が検知されるとメールが飛んでくるシステムになっていて、メールのリンクから異常時の時系列プロットへと飛べるようになっている。

ただ時系列異常検知の難しい点として、以下の3点が挙げられている。

  1. 時系列データは時間とともに、データの分布が変わっていくことが多い。そしてほとんどのデータはラベルがつけられていないため、学習データとして用いる際に異常個所が分かっていない
  2. 時系列データはデータの種類によってパターンが色々とあるため、汎用的なモデルを作るのが難しい
  3. データが数秒、数分ごとに入ってくるため、効率的に高速な処理を行う必要がある

この論文ではSpectral Residualモデルという画像のSaliencyを表示する手法を、時系列データに対して適用し、その後1次元CNNを用いて異常検知する方法を提案している。
時系列データの異常が発生した箇所というのは、結局はデータの中で目立つ箇所であるので、Saliencyで着目すべき箇所を検出するとそこが異常個所だったりする。

手法の細かい点では、いくつかの工夫がなされている。例えば、Spectral Residual手法は、予測する点がウィンドウの中心位置にあった方が精度がよいので、予測する際には後ろ何点かを前のいくつかの点から予測してからSpectral Residualを算出する工夫が行われている。

実験として、実際の時系列データに適当に異常値を注入してそこを予測できるかを、既存の時系列異常検知アルゴリズムと比較している。今回のSR-CNN手法は、他のアルゴリズムに比べて精度や処理速度を考慮するとよい結果が出ている。
また、Spectral Residualを用いることで、教師なし学習として異常検知を行う手法が挙げられているが、もしデータセットに異常のラベルがついている場合は、Spectral Residualを一つの特徴量とみなして、後段の処理をCNNからDNNに置き換えるとさらに良い精度が出るとも報告されている。

実際にMicrosoftで時系列異常検知に用いられているモデルであるという点で信頼がおける手法だと考えられる。Spectral Residualを計算して時系列データから顕著な点を前処理的に用いるという考え方は面白かった。

書評:The Data Science Design Manual

少し前に「The Data Science Design Manual」という本を読んだので紹介します。

この本の著者はAlgorithm Design Manualを書いた、Steven S. Skiena先生であり内容自体はデータサイエンスの基礎的な内容を網羅的に説明した本です。非常にユーモアがある書き方で、データサイエンスの勉強はもちろん純粋な読み物としても楽しめる部分があります。
どのくらいユーモアがあるかというのは序文のCaveatという部分を読めばわかります。以下はその部分の引用です。
「It is traditional for the author to magnanimously accept the blame for whatever deficiencies remain. I don’t. Any errors, deficiencies or problems in this book are somebody else’s fault, but I would appreciate knowing about them so as to determine who is to blame.」

技術的な内容は数式を使ってしっかりと解説されており、ところどころにSkiena先生が実際に体験したデータ分析する上での罠や手法の説明を書いた「War Story」という節が挟まれており、読んでいて飽きないように工夫されています。
内容自体はデータの前処理から可視化、モデル作成と一通り書かれており、統計や線形代数の基本的な内容もカバーされているので1冊で基本的な部分が簡潔に学べるようになっていました。

このような本の類書は最近非常に増えており、内容的には大体理解している部分が多かったが、系統立てて読んでみると知識の抜けている部分が分かるので、英語に抵抗がなくて何か一冊データ分析の本を選ぶなら、読み物として面白いので割とおすすめできる本でした。


「欠測データ処理」を読んだ

データ分析の前処理における重要なポイントの一つとして、欠測データをどのように扱うかがある。
入門向けの記事だと単純に平均値や0埋めなどを施して、そのまま機械学習モデルに投入する例が多いが統計学的にはこのような単一代入法と呼ばれる手法はバイアスを生じる。
そこで使われるのが多重代入法と呼ばれる手法である。

多重代入法について詳しく知りたかったので、評価の高い「欠測データ処理」を読んだ。

本書では欠測データの種類、単一代入法・多重代入法の理論的な側面とともにRによる実際のコード例も紹介されている。
例えば、一口に欠測データといってもその生成メカニズムとしてMCAR, MAR, NMARなどの種類が存在する。ある調査では経験的に完全にランダムに欠損が生じているデータ(MCAR)は公的統計の調査においては約10~20%程度という結果もある。
MARによる欠損は単一代入法ではバイアスが生じるため、多重代入法を利用するべきである。多重代入法とは欠測データの分布から独立かつ無作為に抽出されたM個のシミュレーション値によって欠測値を置き換えるものである。

最後の「おわりに」の章にある3つの疑問に対する回答が、なぜ多重代入法を使うのかという説明として非常にわかりやすかった。「なぜ複数回の代入が必要なのか」という疑問に対して、複数回の代入を行うことで推定に関する不確実性を代入されたデータに取り入れることで、標準誤差を適切にすることができると書かれている。これによって母集団パラメータの推定を妥当なものとすることができる。

外れ値処理の一手法:Winsorizingについて

機械学習や統計の分野における外れ値処理の手法の一つとしてWinsorizingと呼ばれる手法がある。日本語の解説が少なかったので書いてみる。

手法自体は非常に簡単で、外れ値を外れ値以外の最大値・最小値で置き換えるというものである。表形式データを考えると、単純に外れ値を除去するよりも、データサイズが少ない場合はほかのカラムの情報を有効活用することができる。

ちなみに英語版のWikipediaにはページが用意されている。
https://en.wikipedia.org/wiki/Winsorizing

このページにあった例を見てみると、numpy配列の上下5%のデータを最大値と最小値で置き換える方法が書かれている。

import scipy.stats
import numpy as np 
a = np.array([92, 19, 101, 58, 1053, 91, 26, 78, 10, 13, -40, 101, 86, 85, 15, 89, 89, 28, -5, 41]) 
scipy.stats.mstats.winsorize(a, limits=[0.05, 0.05])

1053が101に、-40が-5へと置き換えられる。
少し考えるとわかるが、単純に外れ値を除去して平均を取った場合とWinsoringをしてから平均を取った場合では値が異なる。

機械学習による化合物テストツールの論文:「PrePeP – A Tool for the Identification and Characterization of Pan Assay Interference Compounds」

PrePeP – A Tool for the Identification and Characterization of Pan Assay Interference Compounds
Maksim Koptelov (University of Caen Normandy); Albrecht Zimmermann (University of Caen Normandy); Pascal Bonnet (University of Orléans); Ronan Bureau (University of Caen Normandy); Bruno Crémilleux (University of Caen Normandy)
https://www.kdd.org/kdd2018/accepted-papers/view/prepep-a-tool-for-the-identification-and-characterization-of-pan-assay-inte

KDD2018の論文読み3本目。Applied Data Science Trackの続き。

製薬分野における機械学習を応用した論文。製薬などの分野で新たな化合物を作った際に、所望の性質を満たしているかを確認する作業がある。
対象物質が増えるとこの作業に非常に多くの時間とリソースがとられてしまう。そこで著者らは化学者向けのツールであるPrePePを作成し、専門家たちがビジュアル的に化合物の様子を探索し、テストの結果予測やその理由などをわかるようにした。

結果としてはiFH(infrequent hitters)と呼ばれるテストに成功しない多数派のクラスをうまく分類が出来ておらず、今後の改良が必要と述べられている。

具体的な機械学習モデルとしては解釈性を持たせるために決定木ベースでランダムフォレストのような形で、予測モデルを作成した。
また、化学の専門家が簡易に使えるように、その界隈で有名なツールを拡張する形でGUI付きのソフトウェアを開発している。

化学の専門知識が足りないためか、なかなかイメージが理解しづらいが、機械学習部分は基本的な内容だった。こういった分野でも機械学習の応用が進みつつあるのだと実感した。

機械学習によるユーザ離脱率の予測論文:「I Know You’ll Be Back: Interpretable New User Clustering and Churn Prediction on a Mobile Social Application」

I Know You’ll Be Back: Interpretable New User Clustering and Churn Prediction on a Mobile Social Application
Carl Yang (University Of Illinois, Urbana Champaign); Xiaolin Shi (Snap Inc.); Jie Luo (Snap Inc.); Jiawei Han (University of Illinois, Urbana Champaign)
https://www.kdd.org/kdd2018/accepted-papers/view/i-know-youll-be-back-interpretable-new-user-clustering-and-churn-prediction

KDD2018の論文読み2本目。産業界の応用事例を集めたApplied Data Science Trackのほうが自分の興味に近いのでそちらにシフトして上から読み始めた。

Snapchatの大規模なデータを集めて、ユーザタイプをクラスタリングにより6種類に分類して、その中の3種類のユーザタイプが平均よりも登録2週間後の離脱率が高いということが分かった。
このクラスタリング結果をもとにして、著者らはユーザ登録後の2週間のデータをもとにして離脱予測のモデルを作成した。

予測モデル作成において、いくつかの課題がある。
データが非常にノイズが多く、変動が大きいため、隠れマルコフモデルのような典型的な時系列モデルでは上手くいかない。また、データは非常にスパースであり、activityの数も非常に偏った(一部のユーザが非常に多くのactivityを行っている)データのため予測が難しいといえる。また、ユーザタイプによって離脱率が異なってくるが、最初の2週間のデータが少ない状態でユーザタイプの情報はそろっていないため、今までのモデルではユーザタイプの情報を使うことはできていなかった。

これらの課題を解決するために、複数のLSTMを組み合わせた予測モデルを用いて離脱率の予測を行っている。具体的には、活動をEmbeddingするレイヤーをLSTMの前に持たせてスパースなデータに対応し、2週間のデータからユーザタイプをクラスタリングシステムで予測し、そのユーザタイプを予測するようなK個のLSTMをトレーニングして、Attentionで着目するLSTMを決めて離脱率を予測するモデルを構築している。

この論文で書かれている離脱率予測のモデルはClusChurnというシステムとして、Snap Inc.のリアルタイム予測システムに組み込まれている。
機械学習による離脱率予測モデルの一例として参考となる論文であると思う。