« 前のひとこと | トップページ | 次のひとこと »

cocolog:90996211

競争的な機械学習において、勝った例を負けた側が学習するだけでなく、負けた例と「若干」逆側になるように勝った側が学習することにより、学習が劇的に改善した。私にとっては「負の学習」一般についてのヒントになりそう。 (JRF 4146)

JRF 2019年5月16日 (木)

今回、書いた記事は↓。

《機械学習の練習のため競争的な学習の実験: その2 負例の研究》
http://jrf.cocolog-nifty.com/software/2019/05/post-3c97df.html

前回の、競争的な学習については [cocolog:90592632] でひとことし、↓で記事にした。

《機械学習の練習のため競争的な学習の実験をしてみた》
http://jrf.cocolog-nifty.com/software/2019/01/post.html

JRF2019/5/166992

……。

おもちゃの自動車の自動運転みたいなものを目標としていて、「悪い例」についてもそれなりに学びたいと思っていたが、前回、そのための「負の学習」が単純な「競争的学習」の枠組でもまったくうまくいかなくて、他に何か良い方法はないかと悩んでいた。負の学習のときに発散してしまうのは少なくともおかしすぎる。

JRF2019/5/168157

強化学習の枠組だと、悪いスコアにマイナス値を使い、「負の学習」「マイナスの学習」をしていくことがある。それを競争的学習に利用して何が悪いのか…よくわからない。そこで「強化学習」から一旦離れて、ニューラルネットの基礎に遡ったりすることで、何かアイデアが得られないか?…と考えていた。

JRF2019/5/167755

そのときにでてきたアイデアが今回のもので、そのアイデア出しの過程は上の記事に書いてある。わかりにくいかもしれないが…。

基本的には、記事の概要に書いたとおり、勝った例を負けた側が学習するだけでなく、負けた例と「若干」逆側になるように勝った側が学習するというのがアイデアになる。

JRF2019/5/160990

勝った側が、- α * (負け例 - 勝ち例) + 勝ち例 を学習する。この α を「負例が近くにいるとき正例を遠くに動かし、遠くにいるときは近くが正しいとして学習する」ようにするために α = exp(- (負け例 - 勝ち例) ** 2 / (2 * σ ** 2)) とする。

どうなるか予想しがたかったが、意外なことに、うれしいことに、学習が劇的に改善した。

JRF2019/5/162232

……。

今後、私にとっては「負の学習」一般についてのヒントになりそう。

マイナスの学習といっても、マイナスの学習率を設定するのではなく、悪い側の「逆側」に少し伸ばしたものを正例として学習する…というのがポイント。

JRF2019/5/167084

……。

追記。

何がよいのか、もう少し説明を。

機械学習といっても識別器とかなら、「負のデータ」があり、「負の学習」も行われるのが普通。問題は深層学習というかニューラルネットワーク。

JRF2019/5/170545

状況を入力にして、それを行列に複雑に突っ込んで、操作方法という出力を得るみたいなニューラルネットを考えたとき、back propagation は、正しい操作方法と予想された操作方法の差みたいなものに対して行われる。

JRF2019/5/176638

このとき「正しい操作方法」でなく「間違った(悪い・負の)操作方法」が得られたとき、どう back propagation するかが問題となる。

JRF2019/5/172427

今回の私の記事は、それに直接答えるものではないけど、そのヒントになるのではないか…と私は個人的に期待している。

JRF2019/5/170240

……。

「売り」はここだ!…ということで、今回の記事のタイトルを変えた。

《ニューラルネットで負の学習: 競争的な学習の実験 その2》
http://jrf.cocolog-nifty.com/software/2019/05/post-3c97df.html

JRF2019/5/170490

« 前のひとこと | トップページ | 次のひとこと »