Search
Write a publication
Pull to refresh
4
0.2

.NET Software Engineer

Send message

Руководство хакера по нейронным сетям. Схемы реальных значений. Стратегия №3: Аналитический градиент

Reading time4 min
Views17K
Содержание:
Глава 1: Схемы реальных значений
Часть 1:
   Введение   
      Базовый сценарий: Простой логический элемент в схеме
      Цель
         Стратегия №1: Произвольный локальный поиск

Часть 2:
         Стратегия №2: Числовой градиент

Часть 3:
         Стратегия №3: Аналитический градиент

Часть 4:
      Схемы с несколькими логическими элементами
         Обратное распространение ошибки

Часть 5:
         Шаблоны в «обратном» потоке 
      Пример "Один нейрон"

Часть 6:
      Становимся мастером обратного распространения ошибки


Глава 2: Машинное обучение
Часть 7:
      Бинарная классификация

Часть 8:
      Обучение сети на основе метода опорных векторов (SVM)

Часть 9:
      Обобщаем SVM до нейронной сети

Часть 10:
      Более традиционный подход: Функции потерь



В предыдущем разделе мы оценивали градиент путем исследования выходного значения схемы по каждому исходному значению по отдельности. Эта процедура дает нам то, что мы называем числовым градиентом. Однако этот подход все равно считается довольно проблематичным, так как нам нужно вычислять результат схемы по мере изменения каждого исходного значения на небольшое число. Поэтому сложность оценки градиента является линейной по количеству исходных значений. Но на практике у нас будут сотни, тысячи или (для нейронных сетей) от десятков до сотен миллионов исходных значений, и схемы будут включать не только один логический элемент умножения, но и огромные выражения, которые могут быть очень сложными в вычислении. Нам нужно что-то получше.
Читать дальше →

Руководство хакера по нейронным сетям. Схемы реальных значений. Стратегия №1: Произвольный локальный поиск

Reading time4 min
Views52K
Мы начинаем публиковать перевод книги (как называет ее сам автор) «Руководство хакера по нейронным сетям». Книга состоит из четырех частей, две из которых уже закончены. Мы постараемся разбить текст на логически завершенные части, размер которых позволит не перегружать читателя. Также мы будем следить за обновлением книги и опубликуем перевод новых частей после их появления в блоге автора.

Содержание:
Глава 1: Схемы реальных значений
Часть 1:
   Введение   
      Базовый сценарий: Простой логический элемент в схеме
      Цель
         Стратегия №1: Произвольный локальный поиск

Часть 2:
         Стратегия №2: Числовой градиент

Часть 3:
         Стратегия №3: Аналитический градиент

Часть 4:
      Схемы с несколькими логическими элементами
         Обратное распространение ошибки

Часть 5:
         Шаблоны в «обратном» потоке 
      Пример "Один нейрон"

Часть 6:
      Становимся мастером обратного распространения ошибки


Глава 2: Машинное обучение
Часть 7:
      Бинарная классификация

Часть 8:
      Обучение сети на основе метода опорных векторов (SVM)

Часть 9:
      Обобщаем SVM до нейронной сети

Часть 10:
      Более традиционный подход: Функции потерь


Читать дальше →

Рекомендательные системы: теорема Байеса и наивный байесовский классификатор

Reading time4 min
Views62K
В этой части мы не будем говорить о рекомендательных системах как таковых. Вместо этого мы отдельно сконцентрируемся на главном инструменте машинного обучения — теореме Байеса — и рассмотрим один простой пример её применения — наивный байесовский классификатор. Disclaimer: знакомому с предметом читателю я вряд ли тут сообщу что-то новое, поговорим в основном о базовой философии машинного обучения.

image
Читать дальше →

Математика для искусственных нейронных сетей для новичков, часть 3 — градиентный спуск продолжение

Reading time6 min
Views59K
Часть 2 — градиентный спуск начало

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

Существует и другая версия алгоритма — стохастический градиентный спуск. Стохастический = случайный.
Читать дальше →

Математика для искусственных нейронных сетей для новичков, часть 1 — линейная регрессия

Reading time8 min
Views157K
Оглавление

Часть 1 — линейная регрессия
Часть 2 — градиентный спуск
Часть 3 — градиентный спуск продолжение

Введение


Этим постом я начну цикл «Нейронные сети для новичков». Он посвящен искусственным нейронным сетям (внезапно). Целью цикла является объяснение данной математической модели. Часто после прочтения подобных статей у меня оставалось чувство недосказанности, недопонимания — НС по-прежнему оставались «черным ящиком» — в общих чертах известно, как они устроены, известно, что делают, известны входные и выходные данные. Но тем не менее полное, всестороннее понимание отсутствует. А современные библиотеки с очень приятными и удобными абстракциями только усиливают ощущение «черного ящика». Не могу сказать, что это однозначно плохо, но и разобраться в используемых инструментах тоже никогда не поздно. Поэтому моей первичной целью является подробное объяснение устройства нейронных сетей так, чтобы абсолютно ни у кого не осталось вопросов об их устройстве; так, чтобы НС не казались волшебством. Так как это не математический трактат, я ограничусь описанием нескольких методов простым языком (но не исключая формул, конечно же), предоставляя поясняющие иллюстрации и примеры.

