派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】数理最適化を理解して、機械学習の中身を知ろう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年12月5日のイベントでは「機械学習の中身を理解する」と題して、書籍『機械学習のエッセンス』の著者である加藤公一さんを講師にお迎えし、機械学習アルゴリズムの仕組みを理解するために必要な知識について解説していただきました。機械学習の仕組みを理解する上で、どんな知識が必要か、読み進めるうちにわかってくるでしょう。

■今回のイベントのポイント
・数学はデータサイエンティストの必須知識?
・機械学習に必要な数学
・数理最適化の基本
・機械学習のアルゴリズム

【講師プロフィール】
加藤 公一さん
シルバーエッグ・テクノロジー株式会社チーフサイエンティスト。レコメンデーション(自動推薦)システムに関する研究開発に従事。特に機械学習アルゴリズムの設計・実装を得意としている。博士(情報理工学)。著書に『機械学習のエッセンス』(ソフトバンククリエイティブ)など。

数学はデータサイエンティストの必須知識?

冒頭で、加藤さんは書籍『機械学習のエッセンス』の執筆裏話や、込められた思いなどを話してくれました。

機械学習を根本から理解するには、数学の知識が求められます。しかし最近は、機械学習をプログラムに取り入れる場合でも、手軽に利用できるライブラリが用意されているため、イチから自分で作らないことがほとんど。加藤さんの書籍は、そうしたライブラリに頼ることなく、きちんと中身を理解した上で、それを実装して中身を理解していこうという試みだそうです。

近年では「大人の数学勉強やり直しブーム」などもあり、同書も、数理最適化から機械学習へのアプローチを解説した内容になっています。ただ、「データサイエンティストは数学の必須知識か?」という問いに対して加藤さんは「多分NO!」であると答えます。

「データサイエンティストは全員、数学ができるかというと、そうでもありません。しかし、数学ができることは他のデータサイエンティストとの差別化につながります」というのが加藤さんの考え。複数の選択肢の中で「面白いと思うこと」を優先してやるのはよいキャリアアップ戦略になるとのことです。

機械学習に必要な数学

今回紹介する「数理最適化」とは、与えられた制約の中で、関数を最小化(または最大化)すること。機械学習のアルゴリズムは、数理最適化に帰着することが多いということで、数理最適化について知っておくと、根本理解が進みます。

そして数理最適化を理解するには、「線形代数」と「微積分」という高等数学の知識が必要になります。これらは高校で習う数IIBや数IIIC、あるいは大学の授業で学ぶ数学の領域です。「よし、機械学習を勉強するぞ!」と思い立ったものの、数式を見て撃沈する人も多いのが現状です。

実際に今回も、高度な数式が多数登場しました。すべてを理解することは難しくても「身近なライブラリの中身が、そうした考え方で作られている」ということが分かれば、機械学習への向き合い方も変わってきそうです。

数理最適化の基本

まずは行列とベクトルから。今回はSVM(サポートベクタマシン)で使われる「距離の公式」に絞って紹介してくれました。サポートベクタマシンとは、機械学習における「教師あり学習」を用いるパターン認識モデルのことです。

距離の公式を知る前に、まずはベクトルの内積について解説してくれました。

f:id:itstaffing:20190116144730j:plain
▲ベクトルの内積について。ベクトルaとベクトルbの内積が0になるときベクトルaとベクトルbは垂直の関係にある

これを平面に展開すると次のように考えられます。

f:id:itstaffing:20190116144733j:plain
▲平面の方程式。法線ベクトルとの内積がゼロの場合、xは平面上にある

これらを踏まえた距離の公式が次のようなものだそうです。

f:id:itstaffing:20190116144737j:plain
▲距離は、どれだけ離れているかを表すため、絶対値やノルムで表す

距離の公式を理解するためにベクトルや行列の知識が必要だったように、「勾配降下法」そして「ラグランジュ未定乗数法」を理解するために、微分や偏微分の知識が必要となります。イベントでは微分や偏微分についても、基礎を解説してくれたのですが、ここでは割愛します。

f:id:itstaffing:20190116144740j:plain
▲勾配は∇fは、n個の変数で偏微分し並べたものであり、幾何学的にはこのような性質を持つ

勾配降下法では、-∇fの方向に少し進むと関数の値が小さくなるだろうという考え方で、ひたすら勾配方向に進むことを繰り返して極値を求めていきます。

f:id:itstaffing:20190116144743j:plain
▲たとえば、図中の等高線のうち一つの輪がf=10のときの点の集まり、その内側がf=9のときの点の集まりとすれば、勾配降下法により関数の値を最小化させていくことで谷底(極値)にたどりつく(かもしれない)

ディープラーニングは、まさに勾配降下法のようなイメージで、たとえば犬と猫を判別するのであれば、繰り返しの学習により、判別誤差を小さくすることで、精度を上げていくのだそうです。

もう一つ、ラグランジュ未定乗数法は、いくつかの変数に対して、いくつかの関数の値を固定するという束縛条件のもとで、別のある1つの関数の極値を求めるための方法です。

f:id:itstaffing:20190116144746j:plain
▲KKT条件(カルーシュ・クーン・タッカー条件)を用いた解法では、不等式制約も扱える

具体的な解を導く手順は次のようになります。

f:id:itstaffing:20190116144749j:plain
▲ラグランジュ未定乗数法で不等式成約を扱う際の考え方

そして、いよいよサポートベクタマシン(SVM)の数学的な解説へ進みます。

f:id:itstaffing:20190116144753j:plain
▲サンプルは単純に直線で分けられるものとして、与えられた2種類の点列(赤と青)を分類したいというケースについて考える

入力データが予想と合っていれば1(正)、間違っていれば-1(負)のラベルを付与し、分類するための直線から点の距離が一番大きくなるように、先ほどの距離の公式を用いると、次のような式が成り立ちます。

f:id:itstaffing:20190116144756j:plain
▲ωは何倍しても正解になるので最終的な式をシンプルにすることができる

これをラグランジュ未定乗数法のラグランジュ関数に当てはめると次のようになります。

f:id:itstaffing:20190116144801j:plain
▲ラグランジュ関数に当てはめた結果の式はこうなる

そして、∇L=0を計算した結果を元の式に当てはめると、次のような式になり、これを解いていきます。

f:id:itstaffing:20190116144806j:plain
▲最終的な式。プログラムへの具体的な実装は書籍を参照して欲しいとのこと

アルゴリズムとしては、目的関数の改善に寄与する「よい」i,jを選択しながら、a_i,a_jを更新していきます。

最後に、加藤さんから
「線形代数はちゃんとした教科書で学んだほうがよい」
「教科書を通読する必要はなく、必要に応じて読み直すのがよい」
「コンピュータを使わずに計算するのも訓練として必要」
といくつかアドバイスがありました。

今回のイベントは、これまでと違い、数式が次々と登場するもので、まるで大学の講義のような雰囲気でした。勾配降下法やラグランジュ未定乗数法など、統計学や流体力学などを専門に学んだ人にしか馴染みのなさそうな知識も登場し、限られた時間の中では、すべて理解するのは難しいです。しかし、機械学習が内部でどのようなことをしているのか、その一端に触れられたことで、興味が湧いたり、改めて数学の学習意欲が出たという参加者が多かったです。レポートを読まれている皆さんも、ぜひこれを皮切りに、機械学習の仕組みへの理解を深めてみてはいかがでしょうか。