Pull to refresh
  • by relevance
  • by date
  • by rating

Решение задачи кластеризации методом градиентного спуска

Data Mining *Algorithms *
Привет. В этой статье будет рассмотрен способ кластеризации данных, используя метод градиентного спуска. Честно говоря данный способ носит больше академический характер, нежели практический. Реализация этого метода мне понадобилась в демонстрационных целях для курса по машинному обучению, что бы показать как одинаковые задачи можно решить различными способами. Хотя конечно если вы планируете осуществить кластеризацию данных, используя дифференцируемую метрику, для которой вычислительно труднее найти центроид, нежели подсчитать градиент на некотором наборе данных, то этот метод может быть полезным. Итак если вам интересно как можно решить задачу k-means кластеризации с обобщенной метрикой используя метод градиентного спуска, прошу под кат. Код на языке R.
Читать дальше →
Total votes 50: ↑48 and ↓2 +46
Views 25K
Comments 8

Введение в процедурную анимацию: инверсная кинематика

Game development *Mathematics *Unity3D *
Translation

Часть 4. Введение в градиентный спуск


Эта часть представляет собой теоретическое введение в инверсную кинематику и содержит программное решение, основанное на градиентном спуске (gradient descent). Эта статья не будет всеобъемлющим руководством по этой теме, это всего лишь общее введение. В следующей части мы покажем настоящую реализацию этого алгоритма на C# в Unity.

Серия состоит из следующих частей (части 1-3 представлены в предыдущем посте):

Читать дальше →
Total votes 54: ↑54 and ↓0 +54
Views 25K
Comments 5

Ограничения глубинного обучения и будущее

Python *Programming *Machine learning *
Translation
Эта статья представляет собой адаптацию разделов 2 и 3 из главы 9 моей книги «Глубинное обучение с Python» (Manning Publications).

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



Ограничения глубинного обучения


Глубинное обучение: геометрический вид


Самая удивительная вещь в глубинном обучении — то, насколько оно простое. Десять лет назад никто не мог представить, каких потрясающих результатов мы достигнем в проблемах машинного восприятия, используя простые параметрические модели, обученные с градиентным спуском. Теперь выходит, что нужны всего лишь достаточно большие параметрические модели, обученные на достаточно большом количестве образцов. Как сказал однажды Фейнман о Вселенной: «Она не сложная, её просто много».
Читать дальше →
Total votes 22: ↑19 and ↓3 +16
Views 21K
Comments 13

Краткий курс машинного обучения или как создать нейронную сеть для решения скоринг задачи

Python *Programming *Algorithms *Machine learning *Artificial Intelligence
Tutorial
image

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

Если тебе интересно машинное обучение, то приглашаю в «Мишин Лернинг» — мой субъективный телеграм-канал об искусстве глубокого обучения, нейронных сетях и новостях из мира искусственного интеллекта.

Вопросы, которые разобраны в статье:

• Как собрать и подготовить данные для построения модели?
• Что такое нейронная сеть и как она устроена?
• Как написать свою нейронную сеть с нуля?
• Как правильно обучить нейронную сеть на имеющихся данных?
• Как интерпретировать модель и ее результаты?
• Как корректно оценить качество модели?
Поехали!
Total votes 51: ↑42 and ↓9 +33
Views 160K
Comments 43

Что мы знаем о ландшафте функции потерь в машинном обучении?

Mathematics *Machine learning *

