Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Зачем нужна производна сигмоиды в нейронных сетях?

Эмиль Цветанов Ученик (116), закрыт 4 года назад
На сайте habr увидел интересный код 2 слойной нейронной сети и на другом сайте код 1-слойной нейросети
Вот 1 слойная:
from numpy import array, dot, exp, random
inputs=array([[1,0,0],[0,1,1],[1,1,1]])
outputs=array([[1,0,1]]).T
weights=2*random.random((3,1))-1
for i in range(10000):
output=1/(1+exp(-dot(inputs, weights)))
weights+=dot(inputs.T, (1-output)*output*(outputs-output)

Вот 2 слойная:
import numpy as np
X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in range(60000):
l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
l2_delta = (y - l2)*(l2*(1-l2))
l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
syn1 += l1.T.dot(l2_delta)
syn0 += X.T.dot(l1_delta)

Изначально в 2 слойной не была подключена библиотека numpy и вместо range написано xrange, но наверное это сложности создания сайта с кодом. Так вот, во второй нейросети во время корректировки весов я наткнулся на: l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
В первом коде всё ясно, но почему там например не умножили результат на производную сигмоиды и зачем на него вообще еще нужно умножать? Не знаю почему, но мне кажется что в этом коде где-то ошибка... (наверное потому что в 9 классе такие вещи не проходят и это слишком сложно для моего понимания)
Лучший ответ
user49912 Оракул (51202) 4 года назад
сбрось ссылку на статью
уверен, там приводились какие-то выкладки из алгоритма обучения
Эмиль ЦветановУченик (116) 4 года назад
user49912 Оракул (51202) пролистай статью ниже исходников там есть пара картинок с сигмоидами и текстовое объяснение каждой строчки, показывающее, зачем нужно умножать на производную я не очень шарю в ML, но кажется, что это обычный градиентный поиск или что-то на него очень похожее вполне возможно, что в первом коде просто использовали другой метод обучения для этого, опять же, нужно читать статью, из которой взят первый код, и выяснять, какое обновление весов там юзается навскидку по формуле можно угадать, что происходит, только если есть опыт
Остальные ответы
Васисуалий Лоханкин Мудрец (18551) 4 года назад
в 9 классе такие вещи не проходят
эт для 5-го
Эмиль ЦветановУченик (116) 4 года назад
Вот именно, я ведь в 4)
Васисуалий Лоханкин Мудрец (18551) У-у-у-у-у-...
Роман Данилов Мыслитель (9614) 4 года назад
Производная сигмоиды -- это для кривой развития сложных систем. То есть что-то заумное.
Алексей Большунов Мудрец (10956) 4 года назад
Коррекция весов происходит методом обратного распространения ошибки, в котором ищут такие веса, которые дают минимальную ошибку. Ну, а как найти минимум функции нескольких переменных? Конечно же, методом градиентного спуска. Вот отсюда и производная.
Похожие вопросы