Комментарии 46
Увидела формулы, мне стало плохо и я поняла, насколько я тупая :((
+4
Хорошо бы ссылку, чтобы скачать целиком код
+2
Вы — большой молодец. Разложили по полочкам.
Кстати, вам не попадались статьи со сравнением скорости работы различных алгоритмов обучения? Хотя бы применительно к какой-то конкретной задаче. Было бы интересно сравнить.
Кстати, вам не попадались статьи со сравнением скорости работы различных алгоритмов обучения? Хотя бы применительно к какой-то конкретной задаче. Было бы интересно сравнить.
0
не попадались, все хочется почитать про всякие другие крутые алгоритмы, но не доходят руки. оправдываю себя тем, что если градиентный спуск работает на задаче плохо, то замена алгоритма если и улучшит качество, то не сильно, лучше копаться в структуре сети и в других параметрах. ну это чисто интуитивное наблюдение
+1
ну да и обратная сторона, если градиентный спуск дал хороший результат то и более крутой алгоритм даст хороший, и может чуть лучше. проверял на задаче OCR. в сами эти модные алгоритмы не вникал, брал готовые на матлабе
+1
По-идее, алгоритм обучения на качестве никак особо не может сказаться. Точнее, сеть либо будет обучена, либо не будет.
А вот на «толстых» задачах с входными векторами больших размерностей и со сложной топологией сети смена алгоритма может дать ощутимый прирост в скорости обучения.
Это если говорить про перцептроны, конечно. В других моделях свои нюансы.
А вот на «толстых» задачах с входными векторами больших размерностей и со сложной топологией сети смена алгоритма может дать ощутимый прирост в скорости обучения.
Это если говорить про перцептроны, конечно. В других моделях свои нюансы.
0
да на счет скорости мое империческое правило не распространяется -) все новые алгоритмы она как раз на ускорение заточены
а это как? какой критерий обученности сети? по идее сеть с рандомными параметрами уже обучена, просто хренова -) сеть останавливает обучение как только попадает в некий локальный минимум (ну в общем случае, может есть алгоритм какой нибудь который видит «дальше» локальных), а вот уже в каком минимуме она остановится зависит в том числе и от алгоритма. но не только. начальная инициализация весов тоже крайне важна.
в общем состояние обученности это не однозначное состояние -)
Точнее, сеть либо будет обучена, либо не будет.
а это как? какой критерий обученности сети? по идее сеть с рандомными параметрами уже обучена, просто хренова -) сеть останавливает обучение как только попадает в некий локальный минимум (ну в общем случае, может есть алгоритм какой нибудь который видит «дальше» локальных), а вот уже в каком минимуме она остановится зависит в том числе и от алгоритма. но не только. начальная инициализация весов тоже крайне важна.
в общем состояние обученности это не однозначное состояние -)
0
Ну да, я не совсем корректно выразился. Имел ввиду про локальный минимум.
Да, все весьма относительно в плане обученности сети :)
Да, все весьма относительно в плане обученности сети :)
0
все новые алгоритмы она как раз на ускорение заточены
Точнее, на получение хорошего ответа за приемлемое время. Акцент всё же на точности, а не на скорости.
сеть останавливает обучение как только попадает в некий локальный минимум
Или в длинный овраг с маленьким градиентом
ну в общем случае, может есть алгоритм какой нибудь который видит «дальше» локальных
Есть методы глобальной оптимизации. Но по понятным причинам, они медленные.
0
По-идее, алгоритм обучения на качестве никак особо не может сказаться. Точнее, сеть либо будет обучена, либо не будет.
С плохим алгоритмом сеть свалится в первый попавшийся локальный минимум. Или будет обучаться годами.
0
Кстати, вам не попадались статьи со сравнением скорости работы различных алгоритмов обучения? Хотя бы применительно к какой-то конкретной задаче.
Кстати, может кто знает. Юзал для нейросетей на Java Encog (вроде самый быстрый из NS-фрэймворков для Java, на C# он тоже есть) и пытался приметить обучение через Levenberg-Marquardt (вроде самый быстрый метод, на примитивных тестовых задачах отрабатывает на порядки быстрее, чем Resilient Propagation). Так вот какую бы реальную задачу (а это у меня всегда как минимум несколько десятков входных нейронов) я ни пытался так решать сетью с таким методом обучения, всегда отказывается тренироваться, ссылаясь на нехватку памяти (а 2 гига я ей выделяю спокойно). Так вот интересно: сколько входных нейронов ей можно подсунуть так, чтобы она не поперхнулась?
0
Отличное изложение!
Очень похоже на то, как объясняли в Стенфордском курсе.
Очень похоже на то, как объясняли в Стенфордском курсе.
0
НЛО прилетело и опубликовало эту надпись здесь
честно говоря первый раз слышу -) а что это? случаем не там где learning rate изменяется динамически?
0
Ну все, вы попали. Я вас заплюсовал.
0
Большое спасибо! Весьма мало таких статей где мат. формулы поясняются в виде кода — а это очень ценно! (Тем более c#).
0
Хотел бы вам (автору) предложить прочитать одну мою статью здесь Резюме проблемы «двух и более учителей» и субъективное мнение о ИИ-сообществе. Там есть заголовок «Задача». Можете вашей реализацией решить поставленную там тестовую задачу и показать результат в аналогичном виде. Было бы интересно сравнить. (К сожалению, я сейчас занят другим и думаю руки дойдут до этого не скоро). Ниже в комментариях, есть еще один вариант реализации вроде как тоже с BackProp, но там без исходников — поэтому доверия меньше.
0
попробую на днях, а так сходу отвечу что решит наверняка. еще в 1969 году… а лучще я цитату с педивикии приведу -)
так что если вы применяли именно персептрон, то вполне он мог и не решить задачу
В 1969 году Марвин Минский и Сеймур Паперт опубликовали книгу «Перцептроны», где математически показали, что перцептроны, подобные розенблаттовским, принципиально не в состоянии выполнять многие из тех функций, которые хотели получить от перцептронов.
так что если вы применяли именно персептрон, то вполне он мог и не решить задачу
0
Про Минского вы зря :)… то о чем говорил Минский ровно также относится и к BackProp… но тут речь совсем о другом…
Вопрос не в том решит или нет (оба варианта решают задачу на раз). Вопрос как решит.
Вопрос не в том решит или нет (оба варианта решают задачу на раз). Вопрос как решит.
0
а я и не сказал что Минский писал про бэкпроп, он писал про персептрон, и вы используете персептрон, вы даете не полные данные, он не обучается. можно предположить что это как то связанно -)
0
Вы пишите не о чем. Минского вы же не читали :) он писал и о том и о другом, кстати… про перцептрон Розенблатта, конечно, больше.
Дальше вообще странная фраза «вы даете не полные данные, он не обучается», какие данные ?, почему не обучается? Я ему даю все, что надо и он замечательно обучается. Похоже Вы чего-то не поняли… но я не понимаю что.
Дальше вообще странная фраза «вы даете не полные данные, он не обучается», какие данные ?, почему не обучается? Я ему даю все, что надо и он замечательно обучается. Похоже Вы чего-то не поняли… но я не понимаю что.
0
не читал, но то о чем он пишет можно узнать и по другому -)
да вероятно не понял задачу
убрав каждуй вторую точку и попросив персептрон обобщить оставшиеся, это разве то? вы даете ему часть инфы, просите обобщить. и задача в том, сможет ли это обобщить другая модель, и на сколько лучше/хуже. в общем я так это понял.
да вероятно не понял задачу
Но когда всё известно нет места для прогноза. Поэтому давайте уберем каждую вторую точку
убрав каждуй вторую точку и попросив персептрон обобщить оставшиеся, это разве то? вы даете ему часть инфы, просите обобщить. и задача в том, сможет ли это обобщить другая модель, и на сколько лучше/хуже. в общем я так это понял.
0
Нет, по другому узнать не возможно, по другому вы узнаете то, что он никогда не писал, а то, что ряд сказочников придумал, что он писал :)
«убрав каждуй вторую точку и попросив персептрон обобщить»
Это стандартная постановка задачи для ЛЮБОЙ нейронной сети — задача прогнозирования. Что вас смущает? Известно, что перцептрон Розенблатта и MLP+BackProp — это делает… вопрос в деталях… они мне и интересны.
«убрав каждуй вторую точку и попросив персептрон обобщить»
Это стандартная постановка задачи для ЛЮБОЙ нейронной сети — задача прогнозирования. Что вас смущает? Известно, что перцептрон Розенблатта и MLP+BackProp — это делает… вопрос в деталях… они мне и интересны.
0
Нет, по другому узнать не возможно, по другому вы узнаете то, что он никогда не писал, а то, что ряд сказочников придумал, что он писал :)
ну если никому не верить то жизни не хватит что бы освоить даже часть того что хотелось бы, да и весь научный мир уже рухнул бы, почему вот вы пишите про математику что то? читали гильберта или минковского? а то как же верить в функциональный анализ -) или я читал пару книжек про эволюцию, докинза там всякого, но дарвина не читал, что теперь мне и в это не верить -)
ну на счет картинки я написал, что попробую на днях проверить -)
0
ок, просто то, что касается Минского — будьте осторожны, там все не так просто, как кажется на первый взгляд.
Мне интересно число ошибок при этом — отдельно для обучающей выборки, отдельно для тестовой, возможность безошибочного обучения на обучающей выборке, а также распределение ошибок по квадрату.
Мне интересно число ошибок при этом — отдельно для обучающей выборки, отдельно для тестовой, возможность безошибочного обучения на обучающей выборке, а также распределение ошибок по квадрату.
0
И да еще. Мне на самом деле важно, то как вы закодируете — там есть два способа: один в точности как я написал: «будем иметь БИНАРНЫХ 16 входов и 256 выходов в перцептроне», и то как упростил ererer «десятичные два входа и один выход».
0
Вы забыли главное, показать, имплементировать практическое применение и расказать почему именно ваша сеть лучше других, без этого смахивает на очередную лабу из политеха.
+1
Насколько большим может быть размеры первого и последнего слоев? Как решается задача классификации текстов с помощью нейронных сетей? Как я понял на вход подается вес каждого слова из корпуса, а размер последнего слоя равен количеству категорий.
0
это уже тема отдельных статей.
последний — это размерность выходного вектора, она задана обычно условием задачи оптимизации
первый-второй-и_т.д. — тут трудно ответить, нет точного решения, есть куча статей с эмпирическими методами, но все это просто рекомендации, а не жесткие требования. во многих книжках любят писать что это как искусство, спроектировать правильную сеть. с этим трудно согласиться, но на текущем этапе развития все темы, нету точных правил проектирования сети, и приходится экспериментировать.
про тексты. размер последнего — да, количество категорий. входной вектор — это например бинарный вектор из всего словаря, где 1 если слово есть в тексте, а 0 если нет. можно вектор фич по другому построить. количество скрытых слоев и их размер на ваш выбор.
последний — это размерность выходного вектора, она задана обычно условием задачи оптимизации
первый-второй-и_т.д. — тут трудно ответить, нет точного решения, есть куча статей с эмпирическими методами, но все это просто рекомендации, а не жесткие требования. во многих книжках любят писать что это как искусство, спроектировать правильную сеть. с этим трудно согласиться, но на текущем этапе развития все темы, нету точных правил проектирования сети, и приходится экспериментировать.
про тексты. размер последнего — да, количество категорий. входной вектор — это например бинарный вектор из всего словаря, где 1 если слово есть в тексте, а 0 если нет. можно вектор фич по другому построить. количество скрытых слоев и их размер на ваш выбор.
0
в самой первой формуле случайно нет ошибки? может x_ i (а не x_ j)?
+1
спс, поправил. прикольно что только спустя столько времени была замечена опечатка =) поздавляю! вы походу первый кто при чтении вникал =)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Алгоритм обратного распространения ошибки с регуляризацией на c#