TL;DR


  1. В глубоких нейронных сетях основным препятствием для обучения являются седловые точки, а не локальные минимумы, как считалось ранее.
  2. Большинство локальных минимумов целевой функции сконцентрированы в сравнительно небольшом подпространстве весов. Соответствующие этим минимумам сети дают примерно одинаковый loss на тестовом датасете.
  3. Сложность ландшафта увеличивается по приближении к глобальным минимумам. Почти во всём объёме пространства весов подавляющая часть седловых точек имеет большое количество направлений, по которым из них можно сбежать. Чем ближе к центру кластера минимумов, тем меньше «направлений побега» у встреченных на пути седловых точек.
  4. Всё ещё неясно, как найти в подпространстве минимумов глобальный экстремум (любой из них). Похоже, что это очень сложно; и не факт, что типичный глобальный минимум намного лучше типичного локального, как в плане loss'a, так и в плане обобщающей способности.
  5. В сгустках минимумов существуют особые кривые, соединяющие локальные минимумы. Функция потерь на этих кривых принимает лишь чуть большие значения, чем в самих экстремумах.
  6. Некоторые исследователи считают, что широкие минимумы (с большим радиусом «ямы» вокруг) лучше узких. Но есть и немало учёных, которые полагают, что связь ширины минимума с обобщающей способностью сети очень слаба.
  7. Skip connections делают ландшафт более дружелюбным для градиентного спуска. Похоже, что вообще нет причин не использовать residual learning.
  8. Чем шире слои в сети и чем их меньше (до определённого предела), тем глаже ландшафт целевой функции. Увы, чем более избыточна параметризация сети, тем больше нейросеть подвержена переобучению. Если использовать сверхширокие слои, то несложно найти глобальный минимум на тренировочном наборе данных, но обобщать такая сеть не будет.

Всё, листайте дальше. Я даже КДПВ ставить не буду.
Мне нужны пруфы!
Total votes 23: ↑22 and ↓1 +21
Views 9.5K
Comments 22

Применяем градиентный спуск на реальной Земле

Working with 3D-graphics *Algorithms *Machine learning *
Translation
Обычная аналогия для объяснения градиентного спуска такая: человек застрял в горах во время сильного тумана и должен спуститься вниз. Самый логичный способ — осмотреть поверхность вокруг и медленно проложить путь, следуя вниз по склону.

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

Но вот важный вопрос: насколько хорошо градиентный спуск выполняется на реальной Земле?
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views 7.3K
Comments 9

Обзор градиентных методов в задачах математической оптимизации

Mathematics *Machine learning *
Sandbox

Предисловие


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



Читать дальше →
Total votes 76: ↑76 and ↓0 +76
Views 66K
Comments 26

Julia, Градиентный спуск и симплекс метод

Programming *Algorithms *Julia *Machine learning *
Tutorial


Продолжаем знакомство с методами многомерной оптимизации.


Далее предложена реализация метода наискорейшего спуска с анализом скорости выполнения, а также имплементация метода Нелдера-Мида средствами языка Julia и C++.

Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Views 9.5K
Comments 8

Дифференцируемое программирование

Abnormal programming *Programming *Julia *Machine learning *


С четырьмя параметрами я могу задать слона, а с пятью я могу заставить его шевелить хоботом.
– John Von Neumann

Идея «дифференцируемого программирования» очень популярна в мире машинного обучения. Для многих не ясно, отражает ли этот термин реальный сдвиг в том, как исследователи понимают машинное обучение, или это просто (еще один) ребрендинг «глубокого обучения». В этом посте разъясняется, что нового дает дифференцируемое программирование (или ∂P) в таблице машинного обучения.


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


Далее мы пролистаем полотно неинтересного текста, захотим узнать, что такое автодифференцирование и даже популяем из катапульты!

Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 11K
Comments 8

Нейросети и глубокое обучение, глава 3, ч.3: как выбрать гиперпараметры нейросети?

Machine learning *Artificial Intelligence
Translation

До сих пор я не объяснял, как я выбираю значения гиперпараметров – скорость обучения η, параметр регуляризации λ, и так далее. Я просто выдавал неплохо работающие значения. На практике же, когда вы используете нейросеть для атаки на проблему, может быть сложно найти хорошие гиперпараметры. Представьте, к примеру, что нам только что рассказали о задаче MNIST, и мы начали работать над ней, ничего не зная по поводу величин подходящих гиперпараметров. Допустим, что нам случайно повезло, и в первых экспериментах мы выбрали многие гиперпараметры так, как уже делали в этой главе: 30 скрытых нейронов, размер мини-пакета 10, обучение за 30 эпох и использование перекрёстной энтропии. Однако мы выбрали скорость обучения η=10,0, и параметр регуляризации λ=1000,0. И вот, что я увидел при таком прогоне:
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Views 7.2K
Comments 2

Параметризация нейросетью физической модели для решения задачи топологической оптимизации

Machine learning *
Недавно на arXiv.org была загружена статья с не очень интригующим названием "Neural reparameterization improves structural optimization" [arXiv:1909.04240]. Однако оказалось, что авторы, по сути, придумали и описали весьма нетривиальный метод использования нейросети для получения решения задачи структурной/топологической оптимизации физических моделей (хотя и сами авторы говорят, что метод более универсален). Подход очень любопытный, результативный и судя по всему, — совершенно новый (впрочем, за последнее не поручусь, но ни авторы работы, ни сообщество ODS, ни я, аналогов припомнить не смогли), поэтому его может быть полезно знать интересующимся как использованием нейросетей, так и решением разнообразных задач оптимизации.
Читать дальше →
Total votes 49: ↑49 and ↓0 +49
Views 10K
Comments 68

Ох уж этот метод Ньютона

Algorithms *Mathematics *Machine learning *
О методах численной оптимизации написано много. Это и понятно, особенно на фоне тех успехов, которые в последнее время демонстрируют глубокие нейронные сети. И очень отрадно, что хотя бы часть энтузиастов интересуется не только тем, как забомбить свою нейросеточку на набравшей в этих ваших интернетах популярность фреймворках, но и тем, как и почему все это вообще работает. Однако мне в последнее время пришлось отметить, что при изложении вопросов, связанных с обучением нейросетей (и не только с обучением, и не только сетей), в том числе на Хабре, все чаще впроброс используется ряд “хорошо известных” утверждений, справедливость которых, мягко говоря, сомнительна. Среди таких сомнительных утверждений:

  1. Методы второго и более порядков плохо работают в задачах обучения нейросетей. Потомучто.
  2. Метод Ньютона требует положительной определенности матрицы Гессе (вторых производных) и поэтому плохо работает.
  3. Метод Левенберга-Марквардта — компромисс между градиентным спуском и методом Ньютона и вообще эвристичекий.

и т.д. Чем продолжать этот список, лучше перейдем к делу. В этом посте рассмотрим второе утверждение, поскольку его я только на Хабре встречал как минимум дважды. Первый вопрос затрону только в той части, что касается метода Ньютона, поскольку он куда более обширен. Третий и остальные оставим до лучших времен.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 18K
Comments 14

Конспект по «Машинному обучению». Математический анализ. Градиентный спуск

Mathematics *Machine learning *
Sandbox


Вспомним математический анализ


Непрерывность функции и производная


Пусть $E \subseteq \mathbb{R}$, $a$ — предельная точка множества $E$ (т.е. $a \in E, \forall \varepsilon > 0 \space\space |(a - \varepsilon, a + \varepsilon) \cap E| = \infty$), $f \colon E \to \mathbb{R}$.

Определение 1 (предел функции по Коши):

Функция $f \colon E \to \mathbb{R}$ стремится к $A$ при $x$, стремящемся к $a$, если

$\forall \varepsilon > 0 \space\space \exists \delta > 0 \space\space \forall x \in E \space\space (0 < |x- a| < \delta \Rightarrow |f(x)- A| < \varepsilon).$


Обозначение: $\lim\limits_{E \ni x \to a}f(x) = A$.
Читать дальше →
Total votes 27: ↑18 and ↓9 +9
Views 7.6K
Comments 12

Решаем уравнение простой линейной регрессии

Python *Mathematics *Machine learning *Artificial Intelligence
Tutorial
В статье рассматривается несколько способов определения математического уравнения линии простой (парной) регрессии.

Все рассматриваемые здесь способы решения уравнения основаны на методе наименьших квадратов. Обозначим способы следующим образом:

  • Аналитическое решение
  • Градиентный спуск
  • Стохастический градиентный спуск

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

Весь код, приведенный в статье, написан на языке python 2.7 с использованием Jupyter Notebook. Исходный код и файл с данными выборки выложен на гитхабе

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

Для иллюстрации материала используем очень простой пример.
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views 16K
Comments 25

Динамическая балансировка нагрузки в pull-схеме

Тензор corporate blog High performance *Programming *Algorithms *Mathematics *
В прошлой новости про принципы работы коллекторов логов PostgreSQL я упомянул, что одним из недостатков pull-модели является необходимость динамической балансировки нагрузки. Но если делать ее аккуратно, то недостаток превращается в достоинство, а система в целом становится гораздо более устойчивой к изменениям потока данных.


Давайте посмотрим, какие решения есть у этой задачи.
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views 1.6K
Comments 0

Анимации градиентного спуска и ландшафта потерь нейронных сетей на Python

SkillFactory corporate blog Python *Machine learning *
Translation
Tutorial
Во время изучения различных алгоритмов машинного обучения я наткнулся на ландшафт потерь нейронных сетей с их горными территориями, хребтами и долинами. Эти ландшафты потерь сильно отличались от выпуклых и гладких ландшафтов потерь, с которыми я столкнулся при использовании линейной и логистической регрессий. Здесь мы создадим ландшафты потерь нейронных сетей и анимированного градиентного спуска с помощью датасета MNIST.


Рисунок 1 — Ландшафт потерь свёрточной нейронной сети с 56 слоями (VGG-56, источник)
Приятного чтения!
Total votes 43: ↑41 and ↓2 +39
Views 8.9K
Comments 3

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

Python *
Tutorial

Рабочая область функции (заданный интервал) разбита на несколько точек. Выбраны точки локальных минимумов. После этого все координаты передаются функции в качестве аргументов и выбирается аргумент, дающий наименьшее значение. Затем применяется метод градиентного спуска.

Читать далее
Total votes 10: ↑8 and ↓2 +6
Views 9K
Comments 6

Объясняем на пальцах принцип действия оптимизаторов для нейронных сетей: основные алгоритмы, и зачем они нужны

SkillFactory corporate blog Algorithms *Mathematics *Machine learning *Reading room
Translation

Оптимизаторы — важный компонент архитектуры нейронных сетей. Они играют важную роль в процессе тренировки нейронных сетей, помогая им делать всё более точные прогнозы. Специально к старту нового потока расширенного курса по машинному и глубокому обучению, делимся с вами простым описанием основных методик, используемых оптимизаторами градиентного спуска, такими как SGD, Momentum, RMSProp, Adam и др. 

Читать далее
Total votes 11: ↑10 and ↓1 +9
Views 5.1K
Comments 9

Матрица-Перематрица

Python *Mathematics *Machine learning *
Sandbox

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

Для этого сделаем следующие шаги:

рассмотрим манипуляции с матрицами : транспонирование, умножение, градиент;

построим игрушечную нейронную сеть;

познакомимся с методом обратного распространения ошибки с использованием метода градиентного спуска.

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

Red pill
Total votes 9: ↑8 and ↓1 +7
Views 4.7K
Comments 0

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

OTUS corporate blog Mathematics *Machine learning *
В этой статье мы поговорим о математике градиентного спуска, почему при обучении нейронных сетей применяется стохастический градиентный спуск и о вариации SGD (Stochastic Gradient Descent) с использованием скользящего среднего (SGD с momentum и Nesterov Accelerated Gradient).



Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 3.3K
Comments 7