Сейчас очень много статей, рапортующих об успехах нейронных сетей, в частности, в интересующей нас области понимания естественного языка. Но для практической работы важно еще и понимание того, при каких условиях эти алгоритмы не работают, или работают плохо. Отрицательные результаты по понятным причинам часто остаются за рамками публикаций. Часто пишут так — мы использовали метод А вместе с Б и В, и получили результат. А нужен ли был Б и В остается под вопросом. Для разработчика, внедряющего известные методы в практику эти вопросы очень даже важны, поэтому сегодня поговорим об отрицательных результатах и их значении на примерах. Примеры возьмем, как известные, так и из своей практики.
1. Насколько важны объем данных и мощность компьютеров?
Часто говорят, что прогресс в области машинного интеллекта обусловлен в значительной степени ростом производительности компьютеров. В определенной степени это действительно так. Рассмотрим один показательный пример.
Существует такая вещь как модель языка. Модель языка, это условно говоря, функция, способная предсказывать вероятность того, что определенная последовательность слов является допустимой для данного языка. Она же может использоваться для генерации текстов на этом языке. Модель языка используется, например, для коррекции ошибок, которые делает система распознавания речи, что значительно повышает качество результата.
В 2010 году Томас Миколов продемонстрировал нейронную сеть, реализующую модель языка и превосходящую по своим возможностям традиционные модели на основе n-грамм (новая модель делала на 18% меньше ошибок, чем лучшие из известных средств, что является очень значительным улучшением) (Mikolov et al, 2010). Через три года в 2013 та же нейронная сеть показала лучший результат на задаче распознавания семантических ролей (Mikolov et al, 2013), опередив широко используемый метод условно-случайных полей (CRF). Примерно тогда же было продемонстрировано, что ту же нейросеть можно применить для получения векторного представления слов (когда близким по значению словам сопоставляются близкие вектора). Модификация данного метода легла в основу широко известного ныне word2vec (векторные представления слов были уже известны до этого, но не получали столь широкого распространения, в том числе из-за достаточно сложных и медленных алгоритмов их вычисления).
Что здесь интересно? То, что использованная модель была впервые разработана Джеффом Элманом аж в 1990 году (Elman J., 1990). На вопрос, что мешало получить указанные результаты еще тогда, обычно отвечают — скорость работы компьютеров и объем обучающей выборки.
Действительно, когда мы сами пытались продублировать результат этих статей и получить вектора слов для русского языка, у нас долго ничего не получалось. Мы проверили все что можно, и уже начали думать, что русский язык сильно особенный и данному методу неподдающийся, но ответ оказался проще. «Красивые» вектора для близких по смыслу слов получаются начиная с определенного объема данных, а до того момента абсолютно ничто не указывает на такую возможность:
Ближайшие соседи для слова «телефон»:
Интересно, что по мере увеличения объема текста, сначала близко оказываются слова не близкие по смыслу, а часто стоящие рядом — на примере видно, что при выборке в 500 000 слов к слову телефон близки те слова, которые часто пишут вместе «использовал телефон», «купил телефон» и так далее. И только на 2 млн. слов мы видим красивую картину синонимов, которую обычно приводят в статьях. На тот момент времени, сей интересный факт нигде не был опубликован, или во всяком случае нам не удалось его найти. Поэтому получить нужный результат помогло упрямство. Отсюда вывод — не всегда нейросетвые модели можно проверить на «простых» или «уменьшенных» случаях, несмотря на огромное желание так сделать.
Казалось бы все просто. Но возникает вопрос — действительно ли 20 лет развития вычислительной техники были нужны для получения результата? Для опыта мы взяли старый компьютер Pentium-III образца где-то 2000-2002 годов (это был тогда последний писк, но он был) и загрузили его этой задачей. Конечно, вместо часа он работал несколько дней, но получил такой же результат. Так что вопрос тут не только в технике. Можно сказать, что ум разработчика и его вера в используемый метод играют далеко не последнюю роль.
Наш экскурс в историю не претендует на полноту (В 2001 уже были первые нейронные модели языка, но использовали они не сеть Элмана, а скользящее окно, упростили мы и еще ряд моментов), но в целом ситуация показательная и интересная. Очень многие «современные» нейросетевые модели родом из 1990-х (двунаправленные рекуррентные сети — 1997, LSTM – 1998...) и вероятно еще больше интересных разработок терпеливо ждут своего часа. Любопытно, нет ли подобной ситуации и в других областях техники, и какова была бы наша жизнь сейчас если бы эти «бесполезные» изобретения находили дорогу к практике раньше? Впрочем, это уже вопрос из области философии.
2. Новые архитектурные решения против объема данных
Вентильные нейронные модули, новые функции активации (RelU — rectified linear unit), maxout, диагональная инициализация, новые архитектуры нейронных сетей, новые способы регуляризации (dropout, dropconnect), и многое другое. Насколько все это играет решающую роль при создании систем анализа текстов? Вот еще один показательный пример.
В 2014 году в работе (Kalchbrenner et al, 2014) cверточные нейронные сети (сама по себе не новая идея), были применены к задаче классификации предложений. Описанная в статье архитектура содержит семь слоев, реализует ряд нестандартных для сверточных сетей методов (dynamic k-max pooling). Вся эта конструкция позволила «поставить новый рекорд точности» в предсказании тональности предложений из отзывов о фильмах, и в классификации типов вопросов (важная задача для систем, способных отвечать на вопросы, задаваемые пользователем на естественном языке). Бесспорное достижение. Через несколько месяцев после появления этой статьи, мы обнаружили новую статью (Kim et al, 2014), в которой показаны еще более улучшенные результаты. Но сверточная сеть в этой работе содержит всего три слоя, не использует k-max pooling и вообще имеет самое простое строение.
Работу (Kim et al, 2014) мы попробовали воспроизвести, и очень долго ничего не получалось, причем катастрофически (на одном из наборов данных выходило около 65% точности против опубликованных 81%). Причина оказалась опять простой — использование других векторов слов. Первоначально мы взяли вектора, обученные на корпусе из 400 миллионов слов. Казалось бы — много. Но в оригинале использовались вектора word2vec которые тренированы на 100 миллиардах слов. Разница. Взяв вектора натренированные на 5 млрд. слов сразу получили 78%. Без других усилий. Более того, выяснилось, что набор векторов имеет большее значение, чем архитектура нейросети. Если вектора слов, полученные на 5 млрд слов дать простой модели NBOW (neural bag of words), то получается 69-72%. Вышло, что опять существенную роль играет объем данных.
Из приведенных примеров может показаться, что можно сколь угодно совершенствовать архитектуру системы, но если нет больших объемов данных, то это бесполезно. Но однако, это не всегда так. Возьмем, например, задачу распознавания именованных сущностный, таких как имена людей или названия организаций. Классические ныне методы, такие как CRF с массой созданных вручную признаков на огромном числе примеров (миллионы аннотированных слов), решают такую задачу легко, выдавая F1 0.89-0.92. Но если нет миллионов аннотированных слов и ручных признаков, то что делать? Однажды нам понадобилось быстро решить подобную задачу. Вручную за неделю мы сделали небольшую (порядка 100К слов) аннотированную выборку. Придумывать признаки или размечать больше данных времени и возможности не было. Стандартная двунаправленная рекуррентная сеть Элмана с векторами слов, обученными на данных Википедии при тестировании дала не особо выдающиеся 77%. Тогда мы решили архитектуру наворотить, сделали много слоев, применили функцию активации RelU, особый способ инициализации весов и рекуррентные связи от верхних слоев к нижним. Результат поднялся до приличных 86.7%. В данном случае новые архитектурные решения сыграли решающую роль.
Все это конечно частные примеры, которые не претендуют на какие-то глобальные обобщения и выводы, но представляются интересными в плане понимания того, какие факторы действительно играют роль в практической работе с нейронными сетями. На этом мы пока завершим тему, но если будет к ней интерес, то продолжим в следующих статьях.
Краткий список литературы
1.Tomas Mikolov, Martin Karafiat?, Luka?s Burget, Jan Cernock, Sanjeev Khudanpur. Recurrent neural network based language model//In: Proceedings of the 11th Annual Conference of the International Speech Communication Association (INTERSPEECH 2010), Makuhari, Chiba, JP
2. Yao, Kaisheng, Geoffrey Zweig, Mei-Yuh Hwang, Yangyang Shi, and Dong Yu. «Recurrent neural networks for language understanding.» In INTERSPEECH, pp. 2524-2528. 2013.
3. Jeffrey L. Elman. Finding Structure in Time. Cognitive Science,14, 179-211
4. Kalchbrenner, Nal, Edward Grefenstette, and Phil Blunsom. «A convolutional neural network for modelling sentences.» arXiv preprint arXiv:1404.2188 (2014).
5. Kim, Yoon. «Convolutional neural networks for sentence classification.» arXiv preprint arXiv:1408.5882 (2014).
1. Насколько важны объем данных и мощность компьютеров?
Часто говорят, что прогресс в области машинного интеллекта обусловлен в значительной степени ростом производительности компьютеров. В определенной степени это действительно так. Рассмотрим один показательный пример.
Существует такая вещь как модель языка. Модель языка, это условно говоря, функция, способная предсказывать вероятность того, что определенная последовательность слов является допустимой для данного языка. Она же может использоваться для генерации текстов на этом языке. Модель языка используется, например, для коррекции ошибок, которые делает система распознавания речи, что значительно повышает качество результата.
В 2010 году Томас Миколов продемонстрировал нейронную сеть, реализующую модель языка и превосходящую по своим возможностям традиционные модели на основе n-грамм (новая модель делала на 18% меньше ошибок, чем лучшие из известных средств, что является очень значительным улучшением) (Mikolov et al, 2010). Через три года в 2013 та же нейронная сеть показала лучший результат на задаче распознавания семантических ролей (Mikolov et al, 2013), опередив широко используемый метод условно-случайных полей (CRF). Примерно тогда же было продемонстрировано, что ту же нейросеть можно применить для получения векторного представления слов (когда близким по значению словам сопоставляются близкие вектора). Модификация данного метода легла в основу широко известного ныне word2vec (векторные представления слов были уже известны до этого, но не получали столь широкого распространения, в том числе из-за достаточно сложных и медленных алгоритмов их вычисления).
Что здесь интересно? То, что использованная модель была впервые разработана Джеффом Элманом аж в 1990 году (Elman J., 1990). На вопрос, что мешало получить указанные результаты еще тогда, обычно отвечают — скорость работы компьютеров и объем обучающей выборки.
Действительно, когда мы сами пытались продублировать результат этих статей и получить вектора слов для русского языка, у нас долго ничего не получалось. Мы проверили все что можно, и уже начали думать, что русский язык сильно особенный и данному методу неподдающийся, но ответ оказался проще. «Красивые» вектора для близких по смыслу слов получаются начиная с определенного объема данных, а до того момента абсолютно ничто не указывает на такую возможность:
Ближайшие соседи для слова «телефон»:
50 000 слов | 50 0000 слов | 2 млн слов |
второй соперников скачать кубик много |
использовал купил хороший сотовый микрофон |
сотовый девайс трубка экран |
Интересно, что по мере увеличения объема текста, сначала близко оказываются слова не близкие по смыслу, а часто стоящие рядом — на примере видно, что при выборке в 500 000 слов к слову телефон близки те слова, которые часто пишут вместе «использовал телефон», «купил телефон» и так далее. И только на 2 млн. слов мы видим красивую картину синонимов, которую обычно приводят в статьях. На тот момент времени, сей интересный факт нигде не был опубликован, или во всяком случае нам не удалось его найти. Поэтому получить нужный результат помогло упрямство. Отсюда вывод — не всегда нейросетвые модели можно проверить на «простых» или «уменьшенных» случаях, несмотря на огромное желание так сделать.
Казалось бы все просто. Но возникает вопрос — действительно ли 20 лет развития вычислительной техники были нужны для получения результата? Для опыта мы взяли старый компьютер Pentium-III образца где-то 2000-2002 годов (это был тогда последний писк, но он был) и загрузили его этой задачей. Конечно, вместо часа он работал несколько дней, но получил такой же результат. Так что вопрос тут не только в технике. Можно сказать, что ум разработчика и его вера в используемый метод играют далеко не последнюю роль.
Наш экскурс в историю не претендует на полноту (В 2001 уже были первые нейронные модели языка, но использовали они не сеть Элмана, а скользящее окно, упростили мы и еще ряд моментов), но в целом ситуация показательная и интересная. Очень многие «современные» нейросетевые модели родом из 1990-х (двунаправленные рекуррентные сети — 1997, LSTM – 1998...) и вероятно еще больше интересных разработок терпеливо ждут своего часа. Любопытно, нет ли подобной ситуации и в других областях техники, и какова была бы наша жизнь сейчас если бы эти «бесполезные» изобретения находили дорогу к практике раньше? Впрочем, это уже вопрос из области философии.
2. Новые архитектурные решения против объема данных
Вентильные нейронные модули, новые функции активации (RelU — rectified linear unit), maxout, диагональная инициализация, новые архитектуры нейронных сетей, новые способы регуляризации (dropout, dropconnect), и многое другое. Насколько все это играет решающую роль при создании систем анализа текстов? Вот еще один показательный пример.
В 2014 году в работе (Kalchbrenner et al, 2014) cверточные нейронные сети (сама по себе не новая идея), были применены к задаче классификации предложений. Описанная в статье архитектура содержит семь слоев, реализует ряд нестандартных для сверточных сетей методов (dynamic k-max pooling). Вся эта конструкция позволила «поставить новый рекорд точности» в предсказании тональности предложений из отзывов о фильмах, и в классификации типов вопросов (важная задача для систем, способных отвечать на вопросы, задаваемые пользователем на естественном языке). Бесспорное достижение. Через несколько месяцев после появления этой статьи, мы обнаружили новую статью (Kim et al, 2014), в которой показаны еще более улучшенные результаты. Но сверточная сеть в этой работе содержит всего три слоя, не использует k-max pooling и вообще имеет самое простое строение.
Работу (Kim et al, 2014) мы попробовали воспроизвести, и очень долго ничего не получалось, причем катастрофически (на одном из наборов данных выходило около 65% точности против опубликованных 81%). Причина оказалась опять простой — использование других векторов слов. Первоначально мы взяли вектора, обученные на корпусе из 400 миллионов слов. Казалось бы — много. Но в оригинале использовались вектора word2vec которые тренированы на 100 миллиардах слов. Разница. Взяв вектора натренированные на 5 млрд. слов сразу получили 78%. Без других усилий. Более того, выяснилось, что набор векторов имеет большее значение, чем архитектура нейросети. Если вектора слов, полученные на 5 млрд слов дать простой модели NBOW (neural bag of words), то получается 69-72%. Вышло, что опять существенную роль играет объем данных.
Из приведенных примеров может показаться, что можно сколь угодно совершенствовать архитектуру системы, но если нет больших объемов данных, то это бесполезно. Но однако, это не всегда так. Возьмем, например, задачу распознавания именованных сущностный, таких как имена людей или названия организаций. Классические ныне методы, такие как CRF с массой созданных вручную признаков на огромном числе примеров (миллионы аннотированных слов), решают такую задачу легко, выдавая F1 0.89-0.92. Но если нет миллионов аннотированных слов и ручных признаков, то что делать? Однажды нам понадобилось быстро решить подобную задачу. Вручную за неделю мы сделали небольшую (порядка 100К слов) аннотированную выборку. Придумывать признаки или размечать больше данных времени и возможности не было. Стандартная двунаправленная рекуррентная сеть Элмана с векторами слов, обученными на данных Википедии при тестировании дала не особо выдающиеся 77%. Тогда мы решили архитектуру наворотить, сделали много слоев, применили функцию активации RelU, особый способ инициализации весов и рекуррентные связи от верхних слоев к нижним. Результат поднялся до приличных 86.7%. В данном случае новые архитектурные решения сыграли решающую роль.
Все это конечно частные примеры, которые не претендуют на какие-то глобальные обобщения и выводы, но представляются интересными в плане понимания того, какие факторы действительно играют роль в практической работе с нейронными сетями. На этом мы пока завершим тему, но если будет к ней интерес, то продолжим в следующих статьях.
Краткий список литературы
1.Tomas Mikolov, Martin Karafiat?, Luka?s Burget, Jan Cernock, Sanjeev Khudanpur. Recurrent neural network based language model//In: Proceedings of the 11th Annual Conference of the International Speech Communication Association (INTERSPEECH 2010), Makuhari, Chiba, JP
2. Yao, Kaisheng, Geoffrey Zweig, Mei-Yuh Hwang, Yangyang Shi, and Dong Yu. «Recurrent neural networks for language understanding.» In INTERSPEECH, pp. 2524-2528. 2013.
3. Jeffrey L. Elman. Finding Structure in Time. Cognitive Science,14, 179-211
4. Kalchbrenner, Nal, Edward Grefenstette, and Phil Blunsom. «A convolutional neural network for modelling sentences.» arXiv preprint arXiv:1404.2188 (2014).
5. Kim, Yoon. «Convolutional neural networks for sentence classification.» arXiv preprint arXiv:1408.5882 (2014).
Комментарии (42)
gurux13
16.09.2015 16:48+1Недавно проходил хакатон DeepHack. Мы в нем участвовали и вынесли для себя понимание, что результаты получаются труднопредсказуемыми без эксперимента. То есть, были какие-то мысли, которые в теории должны были давать большой прирост, но по факту не давали ничего, а иногда ухудшали поведение. Были примитивные идеи, которые попробовали просто потому, что легко сделать, и внезапно они дали хороший прирост.
spice_harj
Начав читать статью, ожидал раскрытие тайны. Жаль, что этого не произошло.
Durham
Задача была не раскрыть некую «тайну», а показать несколько интересных практических примеров, о чем и сказано в самом первом абзаце. Насколько примеры получились действительно интересными нам сложно судить, лично мне в свое время эти сведения сэкономили бы немало времени и нервов.
VlK
На самом деле тут есть один важный тезис — про то, что некоторые методы начинают работать только при очень больших объемах данных; более того, при небольших объемах они даже близко не подходят к адекватным результатам.
При этом альтернативные методы (разные виды random forest, например), дают внятные результаты даже при обучении на совсем небольших выборках.
До этой статьи я, в общем, не стал бы пробовать совсем большие выборки при отсутствии результатов на средних.
spice_harj
Я, как физик-экспериментатор, никогда не отступаю от идеи, даже если на выборках 10^7 -10^8, моделирование не ок. Всегда есть желание «прогнать ещё». Не понимаю ученых, которые так легко сдаются.
VlK
На том месте работы мы делали штук десять небольших машинок в неделю, поэтому пришлось сформировать некий регламент, где формулировались правила выбора методов и обработки данных. Исходные данные при этом формировались 50-100 вьетнамоязычными асессорами, т.е. в лучшем случае выборка была в десяток-два тысяч максимально репрезентативных примеров.
В общем, особо времени на проработку каждого из возможных методов не было; особенно плохо для такой поточной работы подходят нейронные сети — очень уж долго обучаются.
Durham
Надо учитывать еще тот факт, что random forests работают хорошо кроме всего прочего еще и потому, что им дают признаки, которые люди выделили на основании своего опыта наблюдения больших выборок разных данных за всю жизнь. А когда этих признаков не хватает, то прекращается и рост результатов. А нейронные сети могут при правильном подходе формировать признаки сами, и соответственно улучшать результаты при получении новых данных без участия человека.
ffriend
Если вы говорите про предобучение в глубоких сетях (всякие autoencoders и RBM), то нет, не могут. Всё, что делают такие структуры — это преобразовывают данные из одного пространства признаков в другое. Точно так же, как это раньше делалось, например, с помощью PCA, только теперь нелинейно, за счёт чего и получаются более сложные модели.
Здесь имеет место конфуз в терминологии. Признак (или, в статистической терминологии, случайная переменная) — это по определению функция объекта (наблюдения, элементарного события), т.е. то, что вы можете «снять» непосредственно из объекта. Рост человека, время работы лампочки до перегорания, наличие слова в тексте — это признаки. Затем вы эти признаки можете скомбинировать, дать весовые коэффициенты, применить к ним ещё какую-то функцию, но это уже будет преобразованием.
Использование слова «признак» к таким преобразующим функциям, судя по всему, пошло из компьютерного зрения, где фильтры (скажем, фильтры Габора или визуальные фильтры, выученные автокодировщиком) одинаково хорошо соответсвуют как понятию преобразования, так и понятию признака (например, на изображении есть такая-то дуга -> признак). Но это специфика области — сделать аналогичное суждение по поводу, например, обработки языка гораздо сложнее («в этом предложении есть такие-то слова с такими-то весами»? ну так себе «признак»).
Поэтому если мы сравниваем случайные деревья с нейронными сетями, то в последних следует брать только ту часть, которая отвечает за непосредственную классификацию (т.е. чаще всего обычный MLP), а предварительные преобразования (пропускание через RBM или автокодировщик) можно равноценно применить что к MLP, что к деревьям решений.
Durham
Не совсем так. В обработки текстов выделяемые вручную признаки имеют как правило ключевое значение. Допустим у нас есть некий текст. В общем, текст это последовательность символов, и, наверное, мы можем считать значение каждого символа за «случайную переменную». И есть задача, например, от простых (классификация текстов на категории, вроде положительный/отрицательный отзыв, спам/не спам и.т.п.) до более сложных — прочитать текст и составить краткое резюме, или ответить на вопросы по прочитанному тексту. деревья решений по признаку наличия букв в определенной позиции ничего хорошего не делают (а как было бы все просто). Поэтому садятся лингвисты и начинают придумывать признаки — вхождения слова в разные словари лексики, часть речи, место в дереве синтаксического разбора, TD/IDF слова, является ли слово частью первого предложения абзаца и так далее очень много. И на основании всего этого обычно строятся системы понимания и обработки текста, которые работают хорошо. С другой стороны, как недавно показано, нейросети можно скормить текст в виде последовательности символов непосредственно. И дальше она может все нужные лингвистические признаки обнаружить самостоятельно, понять, что есть слова, слова складываются в предложения, предложения в абзацы и так далее. Может быть формально разбиение текста на слова и грамматический разбор предложения это действительно «преобразования», но чем это отличается принципиально «от того что на изображении есть такая-то дуга»? И самое главное на практике есть большая разница между необходимостью выделять лингвистические признаки вручную (не малый труд, не всегда очевидный в выполнении), и возможностью просто использовать текст как есть.
ffriend
Можно конкретные статьи? А то очень уж абстрактно получается — непонятно какой сети (многослойному перцептрону, рекуррентной сети, перцептрону с предобучением RBM или автокодировщиками) скармливается текст и что именно сеть «понимает». Если речь идёт просто про MLP, то никаких особых признаков перцептрон и не получается — на выходе у вас функция от входных данных (символов в тексте) сразу к предсказываемому классу или значению зависимой переменной. Если речь идёт про рекуррентные сети, то сравнивать их нужно также с рекуррентными деревьями решений или аналогичными моделями (HMM, CRF, etc.). Если же мы говорим про предобучение через поиск внутреннего представления данных, то его идея вообще восходит как минимум к работе Smolensky по Harmony theory от 1986 года и к нейронным сетям имеет ничуть не большее отношение, чем к случайным лесам, SVM или наивному байесовскому классификатору.
Собственно, мой поинт именно в том, что предобучать можно не только нейронные сети: как и с глубокими сетями, вы можете обучить RBM на входных данных, преобразовать их к новому высокоуровневому представлению и скорить деревьям решений. Да, в этом случае деревья скорее всего потеряют своё прекрасное свойство интерпретируемости решений (ибо признаки будут уже не «рост», «вес», «зарплата», а «f1», «f2» и т.д.), но так и нейронные сети этим похвастаться не могут.
ServPonomarev
arxiv.org/abs/1502.01710
ffriend
Спасибо. Собственно, это именно то, о чём я и говорил: из описания следует, что используется темпоральная свёрточная сеть, так что и сравнивать нужно с аналогичными моделями. Самая близкая из популярных моделей здесь — CRF, которая чуть менее гибкая, но уже давно используется для выделения частей речи, именованных сущностей и всего в таком духе.
Durham
CRF нельзя использовать, чтобы воспроизвести работу по указанной ссылке.
ffriend
Если для этого есть какие-то принципиальные причины, не стесняйтесь их озвучить. А то пока что разговор выглядит так:
— нейронные сети могут всё, а другие модели не могут
— почему?
— потому что они умные
За любой нейронной сетью стоят всё те же стандартные статистические понятия и методы оптимизации. Поэтому давайте всё-таки искать конкретные отличия между моделями и разбираться, почему они влияют на результат.
Durham
CRF можно использовать для классификации длинных текстов исходя из последовательности букв. Почему? Потому что " уже давно используется для выделения частей речи, именованных сущностей и всего в таком духе". Согласитесь, тоже не конкретное утверждение.
Если вы утверждаете, что можно, ваше дело это и доказать. Для этого надо:
1. Описать метод, каким образом задача, описанная в указанной статье решается с помощью CRF
2. Продемонстрировать его работу.
пункт 2 можно заменить ссылкой на статью, где это продемонстрировано.
Утверждение что CRF можно применить в этом случае потому что «они уже используются для выделении частей речи и.т.п.» не доказывает ничего, потому что а) это совсем другие задачи б) CRF показывает сопоставимые с нейронными сетями результаты даже по тем задачам, для которых они предназначены, только при условии выделения экспертами большого числа признаков. И даже в этом случае они уступают нейросетям на ряде задач, см хотя ссылки внутри этой статьи (Mikolov et al, 2013). Это наблюдаемая реальность.
Почему одни модели работают лучше чем другие, это другой вопрос, на него ответ не всегда известен. В данном случае, я бы сказал, что CRF это по своей природе линейный классификатор, который не может моделировать нелинейные зависимости. Точнее может, если ему дать на вход такие признаки, что классы в их пространстве будут линейно разделяемыми. Последовательность букв таковыми видимо не является, и все упирается в подбор правильных признаков, или правильное преобразование признаков, чего CRF сам по себе не умеет.
ffriend
Эмм… Поиском по документу никаких намёков на CRF не нашёл. Вы мне предлагаете сейчас вручную пройтись по всем работам, на которые ссылается эта работа, и поисксть там упоминание случайных полей?
Простите, но ничего доказывать я вам не собираюсь. Это вы продолжаете категорично заявлять, что нейронные сети — это единственная крутая модель, а все остальные должны работать с голыми признаками, использовоть линейные зависимости и вообще даже рядом не стоят. Хотите в это верить — пожалуйста, ничего против я не имею.
Кхм. Вы бы что ли почитали немного про CRF, прежде чем делать выводы о том, что они могут или не могут сделать. CRF — это вероятностная модель, и понятие линейности в общем случае к нему вообще неприменимо. Более того, в своей базовой формулировке CRF не задаёт никаких ограничений ни на структуру сети, ни на формат входных данных, ни на способ вывода вероятностей, так что при желании можно получить модель практически полностью идентичную сети, на которую вы ссылаетесь (хотя, конечно, я скорее имел ввиду производные от стандартной linear-chain CRF с дополнительным узлом зависимой переменной).
В общем, я постарался показать, как сложные модели вроде глубоких сетей раскладываются на компоненты, которые потом можно заменить, скомбинировать или адаптировать для своих целей. Если вам это неинтересно, и вас полностью удовлетворяет теория нейронных сетей, то я не вижу смысла вас переубеждать.
Durham
И я имел в виду linear-chain CRF, который обычно имеется в виду когда говорят о разметке частей речи. Потом, что иначе
Что возвращает нас к тому факту, что дискуссия ни о чем. Графические модели и нейронные сети можно двумя разными способами представления одних и тех процессов т.е. это по сути разные способы мышления об одном и том же.
А вопрос весь начинался, если вернуться к началу вообще не про то, а про то, что обычные деревья решений работают в терминах исходных признаков и неспособны формировать новые признаки (преобразовывать исходные признаки в другие представления). Вот о чем шла речь.
ffriend
Равно как и обычный MLP.
Который тоже линейной моделью не является.
Durham
О чем мы говорим? Вот то, что используется в задачах анализа текстов
(здесь y — вектор классов в последовательности, а x — вектор представляющий исходную последовательность).
Выделенная красным кругом функция под экспонентой является линейной комбинацией признаков. Об этом идет речь и именно это подразумевается в узком смысле под CRF в контексте разметки последовательностей слов. Сам смысл CRF как правило в сопоставлении класса каждому элементу последовательности, а не в классификации последовательности в целом. Но даже не об этом речь. В общем случае можно подставить сюда нелинейную функцию и даже нейронную сеть, тогда получится то, что называется neural conditional random field (http://jmlr.org/proceedings/papers/v9/do10a/do10a.pdf). Однако, при этом неправильно будет противопоставлять CRF как математический формализм нейронным сетям т.к. это вещи не взаимоисключающие, а взаимодополняющие.
Но вот это совсем неправда. MLP может. См. хотя бы классическую статью о методе обратного распространения ошибки «Learning representations by back-propagating errors» (http://www.iro.umontreal.ca/~vincentp/ift3395/lectures/backprop_old.pdf)
«As a result of weight adjustments, internal „hidden“ inits which are not part of the task domain or outpit come to represent important features of the task domain, and regularities in the task are captured by interaction of these units».
Там это очень хорошо показано и разобрано.
ffriend
Т.е. экспоненту и произведение вероятностей вы решили опустить? Ну ок. Тогда по вашей же логике многослойный перцептрон, если опустить функцию активации, а взять только линейную сумму взвешенных входных данных, тоже является линейной фунцией ;)
Опять же, по определению, линейная функция — это такая функция, для которой её приращение пропорционально приращению аргумента. То, что вы обвели, является линейной функцией. Вся вероятность — нет.
Если мы вернёмся к первому комментарию, где я упомянул CRF, то увидим следующую фразу:
Товарищ привёл пример работы, рассматривающей темпоральные сети. Я отметил, что сравнивать темпоральные модели с нетемпоральными (обычными деревьями решений) — некорректно, и что если уж мы говорим про моделирование последовательностей, то сравнивать нужно хотя бы с CRF (или HMM, или Conditional RBM, или чем-то таким, но никак не со статическими моделями). CRF давно используется для моделирования последовательностей, т.е. строит совместное распределение последовательности связанных переменных (или условную вероятность, я уже не помню деталей). То, как вы это распределение используете — это уже ваше дело. Если вы хотите классифицировать всю последовательность в целом, то, естественно, нужно добавить в модель переменную класса всей последовательности (о чём я уже вроде тоже где-то выше говорил). Темпоральной модель от этого быть не перестаёт, равно как и не перестаёт быть конкретно CRF. Собтсвенно, это тоже одна из вещей, которые я пытаюсь тут донести: есть модели и отдельные компоненты, которые можно менять, подстраивать и приспосабливать для своих нужд.
Не знаю, причём тут математический формализм, учитывая, что математика одинаково хорошо описывает и CRF, и (большинство) нейронных сетей, но в целом, чёрт возьми, да! Это абсолютно нормально — совмещать части разных моделей, комбинируя их так, как хочется.
Учитывя, что статья датируется 1986 годом, я бы сказал, что терминология слегка устарела, и тот же Хинтон слово «representation» сейчас использует именно в контексте RBM и AE.
Но пусть будет по-вашему. Тогда мы говорим, что новый признак — это комбинация исходных признаков, которые сеть выучила сама, так? Но чем тогда это принципиально отличается от ветвей дерева решений, которые тоже 1) сами решают, где и как сделать сплит; 2) представляют новую функцию (ветвь решений) от исходных признаков?
Вы всё пытаетесь доказать, что в нейронных сетях есть что-то такое, что делает их уникальными. Увы, нет. Практически у любой более или менее сложной модели можно найти все те же свойства, пусть даже немного в другом виде.
Durham
С экспонентой получится эквивалент одного слоя нейронной сети (логистической регрессии), такая модель как известно может определять только линейно разделимые классы. Это накладывает определенные ограничения на возможности и модели в целом, в результате чего она проигрывает на ряде задач нейронным сетям.
С каких пор сверточная сеть стала темпоральной? Я понимаю, мы бы сравнивали CRF, HMM и рекуррентные сети
От того, что сейчас он изучает представления формируемые RBM, и использует к ним это слово, никак не меняется его отношение к нему в плане обычных MLP. При желании можно найти его свежие выступления где про это сказано. AE можно замечательно построить из MLP, обучать обратным распространением ошибки и получить те же признаки. При распознавании изображений MLP можно обучить, что у него появятся детекторы краев, нейроны реагирующие на линии определенного наклона, на определенные формы, в общем, все что в других моделях считается выделением признаков. Да и векторные представления слов, на мой взгляд отличный пример формирования новых «representations». Их особенность не то, что «сеть выучила сама», а то, что происходит переход из пространства признаков где классы являются линейно не разделимыми в пространство признаков где они таковыми являются.
Если бы это было так, все модели были бы «одинаково полезны», однако есть задачи на которых нейронные сети показывают лучшие результаты, чем другие модели. Хотя, в значительной степени, нейронные сети это способ мышления о моделях, и можно сформулировать эквивалентные структуры в терминах других моделей. А вообще мне не надо ничего доказывать и смысла нет. Лично для меня, чем больше народу верит в противоположное — тем лучше.
ffriend
Экспоненту и произведение. Даже если убрать экспоненту, получается произведение нескольких линейных функций, что линейной функцией не является (попробуйте, например, разложить произведение простейшей линейной функции `b + kx` на саму себя).
Так или иначе, у меня нет намерения доказывать, что вы неправы, а с тем, что можно легко создать вероятностную сеть любой сложности и не линейности вы вроде и не отрицаете, поэтому, думаю, нет смысла продолжать этот спор.
Из работы:
По аналогии можно сказать, что в дереве решений ветвь вида:
является признаком, реагирующим на линию определённого наклона. Ну и да, проблема линейной неразделимости классов тоже решена из коробки.
Не одинаково полезны, а имели бы схожие свойства — ту же нелинейность (нейронные сети — много слоёв, деревья решений — нелинейны из коробки, CRF — произведение вероятностей, SVM — ядра), тот же элемент случайности (нейронные сети — dropout, деревья решений — случайные леса, CRF — из коробки, SVM — ресмплирование) и т.д.
Нейронные сети сейчас в моде, так же, как лет 8-10 назад были в моде машины опорных векторов и как ещё лет через 8-10 будут в моде какие-то другие модели. Единственная причина, почему другие модели становятся модными один раз, а нейронные сети постоянно возвращаются, состоит в том, что само понятие «нейронная сеть» настолько размыто, что может объединить под одним словосочетанием и комбинацию логистических регрессий (MLP), и случаные марковские поля (RBM), и бутстрап (dropout), и кучу других идей.
Durham
К сожалению, видимо продолжать эту дискуссию нет большого смысла, так как все стороны все равно останутся при своих заблуждениях.
Произведение на функцию отвечающую за вероятности перехода не поможет, если необходим нелинейный анализ признаков в вершинах графа. Линеечный характер рассматриваемой функции имеет вполне последствия для возможностей модели в целом, которые выражаются в снижении точности результатов, если классы не являются линейно разделимыми в исходном пространстве признаков.
Ну и детектор линии, конечно не устроен так как в вашем примере, иначе все было бы очень просто. Линия бывает слегка разного наклона, прерывистая, размытая, сдвинутая по вертикали или горизонтали и т.п. А ваш пример среагирует и на полностью заполненный белым цветом прямоугольник. А если нужно будет реагировать на наличие линии A+B, наличие линии B без A, и наличие линии A без B. В ветви которая определяет линию A нужно будет повторить все шаги для линии B.
В общем, неудобные способы представления задачи затрудняют с ней работу, хотя и не делают ее невозможной.
Все это похоже на спор о том, что лучше ассемблер или C++, какой процессор круче, с какой стороны разбивать куриное яйцо и тому подобные не очень осмысленные вещи. Давайте лучше вы будете пользоваться своими методами, мы своими и посмотрим, что из этого в итоге получится.
kraidiky
Преобразование исходных данных из одного пространства в другое так что в новом пространстве есть одна или несколько координат, благодаря которым задача проще решается — это и есть строгое математическое определение полезного признака. Вот тут моя статья на хабре, в которой я показываю как даже малюсенькая нейросетка, безо всякого предобучения, почти что только обычным BackPropagation успешно формирует признаки: habrahabr.ru/post/249031 Мне кажется, отрицать столь явно видимое явление можно только из принципиальных соображений.
ffriend
Не знаю насчёт «полезного признака», но строгим математическим определением просто «признака» (или случайной переменной), является как раз измеримая функция из пространства исходов Omega в пространство значений E (возможны вариации, где признак — это функция из всего вероятностного пространства в некоторое измеримое пространство, но сути это не меняет). Именно такое определение присутствует в Wikipedia, Mathworld и многочисленных книгах и пейперах по статистике.
Преобразование данных из одного пространства в другое, т.е. преобразование одного набора случайных переменных в другое, под это определение не попадает.
Как ваша статья или мои «принципиальные соображения» соотносятся с определеним признака, я, честно говоря, не понял.
ffriend
Для ясности: в большинстве случаев такие тонкости терминологии роли не играют, но помогают в двух случаях:
* при строгом математическом описании (например, в научных работах);
* для чёткого понимания, что всегда есть начальные признаки, которые выделяет человек (будь то части речи, слова, отдельные символы или пиксели) и есть методы их преобразования к другому, более эффективному по какому-то критерию представлению (PCA, LDA, AE, RBM, etc.); и что методы преобразования абсолютно не привязаны к дальнейшим алгоритмам классификации или регрессии.
kraidiky
— Если эти данные учебная выборка, а нейронная сеть нашла преобразование, которое нужно с ними сделать, чтобы результаты обработки давали понятный интерпретируемый результат в пространстве итогов, то про эти переменные можно с определённостью сказать как минимум одно — ОНИ НЕ СЛУЧАЙНЫ. :) И сеть в некоторых случаях способна сама догадаться как именно они не случайны.
Статью я вам привёл как пример обнаружения таких признаков. Там сети на вход подаётся всего лишь два числа, две координаты X и Y из диапазона (-1; 1). А на выходе сеть должна нарисовать прекрасного павлина. Она учится это делать, худо-бедно, потом мы изучаем внутренности этой сети (это возможно, потому что она маленькая), и обнаруживаем, что в этой сети есть всего два синапса с номерами 23 и 24, которые вдвоём контролируют видимую на картинке часть левых рабочих перьев хвоста павлина.
Вот такое явление, как мне кажется, можно называть «признаки обнаружить самостоятельно», Сеть обнаружила семантически значимый признак во входных данных, выделила этот признак на 6-ом нейроне (в линейной комбинации с несколькими другими признаками) и дальше остальная сеть могла в обучении этот признак использовать.
В данном случае ввод это просто две координаты, два действительных числа. Офигенно информативный признак.
В данном случае никакие предварительные преобразования не использовались, два числа прямо в необработанном виде подавались на два входа прямо вот буквально случайно сгенерённой сети. И сеть сама BackProoagation-ом выделила в этих данных признак(-и) эффективные для минимизации ошибки сети.
ffriend
Мне кажется, вы плохо знакомы со статистической терминологией, откуда и возникает непонимание. Если ваши объекты описываются набором параметров, значение которых меняется от объекта к объекту и имеет некоторое рапределение, то эти параметры являются случайными переменными. То, что эти переменные могут быть коррелированы, быть зависимыми и иметь совместное распределение, которое можно найти с помощью некоторой модели, никак факт случайности переменных не отменяет.
Честно говоря, я так и не понял, как выглядит ваша сеть. 2 входных числа — это 2 входных нейрона, так? А на выходе 3 нейрона — R, G и B, верно? А что такое «6-й синапс»? Это 6-й нейрон скрытого слоя посередине?
Я вам привёл строгое математическое определение признака. Ну ок, не признака, а случайной переменной, хотя для признака всё ещё проще и однозначней. Вы ни одному из этих определений не следуете, поэтому что вы здесь подразумеваете под «признаком» я так и не понял.
Какую терминологию использовать — это, конечно, ваше личное дело, но тогда непонятно, какое отношение ваш ответ имеет к моему комментарию.
Во-первых, если вы смогли по этим данным построить какую-то вменяемую модель, то признаки вполне информативные. Во-вторых, я ничего не говорил про информативность. Если у меня рост — 170см, то для работника банка, который выдаёт мне кредит, это не несёт особо полезной информации, но это признак.
А здесь вы вообще смешиваете признаки и вычисленные параметры модели. Если у меня линейная регрессия выдала высокий коэффициент для переменной «высшее образование» при моделировании зарплаты, значит ли это, что регрессия нашла новый признак? Или если дерево решений сказало нам, что пиксели с координатами -0.3 < X < 0.1 и 0.4 < Y < 0.6 чаще всего бывают красными, то значит ли это, что это дерево обнаружило новые переменные? Разница с нейронной сетью в данном случае только в линейности модели.
kraidiky
Формализм вам мешает вам понять суть, а переход в вашу систему, к сожалению через-чур затратен из-за того что в вашем формализме вероятно просто нет определения для рассматриваемого явления… Попробую объяснить совсем на пальцах, если даже так вам будет непонятно подумаем что делать дальше.
Да, есть два входных нейрона, на них подаются две координаты, есть три выходных нейрона, с них снимаются RGB, в итоге получается картинка. Между входами и выходами чуть больше 30 скрытых нейронов. Шестой — буквально шестой из этих скрытых, к нему ведут 23-ий и 24-ый синапсы. Мы учим сеть с учителем на основе существующей картинки. И видим, что сеть уxится до ошибки RMSD, например, только 0.3 и дальше ошибка долгое время не снижается. Но вот на 6-ом нейроне образовалась хитрая и очень нелинейная комбинация входных данных такая что если подёргать за два синапса из множества имеющихся у шестого нейрона, то меняться будет форма только одного из цветовых пятен. И сразу после того, как такая ситуация сложилась ошибка начала резко снижаться и достигает 0,18. Пока Такая ситуация на 6-ом нейроне не складывалась ошибка не могла улучшиться меньше 0,3.
То есть в вашем примере у банка есть на вас куча данных и вот ваш алгоритм вдруг обнаруживает, что если ваш рост возвести в квадрат, вычесть из него вес, и разделить на логорифм выкуриваемого в день количества сигарет, то полученный новый признак очень сильно коррелирует и с вашей платёжеспособностью, и со сроками возвращения кредита и с временем вашего прихода на работу. И сразу как только алгоритму удалось такой признак выделить, качество всех предсказаний банковской системы резко выросли.
Вот процесс поиска той сложной манипуляции со входными данными, которую нужно предпринять чтобы резко упростилось решение задачи это как раз и есть машинная работа, которую нейросети (при определённых условиях) могут делать сами без вмешательства человека. При этом понятно, что состояние 6-ого нейрона это всего лишь одна из координат, полученных из пространства входных признаков несколькими нелинейными пробразованиями, но он при этом и самостоятельное выделение сетью признаков.
ffriend
Пока что мне непонятно, зачем вы мне всё это рассказываете. В моём изначальном комментарии было 2 тезиса, на которые я уже указывал: 1) у слова «признак» есть абсолютно точное математическое определение; 2) выделение признаков средствами RBM и AE, как это принято делать в глубоких нейронных сетях, может быть применено и к другим моделям. Насколько я могу видеть, ваш комментарий не отвечает ни на один из этих тезисов.
Так чем это отличается от подбора коэффициентов, скажем, полиномиальной регрессии с комбинированными признаками? И там и там вы комбинируете входные признаки, и там и там находите веса, и ни там ни там вы не выделяете промежуточное представление, как это делается с PCA или RBM, а напрямую подбираете параметры модели по входным данным и соответсвующим правильным ответам.
Durham
Запутали вопрос окончательно, так что непонятно уже о чем идет речь. AE и RBM не единственные средства выделения признаков в нейросетях, и вообще AE это сами по себе нейросети, и RBM/DBM в общем тоже создавались как нейросети. Если сверху к нейросети подключить дерево решений или SVM или еще какую другую модель, то да она будет работать лучше, но о чем это говорит?
Если, например, на вход SVM или другой линейной модели подать пиксели с картинки, качество результата будет плохим. Если, скажем, снять потенциалы с зон зрительной коры мозга, смотрящего на ту же картинку, то результат будет намного лучше (подобные опыты проводились). Далее можно сказать, что мозг «всего лишь» выполняет преобразование признаков в другое представление, и вообще мозги применимы таким образом к любым моделям. Это безусловно верно, но чего содержательного мы доказали этим утверждением? Что SVM здесь выполняет главную работу, а мозг некую вспомогательную?
К вопросу о признаках/случайных величинах. Понятно, что ни одна система в принципе не может создать новую информацию (новые «признаки») сверх тех, которые можно измерить в физической системе. Если мы измеряем интенсивность цвета, то нейронная сеть не начнет чувствовать запах на основании данных о цветах. Это очевидно, и я не думаю, что есть смысл на эту тему спорить.
Формально, однако, мы можем сказать, что если мы подали на вход одни случайные величины, а получили на выходе другие (пусть коррелированные с первыми, но другие т.к. они имеют другое распределение), то мы получили новые признаки. Вероятность того, что две монетки упадут одновременно решкой есть случайная величина, и она ничем не хуже вероятностей выпадения решки у каждой монетки по отдельности.
Если мы взяли текст как набор букв, или я не знаю, набор пикселей, или набор координат атомов чернил, и выделили лингвистические признаки, такие как части речи, корни слов, роли слов в предложении, то в научной литературе именно это и будет называться признаками (features), а не результатом преобразования координат атомов чернил, или последовательности букв. Формально мы взяли некий преобразователь (мозг человека) и с помощью него сделали преобразование признаков, которое затем подали на вход классификатора. На практике это называют выделением признаков, и именно об этой операции идет речь, как о том, что может делать нейросеть.
ffriend
Пожалуйста, назовите другие средства и приведите определение слова «признак», которое вы используете. Формальное или неформальное, просто какое-то определение, к которому мы сможем привязаться. Потому что математическому определению вы не следуете, какому следуете — непонятно, но при этом мы уже кучу времени зачем-то спорим о терминологии.
Не создавались — ссылку на оригинальную работу Smolensky я приводил. И так же RBM прекрасно формулируется в виде случайного марковского поля, при этом сразу становится понятно, откуда там берётся сэмплирование по Гиббсу, расстояние Кульбака-Лейблера, свободная энергия и т.д. От нейронных сетей в RBM разве что весовые коэффициенты на рёбрах графа, да и те подпадают под определение условной вероятности (P(v|h) или P(h|v)).
Я это всё к чему. При желании в любой графовой модели можно увидеть нейронную сеть, но если вы видите только её, то сами закрываете себе дверь к другим моделями таким как RF поверх RBM.
Не просто лучше, а на том же уровне, что и глубокие сети с перцептроном в конце. По крайней мере, принципиальных причин, по которым это может не работать, нету.
Как я уже говорил, пока мы не на страницах научных журналов, как вы смоделируете предметную область мне абсолютно всё равно. Важно только понимать, что вы в своей модели можете делать, а что нет.
kraidiky
Обычное обучение весов синапсов с помощью BP при ограниченных ресурсах делает то же самое.
Не знаю что мешает вам смириться с этим фактом, но что-то очень серьёзное, по всей видимости.
ffriend
Вы своё определение слова «признак» и его отличие от параметров модели то приведёте? Я бы давно смирился, было бы с чем.
VlK
Это теоретически. Практически хорошая имплементация random forest почти везде оказывалась лучше: быстрее учится, потроха понятней и т.д. Я готов это утверждать на 2011-2012 годы :) после всего этого шума последних лет вокруг нейронных сетей народ почти наверняка сильно в них вложился.
Durham
В значительной степени тому причина что суть дерева решений понять легко, а нейронную сеть надо «уметь готовить». Правильнее сказать, что разных задач и условий хороши разные методы
VlK
Ну… Если, упрощенно говоря, дерево решений корректно классифицирует 98 из 100 примеров при неделе подбора признаков против двух-трех месяцев для 99 из 100 нейронной сети… Я, пожалуй, возьму дерево решений, хотя интересно, конечно, было повозиться с нейтронными сетями.
Durham
На многих задачах 98 из 100 примеров люди только во сне видят, и разница бывает более ощутимая. Но у каждого свои вкусы и предпочтения.
VlK
Я утрирую, конечно, насчет конкретных цифр, и специально озвучил их в абстрактных попугаях :)
Конкретно в тот момент, когда речь шла о главной машинке для нашего поиска — лес случайных деревьев вообще оказался не только проще, но и лучше того, что смогли наши математики выжать из нейронных сетей. Дело было в 2012 году, поэтому все могло поменяться с тех пор.
domix32
«Что именно заставляет...» — объем данных и, иногда, структура. Даже сойдет за TL;DR