LINUX.ORG.RU

[2011] Нейронные сети. Разработка.


1

1

Итак, всем добрый вечер/день/ночь в зависимости от часового пояса. Утро не упоминаю, оно добрым не бывает.

Я снова материализуюсь на ЛОРе. А это означает что мне либо нужен совет, либо мне делать нечего. В данном случае первое. Сегодня я побывал в другом университете, куда меня звали как помощника в разработке компьютерных моделей. Вникнув в суть дела я согласился и взял задание «на дом»: разработать нейронную сеть и обучить её.

Исходные данные: Входные/выходные векторы.

Дедлайн: 6 месяцев, но хочу закончить прототип до 7-го января. Пусть будет работать с треском, но должен.

Собственно гуглил материал, но попадаются в основном статьи, в которых описывается «высокое будущее» нейронных сетей. Статьи старее, чем 2000 вообще говорят, что это сказки хакеров. Более новые - в основном перепечатка старых.

Чего хочу: ссылок на хорошую теорию, уравнения правки связей, схемы и проч.

Перемещено svu из Talks

★★★

Последнее исправление: AlexCones (всего исправлений: 1)

Ответ на: комментарий от yoghurt

у меня на CL скоро такое же будет) с шахматами и поэтессами.

ymn ★★★★★
()

вспоминая твой пост в Job, осиль сначала C и какой-нибудь ЯП помимо поцкаля. CL, в крайнем случае пистон.

anonymous
()
Ответ на: комментарий от x905

павло и привёл тебе реальные примеры, херли.

anonymous
()

Реализация нейросети по книжке как самоцель - это херня и вовсе ненаучно

+1 Используй fann.Работай над выбором топологии сети и подготовкой входных данных/данных для обучения.

capricorn20
()
Ответ на: комментарий от x905

зачем мне сделать то, не пойми что - я не знаю

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

ymn ★★★★★
()

Врываюсь в тред. Я сейчас phd студент, занимаюсь в основном обработкой изображений(где pattern recognition и machine learning более чем дофига), но основная моя специализация как раз распознавание образов и машинное обучение.

Во-первых, ОПу вопрос: какую задачу ты собираешься решать с помощюь нейронных сетей? Классификация, восстановление регрессии, кластеризация, идентификация(если ты не можешь точно дифферинциировать эти термины, то советую сначала разобраться с ними).

Проблема в том(ну это не только мои загоны, постарайтесь уловить суть), что нейронные сети были сильно трендовыми и многие относятся к ним как к черному ящичку, которому ты скармливаешь обучение, а потом он типа заебись работает. По сути, эти черные ящики это — просто полиномы(ну не всегда полиномы, ок) с кучей коэффициентов(будем обзывать эти коэффициенты через A, тогда этот черный ящичек для объекта x выдаст нам ответ NeuralNet(x|A) ). Смысл в том, что когда у нас есть обучение: множество пар объект-ответ, мы должны минимизировать кол-во ошибок(или невязку) на обучении. В случае восстановление регрессии, нам просто надо решить задачу оптимизации:

минимизировать по А: sum( ( NeuralNet( x_i | A ) - ответ_i )^2 ) , где сумма берется по всем парам «признаковое описание объекта(x_i)» - ответ_i.

Здесь я беру квадратичную функцию потерь ( . )^2, можно брать, просто L1 норму abs( . )

Так вот, у нейронных сетей есть несколько огромных минусов:

-)низкая обобщающая способность

-)не понятно, как выбирать структуру сети и еще кучу структурных, ненастраиваемых параметров.

Из-за последнего пункта многие работы по ANN вообще не являются научными, так как результаты не общие и вообще часто НЕВОСПРОИЗВОДИМЫ.

С другой стороны, почти все задачи, например, классификации намного лучше решаются всякими SVM, Random Forest, RVM. Там тебе будет и sparsity и регуляризация и гарантии на качество. Более того, SVM изначально разрабатывался как алгоритм для классификации и имеет под своим основанием намного больше науки и фундаментальных обоснований. Нейронные сети сейчас почти ни кем не используются, я знаю только интересные применения модификаций типа convolution networks, а boltzman machines это вообще графические модели и там с нейронными сетями мало связи.

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

