Как стать автором
Обновить

Комментарии 64

Таблица исключительного или

Строгая дизъюнкция или сложение по модулю два или же исключа́ющее «ИЛИ». А вот «исключительное или» как-то жестоко.
Спасибо, исправил.
Я уже цитировал, но этот материал крайне рекомендую для просмотра. «Показывается пример синхронной работы нейронной сети Хопфилда (сеть Литтла)». Лекция Кирсанова.
https://www.youtube.com/watch?v=W7ux1RfOQeM

Огромное спасибо за статью! С нетерпением жду продолжения!

НЛО прилетело и опубликовало эту надпись здесь
Афтар пиши есче, жду код на пхп
Очень много терминологии вырвано из контекста и непонятно как все связано воедино.

Можете поправить терминологию и формулы, добавьте русский перевод:

  • MSE(Mean Squared Error) переводиться как среднеквадратичная ошибка
  • Root MSE по формуле — среднеквадратическое отклонение.
  • Arctan — вырвано из контекста, непонятно что значит формула и термин в тексте.
Перепроверьте ваше решение. Мне кажется, что вы накопипастили.
Да, была небольшая опечатка, но на ответ она не влияет.
Спасибо за статью. Как раз буквально пару дней назад имплементировал НС на джаве.
Использовал немного модифицированную архитектуру с ресурса.
Интересно, почему в большинстве таких статей обязательно есть тангенс, но про ReLU как будто никто и не знает?
>Функция активации — это способ нормализации входных данных
Если честно, то мне казалось что это больше способ привнести нелинейность в сеть

Согласен,

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

>Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3)
На самом деле современные сети (те что Deep Learning) могут состоять из десятков слоев. (а то и сотен, если речь идет о Residual сетях)

>нейроны оперируют числами в диапазоне [0,1] или [-1,1]
Мне кажется это справедливо больше для тех случаев, когда сеть использует сигмоиду (или подобную ей) ф-ию активации. Тот же ReLU на выходе дает [0, inf)

>Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.
Было бы очень круто рассказать почему это важно

>Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть
Ну скорее набор данных на которых сеть обучается (тренируется). Работать сеть может и на данных которых в обучающем сете нет. За это и любим.

>Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат
На самом деле совсем не обязательно. Как минимум из-за того, что может наступить переобучение.

>Ошибка — это процентная величина
Совсем не обязательно

>Ошибка формируется каждую эпоху и должна идти на спад
На самом деле не всегда, и все сильно зависит от метода оптимизации. В общем случае, у вас может быть такая ситуация, когда на некотором шаге ошибка выше чем на предыдущем, потому что из-за большого шага вы пролетели локальный минимум и выскочили на «склон» другого минимума.
В случае же семейства SGD, которое используется сейчас практически в любом Machine Learning алгоритме, у вас ошибка будет постоянно скакать то вверх, то вниз.

Кроме описания разных функций ошибки было бы хорошо описать в каких случаях какая ф-ия лучше подходит

Скажите пожалуйста, функция активации выходного нейрона (допустим сигмоидальная) имеет диапазон значений от 0 до 1, то есть на выходе мы имеем показатель не выше единицы, а если на выходе нам необходимо иметь значение больше 1, тогда как поступить????
В таком случае у вас два варианта. Первый — это использовать другую функцию активации, например ReLU, как было подмечено выше в комментариях. Либо, если вы только начинаете разбираться в нейронных сетях, то вам просто нужно найти способ привести ваши значения к нужному диапазону или нормализовать их. Например, когда я писал нейронную сеть для курса акций, я бы мог подавать на вход текущую цену и ждать в ответ другую. Но цены акций могут принимать различные значения. Поэтому, вместо того чтобы подавать на вход цену акций, я вычисляю разницу цен и получаю определенный процент от -100% до +100% или -1 до +1. И нет проблем :)
Спасибо, четко и ясно.
А где, собственно, Java и Android?
Будет в следующих статьях. Это лишь вводная часть.
В этой статье я не буду делать сильный акцент на Java

Я не хочу показаться каким-то «хейтером», но на мой взгляд надо было прямо так и написать, что в этой статье не будет ничего ни про Java ни про Android тем более.

