@bigdata_ru

Страница 16 из 327
Maxim
05.10.2016
13:15:57
Привет, какие технологии используются для анализа логов и распространеная ли это задача?

Джумурат
05.10.2016
13:55:12
что именно анализировать?

Andrey
05.10.2016
16:39:01
ELK stack

Maxim
05.10.2016
16:53:08
А вообще, что можно развернуть для анализа работы интернет магазина?

Google
ThisIs
05.10.2016
17:03:08
На сколько большой?

Интернет магазин

yopp
06.10.2016
17:11:39
и зачем это тут?

гхм

слушайте, а объясните на пальцах про обратное распространение ошибки в многослойных сетях

с выходным слоем всё более-мене понятно: вычисляем ошибку по каждому выходу и с каким-то коэффициентом подтягием веса так, чтоб уменьшить ошибку

Andrey
07.10.2016
10:02:19
Чтобы поменять веса на входе последнего слоя, нужно поменять веса на всех предыдущих

Тут работает цепное правило - умножение производных, а это и есть обратное распространение.

yopp
07.10.2016
10:09:23
тогда я что-то пропускаю

Andrey
07.10.2016
10:17:57
Ну не знаю

yopp
07.10.2016
10:22:06
мне на примерах проще

вот предположим у меня есть вот такой многослойный прецептрон

https://yopp.in/X2z

Google
yopp
07.10.2016
10:22:56
я щас буду рассуждать, ты меня поправь где я не прав

предположим что у всех нейронов АФ — сигмоид

ой, я кажется с входным слоем наебался

вот так должно быть https://yopp.in/X3F

возьмём например нейрон a, получается что он из себя представляет функцию a(i0, w2) = sigm(i0 * w2), так?

получается первый слой описывается двумя функциями: a(i0, w2) и b(i1, w3).

будем считать a и b результатом этих функций при известных параметрах переменных ix и wx. Получается нейрон d описывается как d(a,b, w4, w7) = sigm(a * w4 + b * w7), так?

/me почесал Andrey

Andrey
07.10.2016
11:01:54
I0 нету, есть i1

yopp
07.10.2016
11:02:10
ой, да

Andrey
07.10.2016
11:02:22
А так - да, схема такая

yopp
07.10.2016
11:04:45
Окей, получается что нас интересует результат функции z(d, e, w8, w9) = sigm(d * w8 + e * w9)

Andrey
07.10.2016
11:05:48
Да, и это функция от других функций

Подставь вместо значений активаций каждого нейрона саму функцию активации

От выхода до входа, чтобы все веса явно фигурировали

Затем функция потерь минимизируется относительно этой сложной функции, которая задает результат работы нейросети

yopp
07.10.2016
11:09:30
Функция потерь?

Andrey
07.10.2016
11:09:49
Ну да, мы ж ее минимизируем

Мимимизируем, блин

yopp
07.10.2016
11:10:42
Так, я понимаю что тебе всё очевидно, мне вот не очень :) Я за это академичекие публикация неперевариваю. Читаешь и чувствуешь себя идиотом

Google
yopp
07.10.2016
11:11:00
Функция потерь, он что характеризует в этой системе?

Andrey
07.10.2016
11:11:52
Можно явно записать эту функцию потерь как функцию от всех весов, найти частные производные по каждому весу - это и будет искомый градиент, который укажет, куда эти веса менять

yopp
07.10.2016
11:12:06
Вот предположим у нас вот такое вот начальное состояние: https://yopp.in/X68

Andrey
07.10.2016
11:12:37
А уравнения обратного распространения ошибки получаются после упрощения всех выкладок

yopp
07.10.2016
11:12:49
для простоты, пусть это будет логическое И. В этом случае мы хотим чтоб o1 при таких вводных параметрах стремился к 1.0

Andrey
07.10.2016
11:15:01
И в чем затык? Фунция потерь пусть будет квадратичная --> минимизируем квадрат разности 1-выход_нейросети

Выход нейросети - функция от весов всех нейронов

Ищем производные по весам - узнаем, как ведет себя функция при их изменении, растет или убывает. И соответственно эти веса изменяем, чтобы функция по каждому весу чуть уменьшилась

Это один шаг градиентного спуска, который повторяется до сходимости

