Pull to refresh
40
0.1
Юрий Бабуров @buriy

Web, AI, Deep Learning, Python

Send message
>В геометрии у линии нет определения
Тут нужно объяснить, почему мы не считаем возможными текстовые определения через другие более сложные или наоборот более простые сущности (точка, пространство, направление, луч). И почему для определения через объём понятия считаем такое же использование других сущностей возможным.
Логики в этом нет, поэтому так и хочется спросить, нет ли здесь снобизма :)

> Я показываю, что контекст можно использовать не только для распознавания с учетом контекста (важно что увидели), а и для собственно для распознавания (важно откуда увидели).
Да, но я как раз и не понимаю, кому и зачем важно это «откуда увидели». И зачем про это говорить.
А вторая гипотеза, которая ставится под сомнение — широкий перебор *контекстов*. Большой набор фильтров, которые ловят какие-то корреляции между сигналами и контекстами — это нормально. А вот большой набор фильтров, которые изучают один и тот же сигнал в большом числе контекстов — это опять же кому нужно? Вот возьмём словарь биграмм слов с частотностью > 1e-9 (..., «и вот», «зелёный кедр», «он бриллиант», «весёлый клоун», «был клад», ...). Такой словарь запомнить реально, и человек это делает, но вот хранить второе слово в виде перебора из миллиона вариантов… прошлых слов? следующих ожидаемых слов? когда реально эти контексты будут встречаться лишь сотни и тысячи раз за жизнь и контекстов на слово будет всего несколько десятков или сотен штук — очень странная идея.
Зачем нужны миллионы контекстов на каждое слово?

>В нейрофизиологии слово «нейрон бабушки» ругательное. То что по групповой активности можно делать определенные заключения говорит о том, что есть «код бабушки», который возникает на этих нейронах.
Потому что конечно не один нейрон, за исключением момента движения мышц — тогда конкретной мышцей управляет один нервный узел, куда идёт сигнал от конкретных моторных нейронов. А вот когда говорим про ИНС — там понятно это модельные нейроны, которые могут соответствовать десяткам, сотням и тысячам реальных.
Ну и тогда всё же не код бабушки, а некая активность нейронов бабушки — см. видео по ссылке, что я дал выше: neuralink.com/blog
Был бы код, был бы и один нейрон (или последовательность нейронов), что активировалась бы каждый раз. (Кстати, тут возникает вопрос: а сколько нейронов управляет одной мышцей и как именно они друг с другом объединяются для управления?)
1) Есть хороший термин — «объём понятия». Объём понятия — это совокупность всех объектов, которые считаются заданными данным понятием, описываются им. То есть, смысл понятия — это объём понятия, а определение — это попытка этот объём задать через какие-то ограничительные линии и прототипы. При этом есть понятия объективно (однозначно) понимаемые через определения (например, «дифференциируемость» или «линия»), а есть те, где объём понятий и границы настолько зыбки, что их никак не свести к определению (например, «любовь»).
2) контекст, конечно, важен, но в общем виде распознавание с учётом контекста в нейросетях сводится всего лишь к заданию функции от двух аргументов: f(X, context). При этом надо понимать, что человек тоже не работает с произвольными контекстами в произвольный момент времени, грубо говоря, что он не пытается понять, видя кошку, с какой именно стороны она кошка: он её не вращает, не обходит со всех сторой (без явной такой цеели). Или распознавание произошло — и тогда мозг не знает, какой был контекст, или же не произошло — и тогда мозг тоже не знает, какой был контекст. В этом смысле ваша теория не права, и тем более, нельзя её рассказывать в таком общем виде, как это делаете вы.
Вы можете придумать контекст (а можете не придумать) — и это уже отдельная мыслительная задачка для мозга по придумыванию этого контекста.
(По моделированию на нейросетях, опять же, знание контекста не является полезной информацией, если нужно, нейросеть начинает его продуцировать, если не нужен — не начинает)
И уж тем более доказывать пользой энигмы пользу от контекстов — совсем натягивание совы на глобус. Хотелось бы всё же реальной пользы контекстов. И кстати, с вами даже Джефф Хокинс несогласен: в своей последней книге он говорит, что в основном нейроны хранят информацию для обработки других зон коры, а не собственные различные контексты. То есть это намного ближе к иерархии из логистических сумматоров, нежели к энигме.
3) Про признаковое описание и «курс нейронных сетей» — опять же, всё немного не так.
Признаковое описание в описанном виде — это лишь один из способов сделать обработку с помощью нейронных сетей, которое в таком виде показывает лишь ущербность, но не нейросетей, а подобного способа обработки — поэтому им и не пользуются на практике.
4) Несмотря на всё это, «нейроны бабушки», несмотря на всё высмеивание непрофессионаламии, действительно существуют у человека, правда, всё же в виде совокупной активации нескольких нейронов, иначе бы нейралинк не работал на шимпанзе и свинье в ролике: neuralink.com/blog. Отдельные нейроны тоже активируются, но лишь в части случаев (не могут работать долго и срабатывать часто), а вот их сумма уже правильно работают (то есть мы поставили логистический нейрон на выходе, чтобы это надёжно работалоо).
Теперь, когда мы из смысла (3) поняли, что кузнецконтекст нам не нужен, мы можем вернуться к изначальным «объёму понятия» и «определению», и оставить за понятием «смысл» изначальное его значение: смысл — это то, что обусловливает употребление или понимание той или иной фразы, а именно, совокупность семантики (общего значения понятия) и прагматики (контекстуально-зависимого значения понятия). Проще говоря, смысл — это значение слова в контексте. И в таком виде, сети типа BERT именно это и получают в своих эмбеддингах (в своих активациях нейронов внутренних слоёв), а значит, компьютер именно что понимает смысл высказывания.
Особенно ярко это демонстрируют CLIP и DAL*E, демонстрируя не только визуальные нейроны бабушки, но и комбинированые текстово-визуальные.
А почему у вас нет Luigi в ETL? И почему вы смешиваете написание ETL логики (DAG действий) и непосредственную обработку данных?
Нет. С точки зрения здравого смысла, в программе есть не только код, который всегда исполняется один раз, но и код, который исполняется лишь при каких-то условиях (в том числе, ноль или очень много раз).
Трасса программы — это поток исполнения. А вы говорили про количество повторов *в коде* программы.
Вы сами запутались уже в своих половинчатых определениях.
Смотрите тривиальный пример:
1) В программе написано 100 раз «если а<100 то b=1». Это 100 повторов.
2) В программе написана процедура if_a: если а<100 то b=1 и потом она вызывается 100 раз в цикле.
1 повтор и 100 повторов — время выполнения одинаковое.

