2012-10-07 5 views
5

신경망을 사용하여 문제를 해결하려고합니다. Coursera에서 제공되는 Machine Learning 과정에서 배웠고, FANN이 Ruby 구현의 신경망임을 알게되어서 비행기를 다시 발명 할 필요가 없었습니다.신경망을 이해하는 데 문제가 있습니다.

그러나 팬이 왜 저에게 이상한 결과를 주는지 이해가되지 않습니다. 수업에서 배운 것을 바탕으로

나는 일치 결과 인 훈련 데이터 세트를 가지고 있습니다. 플레이어에게 숫자가 주어지고, 상대방에게 숫자가 주어지며, 결과는 승리를 위해 1, 손실로 0이됩니다. 데이터는 혼란으로 인해 약간 시끄럽지만 끔찍하지는 않습니다. 내 목표는 어떤 격차가 엇갈리는 경향이 있는지 찾아내는 것입니다. 예를 들어 내 직감은 등급이 낮 으면 정격이 덜 정확하므로 더 낮은 정격의 성향이 더 많은 혼란을 낳습니다.

그래서 나는 약 100 가지 예제의 훈련 세트를 얻었습니다. 각 예제는 (rating, delta) => 1/0입니다. 그래서 분류 문제입니다. 그러나 실제로 제가 생각하기에 로지스틱 회귀 유형 차트에 도움이되는 것은 아니며, 신경망이 더 정확 해 보입니다. 그때 클래스에서

network = RubyFann::Standard.new(
    :num_inputs=>2, 
    :hidden_neurons=>[8, 8, 8, 8], 
    :num_outputs=>1) 

와 신경 네트워크를 설정

training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs) 

내 코드가 시작, 나는 합리적으로 기본값은 같은 수의 각 은닉층을 가지고 있음을 알게 단위. 이 작업 방법이나 아직 수행중인 작업을 모르기 때문에 기본값을 사용했습니다.

마지막 다음
network.train_on_data(training_data, 1000, 1, 0.15) 

그리고, I는 단위 샘플 정격 입력의 세트를 통해 가서, 각 증분에서, 그 결과가 < 0.5 0.5> 주도로 전환 될 때까지 I는 약 0이어야 발생한 델타 증가한 약 1이지만 실제 0.45와 0.55와 비슷합니다.

한 번 실행하면 입력마다 0이 표시됩니다. 같은 데이터로 두 번 다시 실행했고 양수가 감소하는 추세를 보였고 양수가 증가하는 추세를 보였으 나 완전히 반대되는 예측이었습니다.

필자는 충분한 기능을 포함하지 않을 것으로 생각하여 추가했습니다 (rating**2delta**2). 불행히도, 그때마다 시작 델타 또는 내 모든 델타 때마다 모든 입력에 대한 점점 시작했다.

루비 팬 (Ruby-FANN)이 나에게 말하고있는 것과 같은 왜곡 된 결과를 얻는 이유는 무엇인지 모르겠다. 부분적으로는 라이브러리를 이해하지 못하기 때문에 나도 신경 ​​네트워크에 대해 배우기 시작했기 때문에 의심 스럽다. 크고 분명한 것을 놓치고 있습니다. 교육 자료가 충분하지 않거나, 더 많은 기능을 포함해야하는지, 문제가 무엇인지, 문제를 해결하거나 더 나은 방법을 배우려면 어떻게해야합니까?

+0

ML에 대해 많이 알지 않지만 바이어스 된 샘플은 편향된 결과를 초래합니다. 샘플 데이터의 대부분이 승리를위한 것이라면 모델을 사용할 때 우승 할 가능성이 높습니다. . – iouri

+0

손실보다 더 많은 승리를 거두었지만 결과가 다른 실행에서 왜 다른지? –

답변

1

매개 변수를 사용하여 재생하는 것은 어떨까요? 처음에는 두 개의 레이어 만 사용하는 것이 좋습니다. 많은 문제가있을만한 수학적 증명이 있어야합니다. 네가 너무 많은 뉴런을 가지고 있다면 너의 NN은 정말로 뭔가를 배울 수있는 충분한 신기원을 가지지 않을 것이다. 그래서 너는 또한 신 (gama)뿐만 아니라 여러 신기원으로 놀 수있다. 나는 당신의 경우에 그것이 0.15라고 생각한다. NN이 조금 더 빨리 배워야하는 가치 (0.3 또는 0.7을 시도하는 것을 두려워하지 마십시오), gama의 올바른 가치는 일반적으로 체중의 간격이나 입력 정규화에 따라 다릅니다.

NN은 각 실행마다 새 초기화가 있고 완전히 다른 네트워크가 있고 이전과 다른 방식으로 학습합니다 (다른 가중치는 더 높은 값을 가지므로 다른 부분의 NN은 같은 것을 배우게됩니다).

저는이 라이브러리에 익숙하지 않아 NN에 대한 몇 가지 경험을 썼습니다. 이 중 일부가 도움이 될 것입니다 ..

관련 문제