Цикл рассчитан на базовый ВУЗовский математический уровень читающего. Код будет написан на Python3.5 с numpy 1.11. Список остальных вспомогательных библиотек будет в конце каждого поста. Абсолютно все будет написано с нуля. В качестве подопытного выбрана база MNIST — это черно-белые, центрированные изображения рукописных цифр размером 28*28 пикселей. По-умолчанию, 60000 изображений отмечены для обучения, а 10000 для тестирования. В примерах я не буду изменять распределения по-умолчанию.
Читать дальше →

Математика для искусственных нейронных сетей для новичков, часть 2 — градиентный спуск

Reading time8 min
Views134K
Часть 1 — линейная регрессия

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

Градиентный спуск


В прошлой части был показан пример вычисления параметров линейной регрессии с помощью метода наименьших квадратов. Параметры были найдены аналитически — , где — псевдообратная матрица. Это решение наглядное, точное и короткое. Но есть проблема, которую можно решить численно. Градиентный спуск — метод численной оптимизации, который может быть использован во многих алгоритмах, где требуется найти экстремум функции — нейронные сети, SVM, k-средних, регрессии. Однако проще его воспринять в чистом виде (и проще модифицировать).
Читать дальше →

Распознавание радиотехнических сигналов с помощью нейронных сетей

Reading time4 min
Views35K

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


Читать дальше →

Сравнение методов распознавания сигналов. Нейронные сети против согласованного фильтра

Reading time4 min
Views18K

Я недавно опубликовал статью "Распознавание радиотехнических сигналов с помощью нейронных сетей"[1]. И там была довольно длинная и интересная дискуссия по поводу возможности использования для этих целей согласованного фильтра(СФ). Разумеется, использовать согласованные фильтры для той задачи, что решалась, проблематично. Но меня заинтересовал другой вопрос, что лучше использовать при незначительных колебаниях параметров сигнала, нейронные сети(НС) или СФ. В качестве генератора сигнала буду использовать обычный мультивибратор. Подавать сигнал буду через звуковую карту, а далее распознавать с помощью метода описанного в [1] и с помощью согласованного фильтра. Далее ПО сравнит результаты и даст ответ какой метод лучше.


Читать дальше →

Рекурентная нейронная сеть в 10 строчек кода оценила отзывы зрителей нового эпизода “Звездных войн”

Reading time11 min
Views160K
Hello, Habr! Недавно мы получили от “Известий” заказ на проведение исследования общественного мнения по поводу фильма «Звёздные войны: Пробуждение Силы», премьера которого состоялась 17 декабря. Для этого мы решили провести анализ тональности российского сегмента Twitter по нескольким релевантным хэштегам. Результата от нас ждали всего через 3 дня (и это в самом конце года!), поэтому нам нужен был очень быстрый способ. В интернете мы нашли несколько подобных онлайн-сервисов (среди которых sentiment140 и tweet_viz), но оказалось, что они не работают с русским языком и по каким-то причинам анализируют только маленький процент твитов. Нам помог бы сервис AlchemyAPI, но ограничение в 1000 запросов в сутки нас также не устраивало. Тогда мы решили сделать свой анализатор тональности с блэк-джеком и всем остальным, создав простенькую рекурентную нейронную сеть с памятью. Результаты нашего исследования были использованы в статье “Известий”, опубликованной 3 января.



В этой статье я немного расскажу о такого рода сетях и познакомлю с парой классных инструментов для домашних экспериментов, которые позволят строить нейронные сети любой сложности в несколько строк кода даже школьникам. Добро пожаловать под кат.
Читать дальше →

Метод опорных векторов для нахождения полиморфизмов в геноме

Reading time4 min
Views9.8K
Статья 2013-ого года «A support vector machine for identification of single-nucleotide polymorphisms from next-generation sequencing data» (O'Fallon, Wooderchak-Donahue, Crockett) предлагает новый метод определения полиформизмов в геноме на основе применения метода опорных векторов (SVM). Хотя ранее в статье 2011-ого года «A framework for variation discovery and genotyping using next-generation DNA sequencing data» уже описывалось применение методов машинного обучения для определения однонуклеотидных полиморфизмов (SNP-ов, снипов), подход, основанный на использовании SVM, описан впервые в данной статье.

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

Подборка: Более 70 источников по машинному обучению для начинающих

Reading time5 min
Views103K


Индикатор кулачкового аналогового компьютера / Wiki

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

Машинное обучение от Octave\Matlab к Python

Reading time3 min
Views22K
Решил я познакомится с такой интересной для меня областью, как Machine learning. После непродолжительных поисков я обнаружил достаточно популярный курс Стэнфордского университета Machine learning. В нем рассказываются основы и дается широкое представление о machine learning, datamining, and statistical pattern recognition. Был для меня в этом курсе небольшой минус как Python программиста- домашние задания надо было выполнять на Octave\Matlab. В итоге я не пожалел, что получил представления о новом языке программирования, но как учебный пример для более тесного знакомства с соответствующими библиотеками решил переписать домашние задания на Python. То что получилось лежит на GitHub тут.

Читать дальше →

Популяционный алгоритм, основанный на поведении косяка рыб

Reading time7 min
Views36K
В рамках данного сообщества неоднократно обсуждались генетические алгоритмы и их применение на практике. В этой статье я хотел бы поделиться относительно новым методом оптимизации функций, основанным на поведении косяка рыб в условиях поиска пищи.
Читать дальше →

Генератор Федеративного Фильтра Калмана с использованием Генетических Алгоритмов

Reading time18 min
Views25K
В рамках своей научной активности реализовал так называемый Федеративный Фильтр Калмана (Federated Kalman Filter). В этой статье рассказывается о том, что такое «Федеративный ФК», чем он отличается от обобщенного, а также описывается консольное приложение, реализующее данный фильтр и генетические алгоритмы для подбора параметров его математической модели. Приложение было реализовано с использованием TPL (Task Parallel Library), поэтому пост будет интересен не только специалистам по цифровой обработке сигналов.

UPD1: после прочтения двух недавних статей решил тоже присоединиться к эксперименту/исследованию/авантюре (называйте как хотите). В конце статьи добавил еще один опрос — "Стали бы Вы поощрать рублем такие узко специализированные статьи на Хабрахабре?".

Под катом описание и ссылка на сорцы

Фильтр Калмана — !cложно?

Reading time7 min
Views85K
Недавно прочитал пост из «Дополненной реальности», в котором упоминается Фильтр Калмана в сравнении с более простым «альфа-бета» фильтром. Давно собирался сочинить нечто вроде сниппета по составлению ФК, и вот думаю самое время. В статье я вам расскажу как на практике можно составить расширенный ФК не особо утруждая себя высоконаучными размышлениями и глубокими теоретическими изысканиями.
Под катом попытка рассказать по-простому о сложном

Фильтр Калмана

Reading time10 min
Views457K


В интернете, в том числе и на хабре, можно найти много информации про фильтр Калмана. Но тяжело найти легкоперевариваемый вывод самих формул. Без вывода вся эта наука воспринимается как некое шаманство, формулы выглядят как безликий набор символов, а главное, многие простые утверждения, лежащие на поверхности теории, оказываются за пределами понимания. Целью этой статьи будет рассказать об этом фильтре на как можно более доступном языке.
Фильтр Калмана — это мощнейший инструмент фильтрации данных. Основной его принцип состоит в том, что при фильтрации используется информация о физике самого явления. Скажем, если вы фильтруете данные со спидометра машины, то инерционность машины дает вам право воспринимать слишком быстрые скачки скорости как ошибку измерения. Фильтр Калмана интересен тем, что в каком-то смысле, это самый лучший фильтр. Подробнее обсудим ниже, что конкретно означают слова «самый лучший». В конце статьи я покажу, что во многих случаях формулы можно до такой степени упростить, что от них почти ничего и не останется.
Читать дальше →

300 потрясающих бесплатных сервисов

Reading time11 min
Views1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →

Фильтр Калмана — Введение

Reading time5 min
Views269K
Фильтр Калмана — это, наверное, самый популярный алгоритм фильтрации, используемый во многих областях науки и техники. Благодаря своей простоте и эффективности его можно встретить в GPS-приемниках, обработчиках показаний датчиков, при реализации систем управления и т.д.

Про фильтр Калмана в интернете есть очень много статей и книг (в основном на английском), но у этих статей довольно большой порог вхождения, остается много туманных мест, хотя на самом деле это очень ясный и прозрачный алгоритм. Я попробую рассказать о нем простым языком, с постепенным нарастанием сложности.
Читать дальше →

Методы оптимизации нейронных сетей

Reading time17 min
Views228K

В подавляющем большинстве источников информации о нейронных сетях под «а теперь давайте обучим нашу сеть» понимается «скормим целевую функцию оптимизатору» лишь с минимальной настройкой скорости обучения. Иногда говорится, что обновлять веса сети можно не только стохастическим градиентным спуском, но безо всякого объяснения, чем же примечательны другие алгоритмы и что означают загадочные \inline \beta и \inline \gamma в их параметрах. Даже преподаватели на курсах машинного обучения зачастую не заостряют на этом внимание. Я бы хотел исправить недостаток информации в рунете о различных оптимизаторах, которые могут встретиться вам в современных пакетах машинного обучения. Надеюсь, моя статья будет полезна людям, которые хотят углубить своё понимание машинного обучения или даже изобрести что-то своё.


image


Под катом много картинок, в том числе анимированных gif.

Читать дальше →
12 ...
124

Information

Rating
4,906-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Backend Developer
C#
SQL
.NET
WPF
Database