Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 01:23   #1
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию Всего один нейрон! + листинг на С++

Родилось в процессе поиска способа решения дифференциальных уравнений в нейросетевом базисе. Представляю вашему вниманию аппроксимирующий нейрон =) с листингом на C++.
Писал статью на коленке, только суть, в основном без сильных отступлений в стороны. Возможно когда-нибудь отшлифую.

PS: Ооочень медленно, но верно строю интересную теории по НС, вооружившись Прибрамской «голографической нейрофизиологией», теорией функций комплексного переменного, мат. стат., теорией информации и преобразованием Фурье.
PSS: Word 2010
Изображения
Тип файла: jpg pic1.jpg (15.4 Кб, 225 просмотров)
Вложения
Тип файла: doc Всего один нейрон.doc (47.9 Кб, 79 просмотров)
Kostia вне форума Ответить с цитированием
Старый 15.04.2012, 18:03   #2
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Микроскопом гвозди?
Это может аппроксимировать только одну функцию, на которую специально в данный момент обучили.
Внимание, вопрос: зачем? Можно значение просто ВЫЧИСЛИТЬ кучей разных способов и это намного быстрее обучения нейросети.
temaps вне форума Ответить с цитированием
Старый 16.04.2012, 00:20   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

1. Всего 1 нейрон, можно выбрать например метод сопряженный градиентов или хороший метод условной оптимизации, при правильном подходе можно добиться крайне быстрой сходимости до требуемой точности или до той, которую позволяет нейрон
2. Убрав вход x(w1), получим ряд Фурье
3. Непрерывность производной, да и вдобавок их можно брать бесконечно много, если потребуется, ну и интегрировать ряд Фурье тоже можно, а главное n производных и первообразных можно легко запрограммировать.
4. Дополнительно см. примечания

#define N 101 //кол-во известных точек
#define f(x) x*x - log(abs(sin(x))+1) + x*cos(x*x*x) //аппроксимируемая функция

имея 20 пар синусов и косинусов, 50 итераций обучения сети, функция аппроксимируется с точностью до тысячных на [-1, 1].(в тесте принимали участие точки между точками обучения)

PS: нейрон обучался мгновенно

5. При нехватки точности аппроксимации во время обучения можно добавлять пары синусов и косинусов, при достижении их четко определенного количества получим хороший и быстрый интерполятор с хорошими промежуточными значениями при большом количестве обучающих примеров(Ньютон и Ланграж в пролете)

6. Единственный конкурент сплайны, но при увеличении точек разбиения, увеличивается количество необходимой памяти, хз какую производную брать на стыке(хотя легко решаемая проблема), при повышении степени сплайна повышается сложность вывода формулы и конечных формул, что приводит к увеличению накопления ошибки при вычислениях, чего нельзя сказать об итерационных методах, а сводя сплайны к итерационным методам, получаем набор нейронов(по нейрону на каждый участок) про которые идет речь.

7. Крайне легко параллелится как работа нейрона, так и его обучение

Исправьте если где наврал и предложите альтернативу.
Kostia вне форума Ответить с цитированием
Старый 16.04.2012, 01:42   #4
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Сначала ответ прочитал с мыслью, "ну это понятно, блин", потом после 4 пункта задумался.
Более вдумчиво поразмыслил.
5 и 6 пункт убедили меня. Согласен - круто! Жму руку! Если всё будет работать, то эти пункты выбивают все возражения нокаутом :-) А по выкладкам выходит, что вроде всё должно работать :-) Ещё раз жму руку :-)
temaps вне форума Ответить с цитированием
Старый 28.12.2012, 04:56   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Спустя некоторое время осознания и пр. скажу конкретно для чего это может пригодиться.

Многослойные персептрон как всем известно является хорошим нелинейным аппроксиматором, т.к. полностью удовлетворяет ограничениям в теореме об универсальной аппроксимации. Но эта теорема говорит только о том(если ее связать с НС) что можно подобрать конечное число нейронов, чтобы аппроксимировать функцию с любой наперед заданной точностью, но ничего не говорит об оптимальном количестве нейронов в слое и собственно о количестве слоев.

Также открыт вопрос о скорости обучения сети, т.е. за какое количество итераций мы получим желаемую точность работы сети и не переобучилась ли она.

Переобучиться сеть может, если количество нейронов больше либо равно тому количеству, которое требует задача. Это видно из того что написано выше. Поэтому следует следить за этим и правильно формировать обучающее множество. Лучше если вы будет подавать на входы ортогональные данные или сильно различающиеся между собой, например {(1,0,0), (0,1,0), (1,0,1) ...}. Таким образом и сеть будет обучаться быстрее и немного сложнее получить переобучение. Идеально, если обучающие данные при повторном использовании перемешивать.

Далее, если в ходе подбора сети, которая решает поставленную вами задачу она получилась громоздкой, а кол-во обучающих пример не высоко, то тут приходит на помощь то что описано в первом посте. Чтобы понизить размерность сети, достаточно добавить дополнительные входы в виде ортогональной системы функций от входных параметров.

Ну и простой пример:
Известно, что один нейрон не способен решить задачу xor, т.к. она не является линейно разделимой, но двухслойный персептрон справляется с этой задачей на ура. Но задача превращается в линейно разделимую, если добавить ко входным данным произведение(логическое И) остальных параметров, т.е. {X, Y, X and Y} и раз задача линейно разделимая, то и однослойная сеть с этим справиться.(в данном случае для xor достаточно и одного нейрона)
Kostia вне форума Ответить с цитированием
Старый 31.12.2015, 20:13   #6
Ixmil
Пользователь
 
Регистрация: 27.09.2015
Сообщений: 47
По умолчанию

Нейрон может хорош и наворочен. А для чего он всё таки? Для робота для этого хватило бы пезоэлемента и усилителя. А под навороченый нейрон нужен ещё более навороченый мозг. Если задача конечно не скрещивания биологического нейрона с компьютерной системой. Но и это вам скажу особого смысла не имело бы. Не в протезах дело, а во первых в их стоимости а во вторых биология и техника во преки ожиданиям фантастов - не скрещиваются. Только в условиях хранического некроза тканей.

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

Но это не значит что нетипичные подходы к решению задачи гарантируют успех.

Лучшие человеческие методы как это не странно - вынесены на первую полку - ищите там.

Последний раз редактировалось Вадим Мошев; 25.01.2016 в 01:20.
Ixmil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Один маленький шаг для человека, но гигантский скачок для всего человечества unicode Свободное общение 676 12.02.2018 07:22
Как вставить диапазоны ячеек из разных файлов в один, но так чтобы они шли один ниже другого? Squarded Microsoft Office Excel 4 24.07.2011 19:24
Cамый краткий листинг - самый подробный листинг. katia2011 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.04.2011 19:10
Помогите плиз срочно. Всего один вопрос! Игорь777 Помощь студентам 4 19.04.2009 18:44