Pull to refresh

Comments 29

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

На последнем рисунке проиллюстрирован пример кодирования фотографии используя идею универсального аппроксиматора. При этом, методы сжатия графики на основе гармонического или вейвлет разложения дадут выше качество при том же объеме закодированной информации и на порядки меньший расход вычислительного ресурса на сжатие. Году в 2003/4 я свой фотопортрет таким способом пробовал моделировать на MLP. Стоит ли оно того?

В нулевых одна российская команда рекламировала искусственный мозг "Умник", который мог распознавать большой словарь векторов признаков и производить вероятностный логический вывод. И они подчеркивали, что никаких нейросетей, а только условные вероятности! Акинатор — еще один пример. Всегда помним, что самолеты не птицы, автомобили не тетраподы, а идеальный ИИ не обязан работать на архитектуре NN.

Большинство работ по искусственным NN напоминают «игру в бисер» и "совершенное стратегическое оружие".
Пример показывает не кодирование фотографии, а самообучение сети выделению общих признаков.
Прочел вашу статью. Спасибо за статью. Теперь понятно, о чем рисунок.
Brute Force — метод грубой силы

а ври чем тут брут форс?

На последнем рисунке проиллюстрирован пример кодирования фотографии используя идею универсального аппроксиматора

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

но на последней картинке показана ограниченная машина больцмана, которая обучается по методу Contrastive divergence. мало того эти RBM соединены в несколько слоев и называются deep belief networks. и моделирует вероятностное распределение, и является генеративной моделью, это больше похоже на скрытые модели Маркова, а не на дискриминативную модель такую как MLP.
коммент ниже это вам, не туда попал
а ври чем тут брут форс?


Алгоритм обучения MLP методом обратного распространения ошибки очень ресурсоемкий. Сам часто использую MLP для построения небольших моделей вида Y=f(X), когда нужно что-то быстро оценить в Дедукторе и не заморачиваться с выбором модели (с работами Салахутдинова не знаком, обязательно посмотрю).

Речь в моем комментарии не о том, что NN априори плохи, а о том что нужно различать их изучение и прикладное использование, где они могут быть эффективно заменены другими моделями. У NN может быть большое преимущество, например, в оптических компьютерах, но мы пока работаем с фон-неймановской архитектурой.
Главная проблема НН не в ресурсоемкости как таковой, в конце концов, она касается только обучения, дьявол, как обычно, кроется в деталях. НН имеют невыпуклую функцию вероятности, что приводит к проблеме локальных максимумов. Именно это делает обучение ресурсоемким и в некотором роде непредсказуемом сравнительно с методами с выпуклой функцией вероятности (SVM, например).

Но при этом в общем случае НН показывают бОльшую точность. Если повезет сойтись в нужный максимум.
Может, наоборот выпуклую?

P.S. Кстати, kernel trick для нейросетей кто-нибудь применяет?
Нет, в этом-то и особенность НН, их функция вероятности невыпуклая.

Применять можно, это увеличивает variance классификатора, равно как и увеличение количества нейронов/слоев.
Да, они действительно имеют невыпуклый функционал ошибки, но это одновременно и недостаток и преимущество. Поскольку большинство реальных современных проблем имеют нелинейный характер. SVM — красивая парадигма, где есть выпуклость и все границы математически доказуемы. Но вся красота заканчивается, когда мы переходим от линейных ядер к нелинейным. В этом случае уже не понятно как именно выбирать эти ядра и сколько их понадобится.
У Яна ЛеКуна (Yann LeCun) на videolectures.net есть хорошая лекция на эту тему, называется «Кто боится невыпуклую оптимизацию». Советую посмотреть
Спасибо, я, вообще, в теме :-)

SVM решает задачу нелинейной классификации, разделяя классы гипперплоскостью в пространстве с бОльшим количеством измерений, в котором классы разделимы линейно — в этом суть kernel trick. И любой SVM с использованием валидного (мерсеровского) кернела имеет выпуклую функцию вероятности.

SVM гарантированно сходится в глобальный максимум, при этом решая задачи нелинейной классификации ненамного хуже нейросетей. А выпуклая функция вероятности позволяет использовать SVM «из коробки».
Ну раз вы в теме, то предлагаю попробовать подать резюме к нам в команду :): Senior Machine Learning Engineer
Это относится и ко всем остальным, кто это читает и тоже в теме. Я серьезно.

По существу:
"… бОльшим количеством измерений, в котором классы разделимы линейно..." — все верно.
Но. Для того, чтобы kernel trick был возможен нужно подобрать эти самые kernels, так чтобы в пространстве с большей размерностью классы действительно были разделимы. Для некоторых задач это может привести к нереализуемым решениям. Более того, эта проблема зачастую представляется как второстепенная, хотя она по сути первостепенная. Глубокие нейросети это и делают, они строят иерархичное преобразование, трансформирующее входные данные в пространство большей размерности, которое легче разделяется выходным классификатором, будь то еще один слой нейросети или тот же SVM.
Если переформулировать на примере, то попробуйте обучить SVM распознаванию визуальной информации (лица, цифры, что угодно) на сырых (пусть даже нормализованных) пикселях. Думаю, вы в курсе, что это плохая идея.
Спасибо, я доволен своей текущей работой.

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

SVM с полиномиальным кернелом дает точность в 94% при распознавании рукописных цифр. Как я уже говорил, проблема не в инструменте, а в умении его использовать.
В том то и дело. С одной стороны SVM в случае с линейно разделяемыми классами дает гарантированный (математически) результат с оптимальной обобщающей способностью — за счет маргинализации.
Как только вы говорите, что можно поиграться с кернелом, подобрать более оптимальный, если правильно затюнить гиперпараметры, и т.п. вся эта красота пропадает. А без нее остается плоская (shallow) архитектура, которая хоть и может в теории аппроксимировать любую функцию, имея достаточное количество нелинейных кернелов, но вот это достаточное может оказаться неподъемным на практике.
Погуглите статьи на тему Shallow vs Deep. Вот например презентация: www.cs.toronto.edu/~amnih/cifar/talks/erhan_talk.pdf

