Псих-консультант (ya_schizotypic) wrote,
Псих-консультант
ya_schizotypic

Оффтопик: нейросети для самых маленьких

Вообще, этот текст писался как комментарий на dirty.ru, но пусть и тут полежит, авось сгодится кому.

Это не про пси*.

На пальцах™ я объяснять не умею, но кое–что из того, что осталось в голове изложить попробую.

Нейронных сетей бывает 100500 всяких разных (с учителем, без учителя, фильтры, etc), и они отличаются механизмами работы.

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

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

Если "входы" и "выход" интуитивно понятны, то с этой самой функцией нужно немного разобраться. Итак, почему она функция активации? Потому, что она определяет, будет ли нейрон активен. Что это значит? То, выдаст ли он на выходе возбуждение или нет. Поскольку мы тут говорим о программной модели, можно сказать, что пороговая функция активации нейрона — эта некая штука, которая каким–то образом определяет, выдаст нейрон на выходе ноль или единицу (значения могут быть другими, но мы рассматриваем простейший случай, поэтому пусть будет так).

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

И от того, как нейроны между собой коммуницируют (где получаются нули, а где единицы), в конечно счёте зависит результат работы сети.

Пока, наверное, не очень понятно, поэтому резюмирую:
1. Нейронная сеть состоит из нейронов;
2. У нейрона есть входы (на каждый вход попадает некое число), есть выход (оттуда исходит 0 или 1) и странная штука под названием пороговой функции активации, которая, собственно определяет, что именно (0 или 1) выдаст нейрон.
3. От того, что именно выдают нейроны сети, зависит её работа.

Это не всё, но это нужно запомнить, чтобы дальше было понятно.

Разбираемся далее с пороговой функцией активации. Почему она "функция активации", мы, вроде, разобрались, посмотрим теперь, почему она "пороговая". Тут тоже всё просто: если сумма поступающих сигналов на входе больше некоторого порога, то функция даст нейрону команду выдать 1. Если меньше — то ноль. Такой функцией может быть, например, ступенька Хевисайда. Ну, или что–нибудь другое, не суть.

Итак, с нейроном разобрались: у него есть входы, в которые поступают некие числа, потом эти числа суммируются (на самом деле, бывают другие варианты, но мы для простоты остановимся на алгебраической сумме), затем проверяется, больше ли получившаяся сумма, чем некое "пороговое значение" (задаётся отдельно при создании сети), если да, то выдается 1, если нет, то 0.

И ещё важный момент некоторые нейроны соединены между собой таким образом, что выход одного нейрона является входом другого.

Теперь, когда мы знаем, что такое нейрон, можно посмотреть на то, как они объединяются. Объединяются они в слои. Тут возьму картинку из Wiki для наглядности:


Скорее всего, при взгляде на картинку, у Вас возникло некое интуитивное понимание того, что такое слой. Более того, скорее всего, оно верное.

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

Что это может быть за вход? Ну, например, картинка. Тогда на сенсорный слой будет попалать информация о пикселях. Пусть наша картинка будет маленькой и черно–белой, тогда на вход будет подаваться "черный" это пиксель или "белый" (соответственно, 1 или 0).

Итак, задача сенсорного слоя №1 — принять входные сигналы. Задача №2 — это передать эти сигналы второму, "ассоциативному" слою (ещё в сенсорном слое можно делать, например, нормализацию величин и какие–то другие предварительные преобразования, но мы это опустим).

Второй, "ассоциативный" слой уже состоит из полноценных нейронов — со входами, выходами и функцией активации. Как они работают, написано выше.

Третий слой, реагирующий, состоит тоже из полноценных нейронов, таких же точно, как во втором слое. Фишка его не внутри самих нейронов, а в их расположении: они принимают не данные из внешнего мира, а данные от других нейронов, которые лежат во втором слое. И вот тут–то начинается самое интересное.

Давайте рассмотрим, что у нас происходит с данными. Вот они попали на сенсорный слой, потом — на нейроны ассоциативного слоя, которые выполнили обработку: выдали либо 1, либо 0. И вот эти нули и единицы уже попадают в третий слой. Но (и тут самое важное) они не просто сразу попадают, а предварительно умножаются на некое число. Число это называется "весом связи" и подбирается в процессе "обучения" нейросети (об этом — далее).

Т.е., например, на нейрон второго слоя #1 попали значения 1,0,1,1. Пусть его порог активации будет равен двум. Суммируем наши входы — получаем 3. Сравниваем с порогом, видим, что 3>2, а значит, нам нужно выдать единицу. Теперь эту единицу нужно передать, например, второму, третьему и пятому нейронам третьего слоя.

