最近?話題になっている機械学習やらAIやらディープラーニングというのが気になったので、自分も時代の流れについて行こうと、先日ディープラーニングについての本を購入し読んでみました。
読む前は、「機械が学習するってどういうことだよ」「人間の脳のニューロンを真似たってどういうこと?」と全く知識なしでしたが、読んでいくうちにど素人の私でも意外とイメージが沸いてなんとなくですが、わかって来ました。
今回は、当初の私のように知識無しの方がなんとなくでもわかっていただけるように、あまり深くまでは掘らず、数式などもなるべく少なく、ディープラーニングとはどのようなものなのか解説していきたいと思います。
(あくまで最近勉強し始めたことをご理解ください…)
この本で勉強しました。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
人工知能(AI)・機械学習・ディープラーニングの違い
この分野に興味があって調べ始めた方は、初めに「AI」とはどんなものなのか気になって調べたのではないでしょうか?
AI(人工知能)について調べていると、「機械学習」「ディープラーニング」などの単語が出てくると思います。それぞれ何が違うのか、わからなくなっている方が多いと思いますのでここで整理させていただきます。
上の図のように、それぞれは同じ扱いではなく「人工知能」という中に「機械学習」という手法があり、「機械学習」の手法に「ディープラーニング」があります。そのため、それぞれの違いという質問自体がちょっとおかしいのです。
例えると、「携帯電話(人工知能)」の中の「スマートフォン(機械学習)」の種類である「iPhone(ディープラーニング)」という関係性ですね。
ディープラーニングの基礎知識「パーセプトロン」
ディープラーニングを勉強しはじめるには、まず「パーセプトロン」というものを勉強しておくとスムーズに進んでいくと思います。
パーセプトロンとは、ディープラーニングの先祖のようなもので非常にシンプルな仕組みですので、いきなりディープラーニングを理解するよりもはるかにわかりやすいです。
そのパーセプトロンを表した図がこちらです。
いかがでしょうか?非常にシンプルな構成ですよね。仕組みとしては左の「x1」「x2」が入力値(1か0)、「w1」「w2」がx1、x2に対応する重み「b」がバイアス値という調整値、丸の部分が関数が入っている部分でx1,2、w1,2、bの値を使用して計算し0か1を出力します。
計算式も非常にシンプルで、上記図の右下にある式になります。パーセプトロンが出力する値は「1」か「0」です。計算した結果が「0未満」であれば「0」を出力、「0以上」であれば「1」を出力する仕組みです。
では、これで何ができるのかですが論理演算がよく例で取り上げられます。ANDの場合は以下のような出力が得られます。
これをパーセプトロンの式で行う場合、x1,x2は与えられる値ですので操作はできませんが、「重み(w1,w2)」と「バイアス(b)」は調整が可能です。これらをうまく調整していき、ちょうど良い数値にすると上の図のような出力が得られるようになるのが、イメージできるでしょうか?
そして、ちょうど良い値をパーセプトロンの式に入れたのが以下です。
それぞれx1、x2に値を入れて計算するとANDの条件に合った出力ができることがわかると思います。簡単に説明しましたが、これがパーセプトロンの仕組みで、AIなどの仕組みの基本的な仕組みです。
よくこの分野で出てくる「学習」というのは、ここでいうw1,w2,bの数値を調整していく作業の事になります。学習については非常に複雑なので今回は飛ばします。(機械学習の一番の肝ですが…)
パーセプトロンがニューラルネットワークに進化
パーセプトロンを進化させたものがニューラルネットワークですが、まずは「多層パーセプトロン」というものに進化させます。
先ほどのパーセプトロンは「単純パーセプトロン」と呼ばれています。非常にシンプルで分かりやすいのですが、非線形分離(XORなど)の問題には実は対応できません。そこで考えられたのが「多層化」です。
多層化とは簡単に言うと、パーセプトロンを連結していく事です。
先ほどまではパーセプトロンの出力値を「答え」として取り出していましたが、パーセプトロンを繋げて1つ目のパーセプトロンの出力値を、2つ目のパーセプトロンに入力値として与えます。そして2つ目の出力値を3つ目に・・・と行っていくことで層が多くなっていくので「多層パーセプトロン」と呼ばれています。
その「多層パーセプトロン」をさらに進化させたものが「ニューラルネットワーク」です。基本的には多層パーセプトロンを同じような構造ですが、違うのが「活性化関数」です。
活性化関数とは入力値を計算した結果をどのように出力するかの式(関数)で、単純パーセプトロン・多層パーセプトロンの場合では、計算結果が「0未満であれば0を出力、0以上であれば1を出力」というものでしたが、これは「ステップ関数」と呼ばれています。一方、ニューラルネットワークで用いられるのは「シグモイド関数」や「ReLu関数」と呼ばれる違う関数を使用します。(ここでは説明を省略します)
これらの関数を用いることで、多層パーセプトロンよりも更に複雑な問題にも対応することができるようになり、画像認識や株取引の予測などまで行えるようになっています。
ディープラーニングとは
簡単に言うと、ニューラルネットワークの層がたくさんあるもので、行っている中身としては同じようなものです。「ディープ(深い)ラーニング(学習)」とあるように、層を深く(多層)にして学習する仕組みがディープラーニングと呼ばれています。
層を深くすることにより、単純パーセプトロンから多層パーセプトロンの時にXORが解けるようになったように、非常に複雑な問題も解けるようになります。(犬の画像から犬種を当てたりなど)
ニューラルネットワークを使用した、1つの手法という理解で良いのではないかと思います。今後も勉強していき、皆さんにお伝えできるようになったらまた記事を上げていきます。
・ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
仮想通貨の自動売買を機械学習でできたらいいですよね。
プログラミング初心者は独学よりもスクールをおススメしています。