Искусственные нейронные сети простыми словами

image

Когда, за бутылкой пива, я заводил разговор о нейронных сетях — люди обычно начинали боязливо на меня смотреть, грустнели, иногда у них начинал дёргаться глаз, а в крайних случаях они залезали под стол. Но, на самом деле, эти сети просты и интуитивны. Да-да, именно так! И, позвольте, я вам это докажу!

Допустим, я знаю о девушке две вещи — симпатична она мне или нет, а также, есть ли о чём мне с ней поговорить. Если есть, то будем считать это единицей, если нет, то — нулём. Аналогичный принцип возьмем и для внешности. Вопрос: “В какую девушку я влюблюсь и почему?”


Можно подумать просто и бескомпромиссно: “Если симпатична и есть о чём поговорить, то влюблюсь. Если ни то и ни другое, то — увольте.”



Но что если дама мне симпатична, но с ней не о чем разговаривать? Или наоборот?


Понятно, что для каждого из нас что-то одно будет важнее. Точнее, у каждого параметра есть его уровень важности, или вернее сказать — вес. Если помножить параметр на его вес, то получится соответственно “влияние внешности” и “влияние болтливости разговора”.


И вот теперь я с чистой совестью могу ответить на свой вопрос:


“Если влияние харизмы и влияние болтливости в сумме больше значения “влюбчивость” то влюблюсь…”


image


То есть, если я поставлю большой вес “болтологичности” дамы и маленький вес внешности, то в спорной ситуации я влюблюсь в особу, с которой приятно поболтать. И наоборот.


image


Собственно, это правило и есть нейрон.


Искусственный нейрон — это такая функция, которая преобразует несколько входных фактов в один выходной. Настройкой весов этих фактов, а также порога возбуждения — мы настраиваем адекватность нейрона. В принципе, для многих наука жизни заканчивается на этом уровне, но ведь эта история не про нас, верно?


Сделаем ещё несколько выводов:


  • Если оба веса будут малыми, то мне будет сложно влюбиться в кого бы-то ни было.
  • Если же оба веса будут чересчур большими, то я влюблюсь хоть в столб.
  • Заставить меня влюбиться в столб можно также, понизив порог влюбчивости, но прошу — не делайте со мной этого! Лучше давайте пока забудем про него, ок?

Кстати о пороге

Смешно, но параметр “влюбчивости” называется “порогом возбуждения”. Но, дабы эта статья не получила рейтинг “18+”, давайте договоримся говорить просто “порог”, ок?


Нейронная сеть


Не бывает однозначно симпатичных и однозначно общительных дам. Да и влюблённость влюблённости рознь, кто бы что ни говорил. Потому давайте вместо брутальных и бескомпромиссных “0” и “1”, будем использовать проценты. Тогда можно сказать — “я сильно влюблён (80%), или “эта дама не особо разговорчива (20%)”.


Наш примитивный “нейрон-максималист” из первой части уже нам не подходит. Ему на смену приходит “нейрон-мудрец”, результатом работы которого будет число от 0 до 1, в зависимости от входных данных.


image


“Нейрон-мудрец” может нам сказать: “эта дама достаточно красива, но я не знаю о чём с ней говорить, поэтому я не очень-то ей и восхищён”


image


Немного терминологии

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


Поехали дальше. Сделаем по этим двум фактам другую оценку: насколько хорошо с такой девушкой работать (сотрудничать)? Будем действовать абсолютно аналогичным образом — добавим мудрый нейрон и настроим веса комфортным для нас образом.


Но, судить девушку по двум характеристикам — это очень грубо. Давайте судить её по трём! Добавим ещё один факт – деньги. Который будет варьироваться от нуля (абсолютно бедная) до единицы (дочь Рокфеллера). Посмотрим, как с приходом денег изменятся наши суждения….


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


В работе мне абсолютно всё равно, сколько денег у девушки, поэтому вес сделаю равным нулю.


image


Оценивать девушку только для работы и влюблённости — очень глупо. Давайте добавим, насколько с ней будет приятно путешествовать:


  • Харизма в этой задаче нейтральна (нулевой или малый вес).
  • Разговорчивость нам поможет (положительный вес).
  • Когда в настоящих путешествиях заканчиваются деньги, начинается самый драйв, поэтому вес денег я сделаю слегка отрицательным.

Соединим все эти три схемы в одну и обнаружим, что мы перешли на более глубокий уровень суждений, а именно: от харизмы, денег и разговорчивости — к восхищению, сотрудничеству и комфортности совместного путешествия. И заметьте — это тоже сигналы от нуля до единицы. А значит, теперь я могу добавить финальный “нейрон-максималист”, и пускай он однозначно ответит на вопрос — “жениться или нет”?


image


