Pull to refresh
208
0
Артем Хуршудов @rocknrollnerd

User

Send message
Я имел в виду примерно все вот эти современные символьные библиотеки — Theano, Torch, и Caffe, как выясняется, тоже) Конкретно от TensorFlow я пока тоже немного шарахаюсь, результаты бенчмарков настораживают, но у него большое потенциальное преимущество, наверное — Google в качестве разработчика.
А, я просто не знал, видимо) Никогда им толком не пользовался. Тогда все, что было сказано выше, относится и к нему тоже.
Никакой магии, обычный, э-ээ… вычислительный сахар) Допустим, у вас есть сложная функция типа f(g(h(j(k(l(x))))), и вам надо посчитать производную по x. В соответствии с chain rule вам надо написать df/dg * dg/dh * dh/dj * dj/dk * dk/dl * dl/dx и дальше с проклятьями и ругательствами писать для каждой из этих производных формулу (проклятья умножаются на количество слоев — представьте, что их несколько сотен). Ладно еще если они однотипные — обратное распространение дает нам алгоритм, и мы можем просто втупую расписать много одинаковых производных; а если мы хотим заморочиться и вставить в сеть что-нибудь этакое: subsampling-слой, upsampling-слой, или еще чего-нибудь? В общем, все решабельно, никакой трагедии, просто неудобно.

Тогда мы делаем следующее: забиваем в библиотеку производные для всех простых аналитических функций типа полинома, экспоненты или логарифма, и пишем туда правило, как конструировать chain rule, чтобы она символьно выписывала все эти df/dg, и дальше решала исходя из забитых в нее правил. И счастливый ленивый разработчик может просто написать «посчитай мне все производные для весов этой сети» одной строчкой, вне зависимости от того, что у него там за сеть)
Примеров есть тут.
Собственно, я пока не вижу в этой картине ничего сильно нового) Слои у нас есть. Каждый нейрон связан с каждым из предыдущего слоя — ну, это просто удобная конструкция для вычислений, чтобы веса можно было забить в прямоугольную матрицу (представьте себе, что некоторые веса там равны нулю, и соответствующие нейроны как раз «не связаны»).

Ну и, по-моему, периодически люди уходят во всякие ответвления от классической схемы с обратным распространением. Вот, скажем, из довольно нового, Бенджио писал про more biologicaly plausible version of deep learning. Есть еще neuroevolution, где люди обучают сети генетическим алгоритмом — тоже вроде как не совсем то, что происходит в голове, но подход сильно отличаются. Проблема в том, что пока никто из них не просигнализировал, что вот оно, поперло настоящее AI, только успевай в мешки паковать.

Когда я пытал всяких людей, занимающихся машинлернингом более профессионально, чем я, они даже шли на шаг дальше и говорили, что biological plausibility — это вообще не требование. Нас интересует вопрос о том, как работать с информацией, и мы собираемся изучать его языком теории вероятности и Байесовской статистики, а моделировать дендриты нам для этого совершенно не нужно. Это слегка не согласуется с идеями того же самого коннекционизма, но в принципе, мне кажется, мысль как минимум интересная.
Справедливости ради, это очень крутой результат, я не хотел тем постом его сильно преуменьшить) Лет пятьдесят назад, скажем, люди просто понятия не имели, как так сделать. И сам факт, что у нас это получилось, по-моему, сильно о чем-то сигнализирует.

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

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

И в догонку, по-моему, тезис «природа всегда права, нужно делать один-в-один как в биологии» сам по себе небезупречен) Наши биологические нейроны, в конце концов, делались эволюцией, которая далеко не всегда производит идеально подходящий hardware — один возвратный нерв чего стоит. А вдруг половина механизмов в наших нейронах вообще низачем не нужна и просто тут болтается, пока ее естественный отбор не отсеял?)
Аналогия, которая очень мне нравится и используется настолько часто, что всем уже надоела — это самолет) У нас до сих пор, по-моему, затруднения с тем, чтобы воссоздать птичьи крылья, но тем не менее, мы смогли понять принцип полета и с легкостью побить природу на этом поле.
Я немного запоздало, но спасибо, да, здоровский обзор, и вообще да здравствует поднимание интереса к теме.
Мне вообще кажется, что нам предстоит немного переосмыслить происходящее и начать использовать эти аппроксиматоры, нейронные сети в том числе, как простые такие примитивы в задачах распознавания. Нужно построить трехмерную картинку по изображению? Нефиг искать опорные точки и выдумывать геометрический алгоритм — просто натренируйте на это нейронную сеть. Нужно локализовать объект на большой картинке? Лесом отправляются всевозможные гауссовы пирамиды, sliding windows и замороченные R-CNN — просто натренируйте на это нейронную сеть. Нужен плагин для фотошопа, который поправлял бы цвета? Не нужна еще-непонятно-как-сделанная подгонка картинки под цветовой профиль, который психофизиологически благоприятен юзеру — просто… ну, вы поняли.

Кстати, с локализацией объекта я немного игрался на последнем соревновании в Kaggle — любопытная штука. Начинает постепенно доходить, что аппроксиматор можно заставить выдавать буквально все, что тебе нужно в рамках поставленной задачи, необязательно привычное «да/нет».

Всякие вещи вроде autograd и TensorFlow у нас уже есть; шаг вперед по сравнению с ситуацией, когда производные приходилось считать руками. Следующий шаг, кмк, должен принести нам что-то еще более простое и автоматизированное, доступное каждому; что-то, что ограничивалось бы model.approximate(source, target). Не то чтобы это сильно обещает сингулярность, но по-моему, что-то даст.
Не за что) Мощность дискриминатора обсуждают в том же посте, откуда заглавная гифка — насколько я понимаю, верхняя граница должна быть меньше, чем у генератора, а вот нижняя должна плавать и влиять на точность подделок.

