Как работает окончательный расчет output в нейронной сети?
Я пытаюсь освоить, как работает саморазвивающаяся программа, нейронная сеть - хотя по-моему это слишком сильно сказано.
C GitHub'a я скачал проект с "обучающимися птичками", проходящими FlappyBird. Разбирая код, в скрипте NeuralNetwork я наткнулся на такой метод:
public float[] FireNeurons(float[] input)
{
for (int i = 0; i < layers.Length; i++)
{
for (int j = 0; j < layers[i]; j++)
{
if (i == 0)
{
neurons[i][j] = input[j];
}
else
{
neurons[i][j] = 0;
for (int k = 0; k < layers[i - 1]; k++)
{
neurons[i][j] += neurons[i - 1][k] * connections[i][j][k];
}
}
}
}
return neurons[layers.Length - 1];
}
Этот метод вызывается каждый кадр, чтобы птичка смогла рассчитать в зависимости от близости к ней препятствий, прыгать ей или нет.
Здесь
- layers - это массив [5, 10, 10, 2]
- neurons - двумерный массив размером 4 х layers[i]
- connections - трехмерный массив размером 4 х layers[i] х layers[i-1], значения в котором генерируются случайно в диапазоне (-0.5, 0.5)
- input - это массив размером 5, в котором хранятся нормализованные расстояния до препятствий вверх, вправо-вверх, вправо, вправо-вниз, вниз, высчитанные с помощью Raycast'a
Так вот, сам вопрос:
Как именно происходит расчет neurons? Почему именно мы прибавляем neurons[i - 1][k] * connections[i][j][k] к neurons[i][i]? Что к чему в данном случая мы добавляем, но не с математической компьютерной стороны, а с человеческой. Получается, мы постепенно прибавляем вес т.н. вес нейрона к весу его соединения?
Сам автор данной программы оставляет комментарий, что это - Linear Activation Function - линейная функция активации, я почитал про нее, но не совсем понял, как именно она работает. Даже не так, я скорее понял, но не совсем осознаю, почему мы складываем и конкретно что с чем мы складываем.
Понимаю, что мой вопрос возможно сумбурен и непонятен, но все же я не просто прошу сделать или объяснить все за меня. Я смог разобрал большую часть сам, подробно описал собственные мысли, вложил свои силы в это, но нуждаюсь в помощи здесь. Так что надеюсь вопрос не закроют:)