機械学習の勉強をするうえで数学の勉強は避けては通れません。
本当に覚える意味あるの?
このようなこれが聞こえてきそうですね。
最近は便利なライブラリもたくさんあるし、それらを活用していけば数学の知識なんて必要ないのではないか…、とお思いの皆さんに数学の必要性や学ぶメリット、必要な知識などをお伝えしていきます。
そもそも機械学習で数学がなぜ必要なの?
まず機械学習とは何かということを説明します。私たち人間は様々な経験を通して様々なことを学んでいきますよね。学ぶことをここでは「学習」と呼びます。この学習をコンピュータで再現しようとすることこそが機械学習です。
機械学習では、私たちで言う経験が「データ」です。データを通して何回も学習してパターンや特徴を見つけ出すことで、未知のデータに対しても予測することができるようになるのです。では機械学習ではどのように学習するのでしょうか。この学習をするために数学が登場します。
一例として関数が挙げられます。機械学習では得られたデータをもとに関数を作成しています。データを通して何回も学習した結果見つけたパターンや特徴を関数で表すのです。
機械学習において数学を学ぶメリットは大いにあります。以下、数学を学ぶメリットや数学のどの分野が必要なのかについて見ていきましょう。
機械学習で数学を学ぶメリットは?
機械学習において、数学を学ぶメリットは以下の通りです。
- 機械学習への理解が深まる
- 他人との差別化を図れる
- 論文を読めるようになる
- ライブラリを活用できるようになる
- 機械学習を使いこなせる
それぞれ詳しく見ていきましょう。
機械学習への理解が深まる
これが最も重要な理由でしょう。というのも、理解が深まるというのはただ単に機械学習とは何なのかについて理解が深まるということではなく、機械学習が導き出した結果やエラーについて理解が深まるということです。
例えば機械学習を使用した結果何らかのエラーが出てしまったとき、なぜそのような結果が出たのか分からなければその時点でお手上げですよね。また結果が出たとしても、その結果が最適解だとは限りません。
それを理解せずそのまま業務を進めたりしてしまったり…なんてことも起こり得てしまいます。このような事態を防ぐためにも、数学を学ぶべきなのです。
他人との差別化を図れる
なぜ差別化を図れるのかと言うと、機械学習が導き出した結果やエラーについて他人に説明できるようになるからです。それも論理的にわかりやすくです。
まず、数学を学ぶことで論理的思考力が備わります。数学の答えを導き出すにはひとつずつ論理を組み立てていく必要があります。それを間違えてしまえば、間違った解答が導き出されてしまいます。
数学を学び正しい答えを出していくうちに、論理的思考力が備わっていくでしょう。そしてそれが、他人との差別化を図る糧となるでしょう。
論文を読めるようになる
機械学習の分野は半年も経つと古いと言われるほど流れが早いです。また新しい手法が発表されたとして、それを誰かが実用化させてくれるのを待っているようではビジネスの競争に勝てません。論文を読み、最新の情報を取り入れ続けることが望ましいでしょう。
論文を読むといってもすべて日本語だとは限りません。むしろ英語の論文のほうが多いかもしれません。そんな時数学の知識があれば、英語の文章は完全には理解できなくとも論文中で説明されている数式は理解できるのではないでしょうか。新たな手法を理解できれば、自ら実装することも可能になりますね。
ライブラリを活用できるようになる
えっ、数学知らなくてもライブラリは使えるよ!と、考える方も多いでしょう。ではそのライブラリはどのような手法で動いているでしょうか。そう、数学です。ライブラリによるインプットもアウトプットも数学的裏付けによって決まります。
そのため数学を理解していなければ、ライブラリが出した結果についても正しいのかどうか判断できないのです。
また数多くあるライブラリですが、数学の知識があればどのような文脈で使用するのが最も適しているかについても判断することができます。とても便利なライブラリですが、使いこなそうと思えば結局数学の知識が必要になってくるということです。
機械学習を使いこなせる
機械学習モデルを作成できても、それで終わりではありません。そのモデルが最適解を出すためにパラメータを順に調べ調整することが必要です。このパラメータも数学を基にしているので、数学の知識があればパラメータをいかに調整すればよいか正しく判断できるようになります。
また、機械学習を発展させた深層学習(ディープラーニング)では多次元配列を多く扱うことになります。多次元なのでどの次元で和を求めるのか混乱しがちですが、それも回避できます。
このように数学は機械学習に大いに関わってくるので、その数学を使いこなせれば機械学習も使いこなせるということになります。
機械学習で数学を覚えたほうがいいの?
結論から申し上げますと、機械学習の数学的根拠は理解できるようにしておくのが望ましいでしょう。
数学を学ぶメリットでもお話しましたが、機械学習を実践したとき、全てがうまくいくとは限りません。何らかのエラーが出てしまうこともあるでしょう。そんな時、何が原因なのか把握する必要がありますよね。そのためにはその機械学習を用いたときになぜ学習できるのかを理解しておく必要があります。
また、場合によってはソースコードを書くことすらままならないかもしれません。なぜなら、複雑なアルゴリズムになるとアルゴリズム自体に数学が応用されるからです。
以上のことより、機械学習を活用したいのであれば、数学を学ぶだけでなく身につけておくことが求められるでしょう。
機械学習に必要な数学知識は?
必要な数学 | 説明 | 難易度 |
微分 | 関数の傾きを求められる。最大値や最小値も求めることができる。 | 高校レベル |
積分 | 曲線(曲面)と座標軸に挟まれた面積(体積)を求めることができる。 | 高校レベル |
線形代数 | 大量のデータを扱う式をひとつにまとめる。 | 大学レベル |
統計 | 大量のデータを通して何回も学習してパターンや特徴を見つけ出す。 | 大学レベル |
確率 | 予測と実際のデータの差(誤差)を見る。 | 高校レベル |
最小二乗法 | 過去のデータから関数を求め、その関数から数値を予測する。 | 専門レベル |
勾配降下法 | 最適化の方法として最も基本的で多くのアルゴリズムに利用できる。 | 専門レベル |
ラグランジュの未定乗数法 | 最適化を行うための手法のひとつ。 | 専門レベル |
上の表は、機械学習に必要な数学の知識を一覧でまとめたものです。もっと詳しく見てみましょう。
微分・積分
簡単に言えば、微分は傾き、積分は面積を表します。
まず微分とは、ある部分でのごくわずかな変化を表すことができるものです。このごくわずかな変化が傾きです。またある関数の最大値や最小値を求める手法でもあります。それに対し積分では、曲線(曲面)と座標軸に挟まれた面積(体積)を求めることができます。
機械学習では、機械学習による予測値と正解との間の誤差を限りなく0に近くしたいときなどに微分・積分が使われます。
線形代数
線形代数という学問は本来はとても広い分野を表すのですが、その分野の中にベクトルや行列が含まれます。行列ではたくさんの数字を、つまりデータを扱うことができます。
機械学習では、学習させるための大量のデータが必要となります。それをひとつずつ計算していてはきりがないですよね。この時、それぞれのデータを扱う式をひとつにまとめるために線形代数を用いるのです。
統計・確率
機械学習では大量のデータを通して何回も学習してパターンや特徴を見つけ出しますが、このパターンや特徴を見つけ出す部分で統計が使われます。そしてそのパターンや特徴から未知のデータに対しても予測できるようにします。
ただ、完璧には予測できないですよね。データはある一定の確率で予測からずれるからです。そのずれを表すものが確率分布です。このように、一例に過ぎませんが、予測と実際のデータの差を見るときに確率が使われます。
最小二乗法
最小二乗法とは、誤差が含まれるデータを測定するとき、誤差の二乗の和を最小にすることで最も正確だと思われる関係式を求める方法です。なぜ二乗にするのかと言うと、誤差には正負があるからです。
経済学者の小林慶一郎氏が、ディープラーニングは最小二乗法である、といった趣旨の発言を経済新聞のコラムでし、物議を醸したことがありました。その真偽は分かりませんが、この言葉からも学習と最小二乗法の密接な関係が伺えます。過去のデータから関数を求め、その関数から数値を予測することが最小二乗法の役目です。
勾配降下法
機械学習ではモデルが最適解を出すためにパラメータ調整が必要だと述べました。このパラメータ調整を最適化と言うのですが、その最適化の方法として最も基本的で多くのアルゴリズムに利用できるのが勾配降下法です。
最適化するには誤差を限りなく0に近づけたいですよね。誤差は誤差関数を用いて表されるのですが、関数という坂道(勾配)を0に近い下の方へ向かって降下していく、これが勾配降下法です。
ラグランジュの未定乗数法
こちらも最適化を行うための手法です。繰り返しますが、最適化するには誤差を限りなく0に近づけたいです。
そのために今度は、いくつかの変数に対して複数ある関数の値を固定するという条件のもとで、別の関数の極値を求めます。極値とは、正から負に変わるときの値(極大値)と負から正に変わるときの値(極小値)をまとめた言葉です。どちらも0に近いですよね。
つまり極値を求めることは最適化に繋がるのです。
機械学習にはどのくらいの数学能力が必要?
結論として、大学2年生までに習う数学が必要となるでしょう。具体的に言うと、
- 「微積分」
- 「線形代数」
- 「統計・確率」
こちらの数学スキルです。
先ほどから何回も登場している最適化を自分で施したい、または機械学習のエンジニアを目指しているのであれば、上記の3つに加え「最小二乗法」、「勾配降下法」など関連する数学知識も求められます。
結局は機械学習をどのように活用したいのかが重要かもしれません。機械学習をツールとして活用したいのか、自分で構築して説明もできるようになりたいのか、この2つの例では数学の必要度・学ぶべき範囲がかなり異なると思います。
自分が機械学習を用いて何をしたいのか、どうなりたいのか、そしてそれには数学のどの分野が関わってくるのかを見極めることも大切でしょう。もちろん、勉強して損することはありません。
機械学習の数学を学習するコツ
初心者はとにかく手を動かす
数学は、特に数式がたくさん並んでいたりなんかすると、見てるだけではなかなか理解しにくいですよね。実際に数式を書いて、計算式の仕組みを理解しつつ解いてみることで、見るだけでは意味も分からなかった数学の理論も理解できるようになるのではないでしょうか。
またプログラミングも同様です。先ほど手計算したのを今度はプログラムで書いてみましょう。はじめはエラーが出てくるかもしれません。どこが間違っているか探すのも勉強になりますし、実行できれば数式とプログラムと同時並行で理解できます。
ちなみに、筆者はこの手計算後プログラミング手法で勉強していますが、その時実行できても数日経つと忘れてしまうことが多いので、繰り返し手を動かすことをおすすめします。
必要に応じて学ぶ
「機械学習にはどのくらいの数学能力が必要?」にもありましたが、自分がどこを目指すかによって数学の必要度・学ぶべき範囲が異なります。
「機械学習の基礎として微積分や線形代数を勉強した→機械学習の実装はできるだろうけど、最適化のために数学の勉強をしようかな」という流れは、ある意味遠回りかもしれません。その時点の知識で機械学習を用いて問題解決できるのならば、それ以上の知識は必ずしも必要とは言えないでしょう。
そして忘れてならないのは、数学ができるようになりたいのではなく、機械学習ができるようになりたいということです。機械学習のベースは数学ですが、数学はあくまでツールです。数学は完璧だけれども実装は全くできないなんて人は、残念ながら社会では通用しません。