• Как работает обратное распространение в нейросети с пороговой функцией?

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

    @berng
    Это неоднозначно и зависит от постановки задачи.
    1) Если без учителя - почитайте про экстрактивную суммаризацию текста (она самая простая в реализации). В двух словах - вам надо будет присвоить каждому слову некий ранг и оставить только самые важные слова. Ранжировать можно разными способами. Можно провести семантический анализ текста например библиотекой stanza, построив граф предложения, потом посчитать веса слов например через textRank как при экстрактивной суммаризации текстов и оставить необходимое вам количество слов.
    2) Если с учителем - нужно сделать и обучить сеть на примерах, и вам нужен будет обучающий датасет было-стало. Поскольку задача сложная, скорее всего нужно будет делать TransferLearning с обобщенной моделью типа Bert или GPT. В этом случае по идее достаточным количеством примеров будет несколько сотен.
    Ответ написан
    Комментировать
  • Поясните за эту нейронную сеть?

    @berng
    от -1 до 1. Выводит функцию активации после нейронов последнего слоя сети, а там tanh.
    Фактически это результат работы сети, если сеть обучена. Чтобы подгрузить обученные коэффициенты, нужно запустить _brain.Load().
    Судя по коду - обучается пошагово, генетическим алгоритмом через функцию Mutate, ищется оптимум через функцию CompareTo по сравнению с остальными объектами, чтобы оптимизировать свой fitness по отношению к другим.
    fitness должен как-то вычисляться исходя из ваших нужд после каждого шага мутации.
    Самого генетического алгоритма обучения тут нет, здесь только вспомогательные функции, очень облегчающие его реализацию. Процесс обучения надо писать самому или искать как он реализован в других файлах кода, либо подгружать обученные коэффициенты сети из файла.
    Ответ написан
  • Как правильно задать regex для pattern?

    @berng
    Попробуйте так:
    Варианты строк:
    $a="ADD sfdsf"
    или
    $a="ADD 123 sfdsf"

    Регулярка (на перле):
    if($a =~ /ADD\s+(\d)+[^\d].+/)
    или так:
    if($a =~ /ADD\s+[\d]+[^\d].+/)

    проверяете только одну регулярку, она вернет ложь в первой строке, и истину - во второй.
    Ответ написан
    Комментировать