Ладно, конечно же, не всё так просто (в плане женщин). Привнесём немного драматизма и реальности в наш простой и радужный мир. Во-первых, сделаем нейрон "женюсь — не женюсь" — мудрым. Сомнения же присущи всем, так или иначе. И ещё — добавим нейрон "хочу от неё детей" и, чтобы совсем по правде, нейрон “держись от неё подальше".


Я ничего не понимаю в женщинах, и поэтому моя примитивная сеть теперь выглядит как картинка в начале статьи.


Входные суждения называются “входной слой”, итоговые — “выходной слой”, а тот, что скрывается посередине, называется "скрытым". Скрытый слой — это мои суждения, полуфабрикаты, мысли, о которых никто не знает. Скрытых слоёв может быть несколько, а может быть и ни одного.


Долой максимализм.


Помните, я говорил об отрицательном влияние денег на моё желание путешествовать с человеком? Так вот — я слукавил. Для путешествий лучше всего подходит персона, у которой денег не мало, и не много. Мне так интереснее и не буду объяснять почему.


Но тут я сталкиваюсь с проблемой:


Если я ставлю вес денег отрицательным, то чем меньше денег — тем лучше для путешествий.
Если положительным, то чем богаче — тем лучше,
Если ноль — тогда деньги “побоку”.


Не получается мне вот так, одним весом, заставить нейрон распознать ситуацию “ни много -ни мало”!


Чтобы это обойти, я сделаю два нейрона — “денег много” и “денег мало”, и подам им на вход денежный поток от нашей дамы.


Теперь у меня есть два суждения: “много” и “мало”. Если оба вывода незначительны, то буквально получится “ни много — ни мало”. То есть, добавим на выход ещё один нейрон, с отрицательными весами:


image


“Нимногонимало”. Красные стрелки — положительные связи, синие — отрицательные


Вообще, это значит, что нейроны подобны элементам конструктора. Подобно тому, как процессор делают из транзисторов, мы можем собрать из нейронов мозг. Например, суждение “Или богата, или умна” можно сделать так:


image


Или-или. Красные стрелки — положительные связи, синие – отрицательные


Или так:


image


можно заменить “мудрые” нейроны на “максималистов” и тогда получим логический оператор XOR. Главное — не забыть настроить пороги возбуждения.


В отличие от транзисторов и бескомпромиссной логики типичного программиста “если — то”, нейронная сеть умеет принимать взвешенные решения. Их результаты будут плавно меняться, при плавном изменение входных параметров. Вот она мудрость!


Обращу ваше внимание, что добавление слоя из двух нейронов, позволило нейрону “ни много — ни мало” делать более сложное и взвешенное суждение, перейти на новый уровень логики. От “много” или “мало” — к компромиссному решению, к более глубокому, с философской точки зрения, суждению. А что если добавить скрытых слоёв ещё? Мы способны охватить разумом ту простую сеть, но как насчёт сети, у которой есть 7 слоёв? Способны ли мы осознать глубину её суждений? А если в каждом из них, включая входной, около тысячи нейронов? Как вы думаете, на что она способна?


Представьте, что я и дальше усложнял свой пример с женитьбой и влюблённостью, и пришёл к такой сети. Где-то там в ней скрыты все наши девять нейрончиков, и это уже больше похоже на правду. При всём желании, понять все зависимости и глубину суждений такой сети — попросту невозможно. Для меня переход от сети 3х3 к 7х1000 — сравним с осознанием масштабов, если не вселенной, то галактики — относительно моего роста. Попросту говоря, у меня это не получится. Решение такой сети, загоревшийся выход одного из её нейронов — будет необъясним логикой. Это то, что в быту мы можем назвать “интуицией” (по крайней мере – “одно из..”). Непонятное желание системы или её подсказка.


Но, в отличие от нашего синтетического примера 3х3, где каждый нейрон скрытого слоя достаточно чётко формализован, в настоящей сети это не обязательно так. В хорошо настроенной сети, чей размер не избыточен для решения поставленной задачи — каждый нейрон будет детектировать какой-то признак, но это абсолютно не значит, что в нашем языке найдётся слово или предложение, которое сможет его описать. Если проецировать на человека, то это — какая-то его характеристика, которую ты чувствуешь, но словами объяснить не можешь.


Обучение.


Несколькими строчками ранее я обмолвился о хорошо настроенной сети, чем вероятно спровоцировал немой вопрос: “А как мы можем настроить сеть, состоящую из нескольких тысяч нейронов? Сколько “человеколет” и погубленных жизней нужно на это?.. Боюсь предположить ответ на последний вопрос. Куда лучше автоматизировать такой процесс настройки — заставить сеть саму настраивать себя. Такой процесс автоматизации называется обучением. И чтобы дать поверхностное о нём представление, я вернусь к изначальной метафоре об “очень важном вопросе”:


