Fixstars Corp. · TSE:3687

Fixstars — Technical Presentation (September 2021)

35 slides from Fixstars's technical presentation, September 2021

  1. Slide 1: 浅(くて広い)層学習 少データでお手軽機械学習

    浅(くて広い)層学習 少データでお手軽機械学習 越智優真

  2. Slide 2: 自己紹介

    自己紹介 ● 千葉大学教育学部附属中学校 3年 4月から木更津工業高等専門学校情報工学科 1年 ● 機械学習 ○ Kaggle, SIGNATE Expert ○ 専らデータサイエンスをしてる ● 量子コンピュータ ○ 未経験 ○ 量子ビットって何?からはじまった ○ 数理科学の量子コンピュータ特集を買って読んでる(難しい)

  3. Slide 3: アピールポイント

    アピールポイント 世界に一つ! ● 機械学習 ○ QBoostとNNの融合 ○ スパースモデリング ● 実行速度 ○ 並列処理 ○ スパースモデリング ● 汎用性 ○ 数値なら何でも OK ○ ハミルトニアンを書き換える必要なし ● 実用性 ○ 重みの可視化が楽 ○ 明示的な特徴抽出可 ○ 様々なタスクにおいて高い精度を確認済み

  4. Slide 4: 作成したモデル(ハミルトニアン)の概要

    作成したモデル(ハミルトニアン)の概要 ● NNっぽさ ○ 疑似特徴抽出 アンサンブル学習 ○ 拡張可能 とNNの融合 ● アンサンブル学習っぽさ ○ QBoostの応用 ○ n層作って平均化

  5. Slide 5: QBoostとは

    QBoost/i (45> <l))

  6. Slide 6: QBoost

    QBoost ● アンサンブル機械学習 ● 2乗誤差 ● 正則化項の存在 ● QUBO形式 入力と出力が離散値でつながっているため 表現力が低い (汎用性が低い)

  7. Slide 7: 表現力の向上

    PLAAEAMELYCEIMA TS aR; BIR 47

  8. Slide 8: 表現力の向上

    表現力の向上 ● 逆量子化 ○ 重みを多層化 ○ ミニバッチ学習 ○ 離散値 → 連続値(っぽく) ● 入力を正規化 ○ [0, 1]を想定しているため ○ 入力は小数で OK これらのアプローチから、画像でもテーブルデータで も学習が可能になった

  9. Slide 9: ここが浅くて広いのポイント!

    ここが浅くて広いのポイント! input w k output w w [0, 1]の小数 1か-1 スカラー スカラー 1か-11か-1 h x w行列 IsingPoly 重みの係数 総和をとる h x w行列 行列 x スカラー 要素積 n次元行列の総和 (n次元分) 計算の様子(画像)

  10. Slide 10: Binary Poly → Ising Poly

    データセット ● 量子ビットとの積をとるので 0以外の数が必要 ○ 0の特徴量があると 0を-1に補完 学習不可 ● 負が存在しないので総和で[-1, 1]に 計算させるのは難しい ○ ならば負を用意→→→→→→→→ Binary Poly → Ising Poly

  11. Slide 11: 工夫点

    1. 抽象、汎用的なコーディング 2. スパースモデリング 3. 並列処理 4. 簡単な重みの可視化 工夫点

  12. Slide 12: 抽象、汎用的なコーディング

    JURA HHA AIS A—F 47

  13. Slide 13: 意識したこと

    意識したこと ● 拡張性 ● 汎用性 ● 楽なコーディング 抽象かつ &デバッギング ● 楽な実験管理 汎用的な コーディング

  14. Slide 14: 例:PyTorch Dataset & DataLoader

    例:PyTorch Dataset & DataLoader ● ミニバッチ御用 ○ iterableなので ● 前処理、augmentationもできる ● 柔軟 ● 書きやすい 深層学習用のライブラリでも使える

  15. Slide 15: 例:Config管理

    例:Config管理 ● コードは抽象、configは具体 ○ スッキリ ○ ライブラリとしても機能 ● 読み/使い やすい ○ 汎用的

  16. Slide 16: スパースモデリング

    RIN-RETFYLYTA

  17. Slide 17: 少データで高精度、狙えます

    少データで高精度、 狙えます

  18. Slide 18: オッカムの剃刀

    同様のデータを説明する仮説が二つ ある場合、より単純な方の仮説を選択 せよ。 お気持ち オッカムの剃刀 シンプルに。よりシンプルに、 本質を抽出せよ。

  19. Slide 19: Batch Size = 10で実験

    Batch Size = 10で実験 Bestはたったの 30〜40データ MNISTの0ラベル 検証用データ 300枚 重み係数1で3層 iterのみ変更させた データ数は bs x iter

  20. Slide 20: 並列処理

    whe Fl] WEB

  21. Slide 21: 並列処理

    並列処理 simple 1 ● プロセス番号: CPUのコア数が最大 multi 1 ● 前処理: solverの定義 process 2 ● メイン: 計算(solve) 3 短縮 solver定義はローカル実行 → 非同期処理可 solveはクラウド実行 → 同期処理 時間がかかる 前処理が爆速に MNISTだと緑1ブロックに 5〜30秒かかる (データサイズと相関有)

  22. Slide 22: 重みの可視化

    i BOB AO al ic

  23. Slide 23: 方法

    方法 1. 学習 2. 学習済みの重みを取得 w w w 重み 3. 要素ごとの平均 1か-11か-1 要素ごとの 1か-1 平均 [0, 1]の小数 4. 以上 IsingPoly h x w行列 h x w行列

  24. Slide 24: 重み可視化の例

    3 7 9 Tシャツ ズボン スニーカー 重み可視化の例

  25. Slide 25: 役に立つこと

    役に立つこと ● 人に説明できる ○ DNNの欠点は説明が難しいこと ○ 実用的 ● 何で 上手くいく / いかない かがわかる ○ フィードバック可 ○ 指標+重みをみてモデルを評価できる

  26. Slide 26: 性能は?

    EATEITF CWO ?

  27. Slide 27: MNISTのサンプルのAUC score

    0.946 MNISTO 47D JLMAUC score

  28. Slide 28: サンプル実装

    申し分ない性能 サンプル実装 ● データ ○ MNIST ○ 20 x 20 pixels ○ 訓練100枚 ○ 検証300枚 ● モデル(QBoost) ○ 重み: 3層 ○ 重みの係数: 1 ○ 正則化係数λ: 2 ● 結果 ○ ラベルごとの平均AUC: 0.946 ○ シンプルな数字程良い性能 0と5の 重みを可視化させたもの

  29. Slide 29: タスクごとのAUC

    タスクごとのAUC 学習は150データのみ ● MNIST ○ ○ 手書き数字画像、 400 pixels 0.946 どんなデータでも ● Fashion-MNIST ○ 服や靴の画像、 400 pixels OK ○ 0.946 ● EMNIST ○ 手書き英文字画像、 400 pixels ○ 0.865 ● otto ○ Kaggle多クラス分類コンペ 特徴量 93個のテーブルデータ ○ 0.879

  30. Slide 30: 解決と今後

    INEJLKIZV Ve LICSZPMEEL BFRAVRH !

  31. Slide 31: 解決・これから

    解決 これから ● 幅広いデータを受け入れる ● 自動特徴抽出 ○ 0以外の数値なら何でも ○ n次多項式 ● 並列処理 ○ 畳み込み ○ 環境にもよるが最高で5倍高速化 ● 小さなバグ ● 多層化 ○ 重みを正規化するときにInf, NaNになることが ○ 層の数と精度の関係 たまにある ■ データが多い:相関高 ● パラメータのチューニング ■ データが少ない:相関低 ○ NNの勾配降下法っぽいことをしてうまくやりた ● スパースモデリング い ○ うまくいった ● 異常検知系タスク ○ 層は多すぎると過学習しやすい ○ 特徴抽出次第だが期待大

  32. Slide 32: 以上です ありがとうございました

    これより後ろに補足を 書いてあるので時間があれば 以上です 目を通してもらえればと 思います! ありがとうございました

  33. Slide 33: 作成したハミルトニアン

    ● データ数S、特徴量数Nの入力x、出力y ● 重みは係数k、L層のw ● 正則化係数λ 作成したハミルトニアン

  34. Slide 34: 重み計算

    重み計算

  35. Slide 35: 自作データセットで試す方法

    自作データセットで 試す方法 1. データのパスを記載 2. カラムを指定して説明変数と従属 変数にわける 3. (必要ならば) 前処理等を行う 4. パラメータを設定 5. 実行!

Fixstars — Technical Presentation (September 2021) on 6ix