Pythonで機械学習をするために必要な数学知識と勉強法
目次
機械学習とはどのようなものか
最近ではプログラミング言語としてPythonが注目されるようになり、機械学習、AI(人工知能)という言葉がよく聞かれるようになりましたが、これらの言葉を聞いて、皆さんはどのようなイメージを思い浮かべるでしょうか。
人それぞれ想像するものは違うでしょうが、一般的には「言葉を自動で翻訳してくれる」「画像を自動で識別してくれる」といったイメージをする方が多いのではないでしょうか。また一方で、「人間の仕事を奪ってしまう」といった悪いイメージを持つ方もいらっしゃるかと思います。こうした様々なイメージから、「機械学習やAI(人工知能)といったテクノロジーは、人間と同じように物事を理解している」と誤解されがちです。
しかし、機械学習の原理・理論をある程度していれば、これらの理解は間違いであることに容易に気づくことができます。実は機械学習やAI(人工知能)は、人間の言葉を理解したり人間と同様の意思を持ったりしているわけではないのです。
では、これらの機械学習プログラムは一体どのような仕組みになっているのでしょうか。ここでは一般的な原理を簡単にご説明致します。これから機械学習に挑戦しようと思っておられる方は、是非この記事を参考にしてみてください。
専門家の方から見れば、「その説明は間違っている」とご指摘を頂くこともあるかと思いますが、この記事ではあくまでも、機械学習の初心者の方向けにわかりやすく説明することを念頭に置いており、厳密な理論の理解は二の次にしておりますので、ご了承ください。
それでは説明していきます。
機械学習のプロセスは主に以下の3つです。
- 予測したいデータを数式で表現する
- 訓練データを与えて学習する
- 未知のデータから学習する
1.予測したいデータを数式で表現する
まず、機械学習やAI(人工知能)と言うのは予測したいものが必ず数式で表されています。イメージが湧きづらいのであれば、y=ax+bのような数式を想像して頂ければ良いでしょう。(もちろん実際にはもっと複雑な式になります。)
yが予想結果、xが入力データ、aとbがパラメータです。「与えられた画像データを犬か猫に分別する」といったように、入力されたデータをいくつかの結果に分類して出力するのであればyを確率で表します。また、「明日の株価を予測する」といったように入力されたデータからある値を予想するのであれば、yは確率ではなく普通の値として出力します。
ここで重要なのが、どちらもaとbの値によってyの値が決まってくるという点です。
そのため、正確に予想をするためにはaとbの値を適切な値に調節してあげる必要があります。これが機械学習やAI(人工知能)の基本的な原理となります。
2.訓練データを与えて学習する
では、どのようにパラメータを調節すれば良いのでしょうか。これを実現するのが訓練用の入力データです。この訓練用のデータを先ほどの数式に入れてあげることにより、yの値がとりあえず決まります。ただし、aとbはまだ適切な値でないので、予測結果は実際の答えとはかなり異なるでしょう。
そこで、予測結果と実際の答えの誤差を計算し、誤差が大きければaとbを大きく調整する。逆に誤差が小さければaとbを少しだけ調整するということをします。この時に用いられるのが微分です。
微分によって誤差の数式(パラメータの値によって誤差の値が決まる)の傾きを知ることで、aとbを増やすべきなのか減らすべきなのかを決めているのです。これら一連の処理を多くの訓練用データで繰り返すことで、aとbを適切な値に決定します。
3.未知のデータから予測する
aとbが適切な値に決まったら、いよいよ予測をします。予測は決定した数式に新たなデータを代入するだけなので簡単です。今の例の場合では、y=ax+bという式のxに、新たな値を代入します。こうして未知のデータに対してyを決定する、すなわち予測ができるわけですね。
ここまで機械学習の理論をざっくりと簡単にご説明しました。もちろん実際にはもっと複雑な仕組みになっていますが、基本はこのような感じです。要は最適な結果を予測するために数式のパラメータを調節しているということです。なので、機械学習というのは、決して人間の言葉の意味を理解できる魔法のようなアルゴリズムではないのです。
機械学習に必要な数学知識
1.微分
先ほども少し述べましたが、機械学習やAI(人工知能)では、誤差の関数の傾きを微分によって知る必要があります。傾きがわからなければどちらの方向にパラメータを調節していいかがわかりません。そのため、微分の知識は必須となります。また、微分が必要だということは普通の関数の知識も必要になってきます。
2.行列
先ほどはy=ax+bという簡単な数式を例にご説明しましたが、実際には入力データxやパラメータa,bの数が数千や数万になることも珍しくありません。そのため、計算量が膨大になってしまい、1つ1つを数式として表すのが非常に大変になってきます。そこで登場するのが行列です。行列を用いれば膨大な計算を一括にまとめることができます。
3.確率
「入力された手書き数字のデータを0から9のいずれかに分類する」といった例のように、予測結果をいくつかに分類する場合は、出力を確率として表現します。そのため、確率の知識も必須になってきます。
機械学習を学ぶ上で必要となる数学知識は以上のものが主になります。詳細はここでは述べませんが、ニューラルネットワークを学ぶには上記に加えて合成関数の知識も必要になってきます。
学習のためのおすすめ書籍
1. 『人工知能プログラミングのための数学がわかる本』
タイトルのとおり、人工知能を学ぶ上で最低限必要な数学知識が網羅されている書籍です。逆に、人工知能を学ぶ上ではあまり必要のない積分の知識や図形の知識などは載っておりません。高校数学をある程度真剣に学んだことがあれば、比較的スムーズに読み進められる内容になっています。AI(人工知能)の分野で有名な松尾豊さんが推薦していることもあり、良書だと言えます。
2. 『はじめてのディープラーニング』
こちらは機械学習の中でも特にディープラーニングを学習したい方におすすめの書籍です。
ディープラーニングに必要な数学の知識やディープラーニングの理論について初心者の方にも非常にわかりやすく書かれています。
3.『やさしく学ぶ 機械学習を理解するための数学のきほん』
機械学習に用いられる数学の入門におすすめの一冊です。対話形式で解説が書かれているため非常に理解がしやすく、わからなくなることがほぼありません。また、実際の機械学習アルゴリズムに沿って数学を学んでいくため、生きた知識が身につきます。
学習のためのおすすめオンラインサービス
1. Udemy
Udemyはサイト内で自分の好きな学習用動画を購入することができ、いつでも自由に見られるサービスです。動画が単元ごとに区切られており、1つの動画を3〜5分程度で見られます。そのため、スキマ時間を有効に使えて学習が継続しやすいです。また、わからない点は講師にメールで質問できる点も便利です。
2. Aidemy
AidemyはAI(人工知能)に特化したオンライン型のプログラミング学習サービスです。AI(人工知能)を学んだことがない方でも安心して学習することができます。月額プランに入会、あるいはコースを単品で購入して講座を受けられます。わからない点はチャットやテレビ電話で質問できます。
3. PyQ
PyQは完全オンラインのプログラミング学習サービスです。 Pythonを使って初心者から機械学習や数学の知識などを学ぶことができます。数学は、行列、微分、確率などを学ぶことができます。内容は大学初等レベルまでを含んでいます。他のサービスに比べて価格が安くいのも特徴です。
機械学習エンジニアの将来性
ここまで様々な学習方法をご紹介してきましたが、機械学習の分野の将来性を心配されている方も多いはずです。「機械学習はこれからみんなが勉強し出すから結局価値のあるスキルにはならないのではないか」などと考えておられる方もいらっしゃるのではないでしょうか。
しかし、そのようなことにはならないでしょう。なぜなら、機械学習というのはこれまでに述べたように高度な数学の知識が必要であり、誰もが簡単に習得できるスキルではないからです。機械学習を使いこなせる人材が、今後の機械学習ニーズを上回るペースで増えてくる可能性は非常に低いでしょう。
世の中の多くの人は数学と聞いただけで拒絶してしまいます。この記事をご覧の皆さんは、プログラミングや数学に興味がある方々が多いと思いますので、ちゃんと勉強さえすれば習得できる可能性が高いのです。
まとめ
これから様々なものがAI(人工知能)によって自動化されていくため、機械学習は今後も益々必要とされる分野です。学習のハードルが高いので誰もが簡単になれる職業ではありませんが、それだけに学習する価値は高いと言えます。
一度習得できてしまえば、貴重なスキルを持った高給エンジニアになるのも夢ではありません。是非この記事の内容を活用し、機械学習に挑戦してみてください!