ニューラルネットワークとは何か?簡単にわかりやすく解説!
こんにちは!
現役Webエンジニアの今井(@ima_maru)です。
人工知能(AI)について学ぼうとした時、「ニューラルネットワーク」という言葉に出会うかと思います。
ニューラルネットワークは様々なバリエーションがあって、混乱してしまうこともあるかと思うので、この記事ではわかりやすく説明していきます!
ニューラルネットワークとは?
まずは、ニューラルネットワークの定義について軽く触れてから、ニューラルネットワークの理解に欠かせない「ニューロン」と「パーセプトロン」について説明します。
最後にニューラルネットワークとはいったい何なのかを説明します。
ざっくりとしたニューラルネットワークの説明
ニューラルネットワーク(Neural Network)とは、脳の神経回路網を模した数理モデルと言われています。
簡単に言えば、脳の神経細胞(ニューロン)で行われている情報処理の仕組みを計算式にまで落とし込み、数学的にモデル化したものということです。
ニューラルネットワークを理解するためには、まず「ニューロン」とその数理モデルである「パーセプトロン」を理解しなくてはいけません。
詳しい説明はこれらを説明した後にします。
神経細胞である「ニューロン」とは?
ニューロンとは何かというと、生物の脳などに存在する以下のような神経細胞のことをいいます。
このニューロンにはいくつか要素がありますが、今回は以下の2つの要素に着目します。
- 「樹状突起」:ほかのニューロンから電気信号を受け取る部分
- 「シナプス」:ほかのニューロンに電気信号を伝達する部分(軸索末端にある)
樹状突起が入力部分でシナプスが出力部分です。
また、このニューロンには面白い特徴があります。それは、「一定以上の電気信号を受け取った瞬間、一時的にシナプスから電気信号が発せられる」という特徴です。
あえて堅苦しく言えば、「活動電位に達したときに急激に電位が上昇し、神経インパルスを起こす」といえます。この現象を「発火」と呼び、ニューラルネットワークの説明にも登場したりします。
イメージは「あー電気たまってきたな、、いまだ!バチン!!!(電気信号)」とした後すぐに「シュン。。。」というのを繰り返している感じです。
詳しくは説明しませんが、この一定以上の電気信号を受け取らないと自身は電気信号を出さないという特徴こそが、脳の情報処理において非常に大事な要素となっています。
脳にはこのニューロンが何億個も集まり、複雑に絡み合い、それぞれが電気信号の伝達を行うことで高度な情報処理が実現されています。人間でいえば論理的に考えたり行動したりすることができるのは、これらの情報処理のおかげです。
この神経細胞がいくら集まっても、人間の脳の機能が実現できるとは思いにくいものですけどね。まあそういう仕組みということで話を進めましょう。
生物学的なニューロンについて詳しく知りたい方は、以下の記事を参考にしてみてください。
ニューロンの数理モデル「人工ニューロン」とは?
ニューラルネットワークの基本となるのは、「ニューロン」の数理モデルである「人工ニューロン」です。(単にニューロンと呼ばれることも多いから注意が必要です)
数理モデルといわれると少し難しく感じますが、要は、このニューロンの反応を数学的に表すものや計算式のことを人工ニューロンと呼びます。
人工ニューロンは概念的なものですで、実際に人工ニューロンにはどんなものがあるのか気になりますよね。まさに、次に説明する「パーセプトロン」は代表的な人工ニューロンです。
パーセプトロンとは?人工ニューロンとの違いは?
パーセプトロンは、もっとも一般的な人工ニューロンのモデルです。
人工ニューロンと混同されがちですので、「パーセプトロンは人工ニューロンの1つのモデルである」という関係性を抑えておきましょう。
パーセプトロンの構造は以下のようになっています。
重要な点は、以下の3点です。
- 各入力\(x\)がある
- 各入力\(x\)にはそれぞれ特有の重み\(w\)がある
- 出力\(y\)は「各入力\(x\)の重みづけ和を活性化関数に通した値」である
実はこの入力と出力の関係が、先ほどのニューロンの樹状突起(入力)とシナプス(出力)に対応しています。
詳しくは後ほど解説するので、今は「入力値になんらかの計算が加えられて出力されてるんだなあ」というイメージしといてください。
ニューラルネットワークとは?人工ニューロンから作られる数理モデル
ここまでくれば、ニューラルネットワークを理解するための知識は大体出揃いました。
先ほども書きましたが、ニューラルネットワーク(Neural Network)とは、脳の神経回路網を模した数理モデルです。
つまりは、脳の神経回路網を「人工ニューロン」(パーセプトロン)の繋がりで表現したモデルになります。
以下の図がニューラルネットワークの一例を表していますが、合計21個のパーセプトロンが複雑に繋がっているのがわかるでしょうか。
一般的には、このようにパーセプトロンをいくつも繋げて作ります。
Neural Networkの頭文字をとって、NNと略されることがあります。また、そもそもニューラルネットワークとは、生物の脳の構造についてのことなので、それと区別するために「人工」ニューラルネットワークと強調して言われることがあります。どちらも頭の片隅においておきましょう。
ニューラルネットワークと機械学習の違いや関係性
ニューラルネットワークは、機械学習でよく用いられる学習モデルです。
違いというよりは、以下のような関係性であるという認識で良いでしょう。
- 機械学習:分野
- ニューラルネットワーク:学習モデル
ニューラルネットワークとディープラーニングの違いや関係性
層を深くしたニューラルネットワークは、学習コストが上がるものの、それだけ複雑な問題を解くこと可能性を秘めています。
そのような層を深くしたニューラルネットワークを「ディープニューラルネットワーク(DNN)」と呼び、DNNを使った機械学習のことを「ディープラーニング(深層学習)」と呼びます。
こちらも違いというよりは、以下のような関係性であるという認識で良いでしょう。
- ディープラーニング:手法
- ニューラルネットワーク:学習モデル
ニューラルネットワークの歴史
ニューラルネットワークは、実は1950年代ごろから研究が行われていた技術であり、いままでにいくつもの進化を遂げてきました。
歴史を遡り、どのような進化を遂げていったのかを知れば、現在の複雑なニューラルネットワークがどうなっているのかについても理解が深まるはずです。
そんなニューラルネットワークの歴史について、詳しく見ていきましょう。
単純パーセプトロン
初めに提案されたのは「単純パーセプトロン」というモデルです。
これは、以下のような図であらわされるモデルで、入力層と出力層の2層のみからなるニューラルネットワークです。
しかしこの単純パーセプトロンでは、線形分離可能な問題しか解くことできませんでした。
線形分離可能な問題とは以下のような、直線で分離可能な問題のようなイメージです。
要は、超簡単な数式であらわされるものしか解けなかったわけです。
現実のデータはこのように直線で分類できるような問題ばかりではありません。
ということで、単純パーセプトロンはあまり実用的なモデルとは言えなかったのです。
マルチレイヤーパーセプトロン=多層パーセプトロン
次に提案されたのが「マルチレイヤーパーセプトロン」「多層パーセプトロン」でした。
その名の通り、多層にしたパーセプトロンです。
単純パーセプトロンは入力層と出力層の2層のみでしたが、マルチレイヤーパーセプトロンの場合は「隠れ層(中間層)」を取り入れるということをしました。
これにより、単純パーセプトロンでは処理できなかったより複雑な問題の処理が可能になりました。
しかし、当時の技術では、層を増やすことである問題が起きてしまいました。
それは、データの不足で学習がうまく進まないということです。
そのこともあり、不十分な精度になってしまったり、学習データに適合しすぎてしまう「過学習」という現象が起きたりしました。
ディープニューラルネットワーク (DNN)
そして現在のAIブームで注目されているのがディープニューラルネットワーク(DNN)です。
これは、「層をより深くしてより複雑な問題に対処しよう」というアイデアでした。
このアイデア自体は多層パーセプトロンの時からありましたが、学習データ不足という問題があり実現できていませんでした。
しかしここで、「Web」が登場しました。
この「Web」や「SNS」などが登場したおかげで、画像データを数千万枚集めるといったようなことが可能になりました。
そのため、層を増やしても十分に学習できる程のデータを用意できるようになったのです。
最近注目されている「ディープラーニング」とは、このディープニューラルネットワークを使った機械学習のことを言います。
もっと詳しくニューラルネットワークの歴史について詳しく知りたい方は、以下の記事をご覧になるとよいでしょう。
ニューラルネットワークの構造
ニューラルネットワークにはさまざまな種類がありますが、ここでは簡単な順伝播の(=一方向のみに信号が伝達する)5層のニューラルネットワークで説明しましょう。
ニューラルネットワークの構造を理解するうえでの重要な要素は、以下のようなものが挙げられます。
用語 | 説明 |
---|---|
入力層 | 入力データが入力される第一層目のこと。 |
隠れ層(中間層) | 入力層と出力層の間の層全体のこと。重要な役割を果たす。 |
出力層 | 出力結果が出力される最終層のこと。 |
重み | 入力値の重要性や影響度を表した数値。よく\(w\)で表される。 |
活性化関数 | 重みづけされた入力値の総和から、出力値を決定するための関数。 |
入力層
入力層とは、その名の通り入力データを入力する層です。
ニューラルネットワークにおいて、一番初めに来る層で、入力データの次元数と同じになるようにノードの数が設定されます。
例えば、縦28px×横28px画像の場合は、入力層には28×28=784個のノード数が必要になるというようなイメージです。(実際はいろいろ違います。)
隠れ層(中間層)
隠れ層、別名中間層は、入力層と出力層の間の層全体のことをいいます。
実は、この隠れ層こそが、ニューラルネットワークの根幹を担っています。
隠れ層では、入力層から出力された値に様々な処理を加えて、特徴量を抽出していきます。
出力層
出力層とは、その名の通り出力結果を出力する層です。
ニューラルネットワークにおいて、一番最後に来る層で、出力したい結果の数と同じになるようにノードの数が設定されます。
例えば、「犬」か「猫」か「猿」かということを出力結果としたいのであれば、出力層のノード数は3個必要ということになりますね。
重み
重みとは、入力値の重要性や影響度を表した数値であり、よく\(w\)で表されます。
重みの値が大きいほどノード間のつながりが強く、小さいほどつながりが弱いことを意味します。
活性化関数
活性化関数とは、重みづけされた入力値の総和から、出力値を決定するための関数です。
例えば「シグモイド関数」「ReLU(ランプ関数)」といった活性化関数があります。
ほかにも代表的な活性化関数として以下のものが挙げられます。
- ステップ関数
- シグモイド関数
- ソフトマックス関数
- \(\tanh\)(ハイパボリックタンジェント)
- ReLU(ランプ関数)
基本的に、活性化関数は非線形の関数です。
詳しく知りたい方は、以下の記事が分かりやすいでしょう。
ニューラルネットワークの仕組み
ニューラルネットワークの仕組みについて紹介していきます。
ここでは、学習済みのモデルがどのような仕組みで動いているのかを確認しましょう。(重みの学習方法については次の部分で解説します)
モデルとしては、先ほどと同じ5層のニューラルネットワークを使いましょう。
大きく「入力」「伝播」「出力」という3工程に分けて説明していきます。
- 入力:入力層に入力する
- 伝播:次の層に伝わっていく
- 出力:出力層によって出力される
それでは見ていきましょう。
入力:入力層に入力する
まずは、入力層にデータの入力が行われるところから始まります。
画像の入力であれば、各pixelの画素値などがすべて入力値として入ります。
画像の入力であれば、各pixelの画素値などがすべて入力値として入ります。
縦28pxで横28pxの画像であれば、入力層のノード数は28×28=784個の画素値が入力になるということです。(RGBなどに分ける場合などいろいろと異なる場合が多いですが)
入力のイメージつきにくい方は、以下の記事を少し見るとわかりやすいと思います。
人間でいえば、視覚を司る「網膜細胞」が入力層のノードになりますね。
伝播:次の層に伝わっていく
出力が次の層に伝わっていくことを伝播といいます。
伝播で行う処理は主に2つあります。
1つ目は、重みづけ和を計算する処理。2つ目は、活性化関数による処理です。
1つ目の処理として、前の層のノードの出力値とそれに対応する重みの値を掛け合わせた値を計算する処理を行います。
そして、それらの総和を計算します。この総和のことを「重みづけ和」としましょう。
次の層すべてのノードについて、この重みづけ和を計算していきます。
2つ目の処理では、計算された重みづけ和を活性化関数に通す処理を行います。
代表的な活性化関数は以下のようなものが挙げられます。
余談ですが、この活性化関数がニューロンの活動電位の役割をしていて、発火現象を再現しているといってよいでしょう。
これらの活性化関数に重みづけ和を入力し、出てきた値がそのノードの最終的な出力値になります。
そしてこの最終的な出力値が、さらに次の層の入力値として利用されるという流れで伝播は進んでいきます。
つまり、出力層に到達するまで伝播の処理が続きます。
出力:出力層によって出力される
伝播は最終的に出力層へと到達します。
中間層の伝播と基本的にやることは変わりませんが、出力層特有の処理を行うこともあります。
例えば、出力層の各ノードの値がそのまま確率となるように、出力層の全ノードの合計値が1になるような活性化関数(softmax関数)を適用するなどです。
このようにしてニューラルネットワークは入力データから出力結果を計算しています。
また、この出力層の結果は、ニューラルネットワークの学習に用いられることもあります。
ニューラルネットワークの学習方法
ニューラルネットワークの構造と仕組みが分かったところで、次はニューラルネットワークの学習方法について紹介します。
誤差逆伝播法(Back propagation)
ニューラルネットワークの学習方法として、「誤差逆伝播法」「バックプロパゲーション」が挙げられます。
誤差逆伝播法とは、出力と教師データの誤差を用いて重みを修正していく学習手法のことです。
通常の伝播とは逆方向に学習が進むことから、誤差逆伝播法と呼ばれています。
誤差逆伝播法は、関数の偏微分を用いて誤差が少なくなるほうに重みを調整するということを行っています。
数学的な知識が必要で少し難しいですが、詳しくは以下の記事などを参考にするとよいでしょう。
遺伝的アルゴリズム(GA:Genetic Algorithm)
遺伝的アルゴリズムとは、生物の自然淘汰をモデルにした学習アルゴリズムです。
ニューラルネットワークの重みを解として、適応度を出力結果と正解の誤差とすれば、遺伝的アルゴリズムを適用することができます。
詳しくは以下の記事をご覧ください。
代表的なニューラルネットワークの種類
上で書いたニューラルネットワークは単純なモデルでした。
実際に用いられるニューラルネットワークは、もう少し複雑になっています。
ここでは、有名なニューラルネットワークとして「CNN」「RNN」「GAN」を紹介します。
CNN:畳み込みニューラルネットワーク
CNN(畳み込みニューラルネットワーク)は、画像認識でよく用いられるニューラルネットワークです。
Convolutional Neural Networkの頭文字をとってCNNです。
画像データをいくつものフィルターに通し、それらを圧縮してニューラルネットワークに入力するという構造を持っています。
特徴的な処理として、畳み込み層とプーリング層というものが挙げられます。
RNN:再帰型ニューラルネットワーク
RNNは、機械翻訳や動画分析などさまざまな分野に使われるニューラルネットワークです。
Recurrent Neural Networkの頭文字をとってRNNです。
- RNN
- 再帰型ニューラルネットワーク
- 回帰型ニューラルネットワーク
- リカレントニューラルネットワーク
RNNは、出力が入力に再度戻ってくるという構造をしています。
そのため、前の値が次の値に影響を及ぼす「時系列データ」に対して有効です。
例えば、意味のなす文字列や株価などが時系列データです。
RNNをさらに進化させた「LSTM」もRNNの一種で、時系列データの解析に用いられています。
GAN:敵対的生成モデル
GANは、あたかも本物のような画像を生成することなどができるニューラルネットワークです。
Generative Adversarial Networkの頭文字をとってGANです。
生成ネットワークと識別ネットワークを競わせて互いに学習を深めていくことから、敵対的生成ネットワークと呼ばれています。
ニューラルネットワークは何に使われる?
ここからはニューラルネットワークが何に使われているか?について紹介していきます。
画像認識
画像認識とは、画像データを読み込んでその画像を認識・分類する技術です。
最近では、手書き数字の認識や猫や犬の分類などタスクができるようになり、AIへの注目が一気に高まっています。
例えば、車を認識できることで自動運転に応用したり、癌細胞を発見したりと画像認識の応用先は様々です。
音声処理
音声処理とは、音声を認識してテキストに変える技術です。
音声処理によって会議を録音して自動で議事録を作成したりすることができるようになりました。
他にはGoogle HomeやAmazon Echoなどのスマートスピーカーにも音声処理の技術は活用されています。
自然言語処理
自然言語処理は人間が話す言葉(自然言語)をコンピュータに理解させる技術です。
例えばひらがなを漢字に変換する際の処理や、Google検索の際の予測キーワードなどに活用されています。
未経験から3ヶ月でAIエンジニアになる!
ここまで読んでニューラルネットワークについてもうちょっと詳しく学びたいという方にはAidemy Pleium Planというコースがおすすめです。
3ヶ月で未経験からAIエンジニアを目指すコースもありますので、興味のある方は下記のリンクを参照ください。
最後までご覧いただきありがとうございます。