Мы появляемся в этом мире с чистым, невинным мозгом и нейронной сетью, абсолютно не настроенной относительно дам. Её необходимо как-то грамотно настроить, дабы счастье и радость пришли в наш дом. Для этого нам нужен некоторый опыт, и тут есть несколько путей по его добыче:


1) Обучение с учителем (для романтиков). Насмотреться на голливудские мелодрамы и начитаться слезливых романов. Или же насмотреться на своих родителей и/или друзей. После этого, в зависимости от выборки, отправиться проверять полученные знания. После неудачной попытки — повторить всё заново, начиная с романов.


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


3) Обучение без учителя, вариант 2 (путь отчаянных оптимистов). Забить на всё, что-то делать по жизни, и однажды обнаружить себя женатым. После этого, перенастроить свою сеть в соответствие с текущей реальностью, дабы всё устраивало.


Далее, по логике я должен расписать всё это подробно, но без математики это будет слишком философично. Потому считаю, что мне стоит на этом остановиться. Быть может в другой раз?


Всё вышесказанное справедливо для искусственной нейронной сети типа “персептрон”. Остальные сети похожи на нее по основным принципам, но имеют свою нюансы.


Хороших вам весов и отличных обучающих выборок! Ну а если это уже и не нужно, то расскажите об этом кому-нибудь ещё.


П.С.


