
Andrey
07.10.2016
12:11:39
Обновления весов-то происходят послойно, но по готовым формулам, полученным как описано выше

Леонид
07.10.2016
12:14:05

yopp
07.10.2016
12:42:35
Так, переложил

Google

yopp
07.10.2016
12:45:59
Да
Окей, мы нашли функцию потерь. В рассматриваем случае её значение 0.2304
«Производную функции потерь как функции от значения активации последнего нейрона»
Тоесть теперь надо найти f' от z?

Леонид
07.10.2016
12:52:01
А разобрать чужой код - не подходит?

yopp
07.10.2016
12:52:16
Я принцип понять хочу, а не реализацию
Иначе я потом буду как мартышка, чот делать но не понимать физического смысла

/dev
07.10.2016
12:58:10
Вот, разжевано

yopp
07.10.2016
13:03:15
Считайте что у меня три класса церковно-приходской школы и сертификат дьякона.

/dev
07.10.2016
13:04:55
Ну а что ты без матана здесь хотел?

yopp
07.10.2016
13:06:18
Начинается

Леонид
07.10.2016
13:08:42

yopp
07.10.2016
13:09:12
Физический смысл производных, предположим, понимаю: это скорость изменения некоторой функции

Google

Timur
07.10.2016
13:18:37

Леонид
07.10.2016
13:20:00
Я принцип понять хочу, а не реализацию
Принцип такой. Считаем нейронку многомерным пространством. Считаем производную вдоль одной оси - знаем, как поменять значение на этой оси (то есть, какой-то вес), что бы кост-функция уменьшилась.
Backpropagation - это способ, как приблизительно считать такие производные.
Не единственный, кстати.

yopp
07.10.2016
13:21:26
Или веса + входы?

Леонид
07.10.2016
13:21:52
Как конкретно он их считает - это уже матан. И проще всего это понимать именно из матана, а не с помощью аналогий из физики. Если я где-то ошибся, уважаемые участники меня поправят
*не влияет

yopp
07.10.2016
13:23:47
Окей, у меня в моём случае 8 осей
Что такое кост-функция?
Это то что Андрей называл как функцию потерь?

Andrey
07.10.2016
13:26:25
Да

Леонид
07.10.2016
13:26:29
Ну да.

yopp
07.10.2016
13:26:34
Так, окей.
Пойдём от одного нейрона. У него есть вход, у входа есть 1 вес, есть линейная активационная функция s(x) = 1x, есть выход.

Леонид
07.10.2016
13:28:19
Она может быть любая. Это важно понимать для понимания принципа. Среднеквадратичное отклонение берут потому, что оно удобно для всяких производных. Закона, что нужно брать именно его - нет, можно другую взять.

yopp
07.10.2016
13:30:00
Будем считать что мы хотим его научить умножать на 2. Набор для обучения i = [1,2,3] t = [2,4,6]. Начальный вес пусть будет 0.01
получается нейрон описывается как n(i, w) = s(i * w)

Леонид
07.10.2016
13:31:02
Активационную функцию берут сигмоиду тоже для удобства. Можно взять линейную, как ты предложил, но не получится применить стандартные подходы

yopp
07.10.2016
13:31:17
Не торопись

Google

Леонид
07.10.2016
13:31:53
Набор со ошибкой

yopp
07.10.2016
13:32:23
упс, да

/dev
07.10.2016
13:32:25

yopp
07.10.2016
13:32:26
поправил
Значит, для начала посмотрим что у нас получается для первого примера:
i = 1, t = 2, w = 0.01
n(1, 0.01) = s(1*0.01) = 1*0.01 = 0.01

/dev
07.10.2016
13:33:31
Другой вопрос, что реально не надо знать точный градиент, особенно в стохастической оптимизации

yopp
07.10.2016
13:35:18
Расчитываем ошибку используя квадратичную функцию потерь m:
m(t, n) = (t - n)^2
в нашем случае это будет m(2, 0.01) = (2 - 0.01)^2 = 0.9801, так?

Леонид
07.10.2016
13:38:39
1.99 в квадрат возвел с ошибкой
А так - да

yopp
07.10.2016
13:39:19
Ой. Да: 3.9601
Так, я щас в терминах слегка запустался. Квадратичное отклонение это Standard Deviation?

Boojum
07.10.2016
13:42:09

Tsimur
07.10.2016
13:42:38
да
правильнее вроде среднеквадратичное :)

