aifield / CV_News

Computer Vision系勉強会用のリポジトリです。
3 stars 1 forks source link

#13 The Forward-Forward Algorithm: Some Preliminary Investigations #13

Open aaaa383 opened 1 year ago

aaaa383 commented 1 year ago

The Forward-Forward Algorithm: Some Preliminary Investigations

論文情報

タイトル The Forward-Forward Algorithm: Some Preliminary Investigations
発表年 2022/12/27
URL https://arxiv.org/abs/2212.13345
プログラム https://github.com/mohammadpz/pytorch_forward_forward

一言説明

モチベーション

無題

手法

BP_vs_FF

  1. 学習データについて正解データ(positive)と不正解データ(negative)を作成する。(2種類のforwardでそれぞれ用いる)
  2. データを任意のNNで順伝播させる。
  3. 各層の出力の二乗をGoodnessと定義する
  4. 正解データのGoodnessが閾値よりも大きく、不正解データのGoodnessが閾値よりも小さくなるように重みを各層ごとに更新する

→つまり入力に対して正解と不正解を見分けられるように学習を進める
 データが2種類あるため、forward-forwardという名前がついており、正解データは正解データだけのバッチ、  不正解データは不正解データだけでバッチが構成される

layer

教師あり学習の場合のデータ作成方法

学習データについて正解データ(positive)と不正解データ(negative)を作成し、最初のラベル個数分のpixelに正解ラベルを重ねる(overlay)

・Positive sample:画像と正解ラベル ・Negative sample: 画像とランダムに付与したラベル

pos_neg

推論方法

  1. 推論用の推論用のデータをラベル個数分用意して、それぞれに異なるラベルを付与する ・ラベルが3種類の場合はラベル1,2,3が載った推論データがあるということ
  2. モデルにそれぞれのデータを入力し、各層においてそれぞれのGoodnessを計算して、最もGoodnessが大きかったラベルを正解ラベルとする ・学習では、正解データのGoodnessを高く、不正解を低く学習するようにしているので妥当な推論方法と言える

実データでの実験

MNISTを使った実験では、NNを4FC(全結合層)・2000ReLUとしたときでテスト誤差1.4%を達成 →BPを利用した場合と同程度の精度がでることが示している  またDropout:やLabel Smoothingを適切に利用することでテスト誤差は1.1%まで低減可能

検証データ: MNIST:train 5万、val 1万、 test1万

手法 テスト誤差
CNN 0.6%
4FC・2000ReLU 20epoch 1.4%
4FC・2000ReLU + 正則化 1.1%

FFを使う上での2つの疑問点

  1. 適切な正負のデータがあればデータの構造を捉えた効果的な多層表現を学習するのか?
  2. 適切な負のデータをどうやって取得するのか?

2つの数字をマスクで合成し、負例データとして利用している 生成方法の意図:文字の形状を学習するために正例に対して近距離相関が高く、遠距離相関が低いデータを作成 生成方法:ランダムな画像に対して繰り返しブラー処理をかけて最終的に閾値0.5で二値化画像を作成

2000ReLUの4つの隠れ層を持つNNを100epoch学習させて、最後の3層の隠れ層にgoodnessをソフトマックスの入力として利用するとエラー率は1.37%となる。

無題
テスト誤差 Epoch
baseline 1.4% 20
4FC・2000ReLU Softmax 1.37% 100
局所受容野 1.16% 60

CIFAR-10での実験

CIFAR-10:32✕32✕3色チャンネル(3072次元)の10クラス分類用のデータセット

BPに精度では劣るがFFでも学習を行うことができることを示した

無題2

FFでのsequenceの学習

検証データ: イソップ童話:100文字✕248文 文字種30種:小文字26文字+スペース、コンマ、セミコロン、ピリオドの30クラス分類

学習 最初10文字を文脈(学習データ)として与え、残り90文字を生成・予測する 正例:正解データ10文字 負例:10文字目がモデルの予測値 or 11文字目以降のすべての予測値

無題

FFでシーケンスに関しても学習可能であることが示された

グラフの比較条件 青:隠れ層の重みをランダムに固定し、softmaxだけを学習 赤:正例/負例を交互に学習 黒:正例/負例を同時に学習

ランダムより精度は向上
正例/負例は同時に考慮しなくてもOK →オフライン学習・睡眠学習が可能

無題5

まとめ

読んだ所感

参考URL

https://qiita.com/sergicalsix/items/a7720c403028823f7b19 https://www.slideshare.net/DeepLearningJP2016/dlthe-forwardforward-algorithm-some-preliminary https://keras.io/examples/vision/forwardforward/

サンプルコード https://github.com/aaaa383/-/blob/main/forward_forward_Algorithm.ipynb