Tetsuya Ishikawa

Everything in the World is Made of Mathematics

Code

拙作のソフトウェアをご紹介するページです

rfflearn: ML toolkit for RFF

kernel_svm_example

インタフェースを scikit-learn に似せた、Random Fourier Feature(以下、RFF)の Python 実装です。機械学習の1手法として有名なカーネルサポートベクターマシン(以下、K-SVM)は、推論時の計算時間が学習データセットの数に比例します。これは K-SVM が無限の自由度を有することに起因しており、それこそが K-SVM の強みなのですが、データセットの数が膨大になると推論時間が現実的でなくなります。そこで「カーネル関数を有限自由度の関数で近似してしまえ」という方針で計算量を大幅に減らしたのが RFF です。同時に学習時間も大幅に減少します。動作には Python3 と scikit-learn が必要です。Optuna による自動ハイパーパラメータ調整や Shapley を用いた特徴量重要度の可視化にも対応しています。

GitHub Repository

PatchCore Anomaly Detection

patchcore_ad

PatchCore と呼ばれる 2021 年に提案された画像異常検知手法の Python 実装です。PatchCore は 2020 年に提案された SPADE と呼ばれる手法の高速版という位置付けの手法であり、推論が SPADE よりも格段に高速なだけでなく、SPADE よりも高い異常検知性能を示しており、性能と速度のバランスに大変優れています。2021 年末までは MVTecAD というデータセットにおいて SOTA を維持していました。本レポジトリ以外にも PatchCore の Python 実装はいくつか存在しますが、本レポジトリは原論文に忠実な実装をしつつ(特に異常スコアの算出部分)、原論文とほぼ同等が実現できていることを確認しているのが特徴です。この PatchCore の PyTorch 実装は GitHub で公開されています。

GitHub Repository

Score-CAM PyTorch

patchcore_ad

Score-CAM と呼ばれる CNN の判断根拠の可視化手法の PyTorch 実装です。CNN に対する判断根拠の可視化手法としては Grad-CAM が最も有名ですが、Score-CAM も Grad-CAM の派生のひとつです。Score-CAM のメリットのひとつは勾配を用いないことによる数値的な安定性にあります。Grad-CAM では勾配消失などの理由で可視化ヒートマップがうまく算出できないケースが稀にありますが、Score-CAM ではそういった心配がありません。逆に Score-CAM のデメリットは計算量の多さにあり、推論対象の枚数が極端に多い場合は計算量の多さが問題になります。本レポジトリではそのデメリットを回避するため、CSKIP (Channel SKIPping) というトリックも提供しています。

GitHub Repository

Binary Random Forest on TFHE

patchcore_ad

準同型暗号 (fully homomorphic encryption) と呼ばれる技術があります。これは暗号文を復号化することなく四則演算などの演算を行う技術であり、理論的には暗号文のまま機械学習などのアルゴリズムを適用することが可能とされています。この技術はクラウドサービスでの応用が期待されており、近年とても注目されていますが、暗号文のまま演算を行うのは計算コストが非常に高いという問題があり、現状では線形回帰などの計算負荷が極めて少ない機械学習アルゴリズムしか実用化されていません。本レポジトリでは、TFHE と呼ばれる準同型暗号のひとつを用いることでランダムフォレストが構成できることを提案し、その性能が線形回帰を大きく上回ること、推論時間が現実的な範囲に収まることを実証します。

GitHub Repository

Gaussian process bootstrapping layer

gpb_layer_sketch

ニューラルネットの汎化性能を向上させることを目的とした、ブートストラッピング層のご提案です。ガウス過程モデルに random Fourier features を適用すると、全結合層と似た数学的構造を持ちます。これを発展させることで、全結合層や畳み込み層に特徴量の予測分散を算出させることができます。この予測分散を用いて特徴量にノイズを加えることで特徴量をブートストラップし、汎化性能を高めるのがこのレポジトリでご提案する Gaussian process bootstrapping layer (GPB layer) です。理論的な詳細はこちらの文書 をご参照下さい。網羅的ではありませんが、とりあえず LeNet-5 と CIFAR10 の組み合わせで効果を確認しています。実験結果および GPB layer の PyTorch 実装を GitHub で公開しています。

GitHub Repository

RedAlien: Readline alternative

redalien_demo

Linux のコマンドラインが大好きだけれども cd や mv コマンドなどでファイルパスを指定するのが面倒!というそこの貴方へ。Bash の文法を捨てることなく、リアルタイム補完や TUI によるファイルパスやプロセス番号の挿入が可能なツール RedAlien をご紹介します。正確に言うと、RedAlien はシェルではなく、GNU Readline の代替ソフトウェアです。すなわち、Bash の Readline を乗っ取る形で RedAlien を起動させ、その結果を Bash に渡します(もっと正確には、Readline が起動した瞬間に RedAlien を起動し、RedAlien が終了すると同時に Readline の入力も確定させます)。これにより、Bash の文法を捨てることなく、Bash の編集機能を拡張しています。ちなみに RedAlien という名称は Readline のアナグラムになっています。ソースコードは GitHub で公開しています。

GitHub Repository