学習の評価
機械学習において、どのように学習が進んでいくかをみるために、
教師あり学習(多層パーセプトロン)である問題aと、強化学習(Q学習)である問題bについて
学習の達成度について指標を入れ、横軸に学習回数、縦軸に達成度の指標をプロットした。
問題a
xorの分類器
訓練データとして
(入力,教師信号)=
*1+E*2+E*3+E*4]を達成度の指標とする。
問題b
L*Lの正方立方格子を考え、点(L,L)を除く任意の点をスタートとし、点(L,L)をゴールとする。(L=39)
エージェントは各格子点上で、x座標正、x座標負、y座標正、y座標負のいずれかを選択し、その方向に1進むように行動する。
このときエージェントがスタートからゴールまで、最短距離を動くようにQ学習を用いて学習させる。
割引率を0.9 学習率を0.1とした。
x=L上の点においてエージェントの選択(Q値の最大となる選択)がy座標正
y=L上の点においてエージェントの選択がx座標正
その他の点においてエージェントの選択がx座標正もしくはy座標正であれば、エージェントは最短距離を進む。
よって、それ以外の選択のQ値が最大になっている格子点の数を学習の達成度の指標とする。
以上のような問題設定をしたときの学習数と達成度の指標をプロットした図が以下である。
l1 <- 2 l2 <- 8 l3 <- 1 alpha <- 0.1 nm <- 50000 input_matrix <- matrix( c(0,0,1,0,0,1,1,1),2,4 ) output_matrix <- matrix(c(0,1,1,0) ,1,4) default12 <- runif(l1*l2) default23 <- runif(l2*l3) layer_vec <- c(l1,l2,l3) weight_mat12 <- matrix( default12 , l1 , l2 ) weight_mat23 <- matrix( default23 , l2 , l3 ) sigmoid <- function(x) { 1/(1+exp(-1*x)) } error_vec <- NULL perceptron <- function(input){ v1 <- input v2 <- v1 %*% weight_mat12 v2 <- sigmoid(v2) v3 <- v2 %*% weight_mat23 v3 <- sigmoid(v3) return(v3) } for(i in 1:nm) { rn <- sample(1:length(input_list),1) input <- input_matrix[,rn] output <- output_matrix[,rn] v1 <- input v2 <- v1 %*% weight_mat12 v2 <- sigmoid(v2) v3 <- v2 %*% weight_mat23 v3 <- sigmoid(v3) a3 <- (v3 - output) * v3 * (1-v3) a3 <- as.vector(a3) a2 <- as.vector(v2) delta_w23 <- t(t(a2)) %*% t(a3) delta_w23 <- -1 * alpha * delta_w23 a2 <- apply( t(a3*t(weight_mat23)) ,1 ,sum) * v2 * (1-v2) a2 <- as.vector(a2) a1 <- as.vector(v1) delta_w12 <- t(t(a1)) %*% t(a2) delta_w12 <- -1 * alpha * delta_w12 weight_mat12 <- weight_mat12 + delta_w12 weight_mat23 <- weight_mat23 + delta_w23 if(i%%10==0) { error_vec <- c(error_vec, sum( sqrt((apply(input_matrix,2,perceptron) - output_matrix)^2) )/2 ) } } plot(1:(i%/%10)*10,error_vec,type="l")