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

THOPLW: PyTorch Op-counter Layerwise

patchcore_ad

PyTorch をお使いの方であれば,PyTorch で実装されたモデルの計算量を算出する thop パッケージをご存じの方も多いと思います.シンプルなインタフェースと必要十分な機能を有するとても優れたパッケージなのですが,唯一の弱点は「レイヤーごとの情報が出てこない」という点です.レイヤーごとの計算量や,各レイヤーの出力テンソルのサイズが一覧されればさらに便利です.それを実現できるようにしたのが本パッケージ thoplw です.この thoplw と同等のことが部分的にできるパッケージは他にも存在しますが(例えば thlop など),PyTorch 2.x 系でも動作するようにメンテナンスされているのは,私が知る限りではこの thoplw だけです.pip で簡単に導入できます.

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

NiSHiKi: shell ラッパー

nishiki_screenshot

Linux のコマンドラインが大好きだけれども cd や mv コマンドなどでファイルパスを指定するのが面倒!,あるいはオプション引数を覚えきれない!というそこの貴方へ.NiShiKi はコマンドを入力しながらファイルパスやオプション引数の候補をリアルタイムに画面に表示し,TAB を押すと補完することができます.通常のシェルと比較すると煩わしいくらいの補完です.またファイル選択やプロセスIDの選択,コマンド履歴の呼び出しなどをグラフィカルに行うインタフェースも供えています.本ソフトウェアは C++ で記述されており,簡潔さのために 3,000 行以内で実装されています(ただしコメントや空白行はカウント外).また,任意の言語で作成した外部プログラムをプラグインとして呼び出すことができます.ただし本ソフトウェアは shell ではなく,編集補助のための shell ラッパーという点にご注意下さい.ソースコードは GitHub で公開しています.

GitHub Repository