Комментарии 91
Просто и понятно, как и обещали. Спасибо :)
+5
«Программа представляет собой один сплошной недостаток – наша нейросеть очень глупа»
— более того, это вообще не нейронная сеть.
— более того, это вообще не нейронная сеть.
+24
Я соглашусь, пожалуй. Это что-то промежуточное, между обычным алгоритмом и алгоритмом с опытом. Я хотел на пальцах объяснить смысл функционирования обучаемых программ, в качестве стартовой статьи.
0
обоснуйте почему, пожалуйста
+1
Дак а что тут обосновывать? )
Искусственный нейрон понятие формальное, у него есть мат. модель. Класс из топика в эту модель не вписывается )
Искусственный нейрон понятие формальное, у него есть мат. модель. Класс из топика в эту модель не вписывается )
+6
Для каждого входа нейрона должен быть свой весовой коэффициент, а судя потому, что написал автор у него веса соответсвуют нейронам.
+2
Тут вы правы. Но я посчитал, что модель будет слишком сложной для начала.
+2
Ничего, что в этом суть нейронной сети? Между нейроны передают сигнал другому нейрону, каждый из которых влияет на результат с заданным весом, кто-то сильнее, кто-то почти никак.
0
Всему свое время.
Вы разбираетесь в теме, вам это ясно.Статья для новичков.
Не хочу сразу усложнять тему и отпугивать читателя — получится очередная громоздкая статья, коих миллион в интернете.
Вы разбираетесь в теме, вам это ясно.Статья для новичков.
Не хочу сразу усложнять тему и отпугивать читателя — получится очередная громоздкая статья, коих миллион в интернете.
+9
Ничего не знаю о нейросетях, кроме того, что прочёл в вашей статье. Но, как я понял из комментариев выше, вам к статье стоит дописать что-то такое: «Вот у нас получилась заготовка для нейросети. Пока что это ещё ей не является, но в следующей статье мы постараемся сделать из неё полноценную нейросеть.»
+5
Потому что нейронная сеть начинается когда есть нелинейность элементов (нейронов).
Пока нет нелинейности — это просто набор матриц.
Пока нет нелинейности — это просто набор матриц.
+1
обязательно продолжайте.
+8
Есть же те же многослойные перцептроны, простые и понятные, в то же время являюищиеся классическими искусственными нейронными сетями, почему вы не использовали такую архитектуру?
Ведь ваше решение с виду не дает преимуществ и настоящей ИНС не является.
Ведь ваше решение с виду не дает преимуществ и настоящей ИНС не является.
+1
В части преимуществ не все так однозначно. Как минимум одно преимущество налицо — простота.
Вообще, все зависит от задачи, выбор типа ИНС для решения конкретной задачи отдельная наука. А в некоторых случаях наивный Байес показывает результаты как минимум не хуже, чем ИНС.
Вообще, все зависит от задачи, выбор типа ИНС для решения конкретной задачи отдельная наука. А в некоторых случаях наивный Байес показывает результаты как минимум не хуже, чем ИНС.
+1
Как я и написал в конце статьи — это вводная для непосвященных.
Перцептроны с ходу — убийство мозга начинающего нейросетевика =)
Перцептроны с ходу — убийство мозга начинающего нейросетевика =)
+2
Это, скорее, классификатор, но не ИНС. Он не сможет классифицировать изображение, которому его не обучали. Например, подсуньте ему горизонтальную линию — только такие он и сможет классифицировать, вертикальные уже нет.
Но вообще все доходчиво, если планируете усложняться и таки дойти до ИНС, то с удовольствием почитаю.
Но вообще все доходчиво, если планируете усложняться и таки дойти до ИНС, то с удовольствием почитаю.
+6
Очень понравилось! Хочется продолжения! Про обучения, распознавание, а ещё лучше реализацию алгоритма particle filters.
0
Здорово, побольше бы таких статей!
Продолжайте конечно))
Продолжайте конечно))
+4
Совет: не пользоваться одиночным переводом строки для текста — или двойной (параграфы) или никакого. Иначе рваный текст получается, который и читать сложнее и смотрится неприятно.
0
Интересная статья. Жду продолжения!
+2
У нас к сожалению тоже не было отдельного курса по нейросетям (в отличии от соседней специальности), но все же мне довелось делать по ним курсовик.
У меня сложилась примерно следующая модель, возможно кому-то так будет понятнее:
Введем пару понятий, чтобы проще было объяснить: вход нейрона назовем синапсом, у нейрона их много; выход нейрона назовем аксоном — он в нашей модели один. Названия собственно примерно отражают биологический смысл.
Так вот, представим n-мерное пространство, где n — количество синапсов у нейрона. В рассмотренном выше примере n = 900. Входная информация, таким образом, представляет собой вектор в этом самом пространстве. Ну для простоты можете представить 3-х мерное пространство и 3-х мерные вектора. Правда сеть довольно тупая будет :).
Дык вот, память нейрона после обучения также представляется таким вектором, а вся сеть — эдаким облаком векторов в 900-мерном пространстве.
В таком случае задача классификации сводиться к очень простой задаче — нахождению скалярного произведения входного вектора с векторами каждого нейрона в сети. Соответственно где это произведение будет максимальным, там и наибольшее совпадение. Проверьте в 3-х мерной геометрии.
Собственно вся сложность в таком случае в адекватном обучении нейросети. Я делал довольно примитивную самообучающуюся сеть, уж не знаю насколько каноничная реализация получилась. В принципе наверное смогу накатать подобную этой статью.
У меня сложилась примерно следующая модель, возможно кому-то так будет понятнее:
Введем пару понятий, чтобы проще было объяснить: вход нейрона назовем синапсом, у нейрона их много; выход нейрона назовем аксоном — он в нашей модели один. Названия собственно примерно отражают биологический смысл.
Так вот, представим n-мерное пространство, где n — количество синапсов у нейрона. В рассмотренном выше примере n = 900. Входная информация, таким образом, представляет собой вектор в этом самом пространстве. Ну для простоты можете представить 3-х мерное пространство и 3-х мерные вектора. Правда сеть довольно тупая будет :).
Дык вот, память нейрона после обучения также представляется таким вектором, а вся сеть — эдаким облаком векторов в 900-мерном пространстве.
В таком случае задача классификации сводиться к очень простой задаче — нахождению скалярного произведения входного вектора с векторами каждого нейрона в сети. Соответственно где это произведение будет максимальным, там и наибольшее совпадение. Проверьте в 3-х мерной геометрии.
Собственно вся сложность в таком случае в адекватном обучении нейросети. Я делал довольно примитивную самообучающуюся сеть, уж не знаю насколько каноничная реализация получилась. В принципе наверное смогу накатать подобную этой статью.
+8
Да, забыл сказать. Значение на «аксоне» и будет значением скалярного произведения.
0
Чтож, спасибо за дополнение!
Планирую рассказать в следующей статье о простейшем перцептроне, о распределении и способах коррекции весов — ваш комментарий натолкнул меня на мысль, с чего начать.
Благодарю )
Планирую рассказать в следующей статье о простейшем перцептроне, о распределении и способах коррекции весов — ваш комментарий натолкнул меня на мысль, с чего начать.
Благодарю )
0
возможно кому-то так будет понятнее
Понятнее не получилось. Извините.
>>отражают биологический смысл
Прекрасно, но биологов тут не много, я думаю.
>>представим n-мерное пространство,
Это напоминает анекдот:
Профессор: А теперь представьте сферу в 9-ти мерном пространстве…
Студент: ??? Как можно представить сферу в 9-ти мерном пространстве???
Профессор: О, это очень просто: представьте сферу в n-мерном пространстве и положите n равное 9.
>> задача классификации
Что это за задача?
-4
Ну я потому и написал, сначала попробуйте в 2-3-х измерениях. Нарисуйте, сразустанет понятнее. Есть некоторое количество векторов и есть вектор входных данных. Чем меньше угол между ними, тем более «родственны» эти данные, тем больше скалярное произведение. Задача распознавания букв и есть задача классификации входного сигнала — определим к какому классу он относится.
Биологические термины чисто для сокращения. Значения гуглятся элементарно. Мы же все-таки биологическую систему пытаемся эмулировать.
Биологические термины чисто для сокращения. Значения гуглятся элементарно. Мы же все-таки биологическую систему пытаемся эмулировать.
+2
А вот мне, наоборот, стало понятнее )
0
Доходчиво, да не совсем. С обработкой bitmap-картинки вроде понятно — вот есть точки 0 или 1, и им соответствуют вектора. А как обстоит дело с обработкой звука? Как, например, на фоне шума волн распознать крик чайки? Человеческий мозг как-то уверенно это делает, причем соотношение сигнал/шум может меняться в очень широких пределах. Как выбирать эти вектора, и как их систематизировать, чтобы получилась такая же система распознавания?
+1
По идее абсолютно без разницы что представляет собой входной сигнал. В битмапе это набор точек, причем, хочу заметить, не обязательно 0 и 1, можно использовать более широкий диапазон. Со звуком это может быть сэмпл фиксированной длительности, тогда уровнями на синапсах (и числами в векторах) будут, например, амплитуды на каждом шаге дискретизации. Распознавание ничем отличаться не будет, все тоже самое. Основная проблема тут, на мой взгляд, именно в адекватном обучении нейросети. Кстати, почти все, что я видел из институтских заданий и реализаций занималось именно обучением на зашумленных образах и распознаванием зашумленных образов.
Кстати, не стоит забывать, что тут рассматривается простейшая однослойная нейросеть. Есть гораздо более сложные вещи, у меня, в свое время, не хватило познаний матана чтобы в них разобраться :).
Кстати, не стоит забывать, что тут рассматривается простейшая однослойная нейросеть. Есть гораздо более сложные вещи, у меня, в свое время, не хватило познаний матана чтобы в них разобраться :).
0
Нет, все равно непонятно. Уровни на каждом шаге дискретизации нельзя подставлять в качестве синапса (входа в нейрон), поскольку к примеру -100 и +100 может означать на выходе АЦП один и тот же сигнал, просто в противофазе. Наверное, в качестве входных синапсов должны быть какие-то свертки сигнала по амплитуде, спектру, времени. Вопрос как раз и был в том, какие именно должны быть эти синапсы, как их выбрать и как получить, чтобы добиться уверенного распознавания полезного звукового сигнала.
0
Тут я к сожалению не подскажу, так как обработкой звука никогда не занимался. Я про то, что задача классификации от этого не меняется. А вот задача адекватного задания входного сигнала и обучения нейросети — остается.
Нейросети ведь сначала показывается некая серия эталонов, в результате чего у нейрона формируется некий обобщенный образ, соответствующий классу, им распознаваемому. А потом уже мы показываем произвольный образ, и какой нейрон наибольшим образом возбудился (максимум на аксоне), к таком классу этот образ и принадлежит.
Нейросети ведь сначала показывается некая серия эталонов, в результате чего у нейрона формируется некий обобщенный образ, соответствующий классу, им распознаваемому. А потом уже мы показываем произвольный образ, и какой нейрон наибольшим образом возбудился (максимум на аксоне), к таком классу этот образ и принадлежит.
0
Присоединюсь к предыдущим ораторам. При отсутствии весовых коэффициентов как таковых, это сложно назвать нейронной сетью.
+1
Ну, конечно, на нейросеть это дело похоже очень отдаленно, но простота изложения подкупает. Так что реквестирую продолжение, самому интересно почитать хоть раз «простым» языком. Только дополнительно все-таки реквестирую несколько большую строгость. Перефразируя известную поговорку, определениями математику не испортишь.
+2
Ах да, и все-таки может лучше на более подходящем языке излагать примеры, делфи несколько неуклюж, да и думается мне си-подобные языки большинству привычней. Или даже питон, а то и хаскель лучше подойдут.
+1
Абсолютно согласен, как и говорил — Делфи просто под рукой была.
0
Но как Вы тогда писали на Хабр? Или заблокировано всё, кроме него? Кто мешал скачать какой-нибудь Wing или Code::Blocks?
-2
На Хабр писал из браузера.
В тот момент для меня важно было реализовать идею, пока мысль не ушла, а на свежеустановленной системе была только Дэлфи.
Не зря я приготовился к помидорам =)
Обещаю исправиться и следующую статью написать на чем-нибудь Си-подобном.
В тот момент для меня важно было реализовать идею, пока мысль не ушла, а на свежеустановленной системе была только Дэлфи.
Не зря я приготовился к помидорам =)
Обещаю исправиться и следующую статью написать на чем-нибудь Си-подобном.
0
Может вообще попробовать обойтись без кода? Есть и другие методы показать алгоритм.
+3
Я так понял, код на паскале написан? Думаю это полезно было-бы указать в топике, для таких дундуков как я. Кстати, а почему паскаль?
+2
My bad, не прочитал комментарии. В следующих статьях (надеюсь, они будут) пожалуйста отставьте паскаль в сторону, C++/Python/Ruby большинству будут понятней :)
+3
Не надо говорить за большинство. Не оставляйте Паскаль, у него простой и понятный синтаксис, известный многим со школы.
0
Я извиняюсь, но так оставлять или нет? Написано «Не оставляйте», а аргументы вроде за «Оставляйте».
0
Извиняюсь, о
Описка. Я за то, чтобы оставить код на Паскале.
Описка. Я за то, чтобы оставить код на Паскале.
0
Блять. :(
+4
Насчет простоты соглашусь, но все же большинство просит перейти на Си-подобный язык.
Так что я пока в смятении…
Так что я пока в смятении…
0
Я думаю, это зависит от того, чего конкретно вы хотите.
Если хотите показать именно пример реализации нейронной сети — то лучше перейти на какой-нибудь более популярный язык.
Если же хотите передать сами знания — то какая разница, на чем примеры написаны? Можно вобще без кода, только картинки с результатами навставлять.
В конце-концов, примеров реализации нейронных сетей на каком-либо языке программирования полно.
Если хотите показать именно пример реализации нейронной сети — то лучше перейти на какой-нибудь более популярный язык.
Если же хотите передать сами знания — то какая разница, на чем примеры написаны? Можно вобще без кода, только картинки с результатами навставлять.
В конце-концов, примеров реализации нейронных сетей на каком-либо языке программирования полно.
0
Несмотря на все просьбы никто непонимания кода не обозначал. Паскаль тем и хорошо что близок к естественным языкам. Легко читается.
PS: если все-таки будете писать на Delphi — нейроны можно удобно сериализовать в файл при помощи TStream.Read/WriteComponent
PS: если все-таки будете писать на Delphi — нейроны можно удобно сериализовать в файл при помощи TStream.Read/WriteComponent
0
Спасибо, очень интересно. Продолжайте! Только пожалуйста более читабельный язык. Си подошел бы прекрасно.
0
Тут многие писали о том, что это не нейросеть. Меня, опять же, как знающего о нейросетях только из этой статьи, интересует: а как сделать из этого примера нейросеть?
Если я правильно понимаю, то нужно сделать нейроны, которые будут отвечать за определение слов, и в которое будет приходить информация, из нейронов распознавания букв. Так? На каждое слово будет свой нейрон. А потом можно сделать ещё нейроны, которые будут распознавать предложения, беря на входе слова из предыдущих нейронов. Я прав?
Тоесть, будет именно сеть, и она сможет, как было написано выше, иметь у нейронов вес на вход и на выход…
Камнями в меня не кидайте, писал это основываясь лишь на информации из статьи и из комментариев.
Если я правильно понимаю, то нужно сделать нейроны, которые будут отвечать за определение слов, и в которое будет приходить информация, из нейронов распознавания букв. Так? На каждое слово будет свой нейрон. А потом можно сделать ещё нейроны, которые будут распознавать предложения, беря на входе слова из предыдущих нейронов. Я прав?
Тоесть, будет именно сеть, и она сможет, как было написано выше, иметь у нейронов вес на вход и на выход…
Камнями в меня не кидайте, писал это основываясь лишь на информации из статьи и из комментариев.
0
Нет, вы обобщаете задачу, а не модель сети. Не стоит думать, что нейронная сеть сама все распознает. Обычно схема работает так:
Есть n-мерный СКВ( сферический конь в вакууме ). В этом n-мерном пространстве у нас нет четкого правила определения (или оно слишком сложное), к какому типу коней он пренадлежит. Мы проганяем его через нейронную сеть — получаем образ СКВ в k-мерном пространстве, для которого такое правило очевидно / проще.
Например, мы хотим получить либо да (выход == 1) либо нет (выход == 0). Тогда вместо решения задачи классификации n-мертного вектора нам надо всего лишь решить задачу «выход = x ближе к 0 или к 1?».
Есть n-мерный СКВ( сферический конь в вакууме ). В этом n-мерном пространстве у нас нет четкого правила определения (или оно слишком сложное), к какому типу коней он пренадлежит. Мы проганяем его через нейронную сеть — получаем образ СКВ в k-мерном пространстве, для которого такое правило очевидно / проще.
Например, мы хотим получить либо да (выход == 1) либо нет (выход == 0). Тогда вместо решения задачи классификации n-мертного вектора нам надо всего лишь решить задачу «выход = x ближе к 0 или к 1?».
0
НЛО прилетело и опубликовало эту надпись здесь
Я ранее не читал о нейронных сетях, но узнал слишком мало, что бы автор сомневался, писать ему цикл статей или нет.
Теперь Вы просто обязаны продолжить :)
Теперь Вы просто обязаны продолжить :)
0
Присоединюсь к вышесказанному: пишите, Паша, пишите. Теперь читателям будет обидно не увидеть продолжение =)
0
Присоединюсь к ранее высказавшимся в топике, что расмотренная модель в примере — это нисколько не нейронная сеть. Не хочу показаться ханжой, но использовать Delphi даже в учебных целях, это издевательство. Java или C#, чтобы сразу прививать хороший тон новичкам, ну на крайняк C++ =)
-5
На мой взгляд, для начинающих — неплохо. Хотя и с оговорками.
У меня другой совет: не надо примеров с распознаванием букв — завязните с предварительной обработкой( тут написано почему). Поскольку нейронная сеть в конце-концов не классифицирует, а аппроксимирует — возьмите пример аппроксимации. Например, по заданным 10 значениям увидеть sin( x ). Пример же простым должен быть.
У меня другой совет: не надо примеров с распознаванием букв — завязните с предварительной обработкой( тут написано почему). Поскольку нейронная сеть в конце-концов не классифицирует, а аппроксимирует — возьмите пример аппроксимации. Например, по заданным 10 значениям увидеть sin( x ). Пример же простым должен быть.
+1
Несколько пугает тенденция — все чаще и чаще на хабре начали появляться статьи, описывающие основы нейросетей для начинающих. Впечатление, что скоро это станет эдаким стартом: не знаешь с чего начать — пиши про нейросети.
ПМСМ и эта статья тоже не достигает заявленных целей — полный чайник врядли вынесет из нее какие-то новые знания, а не полный чайник и так уже знает все это (не исключено, что прочел в одной из многочисленных предыдущих статей по нейросетям на хабре).
Нападки на язык программирования выглядят странными — в конце концов паскаль является вполне себе рабочим языком, пожалуй даже еще без явно различимых признаков трупного окоченения. То, что он не является более мэйнстримовым, нисколько не уменьшает его а) тьюринг-полноты и б) читабельности.
ПМСМ и эта статья тоже не достигает заявленных целей — полный чайник врядли вынесет из нее какие-то новые знания, а не полный чайник и так уже знает все это (не исключено, что прочел в одной из многочисленных предыдущих статей по нейросетям на хабре).
Нападки на язык программирования выглядят странными — в конце концов паскаль является вполне себе рабочим языком, пожалуй даже еще без явно различимых признаков трупного окоченения. То, что он не является более мэйнстримовым, нисколько не уменьшает его а) тьюринг-полноты и б) читабельности.
+1
Хоть это и не сеть (нейроны не связаны между собой) но на пальцах очень хорошо объясняется. Спасибо
0
Переписал исходник на C# и отправил автору предложение по обновлению статьи и размещению здесь варианта на Шарпе, если вдруг кому-то не терпится стучите поделюсь.
+1
Вопрос ко всем заинтересовавшимяс:
На каком языке вы бы хотели увидеть код в следующей статье?
Просьба просто написать название языка, без лишних слов.
Составлю статистику и сделаю выбор из того, чем владею.
На каком языке вы бы хотели увидеть код в следующей статье?
Просьба просто написать название языка, без лишних слов.
Составлю статистику и сделаю выбор из того, чем владею.
0
Я вроде начал понимать как работают нейронные сети. Знал бы мой препод по искуссственному интеллекту — плакал бы от радости. С нетерпением жду продолжения.
0
Минут 15 смотрел на код. Что то до боли знакомое, но непонятное. Только в каментах прочитал что это Делфи озарило. Не писал лет 10 уже на нем, забыл как выглядит О_О
0
теперь нужно также понятно написать, но для неокогнитрона :)
0
0
Исключительно полезная статья. Надеюсь на продолжение.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Нейросети для чайников. Начало