R

ニューラルネットワークとは?仕組みとRでの実装!

ウマたん
ウマたん
当サイト【スタビジ】の本記事では、ディープラーニングの原型となるニューラルネットワークについてまとめていきます!ニューラルネットワークはディープラーニングを学ぶ上での基礎知識としておさえておいてほしい手法。Rでの実装も一緒におこなっていきますよー!

こんにちは!

データサイエンティストのウマたん(@statistics1012)です!

最近巷で話題のディープラーニング

そんなディープラーニングの基となっている手法は50年以上前から存在していたのをご存知でしょうか?

それが「ニューラルネットワーク」。

簡単に言ってしまうと、ニューラルネットワークを複雑にしたのがディープラーニングであり、ディープラーニングは実際のところ、さして新しい手法ではないのです。

今回は、そんなニューラルネットワークについて理解を深めていきましょう!

ウマたん
ウマたん
ニューラルネットワークを知っておくことで、昨今のディープラーニングの理解も深まるよ!

ちなみにディープラーニングについては、以下の記事でまとめています!

【入門】ディープラーニングとは?仕組みとPythonでの実装を見ていこう!当サイト【スタビジ】の本記事では、ディープラーニングの仕組みやPythonでの実装方法について解説していきます。ディープラーニングってなんとなくブラックボックスなイメージがあるかもしれませんが、実はシンプルなアルゴリズムなんですよー!...

ニューラルネットワークとは

ニューラルネットワークとは、人間の脳の仕組みを模倣して作られたアルゴリズムです。

以下の図を見てください

このようにいくつかの層に分かれていて情報が伝播していくイメージ。

一番左を入力層、一番右を出力層と言います。

入力層と出力層の間にある層のことを隠れ層とか中間層とか言います。

層の中の青い〇をニューロンと言います。

ニューロンからニューロンに情報が渡る時、ある重みがかけられて、その重みによって出力の値が変わってくるんです。

そして、最終的な出力と教師データの誤差をなるべく小さくするように重みをチューニングしていくことでモデルの精度を高めていくのです。

ニューラルネットワークは入力層・隠れ層1つ・出力層の3層からなっていました。

一方、ディープラーニングは隠れ層が2つ以上のモデルを指します。

層を増やすと、その分組み合わせが爆発的に増加し計算負荷が大きくなります。

そのため従来のマシーンパワーでは計算できませんでした。

しかし昨今マシーンパワーが上がったことにより隠れ層を増やしても計算が行えるようになったんです。

そのような背景があり、台頭してきたのが「ディープラーニング」。

そのため基本的なアルゴリズムの考え方は50年以上前からあるんです。

このニューラルネットワークの仕組みはまさに人間の神経が信号を送り合い情報を伝達する姿に似ていますよね!

ニューラルネットワークの種類

続いて、そんなニューラルネットワークの種類について簡単に見ていきましょう!

ディープラーニング(ディープニューラルネットワーク)

最も有名なディープラーニング。

ディープラーニングの定義は、隠れ層が複数あるモデルですが、これ以降に紹介するモデルも場合によってはディープラーニングと紹介されていたりするので注意が必要です。

CNN(畳み込みニューラルネットワーク)

畳み込みニューラルネットワークは、画像認識などの分野でよく使われています。

基本的にニューラルネットワークは隣接する層の全てのニューロンは結合しています。

しかし畳み込みニューラルネットワークは一部のニューロンしか結合していません。

画像認識では、画像をピクセル単位に分解し隣接するピクセルを見ることで判別するので畳み込みニューラルネットワークが向いています。

以下の記事でCNNをPythonで実装しています。ぜひチェックしてみてください!

【入門】ディープラーニングとは?仕組みとPythonでの実装を見ていこう!当サイト【スタビジ】の本記事では、ディープラーニングの仕組みやPythonでの実装方法について解説していきます。ディープラーニングってなんとなくブラックボックスなイメージがあるかもしれませんが、実はシンプルなアルゴリズムなんですよー!...

RNN(再帰型ニューラルネットワーク)

再帰型ニューラルネットワークは、時系列要素が組み込まれたニューラルネットワークになります。

前後の関係をかんがみることができるので自然言語処理にも向いています。

自然言語処理の発展に非常に寄与しておりGoogle翻訳などにも用いられています。

RNNをさらに進化させたLSTMも注目を集めています。

RNNについては以下の記事でPythonでの実装も合わせてまとめています!

RNNとは?Pythonでの実装方法と一緒に見ていこう!当サイト【スタビジ】の本記事では、ディープラーニングを時系列にも対応させたRNN(リカレントニューラルネットワーク)について解説していきます。RNNの仕組みや応用場面と一緒にPythonでの実装をしていきます。これからの応用が期待される領域なんですよー!...

GAN(敵対的生成ネットワーク)

