ОСНОВЫ ПРОГРАММИРОВАНИЯ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ
HTML-код
- Опубликовано: 9 сен 2024
- В этом уроке мы разбираем основы построения и программирования искусственных нейронных сетей. Затронуты вопросы теоретического характера: что такое нейронная сеть в биологии, как моделируется в программировании, каковы принципы построения и обучения. Разобран пример распознавания образов символов простейшей нейронной сетью на основе перцептронов Розенблата (однослойная сеть со статичной пороговой функцией).
Приятного просмотра! Задавайте вопросы и комментируйте!
❏ Подписывайтесь на канал, ставьте лайки, комментируйте, подавайте идеи и делитесь видео с друзьями!
Следующее видео по теме искусственного интеллекта (многослойные сети):
• МНОГОСЛОЙНЫЕ НЕЙРОННЫЕ...
✓ Скачать Материалы по уроку:
cloud.mail.ru/...
Племянница с другом создала игру!!: • Video
➤Я ВКонтакте: id17130734
На столько хорошее видео, что я даже сохранил его на жесткий диск
Сразу видно что человек ЗНАЕТ то о чем говорит, и понимает и может реализовать.. Поэтому и объясняет понятно и ПРЕДМЕТНО. В отличие от других авторов где тупо идет зачитывание китайский грамот с попутным показом картинок. В итоге получая никому не нужную хрень. Обычно нет привычки ставить лайки или дизы, но тут заслуженно ставлю лайк!
Спасибо! Приятно читать, что полезны уроки. Буду рад если напишите предложения, что бы вам хотелось еще увидеть на канале, какие темы или области теории программирования.
Огромное спасибо! Я никак не мог найти как корректировать веса. Благодаря тебе я наконец-то понял, как это работает)
Лучшее видео по теме, что встретил на RUclips, спасибо, очень понятно!
Спасибо, стараюсь наиболее понятно. Предлагайте улучшения контента - внесу
Сделайте пожалуйста, несколько видео по гибридным нейронным сетям с использованием нечёткой логики, теоретико-игровых, генетических и т. д. алгоритмов.
Даже не надеялся увидеть это на vb! Оригинально! Хотелось бы научиться делать подобные вещи 🙂
да, намного понятнее чем кажется
Очень интересно, просто и понятно!
Спасибо.
Шш
Спасибо за такой хороший наглядный пример!
Благодарю! Буду рад новым идеям и предложениям.
Я скачал с вашего сайта пример открытого кода на Visual Basic, а после картинку где рисуем буквы перевел в пиксели виде больших квадратиков чтобы на них мышкой нажимать… и вот к чему я пришёл, что система «персептрон» не работает, а только создает иллюзию. Я нажал 8 квадратиков виде большого квадрата, и программа пересчитав показала, что в матрице весов нет данных этого квадрата показав «-1». Я обучил программу нажав на «1», после чего матрица весов изменилась. Я снова набиваю этот же квадрат в тех же клетках, и он показывает, что программа его узнала, выдав мне «1». Я усложнил задачу так, что нарисовал из кубиков косую линию так чтобы один кубик из этой косой линии закрасит кубик первого куба и обучил его на «-1»…, и тут возникла проблема если программа узнает только куб, то не узнает косую линию и наоборот и сколько бы я не делал одно изображение убивает другое… хотя я косой линией закрасил только один кубик большого куба…
На 11:00 как корректировать веса. Однозначно понятный материал.
Спасибо за лекцию !!! Правильно ли я понял, что под каждую проблему надо строить свою нейронную сеть?!
Т.е. верно ли высказывание, что в основе нейронных сетей лежат стандартные алгоритмы, но 'сетки', которые необходимо считать абсолютно разные и искусство заключается в том, чтобы создать нейронную сеть максимально близко описывающую проблему и подобрать( рассчитать ) веса. Спасибо.
Это только простейшая нейронная сеть. Она не не сможет определить поворот буквы, или символы которые отличаются меньше чем на половину по площади перекрывания. Для более сложных нейронных сетей и соответственно решаемых задач - да, есть определенные конфигурации, число слоев в многослойной сети, конфигурация отростков, передающих сигналы на несколько слоев, циклическая обработка сигнала, реккурентные слои - слои, где нейроны повторно принимают свой же выходной сигнал, и многое другое. В этой лекции простейшая сеть из 1 слоя из простого перцептрона Розенблата. Современные сложные алгоритмы насчитывают уже около 700 слоев нейронной сети, решают очень сложные задачи, обрабатываются на мощных компьютерах.
Отличная фоновая музыка! Хорошее видео. Вот только всё равно куча вопросов. Ведь сигналы получается приходят аналоговым и сравниваются с аналоговым весом - по сути дела компаратор?
Было бы неплохо продемонстрировать код на плюсах.
С какого набора данных лучше начать самостоятельное освоение нейронки типа Однослойный персептрон с сигмоидальной активационной функцией? С таблицы умножения или с более простых наборов данных? Хотелось бы начать с самых простых примеров, чтобы сначала освоить принципы обучения нейронной сети на полностью детерминированных моделях, чтобы далее перейти к вероятностным.
По детерминированным примерам хорошо подходят логические функции. Арифметика тоже возможна, но для однослойной будет сложновато научиться. На одном слое ей сложно уловить зависимость. А вот побитовые операции вполне можно обучать (не слишком сложные)
Большое спасибо! Скажите пожалуйста, в каких форматах лучше готовить данные для обучения однослойной сети? Это должны таблицы данных или попарные примеры: да/нет, плюс/ минус?
Этот момент не влияет - делай как тебе удобно. Можно например создать 2 построчных файла. В первом файле в строке входные данные, во втором файле - в строке под тем же номером - правильный ответ. В программе просто написать процедуры загрузки из файла с обработкой строк. А можно генерировать примеры и ответы прямо в программе. Любую логическую функцию в языках программирования можно вычислять и записывать в переменные булевского типа (true|false).
Большое спасибо! Скажите пожалуйста, может уже есть системы визуальной разработки, ориентированные именно на нейронные сети? В какой среде визуальной разработки лучше сделать простую тренировочную панель с окнами, кнопочками, чтобы в дном поле вводить данные , а в другом видеть результаты?
Да. Программ таких достаточно много, но я про них мало знаю, так как больше на теории программирования останавливаюсь в своих видео. Прикладные программы найдёте в гугле по запросу "программы нейронные сети".
Хорошее видео, но есть много мелочей которые автор видимо считает очевидными и не объясняет. Я как абсолютный новичок несколько раз потерял звенья логической цепочки пояснений. И кое что так и осталось непонятным.
В целом ещё один хороший урок для общего развития.
Один вопрос. Здесь идет отличие двух символов (А и Б) соответсвенно +0.1 или -0.1. Но как быть если три символа?
Для этого можно уже построить более прогрессивную сеть с двумя и более выходами. Можете посмотреть моё видео по многослойной нейронной сети
Спасибо, наконец-то нормально объясняющее видео! А то кругом общие принципы только. Один вопрос: если рисовать буквы разного размера и в разных частях квадрата, то сеть не обучится правильно? И еще один :) На каждый элемент массива один перцептрон, я правильно понимаю?
Сеть на основе перцептронов Розенблата самая простейшая. Она чувствительна и к перемещению и к изменению размеров, повороту. Но небольшие изменения помешают не сильно на сильно отличающихся элементах. Да. Каждый элемент после уменьшения входных данных обрабатывается отдельным перцептроном Розенблата
Спасибо за видео :)
спасибо тебе большое
а с чего начать изучение нейронных сетей? обязательно ли учить математику с начальных классов и где можно найти хорошие и доступные для среднего ума материалы по теме?
Без математики вообще никуда в программировании. А нейронная сеть - это вообще творческий подход к решению задач, здесь без владением математики никак. Для начала подойдут и обычные школьные учебники алгебры и информатики.
Алгоритмы Программирования,
Здесь я с Вами не соглашусь. Программирование - это логика в первую очередь. Иначе как бы я сам стал программистом, зная лишь на половину школьный курс математики ?
Хорошее видео, было бы лучше, если улучшить качество записи звука.
Понял принцип работы, но у меня еще осталось чувства незавершонности. Мне кажется, это не единственный вид нейроныых сетей, должны же быть еще.
Да, есть разные сети, которые лучше подходят для своих задач. Постораюсь подойти к этому вопросу разносторонне, насколько это будет возможно
Что за трек играет фоном?13:35
Благодарю за видео!
Есть две просьбы (относятся не только к этому конкретному видео,
но и к будущим) :
1) Возможно ли выкладывать исходники программ из видео или хотя-бы сами программы используемые для демонстраций в видео?
2) Хотелось бы, чтобы вы хотя-бы приблизительно указывали источники, которые использовали для подготовки материала видео. Бывает, хочется что-то еще почитать на эту тему, а гугл, как правило, в поиске по конкретной теме сперва выдает кучу информационного мусора - приходится тратить много времени на отсеивание.
Хорошо. Я добавлю исходники и материал на скачивание в Описании в роликам
Благодарю!
На текущие видео материал можно скачать в описании
Круто! Продолжайте в том же духе!
Хочу убедиться, что я правильно понял пример:
Когда рисуешь мышкой, участвуют определённые затронутые "рецепторы" (при данном конкретном вводе), а остальные рецепторы не изменяются (коэффициент в них). Если человек указывает что это "А", то в каждый затронутый рецептор +1. Если человек указывает, что это "Б", то из каждого затронутого рецептора -1. Таким образом в каждом рецепторе "накапливается" свой коэффициент. При новом вводе суммируются "веса" затронутых рецепторов, и если сумма положительная, то система предпологает что это "А", если сумма отрицательная, то "Б".
Я всё правильно понимаю?
Если ответ сети и эталонный (правильный символ полученный от человека) символ совпадают, то веса не меняются. Если ответы отличаются (а это значит что сеть ошиблась, тогда веса корректируются 10:30). Ответом сети будет сумма тех элементов матрицы, которые совпадают по положению с проверяемым нарисованным символом. Далее, пороговая функция определяет знак: для отрицательного значения в примере выбран символ Б, для положительного А.
Спасибо! Извиняюсь, был невнимателен.
А сколько было нейронов? 34*34 = 1156 входных? А сколько в скрытом слое?
Число рецепторов (входов) равно числу нейронов, и равно произведению ширины матрицы на высоту (зависит от округления рисования до более крупных пикселов). По сути все рецепторы и нейроны идентичны, и их расположение в двухмерном виде просто нагляднее. Но сама 2D-структура не несёт в себе какой-то роли. 1 рецептор связан с 1 нейроном и все они подаются на пороговую функцию для суммирования и разделения на две группы. Суммируются все нейроны, а не только те которые задействованы в рисовании символа. Но те нейроны, где на пикселах которых не было нарисовано символа (белый фон) дадут примерно равный вклад в сумму на оба символа (Это дополнение к первому комментарию про \"веса" затронутых рецепторов"\, которое я не пояснил в первом ответе)
Спасибо! Ждём новых видео о нейросетях! Особенно о нейросетях для компьютерных игр. Возможно Старкрафт будет следующей целью Deep Mind. Вот в этом направлении было бы интересно развиваться.
Спасибо за видео, хотелось бы уточнить детали по вашей программе, я её скачал и запустил исполняемый файл BasicPerceptron.exe и посмотрел исходник BasicPerceptron.frm.
1. Почему при запуске программы веса вначале показываются со значением -0.5, тогда как у вас в видео 0.5. В исходнике я тоже увидел что веса инициализируются MW(X, Y) = 0.5
2. насколько мне удалось разобраться в вашем исходнике:
Alf - скорость обучения установлено у вас в 0.1
белые пиксели соответствуют сигналу M2(X,Y) = 0, а чёрные M2(X,Y) = 1
Начальное значение пороговой функции равно T = 0.5
Но вот как то в этой ситуации, при таких значениях, я вычислил, и как-то не те значения получаются.. ни 0.7 из 0.5 вес на первом шаге изменяется, при букве А, а 0.5 для всех ячеек. 0.5 - 0.1*1*(1 - 1) = 0.5 и 0.5 - 0.1*0*(1-1) = 0.5
Может я что то напутал...
Инициализировать можно по разному. Это не сильно принципиально. Веса должны изменяться только при неправильном ответе. Для первого шага просто нет контраргумента. Либо все не меняет значение, если ответ сети совпадает с эталоном, либо все меняет - если ответ неправильный. А теперь на втором шаге нарисуйте "Б" и если сеть вам даст ответ "А", то вы ей скажете что это "Б". Ответ сети неверный, - и у вас изменятся только те веса, где пиксели соответствовали положению для "Б". А когда вы нарисуете "Б", а сеть вам скажет что видит "А". Изменятся часть ячеек которые соответствуют отклонению для А но в ту сторону куда смещаются веса "Б". В итоге у вас будет часть ячеек которые сильно сместятся от значения инициализации в одну сторону (плюс) для одной буквы, и в минус для другой - это ключевые пиксели букв. Наличие таких пикселей в изображении с высокой вероятностью свидетельствуют об этой букве. Например для буквы Б - это пиксель в верхнем левом углу (ведь у "А" там всегда пусто если ее рисовать симметрично). И будут ячейки с меньшими значениями, которые с одной или с другой стороны ближе к значению инициализации - пиксели которые чаще характерны для одной буквы и реже для другой. И потом суммарно по всем ячейкам мы смотрим в какую сторону смещается значение сети.
В самом начале там будет не "0.5 - 0.1*1*(1 - 1)=0.5", а "0.5 - 0.1*1*(-1 - 1)=0.7". Переменная F=-1 - выход нейрона активна на первом же шаге.
Благодарю за ответы, когда нибудь попробую на javascript или на java реализовать.. но скорее на javacript чтобы везде можно было продемонстрировать.
Очевидно, что у Вас талант преподавателя. Спасибо. А насколько я понимаю, в примере сеть различает А и не А, а не А и Б
Спасибо за вопрос. Нет в данном случае идет отличие именно между А и Б. Так как я подаю и примеры написания, А так и примеры написания Б. А и Б тут выступают в равной роли. "А" отличаем от "неА" и "Б" отличаем от "неБ", что в одной схеме отличает их друг от друга. Если например, после обучения написать другие буквы, то ответом сети будет "А" - если написанный символ больше "похож" на "А", и также будут ответы "Б", если символ "похож" на "Б". Например на "Л" будет ответ "А", а на "5" - будет ответ "Б". Что будет совершенно верно, так как сеть вообще не знала о существовании таких символов. По данной серии будут выходить и новые ролики. Пишите предложения. Буду рад!
А выложите, пожалуйста, исходники примера...
Спасибо.
Под этим видео в описании есть материалы, в том числе там есть исходники на VB6
Есть исходники - спасибо... А Вы могли бы вот так красиво с примером исходников бросить рекуррентную нейронную сеть? Это будет просто чудесно.
Какой язык посоветуете? C#, python, плюсы?
Для изучения основ искусственных нейронных сетей подойдет любой современный язык программирования. Потребуется работа с массивами, присвоение переменных и условия. Для наглядности изучения как в представленном уроке, - будет полезно иметь вывод графики на экран.
В целом, необходимо выбирать язык, который удобен Вам, но если у Вас нет человека, который поможет в этом, то лучше берите Питон, на него есть много библиотек и гайдов, связанных с нейросетями
Ничего с вашего майл.ру не качается, сделайте мирор на дропбоксе или гугле. За видос плюсую.
Как это можно использовать в игрострое, есть ли смысл? Может кто-то уже это использовал в играх, есть примеры?
Это, конечно, больше подходит для аналитических приложений, но в играх тоже можно найти применение. Основное назначение сети, это на определенные входные данные установить зависимость с выходными данными. Так, например, можно научить мобов эффективно сражаться, подавая на вход разные варианты атак, блокирования, применения эффектов, и проверять получил ли моб большие повреждения. Обучить на большом числе вариантов и зафиксировать такие веса, при которых, моб лучше защищается или больше наносит урона или какое-то балансное условие. Если это делать прямо по ходу игры, то можно создать волны, где пока идет первая волна, происходит обучение для второй волны мобов, где они уже будут более обученные (сильные). Это как один из вариантов, а можно придумать и намного больше.
это линейный классификатор! для игр это не подходит ,разве что для змейки) надо делать многослойную реверсную сеть ,или генетический код (последнее проще в реализации)
Здравствуйте. Спасибо за хорошее видео. Хочу Вас попросить сделать подобный видеоматериал на тему "Машинное обучение", т.к. это сейчас очень актуальная и мало кто может ее изложить это так просто, как Вы.
Ну и хотелось бы спросить такое...
У меня есть задача классификации строк по темам. Допустим подается Строка 1 о спорте и мне нужно отнести ее к категории Спорт; Строка 2 о политике - к категории Политика и т.д. Слова строк могут иметь скрытый тематический характер. Строки не очень длинные, где-то до 20 слов.
Скажите пожалуйста, можно ли такое реализовать с помощью нейросети, с чего начать и куда потом двигаться? Т.е., можете предложить общий алгоритм к решению данной задачи?
Буду ооочень благодарен за ответ! Спасибо.
Артём Василенко, скажу сразу - нейросеть может решать любые задачи, потому что ей всё равно что классифицировать, но так как она не разбирается в семантике задачи, то "общий алгоритм даст и поверхностное решение". Если вы напишите процедурный алгоритм по анализу строк по встречаемости например слов из спортивного словаря, из политического словаря, то добьетесь лучших результатов. Благо, тут уже есть данные понятные человеку. Нейросеть эффективнее когда есть куча разрозненных данных, в которых человеку просто так не разобраться и сложно структурировать, подразбить на подзадачи. Во всё остальном, понятном осмысленном, - всегда процедурные алгоритмы лучше.
Да, мне нужно классифицировать по семантике. А что собой представляют процедурные алгоритмы? В инете нет четкого описания для данной темы.
Процедурные алгоритмы связаны с тем, что ты свою задачу разбиваешь на несколько подзадач. Из примера этого видео вот сравнение для данной задачи. Для нейросети - просто подается качестве входящих данных куча окрашенных и неокрашенных точек, и она пытается найти там какую-то взаимосвязь. Решение определения символов процедурным способом такое: человек сам анализирует задачу и определяет какие параметры можно измерить у изучаемых символов - площадь, периметр, отношения ширины к длине, наличие замкнутых областей и др. Далее, для каждого из этих параметров пишется подпрограмма. Сравниваемые символы оцениваются по всем параметрам и выделяются ключевые, с помощью которых можно отделить признаки одного символа от другого. То есть, человек совершает основную работу по пониманию сути задачи, а компьютер выполняет технические расчеты. В твоей задаче, от человека будет требоваться составить тематические словари, подпрограммы анализа строк, анализ на учёт "видоизменение" слов в связи с наличием падежей и др. Выделяешь критерии, по которым можно получить решения задачи, а затем каждое из направлений последовательно программируешь. В этом общая суть процедурного программирования.
Суть понятна, спасибо. Смотрите, а если необходимо исследовать семантическую схожесть двух строк? Например:
1. Необходим опыт веб-разработки
2. Знание и умение работать с web-средой приветствуется
3. Вы должны уметь программировать на Java
4 ........
Т.е. с первой строкой мне необходимо сравнивать последующие строки и есть строка, например, 2 относится к 1, то необходимо отметить что она схожа с 1.
Если строка 3 схожа с 1 - отнести к ней, если нет - отнести её в отдельную категорию.
Первое что я сделал - составил Тезаурус, т.е. построил семантическое дерево к важным термам. Но, судя по вашему комментарию, здесь тоже нейросети не подойдут? Проблема в том, что строки короткие.
Чтобы строки считались аналогичными, нужно составить пары-синонимы. "веб-разработка" = "web-среда", "необходимо" = "приветствуются". Для каждого синонима можно вести свое одинаковое число. Если в двух строчках сразу несколько чисел одинаковы (получены от пар-синонимов), то можно с большей вероятностью сделать вывод о том что строки схожи. Превратить задачу в работу с нейросетью естественно можно, но потребуется обучить очень много строк - несколько тысяч в связи с тем что слов в русском языке много и по разному пишутся. В примере, я разделял всего 2 буквы друг от друга, и при этом потребовалось несколько десятков обучающих примеров. У вас просто не найдется такое большое число строк, а на малом числе у вас будут большие ошибки. Поэтому прямой подход к программированию тут лучше. Он и проще по осуществлению и будет точнее.
нормас ... подписка!
Я всем доволен, но меня интересует почему такой старомодный дизайн презентации и звукового сопровождения ?
Презентация PowerPoint 2003, на хороший звук еще не накопил)
@@user-ir8bn9zw8v забей ебанавтов кому обёртка определяет! дохуя презентаций с хорошим звуком, а толку - 0. у тебя может и звук не очень дюж, зато понимаешь что рассказываешь и доходчиво, что определяет!
ты главное суть людям доноси! а то за свистелками и перделками суть потерять легко
спасибо, с практическим примером очень наглядно все. Есть точно такое же для двухслойной нейронной сети?
Уже готовиться видеоурок по многослойным нейронным сетям
уделите пожалуйста максимальное внимание обратному распространению ошибки ) вот сколько чего не читаю и не смотрю, эта тема для меня загадка :( вот например 2 перцептрона внутренний слой, и 2 перцептрона выходной слой, получается каждый выход внутреннего слоя подключен к двум входам внешнего. как тут с этих двух слоев внешних ошибку брать?
Всё будет подробно показано - несколько десятков слайдов будет
супер! жду, спасибо заранее.
Если есть предложения на чем проверять, показывать пример, то пишите. Я еще окончательно не выбрал
Такс, а вторая часть будет или она уже есть?
Да. Видео по искусственному интеллекту еще будут
ТАк работает нейроная сеть в кс го банит читеров и обычных людей (рандом)
Сейчас как бы 2017 год, а не 60е.
Видео называется Основы. Для тех новичков, кто даже это не знает.