Если же вы говорили не про повторы *в коде*, а про повторы *в трассе*, то сначала объясните, как вы их измеряете, а во вторых, как это связано с вашим изначальным утверждением «Чем более последовательно исполнение конкретной программы, тем больше не повторяющихся последовательностей команд она содержит, значит труднее ее писать». В нём 3 (!) не связанных друг с другом вещи (причём, не связанных даже корреляцией!). Вот из моего примера программа (1) более последовательна, чем (2), при этом содержит больше повторяющихся команд, а писать (1) и (2) одинаково по сложности…
>Тут я имел ввиду, что саму программу придется написать целиком «руками», она не имеет повторяющихся циклов, которые можно написать методом — «Вот это, повторить много раз». А написать в ручную — ну максимум 10 млн строк, не больше. Или есть другой вариант написать небольшой по размеру код, для исполнения которого потребуются очень много команд команд и при этом не будет повторов?
А как связаны количество повторов в коде и скорость исполнения? Никак.
>По поводу мощности: еще пару порядков относительно GPU надеюсь выиграть
Ещё вам и по числу транзисторов надо оптимизироваться, потому что сейчас 20 млрд транзисторов на чип — это потолок.
Упаковать 10 чипов там, где был 1, и получить в 10 раз большую мощность, которую отвести жидкостью — это можно.
А вот увеличить хотя бы в 10 раз количество вычислений на транзистор по сравнению с GPU — мне кажется, нереально.
>Чем более последовательно исполнение конкретной программы, тем больше не повторяющихся последовательностей команд она содержит, значит труднее ее писать, значит меньше размер этого участка, значит быстрее исполняется.
Нет.
>Иными словами, чем больше объект, там более параллельно его вычисление.
Нет.
>Параллелизм не имеет ограничений, главное не заставлять писать параллельные программы человека — МОЗГ ЧЕЛОВЕКА НЕ ПРЕДНАЗНАЧЕН ДЛЯ НАПИСАНИЯ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ
Ну тогда можно ещё проще поступить: мы создаём ИИ, а ИИ нам пишет программы. И заодно и правильный суперкомпьютер придумает, зачем этим тогда вам заниматься.
Что вы с мощностью делать будете? Сейчас у вас 1 вт на 10е8 вычислений/с, как в обычных системах с CPU? Или 1 вт на 10e9 вычислений/с как в GPU при существенном ограничении на виды инструкций, на скорость последовательного исполнения, и на независимость блоков друг от друга?
Вообще, посчитайте, что за утюг вы хотите сделать с производительностью >10e14 вычислений, и подумайте, как вы сможете плотнее упаковывать чипы чем сейчас в системах типа TPU и в GPU фермах при наличии ограничений на отведение тепла с единицы объёма. (самая большой чип вам в помощь: Cerebras Wafer, почитайте про теплоотведение и про объединение нескольких чипов вместе, всё уже продумано и изготовлено не хуже вашего).
И наконец, ответьте, чем это будет лучше существующих систем по логике работы? И сейчас везде программы как dataflow представляются, и сейчас в железе отдельные команды на отдельные вычислительные узлы идут, вот только закон Амдала это вам не поможет обойти: скорость программы ограничена самым непараллелизуемым местом. И для большинства программ этот лимит параллелизма уже достигнут на 8-ядерных процессорах, для почти всех редких оставшихся программ — на 10к CUDA-ядрах, для оставшейся части оставшейся части программ — на кластере из CUDA-ядер / TPU-ядер.
Нет, онлайновое не проводят из-за требований к скорости, мощности и к наличию разметки — для inference часто нет разметки, на девайсе нужна скорость работы и мало мощности.
А вовсе не из-за забывания.
ну, эффект забывания — есть. но это не то, чтобы проблема, ведь это нормально, когда мы переобучаем всю сеть целиком и сеть при этом забывает старое.
а вот на практике её вообще нет, т.к. онлайновое дообучение обычно не проводят, только оффлайновое.
Понимаете… у человека при дообучении не переобучается весь мозг, здесь намного ближе подход автора статьи с градиентным бустингом на деревьях. Для нейросетей тоже такие работы есть (гуглить что-то типа gradient boosting neural networks). А чтобы не было забывания имеющейся информации — которое у человека кстати тоже есть! — да, можно использовать часть прошлого датасета, хоть рандомную, хоть какую. Есть различные работы по сжатию обучающего множества примеров. Предположительно, у человека гиппокамп как раз это и делает — хранит цельные уникальные воспоминания/понятия/сущности и обновляет их при косвенном упоминании, чтобы избежать затирания при дообучении (при этом кстати может их со временем менять).
Мне лень, поищите сами, пожалуйста.
Вообще, при обучении большой сети с хорошей генерализацией вообще нету проблемы с забыванием, так что, пожалуй, забывание старого — это один из видов переобучения на маленьких/узких сетях. Особенно сильно у меня были ему подвержены RNN, кстати.
Визуальные понятия бывают, а вот оперирования ими у простых животных нет (или же мы про это практически не знаем, мы и про своё-то оперирование мало знаем).
Сходка была вполне открытая, по сути, поделились разными взглядами на одну и ту же проблематику, без каких-то категоричных выводов: www.youtube.com/watch?v=DiYCn0vmvT8
> при которой группы нейронов начинают передавать на вход системы информацию неотличимую от внешней
Воспоминание, может быть?
Хотя, вообще, не происходит такого в человеческом организме (да и у других животных тоже): На глаз никто ничего не передаёт (и на зону V1 коры тоже не передаётся никакого изображения, неотличимого от исходного).
1) Память не даёт вам запоминания, она даёт вам воспоминания. Запоминается же информация в структуре нервных путей. «Информация, неотличимая от внешней» при вспоминании — это воспоминания на верхних уровнях абстракции.
2) Нет, мышление — это про осознаваемые процессы. Просто поделите существ на тех, кто обладает мышлением, и кто не обладает. И попробуйте понять, что у них есть различного, ведь мышление должно быть обусловлено какими-то различиями. У муравьев и пчёл есть какие-то элементы мышления, но называть их мыслящими существами я бы не стал.
Извиняюсь, не тот коммент откомментировал выше.
>описывая процессы лежащие в основе мышления.
Я вот про это. Вы описали процессы, лежащие в основе низкоуровневой деятельности мозга, но не в основе мышления.
Я так и ответил в голосовалке: вы не говорите ничего нового. А модель человеческих процессов у вас ещё плохо уложилась в голове. Да, для пчелы или муравья подходит, правда, у них тоже есть десятки и сотни блоков с фиксированным природой предназначением, у вас же пока лишь достаточно общее описание и выделено лишь два блока: «память» и «блок реагирования».
>Наверняка есть решения способные обучаться на одноплатных компьютерах, не всем же нейронным сетям нужны видеокарты?
Нет, искусственным нейронным сетям вообще не нужна видеокарта. Просто типичный CPU в 10-50 раз медленнее типичной видюшки, вот и всё.
Мой коллега по группе t.me/agirussia Александр Болдачёв ( boldachev ) очень хорошо сформулировал:
Человеческое мышление — это оперирование понятиями. То, что у вас сейчас делается — это искусственная интуиция (бессознательное решение задач, возможно, с формированием примитивных внутренних понятий в этом процессе) и искусственное запоминание (запоминание информации с каким-то минимальным обобщением при этом). Манипулирования понятиями у вас нет, значит, это не мышление. Да и роль обобщения вы не разобрали.
>Ошибка в данной модели необходима, она позволяет ей непрерывно учиться.
Есть более стандартные способы обеспечить ошибку через аугментацию. И более новые через self-supervised learning.
>Например, можно научит обученную нейронную сеть чему-то новому, сохранив старые навыки? Можно конечно :) Разными способами. Можно и вашим способом, просто он не очень эффективен (и по скорости, и по качеству), как вы и сами видите.
> А вот биологические точно можно, хотя точность обучения будет явно ниже 92%.
Серьёзно? Неужели вы не распознаёте написанную цифру в 8% случаев?
>Любая группа масок(группа нейронов), опосредованно передаёт сигнал активности дальше, другим группам. Количество элементов в такой цепочке неограниченно.
А, градиентный бустинг на деревьях. Ну, с удовольствием посмотрим на решение более сложной задачи вашим способом, и убедимся в том, что ваш «BICA»-метод не универсален (как вы явно считаете). Напоминаю классическую картинку:
image
По поводу современных BICA-методов лучше смотреть на Can a Fruit Fly Learn Word Embeddings? и думать о том, зачем вообще сетям нужны эмбеддинги ( если совсем по-простому, то вот зачем )
Ну, вот вы и построили однослойную нейронную сеть, точнее, как бы двухслойную, но с недочётами.
Без нормального второго слоя и алгоритма backpropagation (или его аналога) вам точность выше не поднять.
Справились с MNIST, где однослойная сеть даёт 92%, а двухслойная 97% — идите теперь дальше, к FashionMNIST и SVHN, а потом к CIFAR10. А на MNIST покажите 98% хотя бы.
И ещё, очень интересно, научится ли ваша сеть выделять паттерны при наличии шумов.
А что делать, если реализация достаточно тяжела, и её не запишешь такими правилами преобразования? А правил «валидации» нет или почти нет?
>Оба предложения полностью корректны, но противоположны по смыслу.
Во-первых, они не противоположны по смыслу, а вот «Маша завтра будет красить стену в фиолетовый цвет» — противоположно по смыслу фразе «Вася убил Петю». Тематически оба предложения про убийство очень похожи, а кто такой «Вася» и «Петя» мы не знаем, значит, вполне можем их не различать. Или мы должны запоминать конкретные имена?
Во-вторых, даже если мы будем запоминать имена, информация, сообщаемая обеими формулировками предложений, очень похожа.
Я бы счёл оба предложения весьма похожими, хоть и разными.
Какой был threshold по похожести в данной работе?
В-третьих, если уж быть серьёзным.
Вообще в задаче paraphrase detection насколько я помню SOTA была порядка 0.8-0.85, paperswithcode.com/task/paraphrase-identification, на QQP чуть повыше, 0.89: paperswithcode.com/sota/paraphrase-identification-on-quora-question, у них указано 0.91 для исследованной RoBERTa, ну, ок.
Как исследователи поняли, что в данной фразе модель ошиблась не потому, что иногда ошибается, а именно потому, что не различает такие фразы?

Но вообще, я ставлю на пункт «во-первых»:
Q 1 Does marijuana cause cancer?
Q 2 How can smoking marijuana give you lung cancer?
Prediction: “duplicate” 0.96

Q 1 Does marijuana cause cancer?
Q 1 0 Does cancer cause marijuana?
(d) Prediction: “duplicate” 0.77

Я не считаю, что 0.77 — это «duplicate», это скорее «эти фразы похожи», и я объяснил, почему они действительно похожи.

Ну а про некорректность исследования вероятностей на некорректных фразах в случаях 1b-1c я объяснял в прошлых комментариях. Экстраполяция не обязана хорошо работать. Не работает? Ну ок, это нормально. Попробуйте хотя бы доучить на конкретную задачу.
Как минимум, можно попробовать научиться менять noun chunks местами и помечать такие фразы как «not duplicate», аналогично — случайно менять слова местами и метить их как «not duplicate». Тогда это будет hard negative mining (в данном случае не принципиально — брать только ошибки модели или все такие примеры, т.к. класса всего 2). Потом померить скор на той же QQP. Интересно, получится ли улучшить скор? Или это всё же не влияет на качество модели?

Information

Rating
3,262-nd
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Chief Technology Officer (CTO)
Lead