Чтобы решить эту проблему в более общем смысле, первый взгляд на какие переменные и каковы фиксированные параметры.
В основном вы получаете на вход взвешивает вектор ж= [1.5, -1, 1, 2]
и функция передачиg(x) = (sign(x)+1)/2
, и вы хотите найти вход вектор в так, что: g(
ж*
в) = +1
(как произведение строки и вектора колонки), поэтому:
g(sum_over_i(w_i*in_i)) = 1 # product of vectors
g(w0*in0 + w1*in1 + w2*in2 + w3*in3) = 1 # roll out the sum
g(-1.5 - in1 + in2 + 2*in3) = 1 # replace the values of w and in
0.5*(sign(-1.5 - in1 + in2 + 2*in3)+1) = 1 # definition of g(x)
sign(-1.5 - in1 + in2 + 2*in3) = 1 # simplify
-1.5 - in1 + in2 + 2*in3 >= 0 # by def: [sign(x)=1 iff x>=0]
Обычно вы бы решить это уравнение с помощью вычисления производных, но так как входы в может принимать только значения 0
или 1
, мы можем просто перечислить все случаи (есть 2^n
или 8
случаев):
in1 in2 in3 -1.5-in1+in2+2*in3
-----------------------------------
0 0 0 -1.5
0 0 1 0.5 *
0 1 0 -0.5
0 1 1 1.5 *
1 0 0 -2.5
1 0 1 -0.5
1 1 0 -1.5
1 1 1 0.5 *
Следовательно, мы получаем значения в, для которых указанное выражение положительно.
спасибо gnovice, мне интересно, можете ли вы ответить на мой другой вопрос? если я применил алгоритм псевдокода http://en.wikipedia.org/wiki/Artificial_neuron, к примеру, результат будет таким же, как и ваш ответ? –
@mary: Да, этот псевдокод показывает, как вы вычислили значение вывода (с пороговым значением 0). Он по существу использует приведенную выше формулу I: если формула имеет значение true (т. Е. Сумма взвешенных входов на левой стороне больше порога), то из нейрона получается ненулевой вывод. Единственная проблема, которую вам следует учитывать, - использовать ли «>» или «> =» (т. Е. Если сумма 0 для взвешенных входов дает выход 0 или 1). – gnovice
Спасибо за дополнительное разъяснение, гновиц. Я не был уверен в этом. Большое спасибо за ваш ответ! –