Pull to refresh

Comments 15

Последняя картинка конечно многое объясняет…
UFO just landed and posted this here
вот тут я на шарпе делал habrahabr.ru/post/154369/
если интересно более подробно то можешь послушать курс Хинтона class.coursera.org/neuralnets-2012-001/class/index, там на матлабе, и конечно это выглядит более естественно чем на ооп языке

нужно создать нейроны и обозначить их связи.

если на ооп языке то да, можно нейроны, связи, будет выглядить прямо как нейросеть, прикольно. но по сути это все матричные вычисления, и если писать на матлабе то можно обойтись вообще без структур типа нейрона.
UFO just landed and posted this here
это нужно было бы отдельный пост писать, тем более что есть более качественные ресурсы типа Хинтоновского курса на курсере, еще можно послужать курс Andrew Ng там же; и там и там отлично все описано, по мимо этого есть еще домашки на матлабе
UFO just landed and posted this here
хехе -) не ну да всякое в жизни бывает
А стохастические НС обучают чем-нибудь вроде генетического алгоритма?
Каковы результаты в этом случае? До того, как я прочитал про подобные нейросети мне самому пришла в голову идея заменить стандартную функцию активации в нейронах многослойного перцептрона на функцию, которая выдает значение на выходе с некоторой вероятностью, зависящей от входного потенциала. Сейчас читаю ваши статьи и понимаю, что это и есть стохастические НС. Однако, когда я думал о такой сети, меня, конечно, не хватило на то, чтобы придумать такой хардкорный алгоритм их тренировки, какой применяется для машин Больцмана, поэтому оптимальным выходом я тогда счел алгоритмы типа генетических, но, к сожалению, так это и не попробовал.
Вы не пробовали?
И еще вопрос — не пробовали комбинировать слои? Стохастические с обычными, детерменированными, допустим?
А стохастические НС обучают чем-нибудь вроде генетического алгоритма? Вы не пробовали?

нет, обучается обычным градиентным подъемом по функции log likelihood вероятности восстановления образа, можно тут глянуть habrahabr.ru/post/159909/. алгоритм придуман Джефри Хинтоном

я пробовал обучать РБМ генетическим алгоритмом, результат есть, но в разы хуже Хинтоновского contrastive divergence. хотя я дилетант в генетических алгоритмах, и если построить операторы скрещевания и мутации как нибудь по умнее, то возможно что то и получится

И еще вопрос — не пробовали комбинировать слои? Стохастические с обычными, детерменированными, допустим?

суть глубокого обучения нейросети и есть комбинация обучения без учителя и с учтелем, сначала строится архитектура сети, затем предобучаются попарно идущие слои в виде РБМ, а затем обучается вся сеть обратным распространением с учителем. результат получается на много лучше нежели не предобученная сеть, можно глянуть сюда habrahabr.ru/post/163819/ и вот сюда deeplearning.net/

уже есть ряд людей который исследуют применение РБМ в задачах классификации, вот там как раз идет речь о том что ты имеешь в виду, реальное комбинирование в процессе обучения, а не последовательное применение сначала РБМ а затем обучения с учителем. например вот machinelearning.org/archive/icml2008/papers/601.pdf. по сути чувак взял ту же целевую функцию что и в обучении без учителя (приближенное значение производной которой дает contrastive divergence) и добавил в нее слагаемое отвечающее за классификацию, нашел производные своего слогаемого, объединил с оригинальным алгоритмом ну и получил свою статью. я его алгоритм еще не пробовал тестить, так что не могу объективно судить о качестве, но чисто интуитивно мне глубокие предобученые сети нравятся больше.
Просто есть задачи, в которых вряд ли получится применить другие методы обучения — предположим, задача обучить НС, которая используется в качестве блока, который принимает высокоуровневые решения в игре.
То есть, у нас есть набор действий, которые доступны боту — скажем, выстрелить из текущего оружия, выбрать оружие N, активировать способность M, переместиться в указанную точку. (За низкоуровневую обработку того же «переместиться» отвечает, понятное дело, стандартный алгоритм поиска пути, нечего сеть нагружать этой ерундой).
И есть набор данных, идущих на вход — свое здоровье, запас патронов, список объектов в обозримом радиусе, их классы, скорость и вектор движения.

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

Многослойный перцептрон полностью детерминирован, поэтому боты будут вести себя всегда одинаково при одинаковых входных параметрах. Я предполагаю, что добавление вероятностной функции активации должно значительно улучшить результаты.
вот кстати интересный эксперимент описан habrahabr.ru/post/168067/, как раз прочитав эту статью, я решил попробовать обучить рбм генетическим алгоритмом

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

с другой стороны можно интерпретировать выход сети как вероятности. скажем у тебя на выходе три нейрона, каждый является индикатором экшена, и ты не просто выбираешь тот что с максимальным выходом, а пропорционально их проецируешь на отрезок [0, 1] и генеришь рандомное число в этом промежутке из равномерного распределения, в итоге получаешь действие но как бы уже с долей случайности.
>с другой стороны можно интерпретировать выход сети как вероятности

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

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

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


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

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

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

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


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

Только обучаем-то мы генетическим алгоритмом, поэтому можно сказать, что его стохастическая природа и в этом случае участвует в обучении.
Sign up to leave a comment.

Articles