最近注目を集めているモデル。

偽物を生成する生成器と偽物と見破る識別器をお互い争わせ、識別器が見破りにくい偽物を作ることが出来たらそれがもはや本物であるという考え方です。

GANによって実際に存在しないホテルの部屋の画像を生成したのが以下になります。

GAN

(引用元: Google-“UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS” )

ロボたん
ロボたん
なんだこれはー!!本物にしか見えない!!
ウマたん
ウマたん
まさかこれが実在しないホテルの部屋だとは誰も思わないよねー!

GANでは2つのニューラルネットワークを使います。片方がGenerator、もう片方がDiscriminator。

Generatorが生成した偽物のデータと実際に存在する本物のデータをDiscriminatorに判別させ、 Discriminatorが上手く判別できないようなデータを Generator が生成していきます。

Discriminatorはどんどん判別の難しくなるデータを上手く判別できるようにしていきます。

この学習が進むと最終的にGeneratorが生成される画像は本物にきわめて近くなっているという手法です。

ニューラルネットワークをRで実装してみよう!

それでは、最後にニューラルネットワークをRで実装してみます。

ニューラルネットワーク自体はパッケージが用意されているので非常に簡単に実装することが可能です。

有名なタイタニックのデータを用います。Kaggleの公式サイトからデータをダウンロードできます。

まず、データのクレンジングを行い、欠損値は削除、不要と考えられる項目は削除しました。

項目8つ

Survived:生死 pclass:客室のクラス sex:性別 age:年齢 sibsp:兄弟・配偶者の数 parch:親・子供の数 fare:乗船料金 embarked:乗船した港

サンプル数714

この時、生死を目的変数としそれ以外を説明変数とします。

サンプル数714のうちランダムに400個のデータを取り出し学習データとし、残りの314を予測データとします。

学習データで予測モデルを作り、予測データにあてはめ真値と予測値の判別率を精度として比較します。

シミュレーション回数は10回とし、上記の手順を10回繰り返し、結果を平均したものを最終アウトプットとします。シミュレーション回数をもっと増やせば精度の信頼性は上がります。

ニューラルネットワークをランダムフォレストサポートベクターマシンナイーブベイズニューラルネットワークXGboostk近傍法の5手法と比較します!

基本的に引数は全部デフォルトで!果たして結果はどうなるでしょうか!

nnetというパッケージに入っているnnetという関数を用いて解析を行っていきます。

##ニューラルネット##
nn<-nnet(Survived~.,train.data,size=5)
test.data.nn<-cbind(test.data,”predict”=round(predict(nn,test.data),0))
result[i,4]<-sum(test.data.nn$predict==test.data.nn$Survived)/nrow(test.data.nn)

データ加工は描画でいくつかコードを書いていますが、実際にランダムフォレストを行っているのはこの数行!

Survived~.はSurvivedを目的変数としてそれ以外を説明変数にするよーということです。

結果は以下のようになりました!

それぞれBayes(ナイーブベイズ)、knn(k近傍法)、NN(ニューラルネットワーク)、RF(ランダムフォレスト)、SVM(サポートベクターマシン)、xgb(XGboost)と表示しています。

やはりランダムフォレスト・SVM・XGboostあたりが強いですね!

他の手法についても是非見てみてください!

今回はパラメータをいじらずデフォルト設定で行ったためグリッドサーチなどでチューニングを行えば、もっと良い精度が出るでしょう。

ニューラルネットワーク まとめ

ニューラルネットワークはこれからも応用が期待される手法であり、形を変えて様々な分野で活用されています。

これからもニューラルネットワークの発展をウォッチしていきたいですね!

最後にニューラルネットワークについてまとめておきましょう!

・人間の神経回路を模倣したモデル
・実は50年ほど前からある古いモデル
・CNN・RNNなど派生手法が複数ある

ニューラルネットワークという言葉出てきませんが、パーセプトロンによる識別という文脈で以下の書籍でまとめられていますのでより深く勉強したいという方はオススメです!

created by Rinker
¥3,300
(2020/08/06 06:55:35時点 Amazon調べ-詳細)

他の機械学習手法についてもっと詳しく知りたい方は以下の記事でまとめていますのでチェックしてみてください!

機械学習入門に必要な知識と独学勉強方法をPythonとRの実装と一緒に見ていこう!当サイト【スタビジ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。...

ニューラルネットワークを深めてディープラーニングに進みたい方は以下の記事をチェックしてみてください!

【初心者向け】ディープラーニングの学習ロードマップまとめ当サイト【スタビジ】本記事では、ディープラーニングの学習方法について詳しくまとめていきます!ディープラーニングは難しいと思われがちですが、アルゴリズムは意外とシンプルで実装自体も非常に簡単なんです!Pythonでの実装もおこなっていきますよー!...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!