学習の評価

機械学習において、どのように学習が進んでいくかをみるために、
教師あり学習(多層パーセプトロン)である問題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")

*1:0,0),0) ((1,0),1) ((0,1),1) ((1,1),0) を与え、中間層の層の数は8、学習率0.1、初期行列として各成分をrunif関数を用いてつくった行列とした。 達成度の指標について、入力iを入れたときの教師信号との誤差(出力と教師信号とのユークリッド距離/2)を返す関数E(i)としたとき、[tex:E((0,0

*2:0,1

*3:1,0

*4:1,1