{"id":14279,"url":"\/distributions\/14279\/click?bit=1&hash=4408d97a995353c62a7353088166cda4ded361bf29df096e086ea0bbb9c1b2fc","title":"\u0427\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435: \u0432\u044b\u0435\u0445\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0437\u0430\u0435\u0445\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435?","buttonText":"","imageUuid":""}

Основы нейросетей

Всем привет! Меня зовут Константин Берлинский, я фуллстек-разработчик в компании БКС. Недавно я самостоятельно изучал нейросети и по итогам написал книгу. Ниже я расскажу как устроена простейшая нейросеть.

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

При этом вы потыкались в обучающие статьи. Всё было непонятно. С первых же страниц начали грузить интегралами и градиентными спусками. Вы решили пойти на курсы. Там ещё хуже. Курс занимал 4-12 месяцев. А стоил как крыло самолета: 100-200 тыс руб. Ну, небольшое такое крыло. Да и мотивация ниже плинтуса без волшебных пинков от учителя.

Всё что вы хотели - получить HelloWorld, но для нейросетей. То бишь простейшее приложение демонстрирующее основные принципы работы. Вуаля! Вы на верном пути!

Немного теории. Нейросеть — это граф.

Но в отличие от Монте-Кристо у него есть S—слой (сенсорный). Туда мы подаем числа в промежутке [0..1]. Например, картинка с котиком. Берём каждую точку, преобразуем в градации серого и записываем во входной узел по правилу, где 0 - белый цвет, а чем ближе к 1, тем более тёмные мысли у нашей точки.

Далее промежуточные A—ассоциативные слои. Они также содержат значения [0..1]. Слои соединяются рёбрами с предыдущими и последующими слоями. Веса ребер находятся в пределах [0..1], задаваемые произвольно. Значение узла А-слоя - это сумма его входящих ребер умноженных на связанные узлы предыдущего слоя. Полученная сумма может получиться больше 1, поэтому её “нормализуют”, чтобы она попала в интервал [0..1]. Для этого используют функции активации.

Последний, или как говорят моряки, "крайний" R—реагирующий слой. Правила подсчета у него такие же, как и для А—слоёв.

Получился вот такой парень, а точнее, перцептрон:

Итак. Мы подаем на вход нейросети циферки. Далее от входа до выхода просчитываем значения с учётом поданных сигналов на узлы, веса ребер и функции активации слоев. На выходе получаем значения. Допустим, у нас 1 выходной узел и его значение 0.5. А мы бы хотели, чтобы оно было 1. Потому что мы условились, что 1 на узле означает, что на фото кошка. Как же изменить веса ребер, чтобы на выходе получить 1?

Для этого используется особо сильное колдунство — Метод обратного распространения ошибки. Смысл в том, чтобы справа налево (от R—слоев к Sслоям) поменять веса рёбер так, чтобы на выходе получить нужные значения. Если проделать так много раз для разных картинок, то постепенно нейросеть “научится” распознавать тот образ, который мы хотим. Подробнее читайте вики и оригинальную статью «A Step by Step Backpropagation Example» от Matt Mazur. Кстати, картинку с примером реализации на вики выложил тоже я.

Вот, кстати, и она:

Ну и, в принципе, всё! Можете считать себя Junior Data Science и на зарплату, меньшую чем 300 тыс руб не соглашайтесь! Конечно, есть ещё много вещей, которые полезно знать:

  1. Надо ли каждый раз писать с нуля такой граф? Конечно, нет! Есть множество библиотек, помогающих создать нейросеть в 1 клик: Keras, TensorFlow, PyTorch, тысячи их! Выберите исходя из функционала, популярности и знакомого языка программирования.
  2. Где брать датасеты для нейросетей? Ну, поищите их на Kaggle, Вики, Хабре, соберите сами, в конце концов! Подсказка - смартфон собирает тучи данных о вас через мобильные приложения, включенный микрофон и GPS-сенсор.
  3. Как обрабатывать входные данные для нейросети? Да как угодно! На любом языке программирования - C#, Java, Javascript… Особо упоротые используют Python.
  4. Как подобрать архитектуру графа - число слоев, узлов, ребер, функции активации и ошибки, библиотеку для обработки? Арргх! В этом и заключается работа датасаенса!
  5. Я сделаю ИИ-приложение и инвесторы дадут мне 100 лямов, заберут в долину, позвонит Цукерберг? Лол, нет! Нейросети - лишь инструмент для определённого класса задач. Решайте реальную проблему, а не как в прошлый раз. Совсем огонь если попадете в тренд.

Что же насчет обещанного HelloWorld? Их есть у меня!

Ну и, пожалуй, хватит. Ещё больше примеров есть в книге. А в гугле вообще завались!

0
8 комментариев
Написать комментарий...
Lara Evdokimova

Привет, Константин
сложная для меня тема нейросетей, к которой я подступаюсь уже два года, рассказана за пять минут! спасибо тебе, я уважаю твоё мнение, и уже записалась в библиотеку прочесть твою книгу и ... все ссылки из поста!
вокруг меня как раз дата сайентисты, все умные и на питоне, так что упарываться приходится за сишарп, у мну не хватает разработчиков.
С уважением, Лара

Ответить
Развернуть ветку
Алексей Уважаемый

Почему Python используют упоротые?) Вроде как самый распространённый язык для ИИ.

Ответить
Развернуть ветку
Konstantin Berlinskii
Автор

Это да :) Имел в виду, что питон - для профессиональных датасаентистов. А для начала можно и на любом языке данные обработать и написать нейросеть. Просто многие думают, что питон обязателен в DS и начинают сначала изучать его и бросают не дойдя до реального DS. Лишний барьер нам ни к чему :)

Ответить
Развернуть ветку
Алексей Уважаемый

Полностью согласен.

Ответить
Развернуть ветку
Lara Evdokimova

Константин, а что вы думаете про этих ребят? 
http://demo.neural-university.ru/
Они пытаются учить тому же самому, и мне нравится их подход профессиональной подготовки в области с живыми пет-проектами :)
С уважением, Лара

Ответить
Развернуть ветку
Konstantin Berlinskii
Автор

Примеры хорошие. Ребята, наверно, тоже. Пусть расцветают сто цветов :)

Ответить
Развернуть ветку
Синди Катсс

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

Ответить
Развернуть ветку
Konstantin Berlinskii
Автор

Чувствую негативные флуктуации в вашем ответе :) Что вы имели в виду? Раскройте вашу точку зрения подробнее. Тезис, антитезис, аргументы, все дела.

Ответить
Развернуть ветку
5 комментариев
Раскрывать всегда