244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Нейронные сети: XOR. Ошибка в алгоритме обучения21.05.2017, 16:04. Показов 3670. Ответов 16
Метки нет (Все метки)
Здравствуйте!
Никак не могу понять, где я ошибся, при реализации простой нейронной сети. Сеть обучается через раз. Иногда дает абсолютно верные результаты, иногда нет. Такое ощущение, что где-то проваливается в локальный минимум и застревает там. Пытался устранить этот эффект импульсом, но результата не дало. Используемая функция активации: сигмоида Инициализация весов: случайная инициализация (lower: -1.0 upper: 1.0) Алгоритмически вроде бы все верно: 1. Прямой проход
2. Расчет ошибки и ее обратное распространение
3. обновление весов
Выход сети: Код
0 0: 0,030 0 1: 0,692 1 0: 0,692 1 1: 0,695 Код
Dense{} Type = dense real , numRows = 3 , numCols = 2 0,072 0,252 -6,590 -6,780 -6,670 -6,859 Output{} Type = dense real , numRows = 3 , numCols = 1 0,821 -3,528 -4,393 Код
0 0: 0,051 0 1: 0,956 1 0: 0,955 1 1: 0,047 Код
Dense{} Type = dense real , numRows = 3 , numCols = 2 -3,146 -3,199 5,653 -5,853 -5,869 5,693 Output{} Type = dense real , numRows = 3 , numCols = 1 -3,486 7,086 7,100 Спасибо! Добавлено через 59 секунд Задачи или, или-не, и, и-не как однослойная, так и многослойная нейронная сеть решает (в моей реализации)
0
|
21.05.2017, 16:04 | |
Ответы с готовыми решениями:
16
Нейронные сети Нейронные сети (NN) Нейронные сети Нейронные сети |
11 / 20 / 3
Регистрация: 12.10.2015
Сообщений: 126
|
|
22.05.2017, 20:57 | 2 |
Никто Вам ничего не посоветует без кода Вашей НС, XOR при классической реализации не всегда будет обучаться на простых архитектурах(2,1) на посложнее(2,10,1...) вероятность не сходимости гораздо меньше
зы ну и сигмоида это не идеал, лучше гипертангенс
1
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
23.05.2017, 00:31 [ТС] | 3 |
Спасибо! Как раз-таки именно этот вопрос и интересовал, так как что в литературе, что в статьях везде был рассмотрен идеальный вариант обучения.
Про недообучение\переобучение знаю, но так упорно везде писалось, что задача xor решается прямо-таки железно, что вначале и не сомневался в том, что так оно и есть Попробовал по вашему совету использовать гипертангенс и немного усложненную архитектуру сети и, действительно, алгоритм сходится в большинстве случаях. Хотя с сигмоидой и несколькими скрытыми слоями результат ненамного лучше, чем в изначальной конфигурации.
0
|
11 / 20 / 3
Регистрация: 12.10.2015
Сообщений: 126
|
|
25.05.2017, 02:39 | 4 |
от инициализации ещё существенно зависит качество сходимости, от ускорения и сглаживания градиентного спуска и тп. проще запускать параллельно множество сеток и выбирать наиболее успешную
1
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
25.05.2017, 03:10 [ТС] | 5 |
сахатый, Тоже предполагал, что в некоторых случаях начальная инициализация весов была успешнее, чем в других, и это сильно влияло на сходимость. Изменение количества слоев и скрытых нейронов в них при этом несильно помогало, в отличие от изменении функции активации. Как-то в большинстве источниках упускается, как мне показалось, значимость активационной функции.
Просто до этого думал, что на таких задачах не будет проблем с этим, однако, как оказалось, сильно ошибался ^_^ Такую же ситуацию наблюдаю и при использовании логистической регрессии на классическом наборе данных о листьях ириса. В некоторых случаях точность классификации достигала 97%, а в некоторых алгоритм вовсе не сходился (около 3-5%).
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
26.05.2017, 21:24 | 6 |
Прочитайте, в конце концов, буржуинскую методичку 98 года Efficient backprop
Если и не говорят - то потому, что буквари пересказывать уже надоело. Особенно почти через 20 лет после выхода конкретно этого указанного букваря.
1
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
27.05.2017, 00:50 [ТС] | 7 |
Спасибо! К сожалению, упустил ее из виду.
Но ведь это же основы, а там, где ожидаешь их увидеть, их нет
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
27.05.2017, 19:19 | 8 |
К сожалению, многие люди (среди них - и пишущие ВУЗовские учебники) не понимают даже основ.
Поэтому нужно уметь отделять компетентных от бредогенераторов Над последними можно только смеяться (как я посмеялся в http://neuropro.ru/memo340.shtml над типичными их представителями), серьёзно их писульки не рассматривая. Но меня, правда, и буржуинские учебники полностью не удовлетворяют (я про Хайкина это отдельно писал, из указанной методички ЛеКуна я тоже не использую очень многое из обведённых там в рамочку рецептов).
1
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
27.05.2017, 20:25 [ТС] | 9 |
VTsaregorodtsev, Опять-таки, к сожалению, мой опыт пока не позволяет мне судить о компетентности авторов
Ради интереса почитал http://neuropro.ru/memo322.shtml и возник вопрос, на который, возможно, вы уже отвечали: Как много времени заняло обучение сверточной нейронной сети на достаточно больших объемах данных? В статье вы писали о "минимальнейшем комфорте".
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
28.05.2017, 21:58 | 10 |
Дык, есть описание для размера базы, похожего на один из указанных Вами.
Для 60тыс картинок 28*28 (база MNIST) ориентиры времени есть в http://neuropro.ru/memo344.shtml Поделите тамошние времена на 3 (150 эпох - излишне много, за полсотни всё сходится. В Вашей задаче - думаю, тоже 50 эпох хватит). Далее - может, ещё на какой делитель (если вдруг Ваша нейросетка была размером меньше, чем указанная в хабровском обзоре, на который там дана ссылка). Это, правда, уже для "сейчас" ориентиры - а тогда, когда писался указанный Вами пост, прога помедленнее была примерно в полтора раза. И в указанном мной посте - свёрточная сетка "классическая" ЛеКуновская, со слоями сабсэмплинга. А в названном Вами - в варианте П.Симарда, без сабсэмплинга (он делается смещением положений полей свёрточных нейронов на шаг >1), но в 4 раза быстрее (при stride=2 ибо получается в 2 раза меньше свёрточных нейронов по вертикали и горизонтали, и 2*2=4). В общем, большие базы можно прикидочно проверять именно на таком варианте структуры - без сабсэмплинга (хотя тут экономия времени получается малой) и со stride=2 у свёрточных слоёв. Т.е. хоть тогда прога и помедленнее была - но большие базы всё-таки комфортно съедались из-за менее вычислительнозатратной структуры нейросетки.
0
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
31.05.2017, 00:54 [ТС] | 11 |
VTsaregorodtsev, Спасибо, интересная информация. Мне, правда, не совсем понятно, почему при использовании перспетрона у вас ушло ~17 минут, а при использовании сверточной сети - ~1 час и 17 минут. Не должно ли быть наоборот? Ведь, по сути, в сверточной нейронной сети количество проводимых вычислений меньше, чем у персептрона.
В моем случае использовалась видеокарта gtx 770 и время обучения заняло около 1,5 часа (Python 2.7\Keras версию не скажу уже\Theano 0.8.**). На более поздних версиях keras и theano время обучения несколько снизилось (как и обещали сами разработчики в пределах n%). На процессоре (i5 3570), как я уже упомянул, время было каким-то совсем заоблачным. Сложность нейронной сети при этом не сильно влияла на время, если не брать в расчет гиперпараметры, а только набор слоев.
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
01.06.2017, 07:13 | 12 |
Наоборот, больше вычислений.
Хотя размер бинарного файла с записанной свёрточной сеткой при этом действительно может быть меньше, чем размер файла с персептроном.
0
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
01.06.2017, 20:41 [ТС] | 13 |
VTsaregorodtsev, Значит я неправильно оценивал количество и сложность вычислений в обоих случаях. Я думал, что при использовании сверточной нейронной сети не только количество нейронов меньше, что ведет к уменьшению затрат на хранение весов и иной информации, но и за счет этого количество проводимых операций существенно меньше. Или это утверждение верно в том случае, если в такой сети будут слои судбискретизации? Они же ведь как раз уменьшают размерность получившихся матриц после операции свертки.
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
04.06.2017, 22:29 | 14 |
В св.сети в некотором слое стоит меньшее число "плоскостей" свёрточных нейронов, чем (обычно) число нейронов в слое персептрона.
Но в каждой плоскости могут быть сотни и даже тысячи нейронов. Например, при картинке 30*30 и смещении рецептивных полей св.нейронов на единицу в плоскость влазит 26*26=676 нейронов. Просто у всех нейронов в некоторой плоскости - будет одинаковый=общий набор весов синапсов. И умножив эти сотни-тысячи нейронов в плоскости на число плоскостей в слое - получим уже о-го-го Далее, у каждого свёрточного нейрона может быть малое рецептивное поле. Например, 5*5. Но если свёрточный слой уже не первый - то в нём нейрон будет кушать сигналы со всех плоскостей (пофиг - свёрточных или порезанных в размере субдескретизацией) предыдущего слоя, т.е. иметь связь 5*5 () с каждой предыдущей плоскостью. Т.е. у нейрона при десятке плоскостей предыд.слоя будет 250синапсов независимо от того, как субдескретизация (если она была) порезала размер предыдущих плоскостей (размер-то она могла порезать, т.е. число нейронов в след.плоскости стало меньшим, но число синапсов-то для связи не уменьшилось). В общем, в свёрточной нейросетке нейронов много, синапсов у них тоже много. Хоть пулинг и уменьшает размерность "полян" сигналов - но после него обычно ставится большее число свёрточных плоскостей, дабы малое число выделенных пулингом признаков соединить в большее число более высокоуровневых признаков.
1
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
05.06.2017, 03:29 [ТС] | 15 |
VTsaregorodtsev, теперь стало понятнее, с чем связано такое различие во времени обучения, осталось только самому это сделать
Спасибо за подробное объяснение, буду дальше разбираться теперь
0
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
||||||||||||||||
12.07.2017, 00:57 | 16 | |||||||||||||||
собственная реализация, обучение на CPU
тест перед внедрением Adam, сеть прямого распространения, 2 слоя
Добавлено через 2 часа 27 минут
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
|
|
12.07.2017, 21:27 | 17 |
А от Адама вообще ничего не зависит.
Ну и, ИМХО, relu в персептроне - мастдай.
0
|
12.07.2017, 21:27 | |
12.07.2017, 21:27 | |
Помогаю со студенческими работами здесь
17
Сверточные нейронные сети Нейронные сети в трейдинге Сверточные нейронные сети Спектроскопия и нейронные сети Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |