Искусственный интеллект C#. Обучение нейронных сетей. Алгоритм обратного распространения ошибки

Поделиться
HTML-код
  • Опубликовано: 28 янв 2025

Комментарии • 70

  • @CODEBLOG
    @CODEBLOG  5 лет назад +12

    Для успешного функционирования нейронной сети очень важно выполнять правильное обучение нейросети. Мы рассмотрим алгоритм обратного распространения ошибки, который позволяет успешно настраивать веса (коэффициенты) нейросетей со скрытыми слоями.
    Не стесняйтесь задавать вопросы в комментариях, высказывать свое мнение, а также обязательно поставьте лайк под видео. Этим вы легко можете помочь развитию образовательного канала. И приятного просмотра!
    Исходный код проекта доступен на github: github.com/shwanoff/neuralnetworks
    А для общения заходите в наши чаты:
    Общий чат в телеграм: ttttt.me/codeblog_chat
    Чат по C# в телеграм: ttttt.me/codeblog_csharp
    Чат в дискорд: discord.gg/EV2WdyP

  • @AndreiShchetkin
    @AndreiShchetkin 5 лет назад +10

    Наконец понял как все это работает и что от чего зависит. Спасибо за простое объяснение вещей!

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      Рад помочь )

  • @drum_bt
    @drum_bt 5 лет назад +5

    Спасибо вам за то, что несете свет в массы!

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Всегда пожалуйста, очень рад, что нравится )

  • @ВладимирСвои5копеек
    @ВладимирСвои5копеек 4 года назад +4

    Ты реально красава ! давно искал подобный материал, спасибо большое ! Если можно сделай еще видос как распознавать с вебки Васю Петю и т д(нейронка на с# с 0). Будет очень интересно.

  • @ГлебВидякин
    @ГлебВидякин 5 лет назад +2

    Очень рад, что наткнулся на на тебя) Классно все объясняешь, приятно смотреть хорошим кодом:)

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      всегда пожалуйста )

  • @imaynedlog9628
    @imaynedlog9628 2 года назад

    Благодарю за урок, было очень интересно!

  • @prinshamlet5942
    @prinshamlet5942 5 лет назад +8

    Нас мало, но мы реальные парни!)))

    • @CODEBLOG
      @CODEBLOG  5 лет назад +2

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

  • @fanisir
    @fanisir Год назад

    Лайк не глядя)

  • @imai_official
    @imai_official 5 лет назад +1

    Бро ты крут мы поддерживаем тебя и ждем новые ролика, ребята давайте вместе

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Спасибо )

    • @Роман-н5п5м
      @Роман-н5п5м 3 года назад

      @@CODEBLOG Сделай пожалуйста видос на фраемфорке каком нибудь не сложный нейронки

  • @maxsmail1471
    @maxsmail1471 3 года назад +1

    Удивительно то, что когда я оставил только два слоя (вход выход), получил наилучшую точность )

  • @angellife2737
    @angellife2737 3 года назад

    Уважаемый Шванов Вадим , подскажите пожалуйста, как сделать НС, неподверженную локальным минимумам, а неуклонно идущей к глобальному минимуму ошибки, при обучении. Ну кроме смещения старта обучения или дропаута?

  • @takiz2018
    @takiz2018 2 года назад +1

    Привет всем ! у меня появился вопрос при создание объекта класса topology нужно передавать 4 аргумента. количество нейронов на вход и на выход , Layers , и lerning Rate в видио на 1:25:09 не передаётся параметр lerningRat. Какое значение lerningRate нужно передавать в topology если мы его в коде негде не вычисляем ? как подобрать параметр ?

    • @dod_FLY
      @dod_FLY Год назад

      Внимательно смотри

  • @slava1858
    @slava1858 5 лет назад

    Большое спасибо за видео!

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Всегда пожалуйста )

  • @abdusamadjuraev2615
    @abdusamadjuraev2615 4 года назад

    Вадим привет,у меня вопрос(не по теме) у меня тоже винда 10,на каком приложении ты рисуешь?ну когда вы объесняете в теории

  • @ДанилСпичев-я9ю
    @ДанилСпичев-я9ю 4 года назад

    Я может чего-то в течение занятий не уловил, но как у вас получается запускать код без метода Main? У меня ни отладка, ни тесты не работают :(

  • @evgenypolyakov7985
    @evgenypolyakov7985 5 лет назад

    28:53 Подскажи, пожалуйста, откуда берется delta для шага 4)? Это предыдущая delta из шага 2)? Если так, то какой смысл этот error снова брать для рассчета новой delta?

  • @behzodrahmonov3711
    @behzodrahmonov3711 5 лет назад +5

    у вас в функции Sigmoiddx ощибка. я из github скачал проект там тоже такое ощибка.
    public double SigmoidDx(double x)
    {
    return x(1-x);
    }

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Да, нужно пофиксить

    • @NekoGirlGod
      @NekoGirlGod 4 года назад +4

      @@CODEBLOG что самое странное, с правильной производной, нейронка не работает

    • @vadiminf
      @vadiminf 4 года назад

      @@NekoGirlGod Данный момент в дальнейших видео поправили?

    • @NekoGirlGod
      @NekoGirlGod 4 года назад +2

      @@vadiminf нет больше видео

    • @Deatrockerz
      @Deatrockerz 4 года назад +1

      всмысле? там return (Sigmoid(x) / (1 - Sigmoid(x)));, а должно быть return (Sigmoid(x) * (1 - Sigmoid(x))) ?

  • @ivanomelchenko1895
    @ivanomelchenko1895 4 года назад

    спасибо!!!

  • @prinshamlet5942
    @prinshamlet5942 5 лет назад

    Интересно сделать сеть для звуков, частот и тембров голоса) Хочу чтобы Левитан прочёл мои стихи!))

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      Мне кажется что-то подобное уже есть... погугли

    • @prinshamlet5942
      @prinshamlet5942 5 лет назад

      @@CODEBLOG Ну Иосифа Джугашвилли в будильник, точно никто не додумался при- Xamarin-нить ))

  • @BritishEllie
    @BritishEllie 2 года назад

    ЗА АЛЬЯНС!!!

  • @mexaluch9991
    @mexaluch9991 3 года назад +9

    Здесь ошибка, в классе Neuron, в методе SigmoidDx:
    var result = sigmoid * (1 - sigmoid);
    Нужно умножать а не делить, чтобы производную получить (см. Вики разд. "Нейронные сети")
    ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4%D0%B0#%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8
    Закрепите, чтобы последователи знали

  • @glukis7970
    @glukis7970 5 лет назад +1

    Почему не добавили нейрон смещения bias? Лучше будет тренироваться сеть

    • @CODEBLOG
      @CODEBLOG  5 лет назад +3

      И до этого тоже должны будем дойти )

  • @TheFroller
    @TheFroller 5 лет назад +2

    Я не уверен, но, кажется, нашёл у тебя ошибку в обучении сети, а именно в методе BackPropagation, если учитывать, что метод задумывался как универсальный для сети с любым количеством слоёв и нейронов в слоях. Суть в следующем: если в сети 2 или более выходных нейронов или больше одного скрытого слоя с 2-мя или более нейронами, то обучая конкретный нейрон (во втором вложенном цикле метода BackPropagation) мы, кроме прочего, определяем его дельту, которую будем использовать для обучения нейронов следующих слоёв (под обучением я имею ввиду процесс изменения входящих весов). В текущем исполнении, дельта данного нейрона зависит исключительно от последнего нейрона предыдущего обученного слоя.
    Насколько я понимаю, должно быть всё-таки несколько циклов:
    1) обратный проход с вычислением ошибки каждого нейрона и вычислением его дельты, без коррекции весов
    2) прямой проход уже с коррекцией весов
    P.s. Спасибо за ответ на вопрос к предыдущему видео!

    • @vadiminf
      @vadiminf 4 года назад

      Если это реализовал у себя в коде и при нескольких слоях выдаёт адекватный ответ, то можешь скинуть этот момент?)

    • @TheFroller
      @TheFroller 4 года назад +1

      @@vadiminf да, как раз при нескольких слоях выдаёт адекватный ответ. + тут, скорее всего из-за спешки автора, неправильно записана производная сигмоиды. Я же её отсюда бездумно переписал и ох и намучался искать ошибку.
      А про рабочий код - пиши почту, сброшу

    • @vadiminf
      @vadiminf 4 года назад

      @@TheFroller smirnovvadim37@yandex.ru

    • @vadiminf
      @vadiminf 4 года назад

      @@TheFroller скинешь на почту?

    • @bogdan22232
      @bogdan22232 4 года назад

      @@TheFroller если не сложно, то можешь плез скинуть код, буду дико благодарен
      Почта: bog22232@ya.ru

  • @SergiusTaurus
    @SergiusTaurus 4 года назад

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

  • @aleksandrkravtsov8727
    @aleksandrkravtsov8727 4 года назад

    43:03 где ошибка? тут говорится что производная сигмоида = sigm * (1 - sigm) math.wikia.org/ru/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4 а у вас деление

  • @nikitadyachkov7665
    @nikitadyachkov7665 5 лет назад

    Можно трек с 34:00

  • @prinshamlet5942
    @prinshamlet5942 5 лет назад

    А можно как пример приспособить к Excel эту сеть?) плиз)

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      Это что-то очень странное. что именно ты имеешь ввиду под приспособить в Excel? прочитать данные из Excel файла? это возможно, а вот встроить нейронку напрямую в Excel будет очень проблематично

    • @prinshamlet5942
      @prinshamlet5942 5 лет назад

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

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      @@prinshamlet5942 Никогда с этим не работал, но мне кажется должно быть что-то вроде возможности написания плагина на VB, который уже будет обращаться к приложению с нейронкой и обновлять данные

  • @nikolayantonov7871
    @nikolayantonov7871 5 лет назад

    При генерации нейросети нейроны скрытого слоя получают случайные, но ОДИНАКОВЫЕ веса.
    Как вообще эта нейросеть работает?
    При таком косяке нейроны скрытого слоя всегда получают одинаковые сигналы и на выходе должны давать одинаковые значения.

    • @vadiminf
      @vadiminf 4 года назад

      У меня такая ситуация при запуске тестов к данной программе и получилась, не подскажешь, как можно поправить?

    • @vadiminf
      @vadiminf 4 года назад

      Точнее веса разные, но вот значения в слоях получаются одинаковые

    • @nikolayantonov7871
      @nikolayantonov7871 4 года назад

      Я задержку по времени поставил тут:
      private void InitWeigtsRandomValue(int inputCount)
      {
      var rnd = new Random();
      Thread.Sleep(100); // ТУТ!!!
      for (int i=0; i < inputCount; i++)

    • @vadiminf
      @vadiminf 4 года назад

      @@nikolayantonov7871 и все норм заработало? Значения нейронов разные выходят?

    • @nikolayantonov7871
      @nikolayantonov7871 4 года назад

      @@vadiminf
      Да. Так разные начальные значения нейронов получаются.

  • @TheFroller
    @TheFroller 4 года назад +4

    В SigmoidDx ошибка. Неправильно взята производная. Именно поэтому она так долго думает. Там должно быть x×(1.0-x), а сейчас там x/(1.0-x)

  • @aleksandrkravtsov8727
    @aleksandrkravtsov8727 4 года назад +4

    блин смотрю все ролики в x2 уже начал думать в x2

  • @kdenisinfo
    @kdenisinfo 3 года назад

    нейроные сети и скусственныйинтеллект скорее разные вещи. это похоже на аналитику, статистикау и большие данные

  • @aleksandrkravtsov8727
    @aleksandrkravtsov8727 4 года назад

    29:13 ох дядька, 4-й пункт вобще не понятно что имеется в виду

  • @ivanomelchenko1895
    @ivanomelchenko1895 3 года назад

    Привет Всем

  • @igorcoolman
    @igorcoolman 3 года назад

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