И что за странная мода пошла на хабре такая, дробить цельную статью на мелкие части без видимых на то причин?)
Я написал про Java и Android, чтобы читателю было понятно, в каком направлении будет развиваться тематика моих статей. А на счет дробления, советую перечитать заголовок статьи. Для тех, кто только начинает изучение НН и не имеет при себе никакого опыта в этой сфере, данного материала будет более чем достаточно, чтобы войти в тему и попутно не расплавить себе мозги.
Господи, ну наконец-то нормально рассказали. Уважаемый автор пишите продолжение, пожалуйста.
А есть у кого нибудь ссылка на описание всех этих метрик RAE, MSE, R^2 желательно с визуализацией и на пальцах, я все время в них путаюсь.
Мне кажется надо было добавить в эту часть механизм тренировки сети, чтобы свести к минимуму ошибку на выходе. А то как-то не законченно выглядит первая часть.
Хорошо, учту.
А будет про то как работает Нейронная Сеть у Норнов из Creatures?
Тогда компьютеры были слабые, но вполне тянули целый зверинец с норнами, гренделями и эттинами. Причём у норнов было большое число лобных долей.
А где написано как ошибка выхода текущего сета (или итерации?) влияет на веса входов?
Предположу что должна быть обратная связь.
Или это в следующей части? Наверно тогда стоит части делать покрупнее.
Не совсем понял вас. Что за веса входов? Если вы про входные нейроны, то у них нет весов. Их вход — это данные из тренировочного сета.
веса входов — разве W1 W2 W3 W4 W5 W6 — это не веса входов нейронов?
не понятно как ошибочное значение на выходном нейроне переопределяет веса входов W1 — W6 что бы на следующем шаге было минимизированно отклонение от идеального резултата
Об этом будет подробно написано в следующей статье.
А дальше-то что? Как корректируются веса, какой-нибудь алгоритм есть, или про это в следующей части?
Да, все будет в следующей части. Я уже понял, что всем нужно больше информации.
Вообще здорово, что вы решили написать статью про НС. Наконец-то становиться понятно что там внутри конкретно происходит. Насколько я понял, НС — это просто функция, дающая соответствие набору чисел другой набор чисел.
Рад что вам понравилась статья. На счет функции, это не совсем правильное предположение. НС это не функция и не искусственный интеллект. Вам так показалось, потому что — это самый примитивный пример, однако, если вы посмотрите на рекуррентные или многослойные сети это уже не будет казаться так просто. Я думаю вам все станет понятно в следующей статье, где я более подробно опишу работу НС.
А собственно почему нельзя рассматривать feed forward neural network как ф-ию? Входы есть, выходы тоже есть, отображение входов в выходы тоже присутствует.
Так и есть. Нейронная сеть — это способ приближения функции из многомерного пространства X в многомерное пространство Y. На входе задачи у вас есть тренировочное множество

T={(x, y)}, где x ∈ X, а y ∈ Y

на котором вы обучаете свою нейронную сеть, чтобы она приближала точки из этого множества как можно лучше. То, насколько хорошо сеть приближает точки из T, определяется величиной ошибки. После обучения ваша НС способна вычислять значение в любой точке из области определения.

Одна из причин успеха нейронных сетей в том, что они хорошо приближают сильно нелинейные функции. Но как и в остальных алгоритмах, у НС есть ряд подстроечных параметров и если промахнуться с ними, то приближение будет работать плохо.
Кстати, а есть ли архитектуры заточенные под аппроксимацию поворотов?
но ее нет… как всегда… все тлен
Большое спасибо. Это первая нормальная статья о нейросетях на русском языке
Подозреваю что самая главная суть и проблема НС это регулирование весов при обучении.

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

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

Ибо всё, что написано в этой статье, я несколько лет назад узнал из других статей на Хабре…

Пробовал сделать собственную ИНС — упёрся в непонимание механики ИНС в общем масштабе. Как работает отдельный нейрон — ясно, это сумматор с порогом; как работает вся ИНС — совершенно не ясно… Какие данные подавать на входы, какие данные ожидать на выходе, как обучать…

И ведь в живой ЦНС всё совсем не так, как в ИНС — там нейроны связываются с тысячами других нейронов в самых разных местах сети (аксоны длиной до метра), а не последовательно, есть разные типы нейронов и различные по строению структуры из нейронов (колонки к примеру), есть время жизни нейрона и его связей, миграция нейронов из одних участков в другие, и тому подобное… То есть ИНС — очень грубая модель, но непонятно, почему одни качества ЦНС отбросили, а другие — нет…

Из-за непонимания нейросетей, я стремлюсь реализовать механизм, реализующий те же функции, что и нейросети, только проще для понимания. Остановился пока на нечётком поиске по ассоциативной базе данных — классифицирует, предсказывает и распознаёт; учится полученная система мгновенно, но поисковый алгоритм нужно оптимизировать (примерно знаю, как). Вся проблема в кодировании исходной информации; с текстом всё ясно — буквы/слова/предложения, а каким образом загнать изображение или звук в текст — вариантов море, но неизвестно, какой из них лучше/правильнее…
Я понял вас. Если есть желание, можете написать мне в ЛС и я вам помогу понять все пункты которые вы перечислили:)
а можно мне переслать всё что вы будете ему объяснять? :-)
Если есть какие-либо вопросы, задавайте. Просто комментарии не самый удобный вариант.
Мне очевидно что ИНС вообще ничем на естественные НС не похожи.
Поэтому всегда удивляет почему упоминают естественные нейроны.
ИНС решают какие то задачи и это отлично.
Но зачем «математическую абстракцию» путать с очень далекой реальностью…

