Комментарии 64
Таблица исключительного или
Строгая дизъюнкция или сложение по модулю два или же исключа́ющее «ИЛИ». А вот «исключительное или» как-то жестоко.
https://www.youtube.com/watch?v=W7ux1RfOQeM
Огромное спасибо за статью! С нетерпением жду продолжения!
Можете поправить терминологию и формулы, добавьте русский перевод:
- MSE(Mean Squared Error) переводиться как среднеквадратичная ошибка
- Root MSE по формуле — среднеквадратическое отклонение.
- Arctan — вырвано из контекста, непонятно что значит формула и термин в тексте.
Если честно, то мне казалось что это больше способ привнести нелинейность в сеть
>Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3)
На самом деле современные сети (те что Deep Learning) могут состоять из десятков слоев. (а то и сотен, если речь идет о Residual сетях)
>нейроны оперируют числами в диапазоне [0,1] или [-1,1]
Мне кажется это справедливо больше для тех случаев, когда сеть использует сигмоиду (или подобную ей) ф-ию активации. Тот же ReLU на выходе дает [0, inf)
>Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.
Было бы очень круто рассказать почему это важно
>Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть
Ну скорее набор данных на которых сеть обучается (тренируется). Работать сеть может и на данных которых в обучающем сете нет. За это и любим.
>Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат
На самом деле совсем не обязательно. Как минимум из-за того, что может наступить переобучение.
>Ошибка — это процентная величина
Совсем не обязательно
>Ошибка формируется каждую эпоху и должна идти на спад
На самом деле не всегда, и все сильно зависит от метода оптимизации. В общем случае, у вас может быть такая ситуация, когда на некотором шаге ошибка выше чем на предыдущем, потому что из-за большого шага вы пролетели локальный минимум и выскочили на «склон» другого минимума.
В случае же семейства SGD, которое используется сейчас практически в любом Machine Learning алгоритме, у вас ошибка будет постоянно скакать то вверх, то вниз.
Кроме описания разных функций ошибки было бы хорошо описать в каких случаях какая ф-ия лучше подходит
В этой статье я не буду делать сильный акцент на Java
Я не хочу показаться каким-то «хейтером», но на мой взгляд надо было прямо так и написать, что в этой статье не будет ничего ни про Java ни про Android тем более.
И что за странная мода пошла на хабре такая, дробить цельную статью на мелкие части без видимых на то причин?)
Тогда компьютеры были слабые, но вполне тянули целый зверинец с норнами, гренделями и эттинами. Причём у норнов было большое число лобных долей.
Предположу что должна быть обратная связь.
Или это в следующей части? Наверно тогда стоит части делать покрупнее.
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) и выбрать ту, к которой вектор-ответ ближе.
вы никогда не вытащите из НС почему она так решила. Так математика отработала! Но в этом и вся мощь нейросеток.
Это имеет и обратную сторону. Обучив сеть мы не получаем нового знания, оно остаётся внутри сети.
универсальная абстракция реальности
Не совсем понял, что это и как это знание применять. Мне кажется, вы переоцениваете сети. Это рядовой метод машинного обучения, который, к слову, не так уже и часто применяется. Просто вокруг него сложился некий ореол романтики из-за поверхностной схожести в работой мозга. Это не значит, что это плохой метод. Просто вы слишком большие надежды на него возлагаете. :)
Существует ли какая-то модель, теория того, каковы границы применимости сетей на практике?
Конечно. Например, есть теорема Горбаня о том, что нейронные сети — это универсальный аппроксиматор. Но не ищите в этом особо глубокого смысла. Скажем, те же многочлены согласно теореме Вейерштрасса — тоже универсальный аппроксиматор. Просто им не повезло с названием и аналогиями в биологии.
Что она не способна решить?
А что неспособна решить машина Тьюринга? Тут проблема не в том, что сеть может или нет, а в том, что обучать её сложно, так как это в сводится к задаче оптимизации сложной функции и есть риск попасть в локальный минимум, переобучить и так далее.
Если добавить слоев, сделать сеть очень большой — это повысит точность?
Повысит, но это на самом деле плохо, так как приводит к переобученности. Часто сети наоборот, прореживают, чтобы снизить точность.
Неужели решение ЛЮБОЙ когнитивной задачи это подбор коэффициентов синапсов?
Почему вы так решили?
Или же есть класс задач, которые сетями не решаемы в принципе?
Тут опять же проблема не в принципиальной разрешимости, а в том, мы даже разрешимые не всегда хорошо решаем.
Нейронные сети для начинающих. Часть 1