Т.е. у нас есть связи:
1. Нейрон №1 второго слоя –> Нейрон №2 третьего слоя.
2. Нейрон №1 второго слоя –> Нейрон №3 третьего слоя.
3. Нейрон №1 второго слоя –> Нейрон №5 третьего слоя.

Каждой из этих связей соответствует некий "вес". Например, так:

1. Нейрон №1 второго слоя –> Нейрон №2 третьего слоя — 0,5
2. Нейрон №1 второго слоя –> Нейрон №3 третьего слоя — 1
3. Нейрон №1 второго слоя –> Нейрон №5 третьего слоя — –2

Это значит, что с первого нейрона второго слоя на нейроны третьего слоя придёт не единица, а:
1. На нейрон №2 — 0,5
2. На нейрон №3 — 1
3. На нейрон №5 — –1

Собственно, в том, чтобы подобать правильные веса, и заключается процесс обучения. Но прежде, чем перейти к нему, нужно сказать ещё пару слов о работе нашего мини–перцептрончика. И для начала — поставить ему некую задачу, чтобы было, к чему привязать его работу. Пусть он у нас решает, что изображено на картинке — кошка, дом или телефон.

Определять, что это изображено, будем очень просто: если активировлся только первый нейрон — это кошка, если только второй — это дом, если только третий — это телефон (имеются ввиду нейроны третьего, реагирующего слоя). Любую другую комбинацию будем считать ответом "а фиг его знает".

Вы ещё не забыли, как активируются нейроны? Ну, там, на входы что–то поступает, суммируется, сравнивается с пороговым значением и делается вывод, о том, что нейрон выдаст — 1 (активировался) или 0 (не активировался).

Т.е., если собрать всё в кучу, то получается, что то, будет ли активен нейрон третьего слоя, зависит от:
1. Того, какие данные попадут на вход сенсорного слоя;
2. Того, какие коэффициенты ("веса") имеют связи между нейронами второго и третьего слоя.

(На самом деле, ещё и от значения порога активации, вида функции активации, архитектуры сети — но это всё мы будем считать постоянными, заданными в момент создания сети параметры, вынесем это за скобки в нашем рассмотрении).

Ок, как происходит обработка данных и как делается вывод, мы, вроде, определились. Осталось только разобраться с тем, как обучать нашу сеть, чтобы она выдавала нам не рандомную фигню, а что–то осмысленное (т.е. чтобы она реально смотрела, что же изображено на картинке).

Итак, обучение у нас проходит "с учителем". Естественно, никакого реального учителя там нет, но зато есть набор примеров того, как классифицировать правильно.

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

Итак, начинаем обучение. "Показываем" перцептрону картинку с кошкой. Если он на это выдает нам реакцию "активровался только первый нейрон третьего слоя, остальные нейроны третьего слоя молчат", то ничего не делаем — он и так сработал нормально.

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

Рассмотрим, как это делается. Предположим, наш перцептрон ошибся, тогда:
1. Смотрим, какие элементы второго слоя были активны (т.е. реально передавали данные третьему слою);
2. Определяем связи, которые у нас реально работали — т.е. с каких нейронов второго слоя на какие нейроны третьего был передан сигнал;
3. Меняем веса этих связей. Меняем мы их следующим образом. Для каждого нейрона третьего слоя смотрим, что с ним произошло. Тут возможны три варианта:
a. Он выдал верный ответ. Ничего не трогаем.
b. Он активировался, когда должен был молчать. Меняем веса всех связей, образованных с его участием, путём вычитания из них некоего числа (например, 07, не суть).
c. Если он молчал, когда должен был активироваться, то тоже меняем веса всех связей, образованных с его участием. Но на этот раз — это самое число будем не вычитать, а прибавлять.

Вот, собственно, и всё. Повторив эту процедуру 100500 раз, мы обучим нашу нейросеть.

Во, блин, простыня получилась!

P.s.: протестировал на гуманитарии, говорит, что "написано понятно, при желании можно разобраться".




   
Tags: Для самых маленьких, Оффтопик
Subscribe
promo ya_schizotypic august 12, 2016 16:22 25
Buy for 10 tokens
… или пост-прейскурант. Вот я и восстановился до того уровня, когда я могу его написать. Кратко, суть поста: предлагаю услуги психоконсультанта. О том, как именно происходит работа со мной, написано в отдельном посте. Всё-таки препараты, поддержка К., психотерапия и постоянные самокопания…
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments