Обновить

Что такое нейросети и как они устроены под капотом (на пальцах, с примерами на python)

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели7.4K
Всего голосов 5: ↑5 и ↓0+5
Комментарии12

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

Но как же заставить программу понимать рукописные цифры? Задача одновременно достаточно простая и довольно сложная. Думаю, понятно, что стандартные подходы алгоритмики тут бессильны

Почему бессильны? Чем плох, например, корреляционный анализ? Пространственные частоты? А ещё если сверху вейвлетами присыпать! Номера автомобилей на камерах раньше так безо всяких сетей и распознавали.

У каждого нейрона есть набор входных весов (weights) и коэффициент сдвига (bias)

Коофициенты понятно (чуть позже там что-то идёт). А биас зачем и нафига? И зачем функции активаци такие странные?

9706 параметров – такое тяжело представить, так что давайте упростим и представим, что у нас всего 3 параметра. Визуализировать трёхмерное пространство уже не так сложно.Представьте, что функция потерь, которую мы хотим минимизировать, – это ландшафт с горами и долинами.

Вы свели всё к 2-параметрам, а не к 3-м.

(если что ответы на те вопросы что я задал - я знаю)

Я к чему это - вопрос про нейросети фактически нераскрыт. Т.е. так и не стало понятно что они такое и почему вообще работают. Это как сейчас в атошколе блодинкам про автомобиль расказывают: “жмёшь педальку справа ускоряется, жмёшь педальку посередине - останавливается, руль вправо, руль влево”. Это, несомненно, помогает управлять автомобилем. Но соврешенно не даёт представления о том что это такое под капотом.

Хорошо, давай по порядку:

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

  • Про функции активации и смещение просто сошлюсь на абзац из статьи:

Активация нейрона должна быть в определённом интервале, а взвешенная сумма может выходить за его пределы. Значит, нужно применить функцию, которая приведёт значение в нужный интервал. Эту функцию называют функцией активации (activation function) нейрона. Перед применением функции активации к взвешенной сумме прибавляется коэффициент сдвига (bias), который позволяет сдвигать функцию влево или вправо. Итого: функция активации применяется к сумме взвешенной суммы и коэффициента сдвига.

Тема смещения действительна не была раскрыта в должной мере, но зачем нужна функция активации в статье четко сказано.

  • В статье сказано:

представим, что у нас всего 3 параметра. Визуализировать трёхмерное пространство уже не так сложно. Представьте, что функция потерь, которую мы хотим минимизировать, – это ландшафт с горами и долинами.

И это корректно. Три параметра – три оси (x , y, z). В каждой точке этого 3д пространства у loss есть какое-то значение, если продолжать аналогию со слепым на ландшафте, то это значение – ощущение слепого крутизны склона. 2 параметра дали бы 2д плоскость, а третьей осью мог бы стать loss (что часто используется, т.к. просто для отрисовки). Мой пример сложнее для отрисовки, но для метафоры со слепым человеком абсолютно нормальный и понятный. Считаю, что в текстовом формате такой пример проще для понимания.

  • Статья объясняет не почему, а как работают нейросети и предназначена для ознакомления людям, который только погружаются в эту тему или просто для общего понимания

Скажите своей нейросетке, что:

подбиравть вручную вейвлеты будет крайне сложно и долго

Никто вейвлеты “вручную” не подбирает. Они по сути тоже обучаются.

И это корректно. Три параметра – три оси (x , y, z). В каждой точке этого 3д пространства у loss есть какое-то значение, если продолжать аналогию со слепым на ландшафте, то это значение – ощущение слепого крутизны склона.

А вот тут ваша сеточка откровенно тупит в понимании что такое пространство. Что такое крутизна и что такое склон (линейный склон - это плоскость - 2Д поверхность). Это весьма типично для ИИ.

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

Почему к двум. С 3 параметрами у нас будет трехмерный объект вложенный в 4-х мерное пространство. Просто визуализировать в 3-х мерном просто бессмысленно в этом случае, и я не понимаю почему автор это делает. Это аналогично тому, что мы берём f(x), и визуализируем мы в двумерном пространстве, но объект имеет нулевую меру лебега в двумерном пространстве. Но мы же не визуализируем его в одномерном пространстве.

Было бы хорошо ещё сообщить в первом же абзаце, а зачем вообще эта статья написана?
Например, чем она отличается от других. Таких же базовых объяснений на том же Хабре уже много.
Или прямо написать (если это так), что это обучение самого автора писать статьи (что вполне нормально).
Иначе вообще непонятно, читать ли и зачем.

В примере с перцептроном я бы, наверное, чуть подробнее остановился на масштабе входов. Не как критика. Просто это место часто стреляет в практике. В Yario мы разбирали обращения из 2 каналов, WhatsApp и Telegram, и даже простая классификация начинает вести себя странно, если рядом живут минуты ожидания, счетчики сообщений и признаки из текста. Модель легко цепляется за размерность. Нормализацию вы сознательно оставили за рамками статьи?

В статье рассматривается простейшая нейросеть, для базового понимания ее устройства. Как основной пример я взял классификацию рукописных цифр из набора MNIST. Я посчитал, что на этом примере рассматривать нормализацию будет не совсем корректно.

🧠 Нейросеть на пальцах

  • Весовые коэффициенты нейрона — это линейный элемент, подчиняющийся принципу суперпозиции (аналогично резистору, конденсатору или индуктивности).

  • Функция активации — нелинейный элемент (как диод или транзистор), который нарушает суперпозицию и позволяет осуществлять модуляцию/демодуляцию сигнала.

  • Входные данные можно рассматривать как сигнал.

🔄 Идея с периодическим сигналом

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

Отсюда возникает идея: обучать сеть на упорядоченных данных, а эксплуатировать как придётся.

✨ Пример: XOR

x y XOR
1 1   0
1 0   1
0 0   0
0 1   1

Здесь x и y можно рассматривать как траекторную матрицу периодического ряда: 1 1 0 0 1 1 0 0 1 1 …

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

Ну что за детский сад? Почему опять сто-пятисотое "сказание о многослойном перцептроне"?
Слабо написать подробно об автоэнкодерах? Ну или об обучении с подкреплением? Почему снова и снова статьи "начинаем с нуля" на Хабре?

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

А пока ни одна научно-популярная статья не даёт хотя бы поверхностный ответ на вопрос: а из каких соображений выбираются скрытые слои? Почему нужно взять примерно столько нейронов?

Очень полезная статья для неофитов. Хотелось бы объяснения выбора функции активации по структуре ожидаемых ответов. При рассмотрении XOR уместно отметить, что любая задача распознавания это конструкция if, построить которую иногда невозможно из-за отсутствия явных признаков распознавания. И тогда сети решают проблему.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации