2016年07月26日
根性論:間違わなければ学べない
コンピューターのプログラムにおいて、期待されている答えと違うものを出力した場合、それは「誤り」である。
つまりプログラムにとっては「バグ」である。
たとえば、入力されたIDからデータベースに検索をかけ、目的の会員情報を引き出すというシステムで、入力されたIDとは違う会員情報を引き出してきてしまった場合、それはバグであり、システムにとって致命的な障害を起こすことになる。
コンピューターのプログラムはこんなところで間違ってはならない。
当然のことである。
ところが「絶対に間違いがあってはならない」と思われているコンピューター・プログラムの中には、間違うことが許されているものもある。
それが「機械学習」と呼ばれるものである。
つまりプログラムにとっては「バグ」である。
たとえば、入力されたIDからデータベースに検索をかけ、目的の会員情報を引き出すというシステムで、入力されたIDとは違う会員情報を引き出してきてしまった場合、それはバグであり、システムにとって致命的な障害を起こすことになる。
コンピューターのプログラムはこんなところで間違ってはならない。
当然のことである。
ところが「絶対に間違いがあってはならない」と思われているコンピューター・プログラムの中には、間違うことが許されているものもある。
それが「機械学習」と呼ばれるものである。
「機械学習」とは「学習」という言葉にあるとおり、機械で学習を行うものであるが、「学習」という言葉にあるとおり、それは「学ぶこと」である。
たとえばニューラルネットに教師信号あり学習をさせる場合。
最初に「正解」となる入力値と出力値の組み合わせを学習させる。
学習を始める前に、各ニューロン間の繋がりの初期値として、ランダムな値を与えるところから始める。
なので、学習を始める最初の段階では、ニューラルネットはデタラメな値を返す。
全く間違った値を出力するニューラルネットに対して、正解値との誤差を与えると、その誤差に応じて内部状態を「少しだけ」書き換える。
これをニューラルネットの「学習」と呼んでいる。
やがて学習を繰り返すうちに、ニューラルネットは正しい値を出力するようになる。
たとえば手書き文字の「あ」「い」「う」「え」「お」を学習させた場合、最初は「あ」と入力したのに、「い」と出力する。
学習を繰り返すうちに、だんだんと正しい出力をするようになる。
ところがまだ「あ」と「お」については時々間違える。
「あ」と「お」は形が似ているのかもしれない。
そしてさらに学習を繰り返すうちに「あ」と「お」の違いも分かるようになり、教師信号として与えた「あ」「い」「う」「え」「お」全てについて正解値を返すようになる。
ここで、教師信号にない新たな手書き文字として「あ」「い」「う」「え」「お」のいずれかを与えた場合。
汎化能力によって、教師信号に無かったものについても正しく出力する。これがニューラルネットのおもしろい点である。
ところが、教師信号にない新たな手書き文字として、「あ」なのか「お」なのかが分かりづらい文字を与えると、間違うことがある。
この場合はその新たな手書き文字も教師信号に含め、再学習をさせる。
このとき、ニューラルネットは0からスタート、すなわちランダムな値を持ったニューロンからスタートするのではなく、これまで学習した状態から続きで学習を繰り返すことになる。
これまで与えられた教師信号の「あ」「い」「う」「え」「お」について一旦は正しく答えを返せるようになったニューラルネットは、新たに加えられた文字についても正しい答えが返せるように、一旦それまでの学習を自ら壊すことがある。
つまりそれまでに獲得した概念が間違っていたので、一旦その概念を壊すことで新たな概念を作りなおそうとするのである。
そしてやがて、一度は間違った問題についても正しく答えられるようになる。
ニューラルネットが最初から正しい答えを出力できるのではなく、間違いを繰り返しながら、間違いから学んでいくというのは、人間が学習することと似ている。
初めて自転車に乗った時から転ぶことなく上手く乗れる人はまずいないだろう。
失敗を繰り返しながら、正しく乗れるように「学習」していくのである。
結論:失敗を恐れていては何も学べない。
たとえばニューラルネットに教師信号あり学習をさせる場合。
最初に「正解」となる入力値と出力値の組み合わせを学習させる。
学習を始める前に、各ニューロン間の繋がりの初期値として、ランダムな値を与えるところから始める。
なので、学習を始める最初の段階では、ニューラルネットはデタラメな値を返す。
全く間違った値を出力するニューラルネットに対して、正解値との誤差を与えると、その誤差に応じて内部状態を「少しだけ」書き換える。
これをニューラルネットの「学習」と呼んでいる。
やがて学習を繰り返すうちに、ニューラルネットは正しい値を出力するようになる。
たとえば手書き文字の「あ」「い」「う」「え」「お」を学習させた場合、最初は「あ」と入力したのに、「い」と出力する。
学習を繰り返すうちに、だんだんと正しい出力をするようになる。
ところがまだ「あ」と「お」については時々間違える。
「あ」と「お」は形が似ているのかもしれない。
そしてさらに学習を繰り返すうちに「あ」と「お」の違いも分かるようになり、教師信号として与えた「あ」「い」「う」「え」「お」全てについて正解値を返すようになる。
ここで、教師信号にない新たな手書き文字として「あ」「い」「う」「え」「お」のいずれかを与えた場合。
汎化能力によって、教師信号に無かったものについても正しく出力する。これがニューラルネットのおもしろい点である。
ところが、教師信号にない新たな手書き文字として、「あ」なのか「お」なのかが分かりづらい文字を与えると、間違うことがある。
この場合はその新たな手書き文字も教師信号に含め、再学習をさせる。
このとき、ニューラルネットは0からスタート、すなわちランダムな値を持ったニューロンからスタートするのではなく、これまで学習した状態から続きで学習を繰り返すことになる。
これまで与えられた教師信号の「あ」「い」「う」「え」「お」について一旦は正しく答えを返せるようになったニューラルネットは、新たに加えられた文字についても正しい答えが返せるように、一旦それまでの学習を自ら壊すことがある。
つまりそれまでに獲得した概念が間違っていたので、一旦その概念を壊すことで新たな概念を作りなおそうとするのである。
そしてやがて、一度は間違った問題についても正しく答えられるようになる。
ニューラルネットが最初から正しい答えを出力できるのではなく、間違いを繰り返しながら、間違いから学んでいくというのは、人間が学習することと似ている。
初めて自転車に乗った時から転ぶことなく上手く乗れる人はまずいないだろう。
失敗を繰り返しながら、正しく乗れるように「学習」していくのである。
結論:失敗を恐れていては何も学べない。
myinnerasia at 08:04│Comments(0)│コンピューター科学