Во-первых, в вашем "sigmoid_derivative (x)" вход в эту функцию уже является выходом сигмоида, но вы снова получаете сигмоиду и затем вычисляете производную, то есть одну проблему, это должно быть:
return x * (1 - x)
вторая проблема, вы не используете предвзятость, откуда вы знаете, что граница вашего решения пересечет источник в пространстве гипотез задачи?так что вам нужно добавить термин смещения.
И последнее, что я думаю, что ваши производные не верны, вы можете обратиться к Эндрю Нг курс глубокого обучения 1, неделя 2 на coursera.org, чтобы получить список общих формулдля вычисления обратного распространения в нейронных сетях, чтобы убедиться, что вы делаете все правильно.