По поводу цифр — если вы говорите про базу MNIST, то 6% ошибка — это очень много. Простой K-NN дает в 2 раза меньше — 3%, не говоря уже про методы deep learning, в которых борьба уже идет за сотые доли процента.

В заключение забавная история: в 90х Владимир Вапник (один из авторов SVM) и Larry Jackel (глава одного из подразделений AT&T), в котором они оба тогда работали, заключили пари, в котором Владимир утверждал, что к 2000 году никто в здравом уме не будет на практике использовать многослойные НС, а Ларри утверждал, что будет найдено математическое доказательство того, что многослойные НС имеют преймущество над SVM. Вот их пари в письменном виде: https://plus.google.com/u/0/100371833248286228099/posts/Y4vivM6Aen3
Проигравший должен был оплатить ужин в ресторане.
В результате оба проиграли и поделили оплату ужина на двоих :-)
Ох-хо-хо, да что ж вы в меня все ссылками-то кидаетесь? Я ж говорю: я в курсе.

DL и NN — интересные и перспективные научные концепции. На сегодняшний день они not mature enough для уровня практического применения «из коробки». Это значит, что на практике вы влегкую можете потратить полгода на применение нейросети к вашей задаче, на выходе не получив ожидаемого результата. Вы ж, вроде, практик, вы ж должны это все и так понимать.
Ок. Я рад что вы со всем этим знакомы и меня понимаете. Но согласитесь, что всегда лучше когда аргументы сопровождаются ссылками. Тем более, что это могут читать остальные, кто не настолько в курсе.
Вы ж, вроде, практик, вы ж должны это все и так понимать.

:) В том то и дело, что мы сейчас заканчиваем разработку определенной технологии, которая по вашим словам не очень практична. А я с этим не соглашаюсь. К сожалению, деталей не могу раскрыть по понятным причинам.
Да и остальные (Google, Apple, Microsoft) уже коммерциализировали технологии DL. Это я к тому, что тезис о том что NN устарели и/или не практичны, а SVMы пришли им на смену был очень популярен в 2000-х. До того популярен, что многие уважаемые конференции отказывались публиковать работы, если там было упоминание про NN. Сейчас ситуация изменилась.
И снова-таки: я знаю, что изменилась, я проходил курс CS229 в Stanford University и делал курсовой проект для него как раз по NN.

Я говорю про другое: хорошо, что вы смогли разработать НН модель для конкретной задачи. Это действительно классно, мои поздравления. Нюанс в том, что между ресерчем и инжинирингом есть большая разница. Признайтесь: начиная работать над моделью, вы могли гарантировать результат?

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

Вот этот последний абзац — это то, что я пытаюсь сказать всей этой веткой.
Ну раз вы в теме, то предлагаю попробовать подать резюме к нам в команду :): Senior Machine Learning Engineer
Это относится и ко всем остальным, кто это читает и тоже в теме. Я серьезно.
Микрооффтоп можно? Что нужно делать и как развиваться студенту/молодому специалисту, недавно заинтересовавшемуся ML, чтобы через определенное время иметь возможность успешно подаваться на такие вакансии? :)
Ну, в первую очередь, в таких вакансиях крайне приветствуется кандидатская степень. Так что неплохо было бы найти научного руководителя и защитить диссертацию, на тему связанную с ML. Можно и без степени, но тогда придется быть гораздо убедительнее в демонстрации своих навыков и опыта.
Если вы еще студент, то возможно у вас есть студенческие лаборатории, в которых занимаются задачами связанными с ML, как было в моем случае. Тогда просто нужно туда прийти, там есть научные руководители, которые подскажут тему исследования.
Если ничего такого нет, то можно самому выбрать интересную область, научиться читать и понимать научные статьи на эту тему, поднабравшись знаний попробовать решить одну из множеств задач, которых сейчас очень много в интернете.
Более конкретные навыки, которые требуются, указаны непосредственно в описании вакансии.
Если хотите альтернативное мнение: МЛ давно вышли из лабораторий «в поле», и научная степень для работы в этой сфере вовсе не нужна — академия, вообще, придумана для тех, кто хочет заниматься наукой, а не целится на инженерные должности в индустрии.

По образованию: в интернете сейчас достаточно много материалов. Есть Курсера и другие MOOC, есть Stanford Engineering Everywhere. Из более серьезного: Stanford Center for Professional Development и магистратура в хороших западных вузах (я несколько biased в сторону Стэнфорда :-)).

По конференциям: есть NIPS, они более авторитетны, чем многие МЛ журналы. Все материалы конференции есть в открытом доступе.

По практике: в сети периодически появляются data science competitions, на которых можно не только потренироваться, но и заработать :-) Агрегатором таких, к примеру, является Kaggle.

А в остальном, все формальные требования не имеют никакого значения, если любишь то, чем занимаешься :-) Удачи вам!
А зачем ограничивать себя обратным распространением? Взяли систему уравнений и решили её за три-четыре прохода
А что на первой картинке изображено? Она меня подкупила для просмотра темы. Думал будет что-то более конкретное, новое!
Со звуком даже DBN (стек из нескольких слоев RBM) довольно плохо работает. Сам занимался некоторое время. Лучшее, что получалось — чуть больше 20% ошибок.
Sign up to leave a comment.

Articles