Надеюсь, что кому-то да помог разобраться и донес свою мысль.

maggotroot
()
Ответ на: комментарий от maggotroot

Если я правильно понял суть происходящего, то мне кажется, что типа данной сети нет в вашем списке. В данном случае происходит «обучение с учителем» следующего типа:
1) По данным математической модели строится график напряжений в материале при наличии в нем повреждения.
2) Из этого графика берутся значения (вектор-in) и загоняются в нейронную сеть.
3) Сеть их перемалывает и выдает вектор-out, по которому можно судить, являются ли повреждения критическими и необходима ли замена детали.

Так это объяснили мне. В наличии около 1000 векторов-in с их out собратьями. По 90% векторов сеть обучается и в 10% остальных должна выдать точный (предсказанный) результат. В текущем прототипе такая система признана рабочей. Теперь же необходимо воссоздать её с помощью своих рук, не используя готовых решений.

В данный момент от одного знакомого я получил работоспособный вариант в простейшем виде. Мне остается разобраться, как он работает, и сделать с него оптимизированную и измененную копию.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Получается, что у тебя задача классификации и признаковое описание объекта — массив пар (время-значение).

Два совета: 1) Попробуй из этого in-векторы посчитать какие-нибудь признаки. Например, простейшие: среднее значение, стандартное отклонение, среднее значение конечных разностей(производные), отношение положительных и отрицательных значений производной, total variation( sum(abs(x_{i+1} -x_i)) ) ну итд, используй воображение. Вполне возможно что ты найдешь простенькое признаковое пространство, где твоя выборка разделима. + Разложи сигнал в спектр, может увидишь что интересное. Только старайся делать признаки, инвариантные относительно длины сигнала.

2)Можешь попробовать забить на составление признаков, но все-равно лучше используй SVM или Random Forests. Есть куча доступных и качетсвенных исплементаций(libsvm например). Еще советую все делать в матлабе или октаве.

Так же man ROC-кривые, ты так сможешь настроить какая ошибка классификации тебе «дороже».

maggotroot
()

Для начала советовал бы почитать википедию. Если она осилена - гугл в помощь. Мне в свое время очень помогло.

Статьи старее, чем 2000 вообще говорят, что это сказки хакеров. Более новые - в основном перепечатка старых.

4.2. Читал перепечатанные варианты статей 80-90-х. Первая нейросеть была реализована еще в пятьдесяткаком-то. Нейрокомпьютерам не намного меньше лет, чем обычным :) А наибольший пик интереса к ним был, ЕМНИП, в 80-х, когда изобрели механизм обучения многослойных перцептронов, а также изобрели кучу других нейронных сетей.

Deleted
()

не бери SVM, в чистом виде без дополнительных подпорок это интерполяция

бери рандом форест, у него все в порядке для ранее не встречавшихся случаев.

psv1967 ★★★★★
()
Ответ на: комментарий от AlexCones

да замени эти ин вектора на интервальный ряд по величине показателя заключенного в ин вектор. должно хватить.

но если природа этих ин векторов позволяет (например расчетная сетка не меняется от случая к случаю), то наверное можно и их напрямую пихать в анализ.

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

psv1967 ★★★★★
()
Ответ на: комментарий от maggotroot

не не не ... делать только в R :)

этот матлаб уже на «доказательствах» фальсификации выборов себя скомпрометировал :)))

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

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

как бы вся соль в том что выборка разделяема по совокупности признаков. И не путай методы понижения размерности и приведения выборки в божеский вид с тем что делает нейронная сеть.

не бери SVM, в чистом виде без дополнительных подпорок это интерполяция

Это ни разу не интерполяция. В чистом виде(что ты имеешь в виду под чистым?) он работает только на линейно разделимых выборках. Я еще раз говорю ОПу: испоьзуй SVM. А вообще конечно, используй оба метода и посмотри какой лучше работает для твоей задачи.

не не не ... делать только в R :)

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

maggotroot
()
Ответ на: комментарий от maggotroot

как бы вся соль в том что выборка разделяема по совокупности признаков. И не путай методы понижения размерности и приведения выборки в божеский вид с тем что делает нейронная сеть.

как бы «вся соль» в том, что если две точки в пространстве признаков совпадают, то их не разделить

Это ни разу не интерполяция. В чистом виде(что ты имеешь в виду под чистым?) он работает только на линейно разделимых выборках. Я еще раз говорю ОПу: испоьзуй SVM. А вообще конечно, используй оба метода и посмотри какой лучше работает для твоей задачи.

SVM разделит две любые различные группы точек в пространстве признаков как бы сложно не проходила граница между группами. В пределе даже если точки будут перемешаны. Поэтому это интерполяция. Это как полином который проходит через все экспериментальные точки поскольку коэффициентов полинома добавили достаточное кол-во.

Еще раз говорю не используй SVM для целей классификации. Она пригодна в чистом виде без подпорок только для аналитического описания чего либо. Прогнозы она давать не может без построения статистики или регуляризации.

Для R мало расширений? Не смешите мои тапочки, их уже скорее слишком много.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

как бы сложно не проходила граница между группами

...

Поэтому это интерполяция

слы шал где звон... Извини, но ты перепутал обобщающую способность метода с какими-то свойствами SVM.

SVM вообще проводит только разделяюшую гипперплоскость между выборками. Но потом мы замечаем, что мы при этом оперируем только скалярными произведениями векторов-признаков. Делам штуку под названием kernel trick, где мы как бы переходим в другое искривленное пространство(на самом деле не переходим, ибо это новое пространство неоднозначно определено). Мы просто подменяем скалярное произведение.

не используй SVM для целей классификации. Она пригодна в чистом виде без подпорок только для аналитического описания чего либо.

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

Для R мало расширений? Не смешите мои тапочки, их уже скорее слишком много.

Я основной упор делал на том, что matlab/octave — на данный момент стандарт де-факто в статьях по pattern recognition/computer vision.

И главное: Скажи пожалуйста, где тебя научили тому что SVM это интерполяция? Это не так. Просто скажи где ты учился\работал?

maggotroot
()
Ответ на: комментарий от maggotroot

0) Топик стартер пишет свой велосипед который будет считать нейрональную сетку (как я понял, в отличии от тебя :), это обусловлено патентной чистотой конечного продукта)

2) SVM написанный в таком режиме будет тем что я сказал. Про подпорки и их количества я тоже сказал.

3) SVM как и любая другая херня увеличивающая размерность никогда не будет иметь успеха в качестве метода экстраполяции полученной модели. Ну а все велосипеды которые к ней пристроены напоминают мне вакханалию вокруг вавелетов которые представляют из себя тоже что и преобразование фурье только что по другому базису. Теперь тоже самое только в ластах и гамаке.

Теперь о личном.

а) где тебя учили статистику считать в матлабе лучше расскажи.

б) ну и заодно в какой деревне это матлаб стандарт дефакто стал в области ML. (и при чем тут CV не забудь, которая кормится со стола ML)

psv1967 ★★★★★
()
Ответ на: комментарий от nCdy

да, но без поллитра^W опыта программирования на лиспе разобраться в программе сложновато...

ymn ★★★★★
()
Ответ на: комментарий от psv1967

метода экстраполяции

Ты как-то смутно говоришь.

Деревня это диплом ВМК МГУ, а теперь PhD в ETH Zurich в computer science department.

Я с тобой отчасти согласен(по вейвлетам уж точно :) ). Я не согласен с твоим тезисом, что переход в ядровое пространство это — вакханалия. Наоборот, это очень изящный и красивый трюк. Еще я не понимаю, почему ты заладил, что SVM — интерполяция?? Мне реально кажется, что тебе кто-то привел плохую аналогию переобучения классификатора и интерполяцию полиномами. Она есть(в смысле что как и в интерполяции значения в узловых точках совпадают, так и при переобучении алгоритм на обучении всегда будет выдавать правильную классификацию), но почти любому классификатору можно сунуть такое признаковое пространство и так подобрать параметры, что бы он переобучался. Если мы говорим о просто классификации, то скорее всего да: random forest будет поробастней и обычно немного лучше(так как стохастический алгоритм), но SVM тоже не плох. +SVM еще можно использовать для вывода в графических моделях, смотри Structural SVM.

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

maggotroot
()
Ответ на: комментарий от AlexCones

Когда-то давно забукмаркировал, кажется, даже по наводке с ЛОРа: http://reslib.com/book/Metodi_i_modeli_analiza_dannih__OLAP_i_Data_Mining#1

Возможно, поможет разобраться для начала, какие методы тебе больше подходят. ПС: продумать, какие данные будет содержать входной вектор - это уже половина решения, imho.

stormy
()
Ответ на: комментарий от maggotroot

Ты как-то смутно говоришь.

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

SVM да изящно --- не стали придавать кривизну самой гиперплоскости делящей решения в пространстве признаков, просто добавили размерности. Ну и теперь оставшаяся линейной гиперплоскость в пространстве признаков лихо «гнется». В предельном случае добавленная размерность вообще бесконечна и отделяется «все от всего».

Метод который работает только там где были определены данные по которым он посчитал модель назвать я лично могу только интерполяцией. На новых данных не принадлежащих области определения данных на которых было проведено обучение полученная модель работать не будет. Отсюда экстраполяция. По моему все к месту.

(напоминает из чьих то мемуаров диспут физика «московской школы» с физиком «ленинградской школы» (увы не могу найти ссылку, там красивый «подстрочный перевод» алгебры москвича в фразы ленинградца про электрон :) :)

Почему это стало похожим на историю с вавелет? Так ведь открылась возможность опять описать все тривиальные методы ML.

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

А потом мне значит приходится во всем этом ковыряться что бы хоть что то практически использовать :)

PS Рад что пришли к консенсусу про рандом форест.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Про области, где у нас нету объектов мы и так ничего сказать не можем, там и random forest не будет работать.

Мне кажется ты путаешь интерполяцию с восстановленем плотности(кстати SVM не восстанавливает плотность). BTW, чем отличается интерполяция(экстраполяция — не суть) от восстановление регрессии? Ответ: в восстановлении регрессии выдаваемые значения не обязательно должны совпадать с обучением.

SVM да изящно --- не стали придавать кривизну самой гиперплоскости делящей решения в пространстве признаков, просто добавили размерности. Ну и теперь оставшаяся линейной гиперплоскость в пространстве признаков лихо «гнется». В предельном случае добавленная размерность вообще бесконечна и отделяется «все от всего».

заметь, что никакие размерности не добавляют. Нас тут не интересуют предельные случаи, так как данные конечны. Да и вообще не понятно есть ли эти бесконечно большие и бесконечно малы последовательности :)

регуляризацию и бутстреп, которые в чистом виде уже "(не|мало)грантопригодны"

А вот с регуляризацией ты не прав: очень даже грантопригодно и интересно. Например, сейчас хорошие результаты получаются, если использовать L1 регуляризацию. Так как это выпуклая оболочка MDL(Minimum Description Length). L1 как бы на грани того что мы сейчас можем решить точно и дискретных NP-трудных задач оптимизации.

maggotroot
()
Ответ на: комментарий от maggotroot

Про области, где у нас нету объектов мы и так ничего сказать не можем

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

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

(Аналогично|дополнительно) регуляризации в качестве селекции жизнеспособных моделей может использоваться бутстреп.

А вот с регуляризацией ты не прав

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

А так да красиво придали регуляризации свойство ограничивать решения теми, которые заведомо имеют признак правильного.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Да, почти со всем согласен, но

1) В SVM есть регуляризация

2) Априорная информация не поможет тебе классифицировать те области, откуда ты ничего не видишь.

maggotroot
()
Ответ на: комментарий от vertexua

задачи есть, а вот решения именно на нейронных сетях - не верю что есть
причем такое решение (на нейронных сетях), которое бы было эффективнее «обычных» алгоритмов

x905 ★★★★★
()
Ответ на: комментарий от ymn

сомнительно, что коллеги из пензы расскажут как именно и что они там использовали из нейронных сетей
такие нии и у нас имеются - полная разруха идей, но изображение кипучей деятельности для основной их задачи - освоению бюджета

x905 ★★★★★
()
Ответ на: комментарий от drull

о да, искать информацию на дезинформационном ресурсе

redixin ★★★★
()
Ответ на: комментарий от x905

ты про pattern recognition вообще, или про нейронные сети? Или ты не понимаешь где на практике можно применить методы классификации?

maggotroot
()
Ответ на: комментарий от maggotroot

1) да есть. но ведь регуляризация это уже «совсем другая красивая идея» которая как бы до SVM придумана :)

2) если закон который мы отразили (тем или иным образом) в структуре модели, коэффициенты в которой подогнаны на доступных данных, не действует в области из которой у нас нет данных (не является универсальным), то да.

psv1967 ★★★★★
()
Ответ на: комментарий от x905

которое бы было эффективнее «обычных» алгоритмов

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

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

2)

Да, но это уже не классическая постановка задачи классификации, а model fitting))

Ладно, мне кажется у нас особых противоречий нет, только кто-то тебе привил нелюбовь к SVM. Против этого посмотри structured SVM.

Так ты вообще где работаешь\учишься? Случаем не в ШАДе?)

maggotroot
()
Ответ на: комментарий от maggotroot

Все эти классификации искусственны. Например — куда тогда логистическую регрессию отнесем? :)

Я уже совсем большой (правда учиться не перестаю и обязательно посмотрю :) бородатый доцент в универе в БССР, занимаюсь анализом данных и попутными вещами (в том числе CV вот начали с точки зрения инноваций в народное хозяйство).

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

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

Вот очень хорошая работа по обобщающей способности. Одна из немногих докторских диссертаций, где не наводится наукообразие и все написано четко и понятно.

Сам тезис http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf

Слайды(можно вообще только их посмотреть)

http://www.machinelearning.ru/wiki/images/0/0a/Voron10doct-slides.pdf

maggotroot
()
Ответ на: комментарий от maggotroot

да бутстреп это хорошо (всегда делаю оценку устойчивости полученных параметров решения и решения «в целом»), а теория подведенная под него (выведенная из него) вдвойне хорошо.

psv1967 ★★★★★
()
Ответ на: комментарий от maggotroot

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

x905 ★★★★★
()
Ответ на: комментарий от psv1967

ok, одно решение на нейросетях есть
если эту же задачу решали бы без использования нейросетей - чем будет хуже ?

x905 ★★★★★
()
Ответ на: комментарий от x905

Решения специализированы. Врядли вы видели все сорцы и схемы. Всякие сименсы кажись уже железки повыпускали

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

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

я всё клоню к тому, что почему то нейросети не находят массового применения и торжества над обычными алгоритмами, хотя в теории всё радужно

x905 ★★★★★
()
Ответ на: комментарий от x905

Ну и так понятно, что _массового_ применения нет.

vertexua ★★★★★
()
Ответ на: комментарий от x905

Fine reader, рекоммендации котороые amazon или imdb тебе выдают по просмотрам. СПАМ фильтры, наборы новостей котороые тебе показывают новостные аггрегаторы. Фармокомпании, которые делают лекарства,

Конечно, не факт что там используются нейронные сети: скорвее SVM или random forest или еще какие методы.

maggotroot
()
Ответ на: комментарий от x905

Нейронные сети рулят в своей, довольно ограниченной, области. Думать что они не используются неправильно.

ebantrop
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.