バックプロパゲーション(4)
「バックプロパゲーション(3)」で書いた
- 1)1つのパターンについてのみの誤差を用いていて本当に学習が収束するか?
については、肯定的な記述が「第16回 最適化のための勾配法:機械学習 はじめよう:中谷秀洋氏著」にありました。
そのような勾配法ですが,機械学習の問題にいざ使おうとすると計算が結構大変なことがわかります。
というのも,機械学習の目的関数のほとんどは次のような形をしています。
fwはモデルによって一つの点に対する誤差であったり,確率の関数(負の対数尤度)であったりしますが,「各点ごとの値をデータ点の分だけ和をとる」という大枠は共通です。
これを勾配法で解くためにwでの微分を求めても,やはり「データ点の分だけ和をとる」形になっています。
勾配法でパラメータを更新するには,を毎回求めるわけですが,データ点が多いとその個数だけを計算しなくてはいけません。データは10個とか100個ではなく,10,000個,100万個とあったりしますから,とても大変です。
なにかいい方法はないものでしょうか。nで和をとるのが大変なのだから,上の式から単純にΣがなくなったら,次のように簡単になりそうです。
これならデータ点がいくらたくさんあっても一回の計算は超簡単でとてもハッピー……いやいやさすがに,これはまずいでしょう。本当にただΣを取っただけではないですか。残ったnもどうしろというのでしょう。まさかランダムに選ぶとか,いくらなんでもそんなひどい話はあり得ませんよね……?
ところが実はそんなひどい話がまかり通っていまして,一見うまくいくようにはとても見えないこの式が「正しい勾配法」よりもうまくいく場合も珍しくなく,もちろん計算はものすごく速い,というのですから本当に困ってしまいます。
というわけで名前も付いていて,「確率的勾配降下法」と呼びます。一方,Σが残っている「一番素直な勾配法」は「最急降下法」と呼びます。
nはやはりすべての値をぐるっと一周するのですが,順番は本当にランダムで,むしろその方がいいことが知られています。名前に「確率的」とついているのは,実行する度に結果が変わることを表しています。
つまりこのような手法は「確率的勾配降下法」というそうです。ただ残念ながらこの記事にはなぜ確率的勾配降下法が「うまくいく場合も珍しくな」いのかの説明がありません。そこでネットで確率的勾配降下法について少し調べたのですが、ニューラルネットというよりかは機械学習のほうに向かっているようなので、まだ深追いせず、その前にバックプロパゲーションが3層以上のニューラルネットワークにも適用出来ることを示しておきたいと思います。