2016-06-13 2 views
1

R 인터페이스를 통해 h2o를 탐색 중이며 이상한 가중치 행렬을 얻고 있습니다. 내 작업은 주어진만큼 간단합니다 : 주어진 x, y는 x + y를 계산합니다.
저는 3 개의 열이있는 214 개의 행이 있습니다. 첫 번째 열 (x)은 (-1000, 1000)에서 균일하게 그리고 두 번째 열 (y)는 (-100,100)에서 균일하게 그려집니다. 나는 그것들을 결합하여 하나의 뉴런을 가진 하나의 숨겨진 레이어를 가지고 싶습니다. 이 내 코드입니다 :h2o 깊은 학습 가중치 및 정규화

library(h2o) 
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) 
train <- h2o.importFile(path = "/home/martin/projects/R NN Addition/addition.csv") 
model <- h2o.deeplearning(1:2,3,train, hidden = c(1), epochs=200, export_weights_and_biases=T, nfolds=5) 
print(h2o.weights(model,1)) 
print(h2o.weights(model,2)) 

과 결과가 Y에 대한 가중치 값이 0.055입니다 몇 가지 이유를 들어

> print(h2o.weights(model,1)) 
      x   y 
1 0.5586579 0.05518193 

[1 row x 2 columns] 
> print(h2o.weights(model,2)) 
     C1 
1 1.802469 

입니다 - X보다 10 배 낮은. 결국, 신경망은 x + y/10을 계산할 것입니다. 그러나 h2o.predict는 실제로 올바른 값을 반환합니다 (테스트 세트에서도).
나는 데이터를 어떻게 든 확장하는 전처리 단계가 있다고 생각합니다. 모델에 의해 생성 된 실제 가중치를 재현 할 수있는 방법이 있습니까? 꽤 간단한 신경망을 시각화하고 싶습니다.

답변

3

신경망은 모든 입력 특징이 평균이 0이고 표준 편차가 1 인 경우에 가장 잘 수행됩니다. 피쳐들의 표준 편차가 매우 다른 경우, 신경망은 매우 열악합니다. 이 때문에 h20이 정규화를 수행합니다. 즉, 그물을 훈련하기도 전에 가지고있는 모든 기능의 평균 및 표준 편차를 계산하고 원래 값을 (x - mean)/stddev으로 바꿉니다. 두 번째 기능의 경우 stddev이 첫 번째 기능보다 10 배 작으므로 정규화 후에 값이 합계에 기여하는 정도가 10 배 더 중요 해지고 숨겨진 뉴런으로 향하는 가중치가 그것을 취소하십시오. 그래서 두 번째 기능의 가중치가 10 배 더 작습니다.