Чтобы обучить сеть понадобится немаленькая «обучающая» выборка правильных данных: 4 ваших входных параметра + ответ. Таких строк бы да побольше, разных.
У вас 3 булевых входа (true/false) и один реальный (float). На выходе true/false.
Возможно, для этой задачи больше подойдёт не нейронная сеть, а
дерево принятия решений. Хорошее
видео, объясняющее, как построить такое дерево на Python (на англ., но можно включить титру с автопереводом на Русский язык)
Возвращаясь к нейронной сети и весам. На рисунке – три слоя: входной, скрытый и выходной. В каждом слое от 1 до нескольких «нейронов».
У каждого нейрона два параметра, допустим, a и b. На вход к нему попадает некое значение x. Нейрон его умножает на a и прибавляет b, чтобы отправить дальше.
Часто сеть инициализируют случайными весами, чтобы они не были нулевыми.
Затем начинают прогонять через неё готовые, «обучающие» примеры. И смотреть, что на выходе. Разницу между «ожиданием» и «реальностью» называют «потерей» (loss). Её нужно минимизировать. Тема длинная, я плохо рассказываю. Лучше посмотрите курс какой-нибудь. Ответы на ваши вопросы:
1. коэффициентов обычно не так много. Их держат в памяти во время работы сети и сохраняют в файл на диске, чтобы потом можно было снова загрузить.
2. связи все-ко-всем. Если какие-то из них не нужны – ставится нулевой вес. Расчёт этих коеффициентов обычно делается «оптом» – операциями с матрицами.
3. ваш код пока далёк от реализации нейронной сети, а ближе к упомянутому выше дереву принятия решений.
4. в случае нейронной сети и
градиентного спуска считается частная производная и делается маленький «шаг» в нужном направлении – коэфф. изменяется с текущего значения «чуть-чуть».