О, кстати, спасибо, что напомнили про DRAW — давно ее мельком видел, и каким-то образом забыл) Хочу попробовать дальше разобрать еще немного порождающих моделей (NADE, модные вариационные автоэнкодеры), возьмем и эту тоже)
О, спасибо за ликбез) Быстрый гуглинг выдал вот такую штуку.
Там ниже в комментах привезли еще — вместе получается 1.4 мегабайта примерно.
Я настолько никогда не занимался текстом, что даже не знаю, что это такое) Плохие результаты на текущем этапе, по крайней мере у меня, кажется, объясняются для начала тем, что я скармливаю сети слишком маленький кусок данных для предсказания следующей буквы (нужно по куску из 20 букв предсказать 21-ю). По той же ссылке на Карпатого у него сотня букв — попробую теперь так)

Насколько я понимаю, на пальцах это должно работать примерно так — сеть должна держать в памяти такое число знаков, чтобы в него помещалась структура, которую мы хотим воспроизвести. Если говорить только о рифме, то получается, что нужно помнить последние две строки, скажем. Если о смысле — то четыре, и тут мне уже просто интересно, насколько это вообще реально — воспроизвести осмысленные (согласованные) четыре строки подряд.
Так точно на оба вопроса) Интересная мысль.

Ситуация слегка осложняется тем, что мы до сих пор не знаем, какой кусок рецепта что означает (т.е. мы не знаем, как их сравнивать — может, 90% рецепта контролирует какие-то тонкости типа цвета обоев за спиной, которые к похожести не имеют отношения?), а вот можно ли это как-то выяснить? Скажем, развернуть сеть вашим способом, закидывать туда парочки изображений с контролируемыми различиями и смотреть, что в рецепте поменяется, хм…
Черт, вы меня опередили) Сколько слоев/нейронов? Я пару ночей гонял два по 512, получается примерно такая же фигня:

мы все умер и под другой
тога значит режет стены
в водьше наступили к куру
труда не выновить в культор

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

с Шекспиром у Карпатого как-то лучше получалось, так что я теперь пробую три слоя)
А, ну, с этим сложно спорить. Просто, наверное, люди разные. Мне нравятся лекции, и чем более доходчивые, тем лучше — я иногда даже читаю/слушаю туториалы по уже знакомым темам, просто чтобы понимание в голове устоялось. А уж на незнакомую я тем более с большим интересом послушаю того же Певзнера с его тривиальным поиском подстроки, чем открою учебник, в котором нужно потратить больше времени на въезжание.

Ну и люди далеко не всегда приходят в вуз, четко держа в голове все, чем они хотят дальше заниматься. Попался интересный преподаватель/предмет — и готово ответвление куда-нибудь.
Серьезно, посмотрите какую-нибудь лекцию на Курсере) Я когда прошел пару курсов от Стэндфорда, ощущение было просто неба и земли — и тем более когда впервые попал на летнюю школу с живыми лекциями. Хотя, казалось бы, люди тоже могли надуться, сесть носом в угол и сказать «интересно рассказывать — не мое дело».
Вообще да, реддит-пост — двухлетней давности, так что с BLAS, возможно, все уже не так)
Ну, это же не мой ответ? Это сторонники противоположной точки зрения прямо так и говорят: «мы не учим вас полезным знаниям, это не наша задача, мы просто учим вас учиться». Что в переводе означает, что они учат бесполезным знаниям, и сами это признают.

Но пф, спасибо отечественному образованию, хрени я вам накидаю сколько угодно. Моя специальность была про безопасность информации, и люди на ней:
— не знали, что такое SQL-иньекции
— в принципе не имели никакого курса про базы данных
— не знали, как хранить пароль и не знали, что такое соль
— не знали, зачем нужен https и как работают сертификаты
— ни разу не взламывали ни один шифр
— не знали, как поднять VPN
— был курс «программирования», но не было ничего про алгоритмы и структуры данных — вообще. Программирование было почему-то на C# — факультет решил, что это более модный язык, чем C++, который был раньше. Ничего сложнее базового ООП там не было.

Зато они знали:
— кучу законодательства на тему того, как защищать персональные данные и какие сертификаты на оборудование для этого нужны
— кучу бюрократического формализма на тему того, как сформулировать модель угроз и модель безопасности. Ничего не имею против формализма, но серьезно, может, сначала SQL-инъекции?
— дискретную и вычислительную математику. Я люблю математику и мне было очень на ней интересно, но может, сначала SQL-инъекции?
— как писать документы с грифом секретности. (см. пункт 1)
— как составлять (на бумаге) политики безопасности
— как работают отечественные железные устройства безопасности вроде глушилок и локаторов закладок, которые 99% из студентов никогда в жизни не увидит
— как писать должностные инструкции, чтобы безопасность не нарушалась

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

А теперь серьезно скажите мне, что знание о том, как хранить пароли в базе — это «модные штучки», которые «можно самому погуглить», и преподаватель совершенно не обязан об этом рассказывать)
Все никак не соберусь посмотреть) Стоит того?
Вот я и говорю, что это грустная история. А может быть, если бы кто-нибудь рассказал человек про программирование/физику/рисование, он бы нашел в этом увлечение если не всей жизни, то энной ее части? А вы вместо этого его за деньгами отправляете.

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

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

Information

Rating
Does not participate
Date of birth
Registered
Activity