RでDeep Learning(1)

環境はWindows10 & R-3.3.3

非常に良い本である。
ただし、自分はPythonに精通していないのでRでDeep Learningを試してみた。

まずはいろいろな活性化関数を定義する。

#ステップ関数
step_function <- function(x) as.numeric(x>0)

#シグモイド関数
sigmoid <- function(x) 1/(1+exp(-x))

#ReLU関数
relu <- function(x) sapply(x, function(z) max(0,z))

#恒等関数
identity_function <- function(x) x

次に3層ニューラルネットワークを実装してみる。

#重みとバイアスの初期化
init_network <- function(){
	network <- as.list(NULL)
	network <- network %>% c(list(W1=rbind(c(0.1,0.3,0.5),c(0.2,0.4,0.6))))
	network <- network %>% c(list(W2=rbind(c(0.1,0.4),c(0.2,0.5),c(0.3,0.6))))
	network <- network %>% c(list(W3=rbind(c(0.1,0.3),c(0.2,0.4))))
	network <- network %>% c(list(b1=c(0.1,0.2,0.3)))
	network <- network %>% c(list(b2=c(0.1,0.2)))
	network <- network %>% c(list(b3=c(0.1,0.2)))
	return(network)
}	

#入力→出力
forward <- function(network,x){
	W1 <- network$W1
	W2 <- network$W2
	W3 <- network$W3
	b1 <- network$b1
	b2 <- network$b2
	b3 <- network$b3
	
	a1 <- (x %*% W1) + b1
	z1 <- sigmoid(a1)
	a2 <- (z1 %*% W2) + b2
	z2 <- sigmoid(a2)
	a3 <- (z2 %*% W3) + b3
	y <- identity_function(a3)
	return(y)
}

いよいよ実行。

network <- init_network()
x <- c(1.0,0.5)
x %>% forward(network,.)
          [,1]      [,2]
[1,] 0.3168271 0.6962791

この記事は上記の本に記載されているPythonのコードのほんの一部をRに書き換えただけです。
詳しく知りたい人はぜひ本を読んでみることをお勧めします。
非常に詳しくわかりやすく書かれています。