Веса моей нейронной сети не настроены, и я никак не могу понять к какому ресурсу должна относится эта статья.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Помогите мне с обучающей выборкой: «Где лучше размещать подобные статьи?»
Поделиться публикацией
Комментарии 92
    +10
    А можете такими же словами объяснить backpropagation? :)
      +2

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


      П.С. И да, статья хорошая и объясняется действительно неплохо.

        +1
        Градиентный спуск классически рассказывают на аналогии шарика, скатывающегося с горы к точке минимума. В рамках этой аналогии можно и learning rate раскрыть, и momentum.
          +2
          Градиент неплохо показан автором в статье в виде, эээ… градиента
            +1
            Дак и мой комментарий был не о понятии градиента, а о понятии градиентного спуска, которое лишь использует понятие градиента и является компонентом метода backprop. Автор в статье всего лишь развернул пару сигмоид, это совсем о другом.
          +1
          В начале мне казалось, что объяснить НС тоже — нетривиально. Но нашлись аналогии. Как видите я остановился подойдя вплотную к backpropagation. Толи вдохновение кончилось, толи это действительно неочевидно.
            0

            Если быть честным, то я сам наверное бы даже до туда не дошёл :)

              0
              Значит, назревает следующая статья… ;)
                +1
                backpropagation кстати тоже интересно себя ведет, когда в процессе обучения на нейросеть приходит озарение и ошибка резко падает в разы, находя какой-нибудь локальный минимум, как-будто кричит этим — Эврика! ))
              +3
              Суть в том, что мы обнаруживаем что на выходе не то, что должно быть, и начинаем переводить стрелки и искать кто виноват в неправильном результате. Попутно давая по шапке нейронам(меняя весовые коэффициенты). А эти нейроны дают по шапке предыдущим. и так до первого слоя.
                +7
                Начальник, который орёт на своих подчинённых, мол: «промах на 0.4 — да как вы смеете!» — те орут на своих, те на своих итд :) А локальный минимум — объяснить «бюрократией» и «боязнью ответственности»
                  +2
                  Уже ждём такую статью!
              0
              Интересная статья, простые и понятные аналогии. Хочу дополнить, что очень сильно упрощает понимание компьютерных нейронные сетей, как это ни банально, понимание работы человеческого нейрона. Даже не углубляясь в тонкости физиологии.

              Вдогонку пару своих вопросов, которые всегда хотелось задать программистам нейронных сетей:
              Есть ли в компьютерных нейронных сетях аналог «Аксонного холмика»? Это небольшая область, при получении сигнала на которую, нейрон сразу же переходит в стадию возбуждения, при том, что этого сигнала пришедшего на любой другой участок мембраны – заведомо недостаточно для возбуждения.
              Есть ли в КНС аналоги такой физиологии: аксон или раздваивается, или просто заворачивается на нейрон обратно и дополнительно возбуждает нейрон, или наоборот – тормозит его?
                +2
                Есть ли в компьютерных нейронных сетях аналог «Аксонного холмика»?
                Если один из весов значительно больше остальных, так и будет происходить. Но такая ситуация вообще нежелательна, так что в процессе генерализации такие коэффициенты давят.
                аксон или раздваивается, или просто заворачивается на нейрон обратно и дополнительно возбуждает нейрон, или наоборот – тормозит его
                Есть различного вида рекуррентные сети, где сигнал с выхода действительно подаётся на вход (в рамках нейрона, слоя или целой сети). Они не столь удобны по очевидной причине: выход сети зависит не только от текущих входных данных, но и от предыдущих состояний, т.е. оценить качество работы такой сети не всегда просто.
                  0
                  Интересно! Жаль, что даже такие простые механизмы реальных нейронов вызывают сложности и от них стараются избавляться. Я думал, что все намного лучше…
                    0
                    Это как алфавит. В компьютерах могли использоваться троичные и другие н-ричные системы, но выбрали бинарную — ибо проще в реализации, а следовательно лучше масштабируется. Аналогичную мы видим сейчас на рынке процессоров, где Интелы, считающие за один такт очень много всего, хорошенько теснятся АРМ процессорами, такт которых — это некоторая элементарная операция. Тут тоже самое — легче влепить 10 или более примитивных нейронов, для описания одного нейрона мозга.
                      0
                      Мммм… Исходя из этого описания машинных нейронов, я не вижу простой возможности реализовать свойства, которые я перечислил, может быть потому, что я совсем не силен в компьютерных нейросетях
                        +2
                        Прошу прощения, я не сразу понял задачу с «аксонным хомяком». Sadler прав. Это решается большим весом на входе от необходимого нейрона. Проблема лишь в том, что простые алгоритмы обучения не очень любят такую ситуацию. Если же использовать что-то более серьёзное — то без проблем.
                          +4
                          Аксонным холмиком, а не хомяком :)
                          //рыдаит
                +1
                Спасибо за отличную статью! Теперь я думаю, что понимаю основы искусственных нейросетей (наверняка на самом деле все гораздо глубже :) ).
                  –1
                  Я правильно понимаю, что компьютерные нейроны строятся на фундаменте «транзисторной» логики? То есть, грубо говоря, алгоритм работы нейрона запрограммирован с помощью стандартных «если-то-иначе» на каком-нибудь С++?
                    0
                    Почти так, но, т.к. нейронов достаточно много, удобнее оперировать не отдельными их характеристикам, а матрицами коэффициентов. Кроме прочего, это позволяет легко переложить задачу на GPU. Стандартом в отрасли является Python, я сам предпочитаю matlab. Для C++ тоже есть фреймворки, и иногда достаточно быстрые, но лично мне хватает проблем с самим алгоритмом, не хочу устраивать себе дополнительные.
                      0
                      Спасибо /*ушел писать нейроны для игрушки, в которой надо поработить человечество, а так как на JS, то конец света ненадолго откладывается*/
                        0
                        Соответствующие библиотеки, дергаемые из питона, написаны на C или C++ как правило, разве нет?

                        Забавно, что лично мне хватает проблем с алгоритмом, поэтому я пишу на плюсах :)
                        0
                        На таком фундаменте строятся любые нейроны.
                          0
                          На таком фундаменте строится любое ПО :)
                        +2
                        гайд по поиску «своей второй половинки» с помощью нейронных сетей)

                        P.S.
                        спасибо за статью)
                          +2
                          Я бы использовал для «поиска» другую сеть. Эту лишь как оценочный механизм :)
                          0
                          Было бы здорово иметь онлайн-конструктор нейронных сетей для начинающих. Чтобы как ваши картинки, но их можно было бы перетаскивать и соединять связями. Давая веса, выбирая типы нейронов, и так далее. Всегда было легче учиться на интерактивных примерах. Такое уже есть, или, может кто-то, кто в теме, может написать?

                          P.S. Спасибо за отличную статью! Подписываюсь на все следующие.
                            +2

                            Онлайновых не знаю, но в универе мы пользовались вот этим: http://www.membrain-nn.de/main_en.htm
                            Для приватного пользования лицензия не нужна.

                              0
                              Спасибо!
                              Но ваши картинки намного красивее, чем эта программа =) Знакомым, далёким от программирования такое не покажешь…
                                0

                                Картинки не мои. Как и статья :)
                                А эта программа конечно не совсем для новичков и далёких от программирования людей. Но например для студентов она на мой взгляд самое то.

                              +3
                                +2
                                Есть современная браузерная демка от гугла — playground.tensorflow.org
                                +2
                                Не совсем понятно, а почему на geektimes? Почему не хабр?
                                  +3
                                  Науч-поп без формул. В процессе написания я понял, что многим интересна эта тематика так же как и астрономия, но её незаслуженно побаиваются, так как не могут увидеть своими глазами, пощупать.
                                    –1
                                    А можете ли объяснить мат.решение след.задачи именнуемой «банерокрутилкой»?
                                    Задача: Имеется N графических PNG-файлов(банеров). Системе нужно прокрутить их в псевдо-рандомном порядке. За одну прокрутку N банеров система показывает каждый банер не более одного раза. Вторая часть звучит так: Сделайте настройку процесса прокрутки так, чтоб при следующем показе банеров порядок их отображения был уже другой.

                                    Пока есть решение в виде куска кода в песочнице: https://habrahabr.ru/sandbox/61205/. Но мне кажется такое должно решаться с помощью модификации LFSR. Может ошибаюсь

                                    З.Ы.: Теги ссылки можно использовать только тем у кого кармы достаточно, так что прошу прощения за небрежное оформление
                                      0
                                      Не совсем понимаю, как это относится к НС.

                                      Но честно скажу — полностью задачу я не понял.
                                        0
                                        http://ru.cppreference.com/w/cpp/algorithm/next_permutation
                                    0
                                    Отличная статья, спасибо!
                                    Радует увеличение статей про нейронные сети в последнее время. Всегда была интересна эта тема.
                                      0
                                      Большое спасибо за статью! Восторг от неё напоминает таковой от изучения производных и численных методов.
                                      У меня такой вопрос: предположим, нейросеть управляет машиной. Машина подъезжает к повороту и заключает: впереди поворот налево. Соответствующий нейрон будет крутить руль влево. Но так же справа — какой-нибудь другой возбудитель, я не знаю, бонус к нитро :) И другой нейрон будет крутить руль вправо. В итоге, машина поедет прямо, что совсем не подходит — лучше уже или туда, или сюда. Как заставить один нейрон быть «главнее» в спорных вопросах?
                                      Интуиция подсказывает сделать нейрон, который бы принимал аксоны этих двух нейронов, и выбрасывал бы меньшее по модулю значение. Есть ли более корректное решение? Возможно, вы посоветуете мне литературу?
                                        +1
                                        По факту — это уже архитектура сети и зависит она только от вашего воображения.
                                        — Можно сделать нейрон который будет давать 0.5 если прямо, 0 налево до упора и 1 до упора направо
                                        — Можно сделать два нейрона — каждый будет тянуть в свою сторону, а машина поедет куда-то прямо (среднее).

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

                                        Литературы не посоветую — НС, это развивающаяся в данный момент наука, следовательно самое вкусное — находится где-то в гугле.
                                          +2
                                          Есть ли более корректное решение?
                                          Дискриминирующий слой вида «победитель получает всё». Также для такой задачи смотрите в сторону свёрточных сетей, для графики они куда эффективнее классических.
                                          0
                                          Хорошая статья! Написано легко и интересно! За бутылкой пива теперь будет гораздо интереснее))
                                          PS теперь я понял как выбиратю дам :P
                                            0
                                            Отличная статья!

                                            Очень показателен (в плане «нейрон как простейший классификатор») рисунок с 2D координатами и «зоной влюблённости» и «обычной зоной», ну и градиентом (нелинейный сумматор в нейроне).

                                            А можно как-то показать на декартовых координатах принятие решения многонейронной/многослойной сетью?
                                            Я понимаю, что пространство получится большой размерности, но… может как-то на проекциях?
                                            Это бы сильно облегчило понимание и «демистифицировало» нейронную сеть :)

                                            Хорошо бы ещё написать про обратное распространение ошибки (backpropagation). Мне понравилась аналогия в комментариях с иерархией когда начальник говорит подчинённому, а тот своему подчинённому и т.д.
                                              0
                                              Спасибо!

                                              Я как раз думаю об этом. Можно остаться и в двухмерной плоскости — если входных суждений 2.

                                              Если же на скрытом слое их много, то на этой плоскости можно рисовать двухмерные фигурки при классификации. И красить их в разные цвета, в зависимости от показаний выходных нейронов.

                                                +1
                                                А можно картинку с двумерными фигурками на плоскости и их связью с входными и (особенно) скрытыми слоями?

                                                Нигде такой картинки не нашёл — везде попадаются максимум примеры с 1 нейроном, который линейно делит плоскость и всё.
                                                Если я правильно понял, то если у N входных нейронов по 2 входа (X и Y) у каждого, то они рассекают плоскость N прямыми и таким образом классифицируют?
                                                Или дополнительные слои могут дать и нелинейную классификацию?

                                                В общем очень-очень жду картинку! :)

                                                P.S. Как Вам можно написать сообщение? я новичёк на GT и не нашёл тут как писать личные сообщения (не в комментариях).
                                                  +1
                                                  Берём сеть 2-2-1, (2 входа, 2 скрытых, 1 выход). Скрытые нейроны и выход — делаем «максималистами». Тоесть — дискретными. Если выходной нейрон будет реализовывать логическое «И» — тогда распознаваемая им область будет пересечением областей нейронов скрытого слоя. От сюда можно сделать свой Paint.exe с блекджеком итд :)

                                                  П.С. Заходите в мой профиль и нажимаете на конвертик сверху-справа, сразу после рейтинга.
                                                    +1
                                                    Лучше представлять это графически.



                                                    Два нейрона на скрытом слое — каждый рисует сою линию на входной плоскости.
                                                    Мы же видим их взаимодействие. Добавление ещё одного нейрона на скрытом слое добавит ещё одну линию
                                                      +1
                                                      спасибо!
                                                      это обязательно надо включить в статью. сразу многое становится понятным :)
                                                        0
                                                        Но нужно понимать, что новые слои всю эту нарезку изрядно перемешивают
                                                0
                                                Снимаю шляпу — вы мастер доносить информацию! Это лучший рассказ о нейронных сетях, который я читал. Спасибо.
                                                  0
                                                  Благодарю вас! Надеюсь получится написать ещё что-то в этом стиле, и подобные комментарии помогают в этом.
                                                  0
                                                  Здорово! Давайте также про адаптивно-резонансную теорию!
                                                    0
                                                    Статья просто супер! Очень хотелось бы увидеть еще продолжение!
                                                      0
                                                      Благодарю.

                                                      Тут встаёт вопрос — верно ли я понял ЦА. Разделение на хабр и ГТ, смущает и не понятно куда писать и с каким уровнем сложности. Стоит ли писать продолжение в ГТ или перейти в Хабр?

                                                        0
                                                        Насколько я понял — основные понятия, база еще не вся описана. Поэтому уровень сложности для следующих статьей пока что можно оставить на этом же уровне.
                                                        Главное добавьте ссылку на следующие статьи сюда. Буду заходить проверять периодически.

                                                        А вообще, такие статьи мотивируют на дальнейшее изучение. Но все-таки основу хотелось бы прочитать от Вас.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        0
                                                        1) Если нужен просто порог — то вполне вероятно можно обойтись обычной линейной регрессией (исходных данных недостаточно чтобы понять актуальность этого).
                                                        Ежели вы хотите делать через НС — то обучать её относительно не долго. (опять таки неизвестен масштаб проблемы). Это может быть час или день, но не год.

                                                        2) Да, именно так. Мы обучили её разок — а потом используем просто как функцию с n входов, m выходов. Даже без GPU сетки разумных масштабов работают быстро.
                                                        +1
                                                        Ай да Юрий, ай да нейро-сын))
                                                          0
                                                          Это всё результат того, что ты спал на тех лабах, будучи со мной в бригаде. Мне пришлось это понять :))))
                                                          +1
                                                          Спасибо, очень наглядно, я до этого не въезжал в тренировку. А как выставлять первичные значения порогов и весом?
                                                          PS Книжка-раскаска «ТФКП для самых маленьких» стала будто на шаг ближе :)
                                                            0
                                                            вот тут неплохо описано как лучше всего инициализировать стартовые значения для обучения методом обратного распространения ошибки. Если вкратце, то веса и пороги берутся случайным образом из интервала (-0.5, 0.5), при этом желательно избегать близких к нулю значений.

                                                            В большинстве других методов обучения — примерно так же.

                                                            П.С. Как было бы круто если кто-то сделал бы это (*подмигивает). ТФКП так и остался мраком для меня с институтских времён…
                                                              0
                                                              Спасибо. Ещё такой вопрос: а как выбрать, какими днными кормить нейросеть, сырыми или препроцессироваными?
                                                              Какое-то время назад я решал вопрос, расположены ли митохондрии в В-лимфоцитах в норме и при Б-ХЛЛ одинаково, или паттерн всё-таки разный. Я получил трехмерные фотки (XYZ) для клеток, сегментировал их и посчитал сет инвариантов к шкалированию/повороту/сдвигу по Jan Flusser, в итоге каждый снимок был описан сотней значений. Эти наборы значений я долго крутил методом главных компонент, так ничего и не понял. Вот мне и интересно, как распознаются изображения, чтобы понять, по какому признаку они различны/сходны, и что лучше подавать, исходники, постропроцессированные или выход детерменированного классификатора.

                                                              PS Ну, мангу по диффурам и квантмеху уже нарисовали и даже частично перевели. I want to believe :) ТФКП для средней школы описывал Арнольд, но он знатный тролль, и в какой-то момент я логику потерял. Например, я так и не понял, при чём там квартернионы.
                                                            0
                                                            О как! А я всегда при этом словосочетании представлял себе такую колбу или чашку петри, в которой выращивают нейронную ткань, подключенную к электродам и уже с этим киборгом химичат. :))))
                                                              +1
                                                              Статья прекрасна, продолжай в том же духе. Прям восторг вызвал :)
                                                                0
                                                                Аналогично. Благодарю!
                                                                +1
                                                                В тему, периодические новости с переднего края этой области публикует Анатолий Левенчук здесь: http://www.livejournal.com/search/?journal=ailev&q=deep+learning
                                                                  0
                                                                  Огромное спасибо за статью, ничего лучше по этой теме я не читал!
                                                                  Одно осталось не понятно, в рамках приведенных аналогий. Почему факторов всегда два (или больше)? Почему влюбленность не может зависеть только от харизмы? Почему не может быть нейрона с одним синапсом?
                                                                    +1
                                                                    Я не автор этой статьи, но занимаюсь нейросетями. Если так уж случилось, что связи лишние, их веса просто занулятся в процессе обучения и не будут влиять на результат. Условно можно считать, что их и нет вовсе. Обычно проводят какую-то предобработку данных, совсем уж лишние входы заранее устраняют, чтобы не тормозить дополнительно процесс обучения. Сети с одним входом тоже бывают, это характерно для рекуррентных сетей, где на входе, скажем, звуковая волна.
                                                                    0
                                                                    //еще немного вспомнил из физиологии нейронов

                                                                    Нейрон срабатывает тогда, когда площадь распространения деполяризации на мембране, достигнет определенного размера. То есть, если пришло одновременно 4 сигнала на 4 противоположные стороны клетки, то нейрон не среагирует. А если только три сигнала, но с синапсов расположенных близко друг от друга – то нейрон возбудится, потому что вместо 4 небольших площадей локальной деполяризации, будет одна, но большего размера.

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

                                                                    Есть ли подобные механизмы в компьютерных нейросетях?
                                                                      +1
                                                                      Подобного рода сети с «биологическими» нейронами просчитываются в проектах симуляции мозга. На практике эта слишком усложнённая модель не используется (то есть я практически не видел за последние лет 5 статей на эту тему). Математический нейрон следует усложнять только в том случае, если это даст преимущество при обучении и не слишком снизит производительность. Даже наоборот, идут по пути повышения уровня абстракции: те же свёрточные сети, как видно из названия, используют операцию свёртки, что, насколько я понимаю, напоминает работу зрительной коры, и тут уже даже речи нет об отдельных нейронах, имитируется работа рецептивных полей.
                                                                        0
                                                                        Разве сложность и гибкость человеческого мозга, не является его преимуществом? Компьютерные мощности не позволяют пользоваться такой гибкостью? Все упирается в железо?

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

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

                                                                          Процесс обучения мозга — дело тёмное, мы не используем ничего подобного. Учим чисто математическими методами типа разных модификаций градиентного спуска.
                                                                            0
                                                                            Ясно. Спасибо за развернутые ответы!

                                                                            А что именно попробуете усложнить в нейронах?
                                                                              0
                                                                              Пока на ум приходит более интересная функция активации или просто нелинейная функция нескольких коэффициентов вместо весов. Это надо кодить и смотреть, что выйдет.
                                                                                0
                                                                                Для меня началась китайская грамота :)
                                                                                  0
                                                                                  Посмотрите на графические функции в статье (максималист, прямолинейная и мудрец). Каждая из них, как я старался показать в статье, имеет свои незаменимые плюсы и непреодолимые минусы. Хочется же иметь одну функцию, которая, в зависимости от настроек коэффициентов может принимать вид любой из трёх. Тогда метод обучения сможет подобрать форму этой функции для каждого нейрона по необходимости. Пример: если мне нужна чёткая, буленовая логика — то функция приниммает вид ступеньки. Если нечёткое суждение — то вид «мудреца». Во всех остальных случаях — функция остаётся линейной
                                                                                  0
                                                                                  что если сделать что-то вроде k1*sign(x) + k2*(kx+b) * k3(exp)? тоесть тупо усреднить и взять влияние. При этом сумма k должна быть строго равна 1
                                                                                    +1
                                                                                    Для такой задачи хватит и обычной сигмоиды y = 1/(1+exp(-alpha*x)), просто alpha нужно тоже в веса загнать. Если alpha >> 1, будет пороговая функция. Если << 1, будет линейная (с поправкой на масштаб по оси y).
                                                                                0
                                                                                Как раз когда занимался этой статьёй наткнулся на мысль: Есть три функции активации — пороговая, линейная и сигмоид. Для того что бы выродить линейную в пороговую — нужны предельные значения весов. У сигмоида свои косяки — зона насыщения находится в бесконечности и также она не вырождается в пороговую. Соответственно мы имеем перед глазами наглую провокацию для методов обучения завышать веса. Хочется заполучить функцию, которая имеет помимо весов и порогов ещё два параметра — наклон (при нуле — вырождается в пороговую) и нелинейность (при нуле выражается в прямую). Тогда три функции активации будут лишь частным случаем этой функции.

                                                                                Вы ничего не слышали о подобных функциях?
                                                                                  0
                                                                                  Это всё прекрасно можно получить из сигмоиды, дифференцировать и добавить в любой нейросетевой пакет. Примерно в этом же направлении думал и я.
                                                                                  0
                                                                                  Если говорить о статических нейронах ( не рекурентных), то тут вопрос — имеет ли смысл их усложнять или лучше оставить их максимально простыми, а сложности делать их комбинацией?
                                                                            0
                                                                            Мда, если за бутылкой пива Вы начинаете разговаривать о нейронных сетях, то ничего удивительного, что люди под стол прячутся и у них глаза дёргаются</сарказм>
                                                                            А вообще, статья интересная, спасибо.

                                                                            P.S. Под пиво лучше мысли Шопенгауэра обсуждать.
                                                                              –3
                                                                              //Допустим, я знаю о девушке две вещи — симпатична она мне или нет, а также, есть ли о чём мне с ней поговорить. Если есть, то будем считать //
                                                                              //это единицей, если нет, то — нулём. Аналогичный принцип возьмем и для внешности. Вопрос: “В какую девушку я влюблюсь и почему?”

                                                                              Всё бы хорошо на словах… Да вот, на деле машина-то НЕ ЗНАЕТ такие вещи, как девушка, симпатия, любовь и так далее. Машина распознаёт только «0» и «1».
                                                                              Значит, кто-то должен закодировать, что «девушка» — это, например, «00110011», а «симпатия „11001100“ и присваивать этим значениям нули и единицы.
                                                                              Потом, нужно закодировать индивидуальные характеристики понятий „девушка“, „любовь“ и такое прочее. Исчисляется уже Мегабайтами.В конце концов надо будет добиться, чтобы остановился цикл „одни дефиниции через другие дефиниции“. Это уже пахнет Эксабайтами.
                                                                              Ситуацию усугубляет и тот фактор, что человек учится ДВУКАНАЛЬНО!!! По одному каналу, например, визуальному или тактильному получает информацию от органов зрения или осязания, а по другому — аудиокуналу — с помощью органов слуха присваивает этой информации маркёр-идентификатор.
                                                                              Никакая ИНС не может этого делать. Почему? И не только потому, что нейроны мозга этого не делают, а потому, что „нейронщики“, с одной стороны, копируют сами зная что, и, с другой стороны, ИНС импотентны воспроизвести процедуры сознания.
                                                                              ИНС — контрпродуктивный путь.
                                                                                0
                                                                                Я вам представил основы работы примитивной нейронной сети «персептрон» в утрированных условиях «подготовленных данных», разбавленных юмором. Такая сеть свою задачу классификации решает.

                                                                                Если бы мы с вами строили рекурентные сети, начиная со зрительных и аккустических, то для того чтобы дойти до сети женидьбы потребовалось бы 100 страниц текста. И конечно там очень многое ещё не понятно.
                                                                                –3
                                                                                Не читал, но осуждаю. Вы крайне неудачно выбрали пример, на котором объясняете тему. Тема межполовых отношений слишком эмоционально окрашена и холиварна, чтобы её можно было использовать как пример для объяснения чего-то ещё. Люди вместо того, чтобы думать над предметом объяснения, будут думать наподобие «ну вот, все люди как люди, а меня девочки не любят», или «да как он смеет так обращаться с таким святым чувством, как Любовь!», или «да что он понимает в бабах» и т. п. Хуже в этом смысле была бы разве что война на донбассе. Вот и ребе Юдковский про это же пишет: http://lesswrong.ru/w/Политика_убийца_разума
                                                                                  0
                                                                                  Попытки понравиться всем, на мой взгляд, обречены на провал. По поводу «болезненности» метафоры — оценку можно получить лишь по комментариям и «лайкам». И эта оценка достаточно положительна.
                                                                                    0
                                                                                    Не обращай внимания на таких. Всё классно! Очень жду продолжения!!!
                                                                                  0
                                                                                  Мне было очень интересно, хотя я не знаю пожалуй ничего о нейронных сетях. Спасибо, с нетерпением жду продолжения.
                                                                                    0
                                                                                    Статья и основной пример — отличные! Благодарю :-)
                                                                                      0
                                                                                      Спасибо за статью! Позвольте неумный вопрос. Со студенческой скамьи все не могу понять простую вещь в части обучения НС. Если грубо, то обучение это настройка весов коэффициентов таким образом, чтобы результат работы сети совпадал с эталоном?

                                                                                      То есть для обучения мы должны дать N эталонов с заранее описанными входными параметрами (богатая, красивая, умная, пр.). То есть получили формулу y = f(x1, x2, x3, ..xN).

                                                                                      При известных y (эталон) и x1-xN задача НС сводится к перебору коэффициентов, чтобы на большой выборке эталонов совпадение было максимальным?

                                                                                      Как в анекдоте: «Ну студенты пошли, три раза объяснил, ничерта не понимают. Сам понял, а они не понимают».

                                                                                      Буду признателен за ответ «в вашем стиле».

                                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                      Самое читаемое