Порядок ввода нейронной сети - PullRequest
4 голосов
/ 19 декабря 2011

Это может показаться глупым вопросом.

Я управляю нейронной сетью через некоторые данные о теннисе. Цель сети - определить вероятность того, что каждый игрок выиграет матч. Имеется около 40 входов и один выход (это вероятность выигрыша игрока A, (1 - выход) для игрока B).

Входными данными являются различные статистические данные и показатели производительности каждого игрока за последние n матчей. Я написал код, который извлекает эти числа из моей базы данных результатов теннисных матчей, которые затем передаются в нейронную сеть.

У меня проблема в следующем:

В обучающем наборе входные значения, относящиеся к победителю матча, анализируемого сетью, всегда будут передаваться через одни и те же входные нейроны. Из-за этого желаемый результат всегда будет равен 1, потому что игрок A всегда выигрывает (так устроена моя база данных, игрок A выигрывает матч, а игрок B проигрывает).

Как я могу преодолеть эту проблему? Это просто случай рандомизации заказов игрока A и игрока B?

Надеюсь, этот вопрос имеет смысл.

Большое спасибо

Ответы [ 4 ]

1 голос
/ 19 декабря 2011

Я думаю, что какая-то перетасовка (случайная или иная) имеет смысл.

Если вы пытаетесь тренировать любого ученика, чтобы выбрать победителя из пары игроков, и вы всегда присутствуетепервый игрок становится победителем, и тогда вполне разумно понять, что первый игрок всегда является победителем.

Один простой способ исправить это - тренироваться на наборе данных двойного размера: использовать обапары (A, B) и (B, A), где A - победитель.

1 голос
/ 20 декабря 2011

Я бы тренировал каждый матч дважды, один раз с входом Winner - Loser и выходом «1», один раз с входом Loser - Winner и желаемым выходом «0».

(О, и я не думаю, что выход нейронной сети можно интерпретировать как вероятность, в том смысле, что если ANN предсказывает какой-либо результат с выходом 0,9, он будет правильным 9 из 10 раз.)

1 голос
/ 19 декабря 2011

Почему бы вам не сделать простое разделение 50/50? Проведите половину победителей через входные нейроны, на которых вы их обычно запускаете, а другую половину победителей - через другие входные нейроны, таким образом, у вас не будет абсолютно никакого смещения. Вы можете даже расшатать / чередовать их, чередуя победителя и проигравшего в каждом отдельном экземпляре, на котором вы тренируетесь:

Neuron  Player
--------------
  1       W  
  2       L 
--------------    
  1       L 
  2       W 
--------------
  1       W  
  2       L 
--------------    
  1       L 
  2       W 

Рандомизация тоже может помочь, но я думаю, что она внесет смещение (хотя это будет ДЕЙСТВИТЕЛЬНО МАЛОЕ смещение). В конце концов, вы не узнаете, научится ли нейронная сеть предсказывать функцию рандомизации или научится предсказывать данные, поэтому просто упростите ее и гарантируйте себе, что она научится правильно.

0 голосов
/ 20 декабря 2011

В парном моделировании, которое вы описываете, обычно либо: 1. каждое событие отображается в сети один раз в каждом порядке, либо 2. каждое событие отображается один раз в некотором каноническом порядке («домой», «далеко»).

...