Кремнев Валерий @LonelyDeveloper97
Математика, Нейробиология, Программирование
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Математика, Нейробиология, Программирование
Вот они, проблемы отсутствия профильного образования! Несколько месяцев строишь велосипед, потому что не смог придумать ключевое слово, чтобы его нагуглить.
О, кстати, а можете рассказать поподробнее? Я в курсе, что есть нейрогенез и образование новых связей, и понимаю, что они так-же могут «умирать». Но подробно этот вопрос не изучал, т.е. я не в курсе когда и как это происходит. Буду благодарен за статьи или какие-то другие источники информации.
Я еще напишу про регуляцию. Это будет отдельная статья. Выброс нейромедиаторов (и не только их) в «свободный доступ» важная штука, без которой не сложить картинку. И про понижение силы связей — тоже.
Суть статьи, а вернее серии — сделать обзор. Есть вот это, вот это, и еще это, если очень грубо приближать — оно работает вот так. Пока работает — будем пользоваться этим приближением. Перестанет работать — детализируем.
Для этой статьи и объяснения концепции «связной подсети» хватило только усиления связей и L-LTP. А вот для объяснения того, почему что-то вообще фиксируется L-LTP — уже не хватит. Или для объяснения того, как мозг «отстраивает» связи сам, решая какую-то задачу. Для этого понадобятся дополнительные сущности, и вот когда они будут нужны — я их и опишу)
Вываливать сразу тонну информации — не стоит. Это стандартная ошибка человека, который более-менее разобрался в вопросе и «уложил его в голове», при объяснении другим людям. Тебе все очевидно. Только ты потратил год, на то, чтобы это стало «очевидно», а теперь пытаешься пересказать все за полчаса)
Короче, первичная зрительная кора — один огромный FrameBuffer. Можно считать 1 объект. Его можно «разложить на примитивы». Сделать что-то вроде преобразования растр->вектор. Как вы понимаете, после этого можно работать с примитивами. Например, представлять линию под углом, простой трансформацией «линии». Тем же методом «наложить текстуру».
Сейчас попробую зайти через программирование. Короче, это как динамически создавать новые объекты из примитивов.
Представьте, хм… Слоно-зебру. Я серьезно, попробуйте.
Если я правильно понимаю процесс, у вас должно было получиться что-то содержащее самые яркие характеристики слона и зебры. Например, большой слон с хоботом, раскрашенный как зебра, или зебра с хоботом/ногами/туловищем слона, ну в общем — комбинация из «примитовов слона» и «примитивов зебры».
И когда вы представляете 4 стула, у вас происходит примерно то-же самое.
Есть 4. А 4 — это абстракция, означающая что у вас есть что-то одного «класса», но разных «инстансов». Представьте «4». Получилось 4 «чего-то». Шариков, коробочек, не важно.
А теперь на место «чего-то» — вы подставляете результат вычисления шаблона «стул». Стул, кстати, не обязан быть одинаковым, у вас есть куча информации о разных стульях.
Или наоборот, можно представить 1 стул, и начать его подгонять под шаблон «4», докидывая новые стулья.
Т.Е. мозг не «хранит 4 стула», пока вы о них не думаете. Но когда вы попробуете их представить, он начнет вычислять результат.
Очень грубая аналогия, но надеюсь, суть передал)
PS
Про внимание из комментария ниже — в первом приближении это просто фильтр, завязанный на текущий контекст (объясню позже, как это выглядит). Т.Е. пока вы «думаете о стульях», вы обрубаете левые сигналы, которые со стульями не связаны и не обрабатываете их.
Отличное замечание.
Дело в том, что зрительная кора разделена на области.
Есть первичная — туда поступают данные с глаз. Это то, что вы видите. Можно сказать, набор пикселей. Они для разных стульев будут разными.
А дальше идёт поступенчатая обработка изображения. Выделение контуров, обработка положения в пространстве, распознавание образов и прочие штуки высокого уровня, которые позволяют вам заметить, что вы видите 4 похожих объекта и отнести их в категорию стульев.
Врятли в первом этапе учавствует долговременная или кратковременная память, учитывая то, сколько информации проходит через первичную зрительную кору. Строй я мозг, я бы так делать не стал)
Насчёт представить — все немного сложнее. Если бы тут было простое "обратное преобразование" — можно было бы "увидеть стулья", как часть изображения с глаз. Этого не происходит, и тут есть два варианта:
Если перед вами пролетит кирпич — у вас по короткой дуге пройдет рефлекторный импульс на моторные реакции, и, как я понимаю, выброс различных вещей вроде адреналина не потребует «осознания» ситуации. Вот потом, когда кирпич уже давно пролетел, включится все остальное)
Но эмоции срабатывают не только в «стрессовых» ситуациях, как выше. Например, вы вполне можете испытать сильную эмоцию от того, что ошиблись. Скажем, купили что-то втридорога и узнали об этом постфактум. Или наоборот, вы долго над чем-то работали и добились результата — здесь идет удовлетворение, и оно тоже требует осознания, т.е. сначала мозг обработает это внутри, а потом врубит механизмы регуляции.
Про штуки второго рода, а так же «мотивацию», и то как все это коррелирует со связями между нейронами — я подготовлю отдельную статью. А еще там будет про зависимости)
Про нейропластичность — поясните пожалуйста. Не понимаю, как возможность выращивать новые связи и нейроны… Эм, летит в мой огород?
В начале статьи — дисклеймер, что это обзорная статья. В конце статьи — уточнение, что все в нее не влезло, потому что иначе она будет на 100к символов. Именно поэтому здесь нет например LTD, утечки заряда с нейронов и т.д.
Объяснение получится большое, пришлось разбить.
Куда завести трактор.
Куда поехать поработать.
Что интересного есть в устройстве города/древних развалин/пирамид/…
Управление компанией, в т.ч. не IT.
Психология и психиатрия.
И огромное количество других «не технических» тем.
Даже хабы специальные есть: Урбанизм, Управление компанией, Мозг и т.д.
Я даже не знаю, как вы это пропустить ухитрились)
Я тут качал нейробиологию, и есть такая забавная штука, что связи в мозге могут ослабевать.
Ну, т.е. помимо того, что между нейронами можно усилить связь, таким образом «записав данные», есть и обратные механизмы ослабления связей. (Вообще все немного сложнее, если кому нибудь интересно послушать объяснение на пальцах — могу написать статью).
И есть наблюдение, что существует корреляция, между хорошим самочувствием, что человек узнал что то новое. Ну, узнал в широком смысле — фильм посмотрел, в отпуск в новый город съездил, книгу прочитал.
И вот мне стало интересно, если запись новой информации ощущается «хорошо», то не может ли «плохо» означать то, что мозг решил почистить неиспользуемое?)
Интересно, кто-нибудь пытался провести тесты, что у выгоревших и людей в депрессии (и после) с долговременной памятью, и не ощущают ли они себя после как «я как новенький и все вокруг такое классное», а то что было до депрессии как «это было очень давно, уже не вспомнить»? И если это внезапно так, то не потому ли от выгорания и депрессии страдают те, кто переваривает огромные потоки информации?
5 — нет замечаний, все ок, и приложение оказалось не закрытым когда я взял телефон в руки. Или водитель помог с сумкой. Или еще что-то такое.
1 — водитель сотворил жесть.
А все остальные варианты — просто никто не ставит. Ну вот кто будет пытаться понять, если водитель слушает музыку слишком громко — три ему ставить или четыре? Довез и довез.
Если нужны релевантные данные — стоит делать бинарные, ну максимум с тремя вариантами ответа вопросы. Но несколько.
Например:
В салоне хорошо пахло?
Водитель был вежлив?
И так далее.
А на шкалах 1-5 или 1-10 или 1-100 люди теряются. И бьют по краям.
Долго убивался почему-же андроид такой. Потом понял, что задача решаемая разработчиками — сохранить приложение в том виде, в каком оно было даже после убиения от нехватки памяти.
И если попробовать написать это самому с нуля, то получатся activity и fragment. И в последних обновлениях с Jetpack их как раз довели до ума.
С последнего апдейта uptime 52 дня. Работает как часы.
Raspberry pi 3b. Raspbian.
Версия hass — 0.103.5.
Я просто не понимаю, почему для идеи, «если что-то нельзя аппроксимировать линейно, давайте посчитаем линейными малые кусочки и получим почти ту кривую что нам нужна», сделали:
1) Манифест.
2) Пропаганду в формате «Это спасение вашего проекта».
3) Специальных тренеров.
И более того, приправили очень спорными, совершенно неоднозначно понимаемыми вещами формата:
«Face-to-face conversation is the best form of communication (co-location)»
— кажется, все те ребята, которые строят замки ПО в своем мозгу уже высказались на тему того, когда их рушат через Face-to-face и митинги.
Требования — меняются. Поэтому нельзя работать так, будто требования не меняются.
Давайте разрабатывать небольшими кусками, и считать, что на этих небольших кусках требования не меняются.
Короче, «продифференцируем» разработку ПО, и найдем минимальную часть требований, которую можно сделать waterfall'ом. Тогда, в случае если путь по которому мы должны идти — поменялся — мы поменяемся вместе с ним, и потеряем максимум этот небольшой кусочек, а не узнаем об этом закончив проект.
Согласен. Привык думать о наследовании, как о направленной иерархии, без возможности «скрещивать» потомков. Если такая есть в конкретной имплементации — окей, не дерево.
Не возникает проблемы, с тем, что не помните где уже были, на больших объемах данных?
Я говорил про ваш конкретный пример, с переходом в базовый класс. В это примере, вроде как, не может быть циклов в иерархии, и поэтому там дерево.
В обобщенном случае поиска по каким-то узлам и связям (например по использованиям) циклы могут быть, и да, тогда это не дерево, а просто граф.
Но я бы не стал пользоваться для поиска графом с циклами. Я слишком глупый для этого. Оперативка слишком маленькая для всяких DFS в циклических структурах. Через 5 минут я уже забуду, что в этом классе я уже был. И если путь меня опять приведет к нему, я зайду туда, пойму что такое уже видел, что ищу не там, и меня это весьма разочарует.
Мы вроде как и начинали с того, что когда у вас есть возможность воспользоваться мапой — это хорошо. Когда нет — это плохо, вот тогда может пригодиться дерево.
На вскидку, пример из жизни — вам приходит новый человек и вам надо познакомить его с проектом:
Вот здесь у нас классы для extension функций и утилит, а вот тут транспорт лежит, а вот здесь — наши экраны приложения, а каждый экран — это…
Мне было бы странно показывать новому коллеге 1000+ файлов с кодом в одном каталоге. Возможно я недостаточно продвинутый, но если бы мне такое показали — я бы прифигел. Даже если бы мне обещали, что угадать, как называется нужный тебе файл, очень легко. Обычно это легко тому, кто этот проект писал, а не мне, который вообще не в курсе что тут происходит)
Так вы же и тут пользуетесь иерархической структурой. Просто другой. Не папочками, наследованием. И да, согласен, если у вас есть элемент в иерархии, в который вы можете перейти за O(1), и который при этом находится близко к искомому — это эффективно. Для того чтобы это описать, можно просто перейти из плоскости в объем, и описывать не только иерархическую структуру папочек, но и наследования. И разумеется есть некоторая вероятность за O(1) попасть в «ближайшего соседа». А потом можно добавить еще одну размерность — это будут использования. Я вот например частенько помню, что «кажется, я использовал нужную мне штуку воот в том классе» и затем ищу ее в нем.
Пытаетесь вспомнить смысл того что было в письме и перебираете «ключи»? Это вы имели ввиду под «возможными ключами»?
Согласен — отличное решение, когда вы примерно можете предположить что ищете. Думал о том, что было бы круто, если в поиске IDE была галочка «синонимы», чтобы самому их в мозгу не перебирать.
Суть, кратко:
Речь шла только о том, что когда попытка использовать мапу через названия провалена (т. е. когда вы не знаете как назвали то, что вы ищете), то бродить по дереву лучше чем по списку.
Я составил модель и математически доказал что любое семантическое дерево будет лучше списка при решении этой задачи, если оно удовлетворяет таким условиям:
У вас дофига файлов.
Вы назвали папки не абы как и человек может выбрать из них нужную.
У вас нет пустых папок или папок с 1 элементом.
lair, как я его понял, утверждает что я слишком упрощаю, и в реальном случае это не работает. При этом сам он тоже поддерживает идею раскладывания по папкам.
Но это моё понимание того, что он говорит, так что я могу ошибаться.
Мы выяснили, что нельзя полагать что люди никогда не ошибаются в выборе, и что открыть папку стоит больше времени, чем прочитать название. Я говорю, что на ассмиптотике это не скажется, но не против того, что на малых величинах это меняет картину.
Я предлагаю просто дополнить формулу этими двумя параметрами и оценить их в эксперименте. У него есть какие-то возражения, из его опыта, но пока я их не понял.
Мне кажется, что одно другому не мешает. Или вы думаете, что я этим так интересуюсь в академических целях, а не потому, что меня чертовски волнует вопрос «когда создавать новый уровень иерархии»? Просто я знаю, что я, со своими наблюдениями — ошибаюсь. А вот за математикой я такого не замечал. Всегда работает. Так что проверить интуитивный вывод математической прикидкой мне кажется очень здравой идеей. Иногда можно получить даже больше чем планировал.
Но если генерализовать подход «переделывать дороже» — вы получите избыточную архитектуру. Согласитесь, такое случается. Вам, например не мозолит глаз MVC-шная иерархия, для задачи формата «посеттить константную строку в текстовое поле»? Когда создается 3 интерфейса и 3 имплементации, просто потому что такой шаблон, и «если нам когда-то потребуется расширить класс».
И знаете что интересно. В половине случаев ничего не расширяется. Но получив задачу «обновить строку», человек продирается сквозь чертову кучу шаблонного и абсолютно ненужного кода, потому что забыл как называлась константа в ресурсах, и теперь хочет узнать название.
Короче, мне кажется, что ленивая инициализация изменений будет выигрывать. Это интуитивное предположение, не претендую на истинность.
Видимо, нет) Поделитесь.
Вы составляете предикаты «принадлежности объекта узлу», и такой предикат должен существовать для каждой пары «лист»-«промежуточный узел»? И, учитывая что это должно работать всегда, и эффективно, то скорее всего, у вас есть сет качественных признаков объекта, а каждый промежуточный узел образуется понятием, которое включает в себя все, что свойственно элементам внутри него. Иными словами — любой промежуточный узел в вашей иерархии это некое обобщенное свойство всех листов ему принадлежащих.
В таком случае, на каждой развилке человек может сделать правильный выбор.
Ну, можно просто провести эксперимент, и понимая общую зависимость подобрать недостающие константы. Ну, знаете, так новые физические законы открывают и все такое.
Но не зная как выглядит зависимость — вообще фиг что подберешь)