投稿日:2019年4月1日
機械学習の概念の用語を学ぶ|機械学習基礎
最近になってみて、さすがに機械学習とか深層学習とかそのあたりの知識が足りなさすぎるのでさわりだけ学んでみました。実際にお客様からAIに関する領域を求められることは現状まだありませんが、10年先の技術として少しずつ学んでいきたいと考えています。その学習成果をこちらに書いてみたいと思います。
AIとか機械学習とか、その位置付け
AI(人口知能)とか機械学習(マシーンラーニング)とか深層学習(ディープラーニング)とかいろいろな言葉があるのですが、それぞれの関係について簡単に整理してみたいと思います。階層構造的には次の関係になります。
AI(人口知能) > 機械学習(マシーンラーニング) > ニューラルネットワーク > 深層学習(ディープラーニング)
用語の意味
AI(人口知能)
まるで知能があるような動きをするアプリケーションシステムなどの総称とするのが概ねの世間の理解のようです。AI(人口知能)という言葉は非常に曖昧な要素を持っていて、時と場合によっては様々な意味で使われることが多いようですね。Wikipedia( https://bit.ly/2cMS97a )には以下のようにあります。
人工知能(、英: artificial intelligence、AI)とは、「『計算(computation)』という概念と『コンピュータ(computer)』という道具を用いて『知能』を研究する計算機科学(computer science)の一分野」を指す語。「言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術」、または、「計算機(コンピュータ)による知的な情報処理システムの設計や実現に関する研究分野」ともされる。
機械学習(マシーンラーニング)
学習用のデータによって特定の法則を導き出し、判断を行うためのアルゴリズムのことを指すようです。このアルゴリズムのことをモデルと言い、モデルには様々な種類があります。Wikipedia( https://bit.ly/2sYVF5C )には以下の説明があります。
英: machine learning)とは、人間が持つ学習にあたる仕組みを機械(特にコンピュータ)で実現する技術・手法の総称である。
ニューラルネットワーク
ニューラルネットワークとは機械学習のモデルの一つです。Wikipedia( https://bit.ly/2d53z3R )には以下のようにあります。
ニューラルネットワーク(神経網、英: neural network、略称: NN)は、脳機能に見られるいくつかの特性に類似した数理的モデルである。「マカロックとピッツの形式ニューロン」など研究の源流としては地球生物の神経系の探求であるが、その当初から、それが実際に生物の神経系のシミュレーションであるか否かについては議論があるため人工ニューラルネットワーク(artificial neural network、ANN)などと呼ばれることもある。また生物学と相互の進展により、相違点なども研究されている。
深層学習(ディープラーニング)
ニューラルネットワークの中でも信号の伝達を多層に重ねていったもののことを深層学習(ディープラーニング)と呼びます。Wikipedia( https://bit.ly/1mbhh8r )には以下のようにあります。
ディープラーニングまたは深層学習(しんそうがくしゅう、英: deep learning)とは、(狭義には4層以上の)多層のニューラルネットワーク(ディープニューラルネットワーク、英: deep neural network; DNN)による機械学習手法である。深層学習登場以前、4層以上の深層ニューラルネットは、局所最適解や勾配消失などの技術的な問題によって十分学習させられず、性能も芳しくなかった。しかし、近年、ヒントンらによる多層ニューラルネットワークの学習の研究や、学習に必要な計算機の能力向上、および、Webの発達による訓練データ調達の容易化によって、十分学習させられるようになった。その結果、音声・画像・自然言語を対象とする問題に対し、他の手法を圧倒する高い性能を示し、2010年代に普及した。
どうやって学習するのか(機械学習の基礎の基礎)
「データのまとまりに対して一定の関数を実行し、その結果が正しいかどうかをそれぞれ判断することによって関数を調整していくことが機械学習である」と書けばイメージがわくでしょうか。関数というのは以下の数式のことですね。
y = f(x)
モデル毎に上記の f の部分に個別の関数があてはめられyの結果が正しいかどうかを判断していくことによって学習を進めていきます。
ニューラルネットワークの基礎「パーセプトロン(Perceptron)」
パーセプトロンとは古くからある2クラスの線形識別関数を求める方法で、現在のニューラルネットワークや深層学習の基礎となっている考え方と言われています。このパーセプトロンを数式で表すと以下のようになります。
パーセプトロンの数式
w0 * x0+ w1 * x1 + b = 0
と数式を書くと最初は難しいかもしれませんが、各変数の意味は次のようになっています。
変数の意味 | 変数 |
重み | w |
バイアス | b |
識別の境界線を求める
パーセプトロンは上記の数式に対してx0とx1に対してそれぞれ数値を代入すると点が定まります。これをデータの集合に対して個別に計算を行って多数の点を求めて、各点が2クラスのうちどちらのクラスの所属しているかどうかを判断するためのものということが出来そうです。
例えば以下のようなケースを積み重ねていきます。
入力1:x0 | 入力2:x1 | 出力:y |
1 | 1 | A |
2 | 2 | B |
1 | 2 | A |
2 | 1 | B |
これらの点を2次元のチャートにプロットすることによって、クラスAとクラスBの境界線を引くことができるようになります。
パーセプトロンとニューラルネットワークの違い
これによって求めることができるのはあくまでも非常にシンプルな直線でしかありません。直線のことを線形と言います。世の中の様々なものをモデル化していくにあたって線形の表現だけでは表現しきれないものが多いため、学習を重ねることによって違った直線を組み合わせて非線形(矩形や曲線など)の線を境界線として描くための領域がニューラルネットワークとなります。
活性化関数によってパーセプトロンからディープラーニングへ
パーセプトロンに活性化関数(Activation Function)を付与して、非線形のデータを連続入出力できるようにすることによってディープラーニングを実現するということです。学習用データの入力を行っていくときに、これまでに学習させたことのない新たなデータを学習させる場合も多いと思いますが、この未知のデータを学習する場合の精度(性能)のことを汎化性能と言います。
学習を行うためのネットワークを増やしすぎると学習が複雑になりすぎて、汎化性能は高マりすぎるといったことが起きます。汎化性能が高まりすぎると現実には起こりえない点がプロットされてしまう可能性があり、本来存在しえない境界線が引かれることもあるようです。この状態を過学習と言い、過学習にならないようなネットワークの構成を考えていく必要があります。
このあたりの領域までくると私も実際にコード書いて動かしたことがないので、まだあまりイメージがわいていません。
まとめ
AIと言ってもざっくりしすぎていて何を表すのかはAIという用語を構成する要素を見ていかないと一概にはこれを決めることはできません。AIの領域のうち、ニューラルネットワークや深層学習をはじめとした機械学習について今回は少しだけ学んでみました。
これからは「AIの時代だ」なんていう言葉もよく聞かれるようになってきましたが、これらを現実に応用できるのはAmazonやGoogleなどの超大企業だけなのではないかということで中小企業様向けにローカライズして応用する方法はまだまだ思いつきませんが、予算的にも中小企業様が手を出すことができるようなものを企画できるのであれば、ぜひともチャレンジしてみたいという気持ちはなくなりませんね。
この他にも機械学習における「推論と学習」といった概念など、もう少し詳しく見ていくと様々な概念があるのですが、それらについてはまた別の機会に書いてみたいと思います。ではでは。
参考書籍のご紹介
Google Cloud Platform による機械学習システム構築
https://amzn.to/2TJkzAx
GCP(Google Cloud Platform)を使用した機械学習システムの構築方法についてGCPの管理画面などの説明も添えながら説明されている書籍です。個人的な感想としては、この書籍を学ぶ前に機械学習や深層学習(ディープラーニング)の学習書籍を挟んだ方が有益になると感じました。より実務に近い形の書籍ではありますが、やはり概念をきちんと押さえておかないといきなり実務のシステムレベルまで落とし込んでも何が何だかイメージが掴みにくいです。