Как стать автором
Обновить

Комментарии 15

Я тоже так думал, но даже в той самой статье упоминается термин multilayer perceptrons, так же как и в коде примера. Видимо это указывает на нелинейную передаточную функцию.
Нет, это так просто обычные feedforward-сети называют) Не перцептрон Розенблатта.
Спасибо!
Я почитал более подробно.
Теперь я понял, почему еще в институте не мог найти общий язык с преподавателями. Я подразумевал под перцептроном как раз feedforward сеть, а они только господина Розенблатта!
Бывает, ага. В своем институте на меня тоже иногда так непонимающе смотрят, в духе «нейронные сети, втф? про них же еще в 60-х сказали, что это неинтересно»)
Знакомая картина. Особенно, когда профессор 85-ти лет начинает рассуждать про то, что это уже давно было в Симпсонах, и вообще — адаптивные фильтры решают все проблемы -)
Персептрон — это не обязательно персептрон Розенблатта, это ещё и обобщения — многослойные ИНС прямого распространения. У Хайкина вот целая глава называется «Многослойный персептрон». Хотя в старой литературе персептрон был только однослойным (но и там есть вопросы, что считать слоем).
На сколько я понимаю исторически есть небольшая путаница с понятиями, но сейчас более или менее принято (опять же как я понимаю) считать перцептрон без срытых обучаемых слоев перцептроном Розенблатта (при этом сами «слои» могу быть, но обучается только последний слой методом коррекции ошибки), остальные же считаются «многослойными» и обучаются различными вариациями backpropagation.

P.S Лично я считаю что называть backpropagation «обучающим» несколько странно — обучают нейронную сеть различные алгоритмы нахождения оптимума (градиентный спуск, bfgs и т.д)
так backpropagation же вроде является градиентным спуском
Ну это как считать. Это алгоритм на выходе дает градиент весов. А как по этому градиенту найти оптимум — это уже задача следующего алгоритма. При этом такие алгоритмы как bfgs пытаются еще по значению и градиенту оценить и вторую производную (хотя тут я совсем профан) и уже с помощью всего этого ищут оптимум.
Backpropogation — это алгоритм вычисления производной. Причем, если не ошибаюсь, в Tensorflow (как и в Theano) он не используется, т.к. производные вычисляются символьно, а не численно. Производные (градиенты) нужны алгоритмам оптимизации — градиентному спуску, например. Обычный градиентный спуск почти не используется, применяют обычно SGD, всякие его модификации с моментами, отдельными learning rate для каждого параметра и т.д.
Ну, иногда точно вычисляет:

www.tensorflow.org/versions/master/tutorials/mnist/beginners/index.html

«Now that we know what we want our model to do, it's very easy to have TensorFlow train it to do so. Because TensorFlow knows the entire graph of your computations, it can automatically use the backpropagation algorithm to efficiently determine how your variables affect the cost you ask it minimize. Then it can apply your choice of optimization algorithm to modify the variables and reduce the cost.»

Кстати, численное значение градиента (за место аналитики, пусть и автоматической) в ML вычисляют только из за проблем с размерами матриц или есть ещё какие причины?
Если вы под «численным» имеете в виду вот эту штуку, то так как раз не делают — это очень медленно. Для нейронов ищут такие функции, чтобы у них были легкие аналитические производные — скажем, для сигмоиды это f(x) * (1 — f(x)), а для RELU вообще просто либо 0, либо 1. Сами производные вычисляются аналитически, а в коде вы просто используете полученную формулу.

Если вы имеете в виду, что такого делает Theano/TensorFlow, чего не умели раньше, то ничего особенного) Чтобы получить производную от ошибки (которая считается на выходе) по весу отдельного нейрона, нужно много-много раз (в зависимости от глубины сети) применить chain rule (вот тут подробности, а вот тут подробности человеческим языком). Чтобы не выписывать для каждого нейрона длинное выражение, проще делать это итеративно — посчитать производную для последнего слоя, вычислить нужную дельту, сделать шаг назад на один слой, использовать дельту для производной следующего слоя, вычислить новую дельту и т.д. Theano может составлять выражение для chain rule автоматически, поэтому ему это не сложно) А так — механизм получается абсолютно одинаковый.
Да, я имел ввиду второй вариант. Спасибо за ссылки и пояснения :)
возможно, что подача на вход пары кадров (текущего и из недавнего прошлого) сможет улучшить реакцию
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории