分12前回,分類問題のもっとも簡単なモデルの1つであるパーセプトロンを紹介しました。今回はそのパーセプトロンの解き方のヒミツを見ていくのですが,その前に機械学習の一般的なお話から入っていきます。最適化ここまでの連載の中で「学習」と呼んできたものの正体は,なにがしかの仮定から導き出した誤差関数を最小に,あるいは尤度関数や事後分布を最大にするパラメータを求めることでした。最大化は,関数全体の符号を反転させれば最小化と同じことになりますから,関数を最小化する点を見つけるための一般的な方法があればとても便利そうです。その「関数の最小点を見つける」ことをこの分野では「最適化」と呼びます。最適化を行う対象となる関数は「目的関数」と呼びます。プログラマが「最適化」という言葉を聞くと,プログラムの実行を高速に,あるいはサイズが最小になるようにコードを書き換える操作(あるいはコンパイラが実行バイナリに対してその操作を行うこと)を一番に思い浮かべるでしょうから,混同しないよう注意しないといけませんね。機械学習と一口にいっても様々なアプローチがあるのですが,誤差関数/尤度関数/事後分布などの目的関数の最適化問題に落とし込むのは代表的なものの一つと言えるでしょう。線形回帰の目的関数はとても扱いやすい形をしていたので,行列計算一発で最小点を求めることができました。このように簡単に解けるのはむしろ例外。パーセプトロンの誤差関数は,前回確認したようにカクカクと折れ曲がった少し面倒な関数なので,そんなに簡単ではありません。いう場合にも最小点を求めるにはどうすればよいでしょう。勾配法わかりやすさのために,次の図のような1次元空間上の関数f(x)で考えてみましょう。f(x)の最小点はグラフから明らかにx=x*です。グラフを描くことができれば,最小点は容易に見つけられます。グラフが描けるとは,空間上のおおむねすべての点で関数の値を評価できるということです。それは1次元や2次元のよく知っている関数であれば可能ですが,次元が上がるほど,関数が複雑になるほど難しくなります。機械学習や自然言語処理の問題では数百次元,数万次元の空間上の関数を扱うことも珍しくなく,グラフを描くというのは事実上不可能です。そこで,「⁠グラフ全体を見れば明らか」は禁止した状態で,どうすればこの関数の最小点を求めることができるでしょう。思い切って適当な1点を選んでみて,それが最小点であることを期待するという賭けでもしてみましょうか。えいやと選んだ点はx=x0。最小点ではありませんでした......。いやいや,ちょっと待ってください。やってx=x0が「最小点ではない」ことがわかったのでしょう。さきほど釘を刺したとおり,「⁠グラフ全体を見れば明らか」は禁止です。そこでx=x0の周りをちょっとだけ見てみます(グラフ全体は見ていないので大丈夫!⁠)⁠。すると,その左側はx=x0のところより下がっている,つまりより小さい値があります。よってx=x0は最小点ではないことが,グラフ全体を見なくても示せました。嬉しいことに,x=x0より少し左の点では,値はより小さくなるということもわかります。注目点を少し左のx=x1に移して,そこで同じように検討し,またもう少し左のx=x2に......,ということを繰り返していくと,そのうち本当の最小点x=x*にたどり着いてくれそうな気もします。詰めの甘いところが2つあります。,「⁠点の周りをちょっとだけ見る」と言いましたが,「⁠ちょっと」というのはどれくらい見ればいいでしょう。それから「少し左に移す」と言いましたが,その「少し」とはどれくらいなのでしょう。移動幅が小さいとゴールにたどり着くのに時間がかかりすぎ,大きいと肝心の最小点を飛び越してしまいそうです。「ちょっとだけ周りを見たい」のは,注目している点の左が小さいのか,右が小さいのかを知りたかったわけです。それならその点での傾き,つまり微分を求めればわかりそうです。傾きが正なら左が,負なら右が小さい値,というわけです。上のグラフでの点x=x0と点x=x1を見比べると,どちらも傾きは正ですが,傾きが大きいほど局所解までの距離が遠い傾向があります。このようになるわけではありませんが,比較的多くの関数が満たす傾向と考えることにします。そこで傾きに比例した距離だけ動かしてみるという手が考えられます。その比例係数をη>0と書くことにすると,次のように記述できます。これで傾きが正なら左に,傾きが負なら右に移動した新しい点xi+1が得られるわけです。このηは「学習率」と呼ばれるのですが,「⁠ηっていくつ?」という話は次回の実践編に譲ります。今は0.1や0.01などの適当な小さめの値を想像しておいてください。この方法なら,最小点に近づくほど傾きが小さくなることが期待できるので,最小点を飛び越してしまう心配も少なくてすみます。この操作を続けていき,最終的に点があまり動かなくなったら「収束した」と言って,その点を求めた最小点とするわけです。ここまで1次元の関数の例で説明しましたが,多次元の関数の場合は各変数による偏微分を並べた「勾配」が傾きに相当します。勾配の方向への移動は次の式で与えられます。空間が多次元ですから傾きもその次元分のベクトルとなり,最小点候補の移動もベクトル(x,y,z)に対する勾配ベクトルの引き算になるわけですね。いったアプローチで最小点を求めようとする手法を総称して「勾配法」と呼びます。「むむむ,なんだかずいぶん楽観的な方法だなあ。そんなので本当にうまくいくの?」と思われるかもしれません。それが自然な反応でしょう。実際,様々なケースで都合の悪いことがおきます。次の図の(1)のグラフで,出発点をx0の場所に取った場合はおそらくx'を解として求めてしまうでしょうが,これは最小点ではありません。いった「そこだけみれば最小に見えるけれども,全体の中では最小ではない」点は局所解と呼ばれます。初期値をx1の場所に取れれば正しい最小点x*にたどり着く可能性は高くなるでしょうが,そのためにはどこに最小値があるのかわかってなければならず,堂々巡りです。図の(2)のようなグラフでは傾きが0になるx'の点で動かなくなってしまう可能性がありますし,図の(3)のように折れ曲がったグラフでは,いつまでたっても最小点を飛び越え続けて収束してくれないということも考えられます。他にも,傾きの小さい状態が延々続くような関数もなかなかゴールにたどり着けないので苦手です。(3)は要するに微分不可能な点で,最近は様々な対策ができつつあります。(2)は比較的レアケースなので,気にしなくてもよい(ことにする)方が多いです。(1)は非常に多くのケース(凸関数と呼ばれる関数を除く)で直面する問題であり,しかも完全な対策はありません。このようにさまざまな難点を抱えつつも,勾配法は非常によく使われます。その背景には,解の空間があまりにも高次元すぎ,真の最小解を求めるのは大変高コストで,現実的に不可能と言っていいレベルであることが最初からわかっているという事情があります。連載の中でも何度か述べたとおり,機械学習ではとにかく「計算できることが正義」ですので,手の届かない真の解を追い求めるよりは,局所解である可能性が高くても,割り切って使うことを良しとするのです。良い解を得るための努力をしていないわけではなく,勾配法の改良に限らずさまざまなアプローチがありますので,興味のある方は最適化法の教科書をご覧ください。iVocaをサービス提供している。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。