post Image
ロバストにいこう

 世の中の大半のことは、うまくいかないことが多いものです。ちょっとしたノイズや外乱でうまくいかなくなってしまうことは多いものです。

1.最小2乗法ではなくRANSACを使おう。

 関数のあわせこみは最小2乗法が高校数学にあるように有名ですが、最小2乗法は仕事に耐えうる水準になることは私の経験上のありませんでした。
まずは、最小2乗法はノイズによる外れ値の影響を受けすぎるのです。そのため、入力データ群をプロットしたときに、外れ値と見られるものは、人が意図的に除外して、定規で線を引きなおすようなことがありました。
 自動化しようとするときには、最小2乗法はまず使えないと思うことです。その代わりに使うべき手法はRANSACです。RANSACは単にフィッティングだけではなく、ステレオ画像での対応点のマッチングとか、他にもさまざまな用途で使われています。

2.機械学習では汎化性能を重視しよう

 学習したデータに対してだけは性能がよいが、学習していないデータに対してはうまくいかないということが起こりうる。
 汎化性能があるのかどうか常に注意して機械学習の性能のテストをしてください。

自由度が高すぎるモデルよりは、自由度の低いモデルの方がよい結果を返すことがあります。

qiita 機械学習の性能を正しく評価するための検証手法

「そのモデルの精度、高過ぎませんか?」過学習・汎化性能・交差検証のはなし

3.多変量解析でも、説明変数の数を増やすぎないことがよい。

単純化して言えば「説明変数は、相関があるようなパラメータを用いてはいけないということです。」
データの分析をする際に、身長と体重とを説明変数にしてはいけないということです。身長とBMIとならば用いてよい変数になります。
 説明変数の数を増やしすぎると、説明変数に相関を含んだ組み合わせを生じてしまいます。
 多変量解析でのこのような知見は、機械学習に対するデータの前処理としても有用な知見を含んでいます。
 

4.制御の場合、外乱に受けにくい制御方式を利用しよう。

 制御には、常に外乱が入ってくることが前提だとして物事を考える必要があります。センサのチャタリング(電圧レベルが閾値レベルを切り替わる際にon/offを頻繁に短時間に繰り返す現象)対策もその1つです。
 信号線を用いている場合、信号線が断線することも考慮にしなければなりません。
センサの特性がロットごとにばらついている可能性も考慮しなくてはなりません。
 アナログ信号の場合、測定対象外のノイズが混入することを考慮しなくてはなりません。
 カメラ画像の場合に、最大限にゲインをあげて蓄積時間を増やしているときには、暗電流の性質を考慮しなくてはなりません。
 
制御を目的としている場合には、制御を失敗に導くさまざまな要因に対して考慮して、制御をうまくいくような方式の選択とパラメータの選択をします。(リモコンがうまくいくのは、そのようなことを設計者が既にしていてくれるからです。)

 制御システムに中にあるモデルは、実際の系の値とは異なっていて、大なり小なり誤差をもっています。その誤差が、系の動作に系統的なズレを生じることがあります。

引用 「制御対象とモデルの間の誤差は制御系設計に重大な問題をもたらす.前節の例ではむだ時間要素を無視することが誤差の原因となっていたが,他にもさまざまな原因により制御対象とモデルの間に誤差が生じる.このような誤差は「モデルの不確かさ」あるいは「モデル化誤差」とよばれる.」 「ロバスト制御系設計入門」 

・モデル集合に含まれるすべての伝達関数に対して閉ループ系を安定(ロバスト安定)にし,なおかつ,可能な限り高い性能を達成すること
・特にフィードバック補償器には,外乱の影響を取り除いたり,モデル化誤差の影響を小さくすることことが要求される

このような仕組みを取り入れることで、ロバストな制御が実現できる。

 フィードバックなしに、制御を安定化することはできません。
ほかにも、電気回路で安定な増幅器を実現するオペアンプの反転増幅回路が一定の増幅率が実現できる、フィードバックが含まれていることによっています。
オペアンプ回路の基本設計法

5.ノイズや外乱の影響を受けにくいシステム設計をしよう。

 ○○という方式が常にうまくいくなんて信用しないことにしよう。「○○という方式は△△というときにはうまくいかなくなる限界をもっていることは百も承知なんです。ですから、○○という方式が100%うまくいく前提でシステムを設計しないことです。でも、□□な範囲では、▽▽なことは確かだから、□□な使い方をすれば、問題は避けられるんです。」 そのように、その問題に対して詳しい人は言ったりする内容に注意を払ってください。
 「□□な範囲では、▽▽なことは確か」な範囲で十分に目的を遂げられるように上位側の設計をすることです。

ものごとには、外乱が避けられません。そのときにでもうまくいくやり方をしていきいましょう。

この記事の目的は、ロバストなアプローチをすることの必要性を述べるもので、個々の分野でどのようなアプローチをすればよいのかについては、別途、調査してください。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。