yopp
07.10.2016
11:20:21
Ща, давай я попробую из этого собрать уравнение, мне на примерах проще, потому что я по отдельности принципы более-менее допёр, но в комплексе это звучти как бессмысленный набор слов :(

Матан остался в далёком прошлом

Andrey
07.10.2016
11:21:11
Ну, у меня его после школы не было совсем

Не так страшен черт, короче

yopp
07.10.2016
11:32:42
Окей, вот у нас получилось: sigm(sigm(sigm(i1 * w2) * w4 + sigm(i1 * w2) * w7) * w8 + sigm(sigm(i1 * w2) * w6 + sigm(i2 * w3) * w5) * w9)

https://repl.it/Dqgq

При указанных весах у нас получаеся на выходе: 0.52 ... ошибка 0.48

получается что выход нейросети мы можем записать как: z(i1, i2, w2..w8) = sigm(sigm(sigm(i1 * w2) * w4 + sigm(i1 * w2) * w7) * w8 + sigm(sigm(i1 * w2) * w6 + sigm(i2 * w3) * w5) * w9)

получается нам надо для каждого веса, найти проивзодную dz(...)/dw*?

Леонид
07.10.2016
11:39:41
Выход нейросети лучше описать в цикле на питоне, чем длинной формулой с миллионом скобок

yopp
07.10.2016
11:40:02
Мне сейчас формулу будет гораздо проще понять

Google
Леонид
07.10.2016
11:41:18
Так нужна формула для одного нейрона. И производную искать проще.

Зная наклон функции нейрона, мы знаем, как будет изменяться ошибка, если выход этого нейрона поменяется - расти или уменьшаться, быстро или медленно

Andrey
07.10.2016
11:44:48
А еще лучше - на R

Леонид
07.10.2016
11:44:55
Соответственно, умножаем наклон (производную) на ошибку и считаем это ошибкой данного нейрона.

yopp
07.10.2016
11:45:11
Да можно хоть на брейнфке сейчас писать, это сути не отменяет. Я принцип хочу понять

Andrey
07.10.2016
11:45:47
Для одного нейрона backprop сильно простой

yopp
07.10.2016
11:45:53
Да

Andrey
07.10.2016
11:46:09
Вопрос же про него был, значит слои нужны

yopp
07.10.2016
11:46:23
Понятно что если бы у нас был один вход и один выход и какой-то вес, то мы просто «умножаем наклон (производную) на ошибку и считаем это ошибкой данного нейрона.»

Andrey
07.10.2016
11:47:46
А так мы умножаем производные друг на друга, чтобы не искать производную одной гигантской функции непосредственно

yopp
07.10.2016
11:49:32
Вот там пример, первый вопрос: производные чего мы находим?

z от каждого веса?

или для каждого нейрона по отдельности, то в этом случае для какого их параметров?

Леонид
07.10.2016
11:50:50
Так если нейронов тысяча - мы считаем для каждого отдельно! В этом и прикол, потому что почитать сразу большую функцию мы не можем. Для этого и нужен градиентный спуск - он решает задачу, как постепенно посчитать то, что нельзя посчитать сразу

yopp
07.10.2016
11:51:10
Считаем с конца?

Andrey
07.10.2016
11:51:28
Производную функции потерь как функции от значения активации последнего нейрона и производные функций активации как функций от взвешенной суммы входов

В итоге ничего больше из производных не требуется

yopp
07.10.2016
11:52:38
Так, последний нейрон у нас описывается как z(c,d,w8,w9) = sigm(c * w8 + d * w9)

Мы получили 0.52, ошибка 0.48

Что в этом случае будет из себя представлять функция потерь?

Google
Andrey
07.10.2016
11:55:39
(1-0.52)^2

Вместо 0.52 нужно подставить всю цепочку вычислений этого значения в виде одной функции

yopp
07.10.2016
11:56:49
тоесть пусть t есть искомое значение, функция потерь f(t, o1) = (t-o1)^2?

ммм

блядь :)

Andrey
07.10.2016
11:57:19
Квадратичная функция потерь - да

yopp
07.10.2016
11:57:41
f(t, z(...)) = (t - z(...))^2?

Andrey
07.10.2016
11:58:10
Да

yopp
07.10.2016
11:58:32
Так, окей.

Леонид
07.10.2016
12:00:08
Просто считаем последний слой, из него - предпоследний и так далее

yopp
07.10.2016
12:03:39
Так, щас я бумажки поперекаладываю и вернусь

Andrey
07.10.2016
12:06:41
А как я еще объясню обратное распространение?

Страница 16 из 327