Насчёт изображений как раз всё просто — три цвета RGB от 0 до 255 (от 0 до 1) если цвет важен, или от чёрного до белого (тоже от 0 до 1). Мне очень помогли для понимания нечёткой логики (ни "да", ни "нет" но "да с вероятностью 0.0-1.0") именно ч-б картинки 3Х3 пикселя со стилизованными гранями игральных костей. Сначала понимаешь как обучать на таких пикчах — 3Х3 пикс ч-б, а потом уже легче перейти к большим цветным пикчам.

Материалов на русском языке огромное количество. Признаться, не очень понятно, чем ваша статья отличается от тех, что находятся по запросу «нейронные сети». И, к слову, «тренировочный сет» по-русски называется обучающей выборкой, arctan — arctg, sigmoid — сигмоида и т. д. Признайтесь, ведь вы не особо на русском и искали, так?


То, что у вас что-то получилось и вы тратите время (я и сам знаю, что написать даже короткую статью нелегко) — это замечательно! Но все же нужно тщательнее прорабатывать материал. У вас много неточностей, недомолвок. Вы не раз говорите, что нужно делать так-то, но не объясняете почему. Особенно, если вы ориентируетесь на начинающих.

Как по мне так «тренировочный сет» лучше чем «обучающей выборкой», гораздо понятней.
Если объяснять не основную мысль, а отвлекаться на побочные нюансы, то статья не получилась бы такой понятной.
Для начинающих как раз нужен прямолинейный старт, а для продолжающих уже подойдут нюансы — почему именно так, а как можно иначе и т.д.
Плохо что части дробленые, потеряется суть
>«тренировочный сет» лучше чем «обучающей выборкой»
Только вот «обучающая выборка» это практически общепринятый термин
Спасибо за статью, одна из самых понятных по данной теме! Прошу вас продолжить серию, поскольку сочетание хорошего слога и четкости мысли — явление редкое.

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

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

Отсюда возникает более прикладной вопрос. Существует ли какая-то модель, теория того, каковы границы применимости сетей на практике? Что она не способна решить? Ну например, точность распознавания символов у сетей меньше, чем у человека. Если добавить слоев, сделать сеть очень большой — это повысит точность? Неужели решение ЛЮБОЙ когнитивной задачи это подбор коэффициентов синапсов? Или же есть класс задач, которые сетями не решаемы в принципе?

И совсем прикладной вопрос. Например, я хочу обучить сеть классифицировать изображение. На вход я подаю все пиксели, фактически выстроив изображение в цепочку значений, нормированных до диапазона 0..1, так? Допустим, всего возможно 4 варианта (грубо говоря, я измеряю насыщенность картинки, и эти варианты «низкая», «средняя», «высокая», «крайне высокая»). Что с выходом, он должен быть один (и тогда варианты «ответов» это 0, 0.33, 0.66, 1), или их должно быть 4, и варианты ответов — это единица на одном из выходов с нулями на остальных?
Сеть не умеет думать логически и строить рассуждения, т.е. вы никогда не вытащите из НС почему она так решила. Так математика отработала! Но в этом и вся мощь нейросеток. Ведь любой алгоритм, чтобы он работал, нужно сперва осознать. А НС сама обучается, по сути автоматически извлекая из данных статистику и корреляции.

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

Отвечая на ваш прикладной вопрос. Можно и так, и так. Т.е. у вас на выходе либо скаляр в диапазоне от 0 до 1, который вы можете пороговой функцией сводить к ближайшему из четырёх вариантов. Либо четырёхвектор, но значения его координат, опять же, будут нечёткими, в диапазоне от 0 до 1. Далее вы можете посчитать расстояние до ваших четырёх базисных точек (1, 0, 0, 0)… (0, 0, 0, 1) и выбрать ту, к которой вектор-ответ ближе.
вы никогда не вытащите из НС почему она так решила. Так математика отработала! Но в этом и вся мощь нейросеток.

Это имеет и обратную сторону. Обучив сеть мы не получаем нового знания, оно остаётся внутри сети.

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

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


Существует ли какая-то модель, теория того, каковы границы применимости сетей на практике?

Конечно. Например, есть теорема Горбаня о том, что нейронные сети — это универсальный аппроксиматор. Но не ищите в этом особо глубокого смысла. Скажем, те же многочлены согласно теореме Вейерштрасса — тоже универсальный аппроксиматор. Просто им не повезло с названием и аналогиями в биологии.


Что она не способна решить?

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


Если добавить слоев, сделать сеть очень большой — это повысит точность?

Повысит, но это на самом деле плохо, так как приводит к переобученности. Часто сети наоборот, прореживают, чтобы снизить точность.


Неужели решение ЛЮБОЙ когнитивной задачи это подбор коэффициентов синапсов?

Почему вы так решили?


Или же есть класс задач, которые сетями не решаемы в принципе?

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

А когда следующая часть статьи?
Пора уже третью часть выпускать)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации