LINUX.ORG.RU

Улучшить эффективность нейронной сети

 


0

1

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

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

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

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

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

Как улучшить нейросеть? Изучить предметную область и научиться в ней формализовать задачи.

Если я не прав, буду рад критике.

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

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

Ничего из перечисленного у нейросетей нет. Всё что она может делать – это обольщать.

Artamudo ★★★ ()

как улучшить ее эффективность

Использовать наработки, оптимизированные для конкретной задачи, например, из Neural Networks © и специализированные аппаратные решения, типа CUDA-CNN_For_Linux ©, Intel® Neural Compute Stick 2 ©, …

quickquest ★★★★★ ()
Последнее исправление: quickquest (всего исправлений: 2)

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

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Bagrov

Цель нейросети это генерация корреляционных обобщений на основе обучающих примеров или как говорят придаение ей обобщающей способности - в этом нет ничего творческого или интуитивного, да и опыт мало к делу относится, дело лишь в том что сетки позволяют ленивому программисту не заниматся изысканиями подходящих ветвлений и их совокупности, проще говря нейросетка это просто много ветвлений(ifов) и не больше, которые проще получать и настраивать, ежели это делать ручками. А суют их везде только от неграмотности и желания решить задачу в лоб, вместо того, чтобы проводить исследования, которые стоит признать иногда могут быть весьма трудными и/или дорогими, т.е. так может выйти дешевле, но вот никто особо не парится над тем фактом, что несмотря на довольно простое получение начального результата улучшение качества порой требует ещё больших усилий, чем просто грамотное рассмотрение задачи в начале и в результате получаем что не смотря на вау эффект многих изысканий, качество их как правило улучшается улиточными шагами.

AKonia ★★ ()

То есть у тебя сетка смотрит сколько больше -1 или 1 и выдаёт победителя на основе того каких значений на входе больше?

Может у тебя проблема в том что

Есть сто входов

Они тоже участвуют, но с мусором в значениях?

Если у тебя значения целочисленные то и функции активации делай такими же.

Нарисуй на бумажке топологию сети чтоль и покажи.

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от AKonia

Вот так просто: нейросеть – это куча ветвлений, нейросеть обобщает. Спасибо, надо запомнить. «Обольщать» мне тоже нравится, но, очевидно, @Artamudo просто опечатался.

С другой стороны, что такое интуиция, если не обобщение, механизм которого не вполне осознается? С творчеством, конечно, сложнее. Есть ремесло, которое строится на обобщении. И есть искусство, где есть выход за пределы ранее созданного, но с опорой на ранее созданное. Что мешает научить нейросеть создавать похожее, но другое? Я не вижу препятствий.

Опыт? Да, тут я погорячился. Опыт помнится. Опыт осознается. Опыт передается.

Что до исследований, их же есть куча готовых: только успевай читать.

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

Всё так, но это инструмент просто порой хороший. Например грибы или некоторых одноклеточных используют для построения маршрутов трубопроводов/дорог. Можно использовать расчёты, а можно со 100% гарантией доверить расчёты некой хне, которая просто ради того что бы затрачивать наименьшее количество телодвижений на получение мнаки выстроит идеальный путь , а в суровых условиях выстроит путь с запасными развилками для сохранения работоспособности при разрушении любой из частей. И всё это естественным образом. Да, чудавковато, зато надёжно и черезвычайно просто. Можно расчитать целый магаполис имея под рукой только жижу живую.

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

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

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от Bagrov

Я не вижу препятствий.

Нейросетку из 100 нейронов можно посчитать на бумаге. Включая её обучение. А когда их эдак тысячи то начинаются проблемы. В том числе железные.

Вся суть нейрона любого могу ли я построить сигнал на выход в зависимости от вот таких вот входов и всё. Никакого матана, никакой магии, всё тупо и просто. Только вот в двух слоях при 100 нейронах у каждого нейрона по 100 * 100 вариантов входа и 100 * 100 вариантов (по хорошему) значения выходов на втором слое 100 * 100* 100 вариантов входов и лишь пару тройку (в идеале ) из ста тысяч условий для данного конкретного нейрона является правильным при данных ста тысяч условий, но все эти 100 * 100 * 100 состояний входа могут иметь 100 * 100 * 100 зависимостей. И в этом вся суть. Нейрон должен в зависимости от тысяч условий на основе тысяч условий иметь состояние для их естественного сопоставления, сейчас это чаще просто 1 вес. Который гибко может пропускать или нет некое сочетание этих условий.

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

Вопрос в том как улучшить ее эффективность.

Берёшь первый перцептрон (нейрон) и обучаешь его распознавать «победителя» в будущем. Берёшь второй перцептрон (нейрон) и обучаешь его нераспознавать «победителя» в будущем. Берёшь третий перцептрон (нейрон) и обучаешь его распознавать «победителя» в прошлом. Берёшь четвёртый перцептрон (нейрон) и обучаешь его нераспознавать «победителя» в прошлом.

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

anonymous ()
Ответ на: комментарий от LINUX-ORG-RU

Входов постоянно 100, 5 из них единицы, другие 5 минус единицы, остальные все нули(следовательно их веса обнуляются). Следовательно оно не делает этого:

выдаёт победителя на основе того каких значений на входе больше

а делает это

на выходе определяется победитель(победители команда единиц или минус единиц)

В среднем один вход участвует(становиться 1 или -1) в 10 процентах обучающей выборки.

На счет целочисленной функции активации, у меня вопрос как она будет влиять на результат?

На счет схемы, как я и говорил она очень простая https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcROzU5LjZrWlj8tzV7VrTIxulP_KvlaJkCvvQ&usqp=CAU

Надеюсь все понятно разъяснил

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

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

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

в будущем и прошлом

Меняешь направление потока данных и всё.

распознавать и не распознавать

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

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

На счет схемы, как я и говорил она очень простая

Можно сотворить её в симуляторе типа Neuron © и «учиться, учиться и учиться» ©, как завещал нейросетям «дедушко Ленин», он же «нейро-гриб» :)

quickquest ★★★★★ ()
Последнее исправление: quickquest (всего исправлений: 2)
Ответ на: комментарий от kll_mf

А ты не путаешь то что может быть ничья? Если 5 нейронов -1 и 5 1 то итоговые суммы их будут нули и это будет ничья. Весовые коэффициенты на всех нейронах можно выставить в 0.5 и у тебя будет 100% правильных ответов. Но только если входы исключительно -1 и 1

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от Bagrov

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

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

остальные все нули(следовательно их веса обнуляются)

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

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 4)
Ответ на: комментарий от peregrine

В текущей задаче у него 10 рабочих нейронов остальные просто ненужны, на входы идёт либо 1 либо -1. Если больше однёрок то победили однёрки, если минус еденичек по победили они, на выходном нейроне все 1 и -1 суммируются и получается либо 0 либо больше нуля то победили однёрки либо меньше нуля то победили минус единички поэтому в такой задаче все веса всех нейронов установить в 0.5 если функции активации переписывать не хочется, а они там в float с вероятностью в 99%. И всё, идеальная нейросеть готова для этой задачи. Вся суть в том что для такой задачи нейросети не нужно обучение так как все веса мы знаем заранее. Это если я понял правильно что побеждают количеством, а не расстановкой или ещё чем. Это даже не задача для нейросети по сути )))) Но сова порой резиновая и с вазелином ничё так на глобусе сидит =)

Мляяяяяяяяяяяяя, седьмой час утра. ЁПРСТ! спАААААААААТЬ ЖИВА…Я ЖИВА СПАТЬ! уЛЮЛЮ дОКОЛЕ полуНошничеть перестану!

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от peregrine

Передаточная функция Сигмоидальная.

некоторым от 0 или 1 очень плохо

с такой проблемой не столкнулся.

большинство нейронов работают только в диапазоне 0-1

Я выбрал [-1,0,1] так как всего три варинта у одного входа, либо в одной команде, либо в другой либо не участвует. До другого не додумался, и не стал менять так как это дало хоть какой то результат.

про область чувствительности

Если имеется «крутизна», то я пробовал ее менять но в основном она лишь дает выходы ближе к границам(0,1). Вроде это и есть ее предназначение

kll_mf ()
Ответ на: комментарий от LINUX-ORG-RU

Если больше однёрок то победили

однерок и минус единиц постоянно по 5, по факту количество не влияет, влияет какой именно вход и сумма пяти входов с одной стороны были сильнее другой. На выходе: (0-0.5) победили минус единички, (0.5-1) победили единички

Это если я понял правильно что побеждают количеством, а не расстановкой или ещё чем

как раз дело в расстановке, если так можно выразиться

все веса всех нейронов установить в 0.5 если функции активации переписывать не хочется

Функцию активации изменить не сложно, но имеет ли это смысл в данном случае

kll_mf ()
Ответ на: комментарий от LINUX-ORG-RU

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

Входы исключительно [-1,0,1] так как всего три варинта у одного входа, либо в одной команде, либо в другой либо не участвует.

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

влияет какой именно вход и сумма пяти входов с одной стороны были сильнее другой

Аааааа, вон оно чё. Ну тут хз как там они побеждают. Окружить должны, или занять большую площадь или наоборот собраться в кучке подальше.

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от kll_mf

Передаточная функция Сигмоидальная.

какая именно? Их много если что. Ну и таки проблема у тебя есть, то что ты её не видишь не значит что её нет. как минимум

Я выбрал [-1,0,1] так как всего три варинта у одного входа, либо в одной команде, либо в другой либо не участвует. До другого не додумался, и не стал менять так как это дало хоть какой то результат.

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

ЗЫ

Кажись у тебя просто нейронка не работает. Делай значения от 0 до 1, нормализация там, все дела.

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