「大人の教養・知識・気付き」を伸ばすブログ

※今月(8月)は一部コンテンツを隔週更新にします(夏休みです…)。 一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。

MENU

Rによるデータサイエンス(17/21)

 Rについて

をベースに学んでいく。
 今回はニューラルネットワーク(PP.216-227)を扱う。

18. ニューラルネットワーク

 神経回路を構成する神経細胞(ニューロン)が多数並列に接続されたシステムを数理的にモデル化したものをニューラルネットワークという。

18.1 ニューラルネットワークの基礎

 ニューラルネットワークに関する研究は1943年のマカロックとピッツのものにさかのぼる。
 神経細胞(ニューロン)は細胞体、軸索、樹状突起およびシナプスにより構成されている。細胞体は他の細胞から送られた信号を処理し、特定の条件を満たすと次のニューロンに信号を送る。軸索はニューロンが出力した信号を次のニューロンに贈る経路であり、樹状突起は信号を受け取り細胞体に転送する経路である。 
 ニューロンニューロンシナプスという接触点を通じて結び付けられ、信号の転送を行なう。軸索から流れる電気信号を神経インパルスという。このようなニューロンが多数並列に接続されたシステムを数理的にモデル化したものがニューラルネットワークである。


 x_1,\cdots,x_p樹状突起による入力信号で、w_1,\cdots,w_pはそれぞれの入力信号に対応するシナプスの結合の重みである。加算部ではそれぞれの入力値x_iに重みw_iを掛けた加重和u=\displaystyle{\sum_{i=1}^{p}w_ix_i}を求め、出力部は出力信号f(u)を生成する。形式ニューロンでの入力と出力との関係は、



\begin{aligned}
y=f(u)=\begin{cases}
1,&u\geq\theta,\\
0,&u\lt\theta
\end{cases}
\end{aligned}


もしくは


\begin{aligned}
y=f(u)=\displaystyle{\frac{1}{1+\exp(-u)}}
\end{aligned}


で表す。
 はじめの段階では結合の重みはランダムな値が与えられ、得られた結果について何らかの方法で評価を行い、結果が目標値に近づくように重みを変える計算を繰り返し、徐々により良い値に置き換えられる。ニューラルネットワークが最も得意なのは、パターン認識・分類およびノイズが混在するデータの処理である。

18.1.1 モデルの分類
  • 階層型ネットワーク

 階層型ネットワークは最も多く使われるニューラルネットワークのモデルである。入力層と中間層、出力層からなる。中間層は1つとは限らない。

  • 非階層型ネットワーク

 階層型でないネットワークモデルを非階層型ネットワークと呼ぶ。

18.1.2 単一中間層ニューラルネットワーク

 単一中間層ニューラルネットワーク



\begin{aligned}
y_k=\phi_0\left\{\alpha_k+\displaystyle{\sum_{h}w_{hk}\phi_h\left(\alpha_h+\displaystyle{\sum_{i}w_{ih}x_i}\right)}\right\}
\end{aligned}


で定式化できる。
 結合の重みw_iは以下のアルゴリズムで得られる。

   (1) 入力データx_1,\cdots,x_pニューラルネットワークに与え、最初の段階では結合の重みとしてw_1,\cdots,w_pをランダムに与えて出力を求める。
   (2) 出力結果と学習用データを比較し、新しい結合の重み
\begin{aligned}w(j+1)=w(j)+\eta\delta O_{\mathrm{net}}\end{aligned}
を計算する。ここで\etaは定数、\deltaは出力結果と学習データとの差に関する関数、O_{\mathrm{net}}ニューロンの出力結果である。
   (3) 最適な会が得られるまで(2)を繰り返す。

18.2 パッケージと事例

 中間層ありのニューラルネットワークのパッケージに\mathrm{nnet}がある。

library("nnet")

data(iris)

even_n <- c(1:150)[c(1:150)%%2==0]
iris_train <- iris[even_n,]
iris_test <- iris[-even_n,]


iris_nnet <- nnet(formula = formula(Species~.), size = 3, decay = 0.1, data = iris_train)
iris_nnet_p <- predict(object = iris_nnet, iris_test[,-5], type = "class")

table(iris_test[,5],iris_nnet_p)

18.3 深層学習

 深層学習のアルゴリズムは、従来のニューラルネットワークに比べ、中間層を多く用いる点が相違する。深層学習の基本的な考え方は、層を増やしつつも計算量が爆発的に増大するのを避けながら精度を上げる工夫を重ねるというものである。
 ニューラルネットワークには様々なアルゴリズムがあるが、分野によって得手不得手が相違する。画像認識や音声認識には畳み込みニューラルネットワークが有効で、時系列データには再帰ニューラルネットワークが有効になりがちである。

################
### 深層学習 ###
################

library("kernlab") # spamを取得するため
library("h2o")
data(spam)


h2o.init()
spam_hex <- as.h2o(spam)
tr <- h2o.deeplearning(x = 1:57, y = 58, training_frame = spam_hex, 
                       hidden = c(30,20,10), epochs = 100, nfolds = 3)
tr

補足 スペック情報

エディション Windows 10 Home
バージョン 20H2
プロセッサ Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz 1.50 GHz
実装 RAM 8.00 GB
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
R バージョン 4.1.3 (March, 2022)
RStudio バージョン 2022.02.2 Build 485
プライバシーポリシー お問い合わせ