2

первый контекст.Должен ли я нормализовать входные данные в моей нейронной сети?

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

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

Каждый нейрон использует гиперболический тангенс (-1, 1), чтобы нормализовать данные после его обработки, но до того, как он войдет в сеть, пока не будет нормализоваться до входа.

Я вдохнул вдохновение из шахматного движка Giraffe, особенно входы.

Они будут выглядеть вроде этого:

Первый слой:

  • количество оставшихся Белый Пешки (0-8)

  • количество оставшихся черных пешек (0 -8)

  • Остальные белые рыцари (0-2)

  • количество оставшихся черных рыцарей (0-2)

....

Второй слой все еще на том же уровне, что и первая:

  • Положение пешки 1 (вероятно, происходит с 2-мя значениями, х [0-7] и у [0-7])
  • Положение пешки 2

...

  • Положение королевы 1
  • Положение Queen 2

...

Третий слой, опять на том же уровне двух предыдущих. Данные будут только «перекрещиваться» после следующего слоя абстракции.

  • Значения частей атакованных Pawn1 (это будет в диапазоне 0-12 МОГ)
  • Значения частей атакованных Pawn2

...

  • Значение деталей атакованы Bishop1

Вы получаете идею.

Если вы не сделали здесь ужасная краска представление о том, что я имею в виду:

Neural Net Representation

Вопрос: Я должен нормализовать входные данные, прежде чем она считывается нейронные сети?

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

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

Спасибо!

+0

Укажите, что вы хотите нормализовать? – SmallChess

+0

Привет. Я хочу нормализовать входные данные, так что я перечислил в вопросе. Например, количество пешек, все еще находящихся на доске, которое будет варьироваться от 0 до 8, должен ли я нормализовать его вместе со всеми другими входами, которые я перечислял? – Daniel

+1

Ответ на ваш [от 0 до 8] - ДА. Пожалуйста, просмотрите мой ответ. – SmallChess

ответ

1

ничего не надо нормализировать внутри сеть. Пункт машинного обучения состоит в том, чтобы обучать весам и предвзятости, чтобы изучить нелинейную функцию, в вашем примере это была бы статическая оценка шахмат. Таким образом, ваш второй нормализованный синий вертикальный бар (около конечного выхода) не нужен.

Примечание:Hidden layers это лучше, чем терминология abstraction layer, поэтому я буду использовать его вместо.

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

Бумага Жираф пишет в странице 18:

«Каждый слот имеет нормированную координату х, нормализуется координата ...»

шахматы имеет 64 клетки, без нормализации диапазона будет [0,1, .... 63]. Это очень дискретно, и диапазон намного выше, чем другие входы (подробнее об этом позже). Имеет смысл нормализовать их на нечто более управляемое и сопоставимое с другими входами. В документе не говорится , как точно он нормализуется, но я не понимаю, почему диапазон [0 ... 1] не работает. Имеет смысл нормализовать шахматные квадраты (или координаты).

Другие входы, такие как наличие королевы на борту, являются истинными или ложными и, следовательно, не требуют нормализации. Например, бумага Жираф пишет стр.18:

... ли часть присутствует или отсутствует ...

Очевидно, что вы не нормировать.

Ответ на ваш вопрос

  • Если вы представляете Кусочек Графа слой как в жирафа, вам не нужно нормализовать. Но если вы предпочитаете дискретное представление в [0..8] (потому что в шахматах может быть 9 ферзей), вы можете нормализовать.
  • Если вы представляете Piece Position Layer с шахматными квадратами, вы должны нормализовать, как Giraffe.
  • Жираф не нормализует Piece Attack Defense Layer Возможно, он представляет информацию как the lowest-valued attacker and defender of each square. К сожалению, в документе явно не указано, как это делается. Ваша реализация может потребовать нормализации, поэтому используйте свой здравый смысл.

Без каких-либо предварительных предположений, какие функции будут более важны для модели, вы должны нормализовать их до сопоставимого масштабирования.

EDITED

Позвольте мне ответить на ваш комментарий. Нормализация - не правильный термин, то, что вы говорите, является функцией активации (https://en.wikipedia.org/wiki/Activation_function). Нормализация и функция активации - это не одно и то же.

+0

Привет, спасибо за подробный ответ. – Daniel

+0

Видимо, ввод отправляет комментарий вместо перехода к новой строке. Я хотел добавить еще кое-что. У меня создалось впечатление, что каждый нейрон в нейронной сети (помимо выходных в самом конце) должен иметь какую-то активационную функцию, такую ​​как tanh, вы говорите, что мне не нужна она в нейронах последнего слоя до вывод? – Daniel

+0

@ Daniel Я отредактировал свой ответ на ваш вопрос о нейронах последнего слоя перед выходом. – SmallChess