yopp
07.10.2016
13:43:44
Гхм, тогда я чота совсем перестал понимать, почему возведение в степень если stdev это квадратный корень от variance?

Леонид
07.10.2016
13:44:31
Да, ты можешь посчитать ответ твоего нейрона для всех примеров, а не только для одного. И, соответственно, сложить квадраты ошибок и поделить на количество примеров
Как же длинно это все на русском описывается )

yopp
07.10.2016
13:48:30
Так (t - n)^2 это же (t - n)^2/1 что есть variance
а stdev это корень от variance

Google

Леонид
07.10.2016
13:48:54

yopp
07.10.2016
13:49:28
Ага, окей, это значит потенциальный разброс значений в некотором ряду. Окей
Дисперсия, во
Окей, посчитаем дальше:
i = 2, t = 4, w = 0.01
n(4, 0.01) = s(4*0.01) = 1*0.04 = 0.04
m(4, 0.04) = (4 - 0.04)^2 = 15.6816
Если считать для двух примеров, то будет: ((2 - 0.01)^2 + (4 - 0.04)^2)/2 = 9.82085

Леонид
07.10.2016
13:55:57
Лучше mnist распознавать здесь, в чате ). Будет такая медленная-медленная нейронка на человеческих процессорах )

yopp
07.10.2016
13:58:54
Чтобы задать нейросеть, нужно настроить ее веса. Будем делать это, оптимизируя среднеквадратичную ошибку.
Окей, это понятно. Мы нашли какой-то коэфициент ошибки и хотим его загнать в какую-то минимальную область меняя веса
Дальше идёт фраза с которой меня начинают терять: Для настройки весов нам понадобятся производные функционала по весам

Boojum
07.10.2016
14:01:12

Леонид
07.10.2016
14:02:04
Да. Мы можем считать, что у нас есть функция N(w), которая нам и выдает 9.8
И нам нужно подобрать такие w, что бы функция выдала ноль или близко к этому.
В математике это называется - найти минимум функции. Он не всегда бывает, но в нашей функции - квадрат в конце, поэтому минимум точно есть

yopp
07.10.2016
14:03:23

Леонид
07.10.2016
14:03:58
А вот для поиска минимума, у нас есть несколько вариантов. Градиентный спуск - один из них

yopp
07.10.2016
14:07:51
ммм, а градиент это и есть приращение
он-же slope, он-же есть смысл производной
Так, ощущение что мы уже где-то близко
Так, возвращаемся к примеру: n(i, w) = s(i * w); s(x) = 1x n(i, w) = 1*(i * w) = i * w
почему мы рассматриваем N(w), а не n(i,w)?

Леонид
07.10.2016
14:15:23
Потому что обучающие примеры - константа

Google

Леонид
07.10.2016
14:16:21
Они не меняются, пока мы обучаем нейронку. И правильные ответы не меняются. Меняются только веса. То есть наша функция - это функция весов

yopp
07.10.2016
14:16:51
Резонно

Леонид
07.10.2016
14:17:57
И нам нужно найти на графике этой функции точку, где она минимальна. А потом линейкой провести линию к осям и узнать W :)
Это если к графическому смыслу свести

yopp
07.10.2016
14:18:35
Так, щас я вооружусь табличным процессором
Окей, вооружился: https://yopp.in/X7y

Jim
07.10.2016
14:26:10
Посоны, есть база хелпдеска, небольшая - порядка 20к записей, хочу сговнякать сервис который будет рекомендовать для новых заявок тип. Что лучше подойдёт для решениях этой задачи? Инструментов множество
Пока смотрю в сторону питона, но там тоже полно всякого
Может уже есть готовые решения?

yopp
07.10.2016
14:30:30
Если мы рассматриваем только весы
Как быть с тем, что результат функции нейрона зависит от i?
m(t, n) = (t - n)^2, где n наш нейрон

Леонид
07.10.2016
14:35:31

yopp
07.10.2016
14:36:48
Квадратов чего?

Леонид
07.10.2016
14:37:20
Квадратов разницы между правильным ответом и посчитанным

yopp
07.10.2016
14:37:28
Так, variance
у нас был вес 0.01, мы variance посчитали для всех примеров

Леонид
07.10.2016
14:37:53
А что бы посчитать среднее, нужно сначала посчитать все нейроны

yopp
07.10.2016
14:38:03
Мы сейчас один нейрон рассматриваем