Обывательская реализация Искусственного Интеллекта

Сразу сделаю отступление: я тот самый обыватель которому интересно и непонятно. Моя профессиональная деятельность связана с конструированием оборудования для нефтегазового комплекса. С нейронными сетями и машинным обучением сталкиваюсь только в научно-популярных статьях и роликах популяризаторов.

Как выглядит для такого обывателя принцип, лежащий в основе Искусственного Интеллекта, я постарался описать в предыдущей статье. И продолжая раскрывать тему, мне бы хотелось поделиться самой моделью на основании которой писалась статья.

Но прежде, необходимо оговорить ряд важных моментов:

Первое с чем требуется определиться - какие данные будут поступать на вход модели. В моём случае, такими данными являются образцы рукописного текста, из наиболее простой базы, которую я смог найти. Базы данных MNIST, предложенной институтом стандартов и технологий США.

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

А у данной реализации, которая будет рассмотрена в качестве примера работы модели - вывода результата нет совсем. Вывод ошибки, это не результат работы программы, это способ объективного контроля работоспособности модели если поступающие данные размечены. При этом очевидно, если существует возможность вывода значения ошибки, то можно настроить вывод и других значений. Но всё это, так или иначе будет внешним показателем работоспособности модели.

Третье замечание заключается в том, что модель не предназначена для работы с изображениями напрямую. Часть данных поступающих на обработку не должна нести информацию, обеспечивая возможность формирования отрицательных связей. А любой пиксель, из которых состоит изображение, содержит информацию даже если его значение равно нулю.

Поэтому, изображение требует подготовки, в ходе которой пиксели разделяются на активные и не содержащие информации. Это также связано с тем, что большой объём поступающей о событии информации, создаёт условие при котором модель находит больше деталей. Как следствие, выявляется большее количество совпадений на основании которых происходит классификация событий. Что приводит к формированию ложных обобщений.

Теперь можно перейти к самой модели. Класс Harmoshka.

Блок схема описывающая модель

В начале, при обращении к памяти с заданной периодичностью происходит удаление из неё мусора. В качестве мусора выступают маски не накопившие опыта с момента своего формирования, о чём говорит изменяемая в процессе обучения переменная Control_value. Токая ситуация возможна если событие, с которым маски ассоциированы, повторяется крайне редко и не похоже на любые другие события.

На следующем этапе, поступившие от сенсорного пространства сведения о изображении дополняются информацией от результирующих масок активных групп. Происходит отражение внутренних процессов памяти на сенсорном уровне, приводящее к снижению ошибки. Для оценки долговременного влияния данного фрагмента кода, его можно исключить из программы не нарушив её работоспособность в целом.

Далее происходит расчёт активности масок и их дообучение. О чём подробно рассказано в предыдущей статье и в ролике, который был размещён в конце статьи. Поэтому обозначу только ряд ключевых моментов.

Новая маска формируется в том случае, если с событием воздействующим на сенсоры, не связано ни одной маски или такая связь есть, но ниже порога заданного переменной satiety.

Такой подход к формированию масок позволяет хранить в маске информацию о целом событии. Например, если сенсоры зафиксировали попугая, в маске сохраняется полученная информация о попугае. И в дальнейшем при поступлении новой информации, она оценивается исходя из того, насколько вновь поступившая информация похожа на попугая. Чем точнее совпадение, тем выше активность маски.

В свою очередь, группы масок могут формировать более сложное представление о событии, опираясь на информацию хранящуюся в масках. Предположим, что удав похож на 1 удава, 0,5 слоника, 0,125 мартышки и 0,0208 попугая. Теперь, если есть группа масок, содержащая маски представляющие удава, слоника, мартышку и попугая, можно с определённой долей уверенности, исходя из активность этих масок, предполагать наличие перед нами удава. Если для такого состояния группы масок, нет результирующей маски, она формируется, фиксируя состояние для группы. Если маска есть, то она дообучается.

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

В качестве заключения можно сказать следующие:

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

P.S. Как позже оказалось, одной важной особенностью рассмотренного решения, является ярко выраженный механизм внимания. На понимание этого, меня натолкнула данная статья: "Внимание и рабочую память объединил общий механизм".

Only registered users can participate in poll. Log in, please.

Моё представление близко к реальности?

  • 18.2%Соответствует действительности2
  • 54.6%Не соответствует действительности6
  • 54.6%Ничего нового не сказано6
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 65

    0
    а причем тут ИИ?
      0
      По итогу прошлой статьи, в которой описан процесс мышления, спрашивали про модель. Решил написать к той статье дополнение и выложить саму модель.
      Соответственно в этой статье, описана программа в которой реализован принцип мышления. Реализация мышления имеет отношение к ИИ?
      0
      Вы хотите, чтобы оценили ваши потуги громогласным «Вау!»? А не взять ли вам и запустить свой алгоритм на MNIST и убедиться, что работает/не работает. А если работает, то статью можно (наверное) запилить.
        0
        А ссылка на githab, где лежит исходник рабочей программы, вас чем не устроила?
          0
          Я вам доверяю. Опишите, что у вас вышло. А захочу — проверю.
            0
            Это будут графики. Которые можно интерпретировать как угодно.
        0
        Предположим, что удав похож на 1 удава, 0,5 слоника, 0,125 мартышки и 0,0208 попугая. Теперь, если есть группа масок, содержащая маски представляющие удава, слоника, мартышку и попугая, можно с определённой долей уверенности, исходя из активность этих масок, предполагать наличие перед нами удава.

        На реальных данных удав будет похож на удава — 0.6783, на крокодила — 0.6784, на трактор — 0.6762 и т.д. Важно выявить кластер (маска по вашему) победитель. На MNISTе насколько реально оказывается активность маски-победителя выше её ближайших соседей?

        Какой получен уровень ошибок (ложно-положительных и ложно-отрицательных) на том же MNIST?

        Какой размер масок?

        Сколько получается масок на класс (цифру)?

        Откуда у масок берётся обобщающая способность? Ведь, насколько я понял, вы просто без предобработки строите маски из сырых данных из MNIST.
          0
          Будет сумбур, вы задали вопросов на целую статью.
          — Маска – это одиночный нейрон, который хранить только фрагмент информации о событии (и может относиться к нескольким событиям сразу). Кластер победитель — это группа масок. Соответственно одно и тоже: группа масок – результирующая маска – кластер – группа нейронов – КОГ (по Анохину). А какая разница насколько реально оказывается активность группы-победителя выше её ближайших соседей? Выбирается самая активная. А все остальные подтягиваются, что позволяет со временем выбрать группу наиболее соответствующую событию. И не важно, что конкретно хранится в масках если с их помощью можно выразить событие (сделать обобщение).
          — Ошибки на ложноположительные и ложноотрицательные, разделить не получится. Тут это не применимо. Есть предположение программы, есть фактический индекс изображения. Они либо совпадают, и тогда программа распознала правильно, либо нет.
          — А в какой момент вас интересует уровень ошибки. В этом плане, модель ведёт себя как биологический интеллект (как бы в этом цель). Пока идёт обучение, ошибка падает. В данном случае, есть два режима обучения: с использованием индексации данных для классификации (быстрое формирование первичных навыков), или постоянный режим, при котором модель сама классифицирует данные опираясь на накопленный опыт.
          Эффективное обучение с индексами идёт до возникновения полки. После чего можно закрепить материал, продолжив обучение с индексами, а можно перейти в постоянный режим и тогда начнётся процесс искажения. Соответственно, чем дольше закреплялся материал, тем медленнее происходит его искажение. В любой момент можно возобновить обучении с индексами, и тогда ошибка начнёт опять снижаться.
          Отдельно отмечу, что модель всегда обучается, используя для этого любые поступающие данные.
          Единственное что можно точно сказать про уровень ошибки, его минимальное значение которое мне удалось получить в районе 9%. Можно добиться её снижения, но тогда информация в памяти не закрепляется. А цель именно в том, чтобы память вела себя как биологическая.
          — И простые маски (которые нейроны) и результирующие маски (которые группы нейронов), формируются в самой программе, исходя из поступающей информации. Есть алгоритм, удаляющий всё лишнее, но полностью от мусора избавится сложно.
          Маски соответствуют сенсорному пространству, то есть в данном случае изображению 28х28 или 784 символа, по две переменные float на каждый. Результирующие маски содержат информацию о всех маска (нейронах) нижнего уровня, количество которых достигает 8000 по две переменные float на каждый, а также информацию о сенсорном пространстве 784 символа по три переменные Single на каждый.
          — Количество групп масок (групп нейронов) в районе 400.
            0
            Под маской обычно принято понимать бинарный вектор или массив, но никак не одиночный элемент. Здесь путаница с терминами. Даже, если оперировать одиночным нейроном, то он всё равно обратно отображается на некое рецептивное поле, а в данном случае на какую-то группу пикселей.

            Термин «событие» тоже не к месту. Вы обрабатываете статику, отдельные образы.

            А какая разница насколько реально оказывается активность группы-победителя выше её ближайших соседей?
            А как понять что сеть видит? По самому активному её выходному нейрону. А если там разница на уровне двух знаков после запятой, то сеть не выполняет своего предназначения — ничего не распознаёт.

            Ошибки на ложноположительные и ложноотрицательные, разделить не получится. Тут это не применимо.
            Применимо, просто бинаризуйте выход.

            Эффективное обучение с индексами идёт до возникновения полки. После чего можно закрепить материал, продолжив обучение с индексами, а можно перейти в постоянный режим и тогда начнётся процесс искажения.
            Возникает ощущение, что где-то пропущено две-три статьи. Если есть желание рассказать об алгоритме, то писать требуется как туториал.

            Результирующие маски содержат информацию о всех маска (нейронах) нижнего уровня, количество которых достигает 8000
            Скорее всего ваш алгоритм просто выучивает обучающие образы и всё. В таком случае вы могли бы под каждый образ просто выделить по отдельной маске.

            Я вас так «допрашиваю», потому что вижу сходные черты со своей работой. Но у меня нет такого дикого количества «масок» (кластеров, если говорить в терминологии Анохина) как у вас. Один кластер (ака нейрон у вас) сжимает в 5-15 раз. Оказывается достаточно одной маски на класс. И я бы почитал про иерархию, которую вы строите из масок.
            0
            В дополнение. Уточнил цифры.
            Повторений 1100%. Ошибка 08,53%. Количество масок 8220. Количество групп 445. Частота 45 кадров в секунду, среднее значение за 4 часа.
              0
              Ну, вот вы и построили однослойную нейронную сеть, точнее, как бы двухслойную, но с недочётами.
              Без нормального второго слоя и алгоритма backpropagation (или его аналога) вам точность выше не поднять.
              Справились с MNIST, где однослойная сеть даёт 92%, а двухслойная 97% — идите теперь дальше, к FashionMNIST и SVHN, а потом к CIFAR10. А на MNIST покажите 98% хотя бы.
              И ещё, очень интересно, научится ли ваша сеть выделять паттерны при наличии шумов.
                0
                Немного не так. Это не однослойная сеть, здесь множество слоёв. Скорее в данном случае говорить о слоях вообще не уместно. Любая группа масок(группа нейронов), опосредованно передаёт сигнал активности дальше, другим группам. Количество элементов в такой цепочке неограниченно.
                Если бы стаяла задача добиться минимальной ошибки, я бы воспользовался готовыми инструментами, а не городил для этого велосипед. Ошибка в данной модели необходима, она позволяет ей непрерывно учиться. Что, как я понял, для нейронных сетей ещё та задача. Например, можно научит обученную нейронную сеть чему-то новому, сохранив старые навыки? Насколько я знаю нет. А вот биологические точно можно, хотя точность обучения будет явно ниже 92%.
                На этой модели решалась другая задача, о чём написано в обоих статьях.
                  0
                  >Ошибка в данной модели необходима, она позволяет ей непрерывно учиться.
                  Есть более стандартные способы обеспечить ошибку через аугментацию. И более новые через self-supervised learning.
                  >Например, можно научит обученную нейронную сеть чему-то новому, сохранив старые навыки? Можно конечно :) Разными способами. Можно и вашим способом, просто он не очень эффективен (и по скорости, и по качеству), как вы и сами видите.
                  > А вот биологические точно можно, хотя точность обучения будет явно ниже 92%.
                  Серьёзно? Неужели вы не распознаёте написанную цифру в 8% случаев?
                  >Любая группа масок(группа нейронов), опосредованно передаёт сигнал активности дальше, другим группам. Количество элементов в такой цепочке неограниченно.
                  А, градиентный бустинг на деревьях. Ну, с удовольствием посмотрим на решение более сложной задачи вашим способом, и убедимся в том, что ваш «BICA»-метод не универсален (как вы явно считаете). Напоминаю классическую картинку:
                  image
                  По поводу современных BICA-методов лучше смотреть на Can a Fruit Fly Learn Word Embeddings? и думать о том, зачем вообще сетям нужны эмбеддинги ( если совсем по-простому, то вот зачем )
                    0
                    Я не ставил перед собой задачи придумать новый инструмент для решения проблем человечества. Мне даже, уже неловко. Я спрашивал, насколько моё представление правильно. Опрос как-бы намекает на это.
                    Проблема в том, что свою модель я строил, описывая процессы лежащие в основе мышления. И исходя из ваших утверждений, а так же результатов опроса, которые говорят что ничего нового я не предложил, я делаю предполагаю, что мои выводы верны. То есть, что такое мышление мышления, я описал правильно.
                      0
                      По поводу современных BICA-методов лучше смотреть на Can a Fruit Fly Learn Word Embeddings?
                      Я так понял из AGI канала в телеге, что недавно была закрытая «сходка» на тему хеш-сетей той самой мухи. Что-нибудь интересное там было?
                        0
                        Сходка была вполне открытая, по сути, поделились разными взглядами на одну и ту же проблематику, без каких-то категоричных выводов: www.youtube.com/watch?v=DiYCn0vmvT8
                        0
                        >>>>Например, можно научит обученную нейронную сеть чему-то новому, сохранив старые навыки? Можно конечно :) Разными способами.

                        А можно пример способов? Я вот что-то с ходу вариантов не вижу, кроме формирования полного датасета из старого и нового. Я пока не встречал концепции дообучения сетей на новых данных без значительной потери ранее усвоенного. Можно фризить веса, но все равно: в том объеме, в котором сеть сможет дообучится — в этом объеме она и потеряет прошлые навыки.

                        Всевозможный бустинг и ансамбли сетей вроде круто, но проблема та же: как заставить сеть постигать новое, не забывая старое, используя для дообучения не полный датасет, а только новое. Просто если бы было какое-то концептуальное решение этого вопроса, можно было бы дообучать сеть только на примерах, где процент ошибки больше…
                          0
                          Мне лень, поищите сами, пожалуйста.
                          Вообще, при обучении большой сети с хорошей генерализацией вообще нету проблемы с забыванием, так что, пожалуй, забывание старого — это один из видов переобучения на маленьких/узких сетях. Особенно сильно у меня были ему подвержены RNN, кстати.
                            0
                            В том-то и дело, что искал и примеров не нашел. Возможно мы друг друга не понимаем просто? Я имею ввиду примерно следующее: вот есть обученная сеть. Она получает новые данные и выдает результат. Допустим у нас есть способ валидации в автоматическом режиме (предсказание следующего кадра/слова/состояния, автоэнкодер, GPT, etc.) т.е. можно ввести какие-то метрики, насколько сеть «не попала». Мы можем задать некий порог, по которому отбирать некий новый корректировочный датасет относительно которых прогноз был несостоятельным. Я имею ввиду дообучение на этих данных. Т.е. не объединение исходного и нового датасета, а именно обучение на ограниченном новом датасете, на котором сеть демонстрирует плохие результаты?

                            Возможно я отстал, но, некоторое время назад я не только искал сам, но и спрашивал у более продвинутых товарищей на этот счет… Если вы знаете нечто похожее — направьте меня хотя бы по ключевым словам.
                              0
                              Хотя вру… «Старшие товарищи» таки подсказали пару интересных ссылок: arxiv.org/abs/1910.07104,
                              deepmind.com/blog/article/enabling-continual-learning-in-neural-networks и arxiv.org/abs/1910.01526, например, но… Даже в этих исследованиях проблема дообучения заявлена как фундаментальная. И не так что бы закрытая, мягко говоря…

                              Ортогональное обучение — интересно конечно, но это такое себе решение: чисто за счет тотального наращивания размерности сети… Да и оно как-то не идеально работает.

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

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

                                  Впрочем, я понимаю, что это скорее действительно не проблема, а некий аспект текущего похода в обучении ИНС.
                                    0
                                    Нет, онлайновое не проводят из-за требований к скорости, мощности и к наличию разметки — для inference часто нет разметки, на девайсе нужна скорость работы и мало мощности.
                                    А вовсе не из-за забывания.
                            0
                            Просто напросто надуманная проблема
                              0
                              Вам виднее, но не я ее «надумал». ) Catastrophic interference в моем понимании является одной из фундаментальных проблем классических ИНС, и до ее решение там вроде бы далеко.
                                +1

                                Дорогой собеседник, я не хочу больше писать на хабре, потому что там сейчас сидит некомпетентный обыватель и минусует меня каждый раз.
                                Короче, поясняю. Никакой проблемы забывчивости нет, она надумана некомпетентными философами. А то, что она "не решена" на уровне нейросетей — это вообще трэшак. Просто эту проблему никто не решал. )))) Это проблема неуловимого Джо, которого никто не ловит.
                                Обычная нейросеть работает со статическими объектами. Популярный способ оптимизации — спуск по стохастическому градиенту (SGD) предполагает случайную выборку из совокупности, это значит, что во времени объекты изучения перемешаны.
                                Идем дальше: динамические нейросети RNN, LSTM, GRU ищут закономерности в последовательных рядах. Ну, конечно, как правило, там довольно короткие временные промежутки, просто задачи такие.
                                А вообще, решается проблема забывчивости следующим образом — нужно найти некоторую закономерность на большом промежутке времени (скрытые закономерности нейросети ищут на раз-два). Если эта закономерность неуловимого Джо не повторяется, а происходит один раз, то придется применять методы из серии дообучения и one-shot learning. Если закономерность единична, то это и не закономерность вовсе, строго говоря.

                                  0
                                  Этот некомпетентный обыватель — я. И я даже не буду спорить с вашим определением — вы правы, в данном случае, моя компетентность пока еще так себе.

                                  Но минусую я не за позицию, а за безапелляционные высказывания, что называется «в зал», при полном отсутствии аргументации! Вот сейчас — другое дело. Сейчас комментарий развернутый и позиция в целом понятна. С ней можно спорить! )

                                  >>> Никакой проблемы забывчивости нет, она надумана некомпетентными философами.

                                  Это не правда. Выше я кидал ссылки на статью в википедии, а еще выше — на статьи в блоге deepmind и arxiv.org, где вопросу уделено значительное внимание. Так же я процитирую уважаемого мною члена сообщества: "В общем, дообучение нейросетей на новом датасете без потери памяти о предыдущем имеет долгую историю с десятками методов как с этим бороться. Хотя результат так себе… Еще далеко до способностей биологического мозга. Гуглить можно по deep learning catastrophic forgetting, lifelong learning, continual learning и тому подобное.".

                                  Собственно заявленная проблема (еще раз повторю, для исключения неправильного прочтения: проблема дообучения нейросетей на новом датасете!) напрямую вытекает, я бы даже сказал является следствием градиентного спуска: в режиме обучения каждый новый прогон смещает градиент тем сильнее, чем больше была ошибка на выходном значении. И только постоянное усреднение этих коррекций НА ВСЕМ ДАТАСЕТЕ позволяет избежать перекосов в сторону тех или иных данных. Причем не просто постоянное усреднение (ибо реальное усреднение на самом деле имеет место только в пределе мини-батча), а обучение с постоянным снижение learning rate! Ибо чем ближе аппроксимирует сеть входящие данные тем больше отклонение каждого конкретного паттерна от этой аппроксимации (ну при условии конечно, что выразительная способность сети не превышает размерность входа).

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

                                  У меня была идея (уверен не только у меня! :) ) построить такую систему: обучаем сеть на начальном датасете большого объема. Далее переводим в режим эксплуатации, но при этом контролируем процесс: собираем все случаи, где результат сети неудовлетворителен. Таким образом у нас формируется новый корректировочный датасет. Безусловно — при сопоставимом размере исходного и корректировочного датасетов можно их просто замешать. Тогда мы получим вполне годную процедуру, где дополним недостающими данными обучающую выборку…

                                  Но что если у нас начальный датасет был… Хорош! ) Если его объем исчислялся сотнями тысяч (порядок дорисуйте, что б получилось МНОГО) паттернов и обучение заняло не одну тысячу часов на 16 топовых GPU? А корректировочная выборка на 5 порядков скромнее. Каким образом дообучить сеть, если мы понимаем, что есть все-таки недостатки в исходных данных?

                                  >>>придется применять методы из серии дообучения и one-shot learning

                                  one-shot learning — это не метод. Это то, что видимо имел ввиду Юрий, когда говорил про хорошую генерализацию: когда мы имеем сеть, обученную на столь большой, разнообразной и равномерной выборке, что ЛЮБОЙ паттерн из предметной области достаточно верно размещается в «пространстве эмбендинга» (современные большие ResNet подходят для ЛЮБЫХ картинок, с минимальным дообучением последнего слоя классификатора, а системы распознавания лиц умеют сравнить две фотографии человека, которого они видят впервые и сказать — один и тот же это человек или нет, просто по расстоянию между эмбендингами). Необходимым условием для работы этого подхода является УЖЕ сформированная глубокая архитектура, не изменяемая в дальнейшем. Это прекрасный подход, но вопрос заключается в том, как именно таковую сформировать? ;) Если бы можно было дообучать сеть на новых данных — все бы заметно оживилось.

                                  Я понимаю, вы считаете, что все решается хорошим датасетом. И в принципе на это нечего возразить: «Лучше быть богатым и здоровым, чем бедным и больным(с)». На это у меня лишь два замечания: во-первых, многие архитектурные прорывы на всей истории развития ИНС случились на попытках избежать вручную сформированного датасета, например тренировать «сети внутри сетей» (даже свертка — ни что иное, как маленькая сеточка, в составе большей сети вход и выход которой не заданы явно). Нельзя недооценивать роль ImageNet, и языковых корпусов, на которых тренировались GPT, но… Мне кажется жизнь — лучший учитель, а сформированный человеком датасет всегда будет несовершенен. Ну а во-вторых, что называется «рад бы в рай, да грехи не пускают» — большие, качественные датасеты — вотчина корпораций, которые могут себе позволить бюджет, распределенные задачи и прочая. Это не для одиночек-энтузиастов.
                                    0
                                    Понимаете… у человека при дообучении не переобучается весь мозг, здесь намного ближе подход автора статьи с градиентным бустингом на деревьях. Для нейросетей тоже такие работы есть (гуглить что-то типа gradient boosting neural networks). А чтобы не было забывания имеющейся информации — которое у человека кстати тоже есть! — да, можно использовать часть прошлого датасета, хоть рандомную, хоть какую. Есть различные работы по сжатию обучающего множества примеров. Предположительно, у человека гиппокамп как раз это и делает — хранит цельные уникальные воспоминания/понятия/сущности и обновляет их при косвенном упоминании, чтобы избежать затирания при дообучении (при этом кстати может их со временем менять).
                                      0
                                      >>> здесь намного ближе подход автора статьи с градиентным бустингом на деревьях.

                                      Ну я, собственно, за это и зацепился, что у автора подход не то что бы совсем бессмысленный и беспощадный… Он экспериментирует в направлении постоянного дообучения, возможно делает это в некоторой степени наивно (я, если честно, к своему стыду пока не разобрался, что именно он делает), но… Вообще — это интересная тема, на мой взгляд. Как минимум заслуживает внимания.

                                      >>> гуглить что-то типа gradient boosting neural networks

                                      Ага, спасибо, посмотрю… Бустинг в первом приближении, как концепция, мне понравился, может действительно, я что-то интересное проглядел!
                                      0

                                      Будьте осторожны, в этой области тоже есть философы, а не инженеры. Первые ловят неуловимого Джо, а вторым он не нужен. Короче, не стоит развешивать уши, когда звучат безапелляционные заявления в зале…

                                        0
                                        >>>Будьте осторожны, в этой области тоже есть философы, а не инженеры.

                                        Я заметил.

                                        >>> не стоит развешивать уши, когда звучат безапелляционные заявления в зале…

                                        Да я бы и не обращал внимание, но… Просто иногда интересно — а вдруг человеку реально есть что сказать! Но видимо нет.
                    0
                      0
                      Мой коллега по группе t.me/agirussia Александр Болдачёв ( boldachev ) очень хорошо сформулировал:
                      Человеческое мышление — это оперирование понятиями. То, что у вас сейчас делается — это искусственная интуиция (бессознательное решение задач, возможно, с формированием примитивных внутренних понятий в этом процессе) и искусственное запоминание (запоминание информации с каким-то минимальным обобщением при этом). Манипулирования понятиями у вас нет, значит, это не мышление. Да и роль обобщения вы не разобрали.
                        0
                        Человеческое мышление возможно, но я о человеческом мышлении не говорил. То что я описал, подходит больше для ганглиальной нервной системы. Допустим, пчела или муравей.
                        И программа рассчитана для обучения на одноплатных компьютерах, каждый из которых должен выполнять роль отдельного нервного узла.
                        Наверняка есть решения способные обучаться на одноплатных компьютерах, не всем же нейронным сетям нужны видеокарты?
                          0
                          Извиняюсь, не тот коммент откомментировал выше.
                          >описывая процессы лежащие в основе мышления.
                          Я вот про это. Вы описали процессы, лежащие в основе низкоуровневой деятельности мозга, но не в основе мышления.
                          Я так и ответил в голосовалке: вы не говорите ничего нового. А модель человеческих процессов у вас ещё плохо уложилась в голове. Да, для пчелы или муравья подходит, правда, у них тоже есть десятки и сотни блоков с фиксированным природой предназначением, у вас же пока лишь достаточно общее описание и выделено лишь два блока: «память» и «блок реагирования».
                          >Наверняка есть решения способные обучаться на одноплатных компьютерах, не всем же нейронным сетям нужны видеокарты?
                          Нет, искусственным нейронным сетям вообще не нужна видеокарта. Просто типичный CPU в 10-50 раз медленнее типичной видюшки, вот и всё.
                            0
                            Вы всё правильно писали — это у меня руки золотые и верный глаз!
                            Я так и ответил в голосовалке: вы не говорите ничего нового. А модель человеческих процессов у вас ещё плохо уложилась в голове. Да, для пчелы или муравья подходит, правда, у них тоже есть десятки и сотни блоков с фиксированным природой предназначением, у вас же пока лишь достаточно общее описание и выделено лишь два блока: «память» и «блок реагирования».

                            Это и есть та проблема на которой я встал. Ради такого вопроса, я на самом деле всё это затеял. Нужно было понять куда двигаться дальше. Ради исторической справедливости стоит отметить, что похожий вопрос задали и под прошлой статьёй.
                            На самом деле, вопрос мышления, вопрос определения — что такое мысль. Я так назвал ситуацию, при которой группы нейронов начинают передавать на вход системы информацию неотличимую от внешней. Чем это может быть ещё, для меня загадка.
                            Очевидно, что у понятия «мышление» может быть много выражений. Но должен быть и примитивный пример.
                              0
                              > при которой группы нейронов начинают передавать на вход системы информацию неотличимую от внешней
                              Воспоминание, может быть?
                              Хотя, вообще, не происходит такого в человеческом организме (да и у других животных тоже): На глаз никто ничего не передаёт (и на зону V1 коры тоже не передаётся никакого изображения, неотличимого от исходного).
                              1) Память не даёт вам запоминания, она даёт вам воспоминания. Запоминается же информация в структуре нервных путей. «Информация, неотличимая от внешней» при вспоминании — это воспоминания на верхних уровнях абстракции.
                              2) Нет, мышление — это про осознаваемые процессы. Просто поделите существ на тех, кто обладает мышлением, и кто не обладает. И попробуйте понять, что у них есть различного, ведь мышление должно быть обусловлено какими-то различиями. У муравьев и пчёл есть какие-то элементы мышления, но называть их мыслящими существами я бы не стал.
                                0
                                Воспоминание, может быть?
                                А воспоминания форму мыслей не обретают?
                                Со зрительной корой всё вроде ясно, она распознаёт изображения (как минимум у кошки). Для модели которую я описал, выход зрительной коры и будет одним из участков сенсорного пространства. Модель не предназначена для работы с изображениями на прямую.
                                Нет, мышление — это про осознаваемые процессы.
                                Тогда может вы и говорите о сознании. Мышление не обязано иметь внешних проявлений, людям обычно не свойственно обдумывать мелкую моторику при движении.
                                  0
                                  Визуальные понятия бывают, а вот оперирования ими у простых животных нет (или же мы про это практически не знаем, мы и про своё-то оперирование мало знаем).
                                –1
                                > На самом деле, вопрос мышления, вопрос определения — что такое мысль.

                                Иногда кажется, что это важные понятия, но на практике оказывается, что более важными понятиями являются учитель, классификация, признак, объект, обучающий пример, функция потерь… Короче, одним словом, пустословие это — мысль, мышление… Когда говоришь обывателям, мышление — это по сути аппроксимация, у них глаза на лоб лезут.)))
                                  0
                                  Еще можно сказать, что мышление это по сути голографическая рентгенография — вообще круто звучит. ;)

                                  Я к тому, что все, что вы перечислили, как «важные понятия» — они безусловно важны, но довольно-таки неплохо определены. В отличие от мысль/мышление о которых у каждого свое представление…
                                    –1

                                    Вы просто не понимаете, где лежит верхняя граница сложности аппроксимационной задачи… Вы сейчас подумали об аппроксимации графика на плоскости 0xy?
                                    И поэтому оскорбились от мысли, что предел деятельности вашего мозга — всего лишь аппроксимация? А что? Вы думаете там "более сложные процессы, которые пока еще не открыты человечеством"? Чтобы открыть банку пива, нужно что-то более сложное нежели оптимизация?


                                    Я вам скажу: у обывателя когнитивные искажения очень сильные…

                                      +1
                                      Вас чего-то на «обывателя» заклинило. Ещё раз повторю, на всякий случай. Выводы к которым я пришёл, строились через память — восприятие — мышление (было интересно именно это). Получилось то, что получилось. Получилось похоже на правду, что радует.
                                      Если бы стояла задача, начать с нейронов, матриц и аппроксимации, получилось бы тоже самое, но описанное тем языком который вам ближе. А если быть точнее, то получился бы велосипед, в то время когда остальные строят гоночные болиды.
                                      Вас смущает, что мне не интересно строить велосипеды? Так я вас наверное огорчу, но обывателю проще взять готовый инструмент.
                                        +1
                                        >>>И поэтому оскорбились от мысли

                                        Мысль не может оскорблять. ;) Но, к сожалению, довольно часто за словоблудием мысль в лучшем случае теряется. В худшем — ее там и не было.

                                        Я же вам уже объяснял: вбросы без аргументации — банально и не интересно. Разверните посыл, и тогда он, возможно, превратится в мысль.

                                        Меня вполне устраивает концепция мышления, как аппроксимации. К сожалению мало дает в практическом плане: ряд вопросов остается не решенным. Т.е. сама по себе идея — норм. Но без раскрытия и детальной проработки ничем не отличается от голографической рентгенографии — такой же «лозунг».
                                          –1
                                          Вы умеете отличать правду от лозунгов? 2+2 = 4 из уст учителя не звучит как лозунг))) Переломите свой мозг в плане лозунгов и лжи. Вы сами себе лжете, так как некомпетентны.
                                          Всякие там «сильные интеллекты» — это и есть ложь самому себе.
                                            0
                                            Значит все-таки сказать нечего…

                                            А жаль!
                          +1
                          Проверил то, что как я считаю понял из статьи, а именно — использовать не один, а множество кластеров/масок на класс.

                          Тестировал на MNIST на ограниченном обучающем наборе в 30-50 образов на класс/цифру.

                          Разницы между 10 кластерами на класс и 100 практически нет. FRR лежит в диапазоне 0-3%. FPR же зависит от количества нейронов во входном хеш-слое. При 300 хеш-нейронах FPR < 20%, при 500 < 10%. Так как кластеры правильного класса часто срабатывают кучно, то FPR легко понижается ещё вдвое.

                          Заметил, что спотыкается на одних и тех же образах — единичные «каракули», у которых трудно найти сходство с остальными образцами.
                            0
                            Если речь идёт о диагнозе пациенту, ложноположительное срабатывание понятно. Как в данном случае вычислить ложноположительное или ложноотрицательное срабатывание мне всё равно не ясно.
                              +1
                              Нет разницы с анализами пациента или картинками цифр работать.

                              У вас есть минимум по одной маске, соответствующей каждому классу цифр. У каждой маски есть числовое значение её «активности» от 0 до 1. В итоге получаем десять чисел.

                              Пусть на демонстрацию нуля будет, например, так:
                              0: 0.69; 1: 0.23; 2: 0.61; 3: 0.45; 4: 0.57; 5: 0.33; 6: 0.66; 7: 0.54; 8: 0.73, 9: 071

                              Находим, допустим, два максимальных значения — они у 8 и 9.

                              Итого, ноль не распознан — одна ложноотрицательная ошибка. Распознаны 8 и 9 вместо нуля — две ложноположительные ошибки.

                              Прогоняете такой тест по датасету и считаете суммарное количество ошибок.

                              Если вы не посчитали ошибки, то не можете утверждать, что алгоритм вообще что-то распознает, а не просто греет процессор.
                                0
                                Красиво, запомню. Только, один вопрос: а почему так? Вместо фактической ошибки вы предлагаете искать вероятность этой ошибки.
                                Предполагая при этом, что булева операция имеет какой-то порог.
                                В результате, фактическая ошибка в 8,53% случаях, которую можно посчитать напрямую, превратилась в какой-то кошмар. Математика ради математики.
                                  +1
                                  Здесь нет вероятности, эта фактическая ошибка. Прогоняя тест снова и снова, вы просто усредняете ошибку, так как на каждом прогоне она будет разная.

                                  Предполагая при этом, что булева операция имеет какой-то порог.
                                  Да, порог есть. Поэтому я выше и спрашивал, — насколько разнится максимальное значение от остальных.

                                  Это не математика ради математики. Как только вы захотите узнать видит сеть яблоко или велосипед, вам придётся задать порог и найти единственное решение. Потому что ответ сети — «я вижу в этой картинке тысячу предметов» не имеет практического смысла. Чем лучше сеть отличает яблоко от велосипеда, тем она качественнее.
                                    0
                                    Как только вы захотите узнать видит сеть яблоко или велосипед, вам придётся задать порог и найти единственное решение. Потому что ответ сети — «я вижу в этой картинке тысячу предметов» не имеет практического смысла. Чем лучше сеть отличает яблоко от велосипеда, тем она качественнее.

                                    Не тот случай. В данном случае нейронная сеть ничего не ищет. Ошибка — косвенный показатель способности нейронной сети запоминать информацию. Та модель которую я выложил, не предусматривает вывода результатов. И вывести эти результаты исходя из активности нейронов, не получится.
                                      +1
                                      Не тот случай. В данном случае нейронная сеть ничего не ищет.
                                      Всмысле? Ваши слова «можно с определённой долей уверенности, исходя из активность этих масок, предполагать наличие перед нами удава». Эту самую «определённую долю уверенности» вы и должны продемонстрировать, чтобы заявлять, что алгоритм имеет хоть какое-то отношение к ИИ.
                                        0
                                        Именно, предполагать, наличие удава интерпретируя текущую активность нейронов. Ошибка о наличии удава не говорит, так как мы не знаем, как текущее воздействие на сенсоры представлено внутри нейронной сети. Возможно, что текущее представление нейронной сети, будет больше похоже на шланг, но поскольку шланг не предъявлялся, мы делаем вывод, что нейронная сеть среагировала на удава именно как на удава.
                                          0
                                          А вы можете продемонстрировать какие-то реальные результаты на MNIST, хотя бы два десятка прогонов, что бы было понятно о чем речь? А то вы постоянно срываетесь на аллегории, вроде удавов со шлангами…

                                          Лучше не реальных примерах!
                                            0
                                            Как изменяется ошибка на MNIST.
                                            Активность групп сделаю чуть позже.
                                              0
                                              Понимаете, я… Я рассчитывал на несколько более сырые данные. Я просто не понимаю, как вы считаете ошибку. VDG правильно написал: нужно не только ошибку на целевом значении, но и ложноположительное детектирование на других.

                                              Или это и имелось ввиду под активностью групп?
                                                0
                                                Более сырые данные будут. Но не совсем сырые, описание состояния каждой из 400 групп, я думаю вам не нужно.

                                                if (если ошибка)
                                                {
                                                all.Add(1);
                                                allEror++;
                                                }
                                                else
                                                {
                                                all.Add(0);
                                                }
                                                if (если пошло по кругу)
                                                {
                                                allEror = allEror - all[0];
                                                all.RemoveAt(0);
                                                }


                                                Суммирую все случаи, когда модель ошиблась. А по поводу ROC-кривой, я не понимаю её практического смысла.
                                                  0
                                                  Суммирую все случаи, когда модель ошиблась.
                                                  Откуда вы знаете, что модель ошиблась? Вы же весь этот тред утверждаете, что понятия не имеете распознала сеть что-то или нет.

                                                  Я всё больше склоняюсь к тому, что вы создали какую-то специфическую структуру данных и просто подгоняете её под входной образ. Только к ИИ это не имеет отношение, если она не производит сжатие.
                                                    –1
                                                    Я всё время утверждаю, что ошибку можно оценить только косвенно. Каждая группа, хранит индекс объекта которому соответствует. Если индекс группы не соответствует индексу изображения, значит для наблюдателя нейронная сеть ошиблась. Что при этом видит нейронная сеть в действительности, сказать нельзя.
                                                    Точнее, визуализировать можно, но что это значит для нейронной сети, сказать нельзя.
                                                    Даже, когда группа не активна, она меняется. Может измениться так, что будет соответствовать другому индексу.
                                                      0
                                                      Я всё время утверждаю, что ошибку можно оценить только косвенно.
                                                      А это тогда что?

                                                      if (если ошибка)
                                                        0
                                                        То, что я интерпретирую как ошибку. На маленьком наборе данных, такое допущение работать будет.
                            0
                            Нам всем начала надо разобраться, что такое Интеллект, а потом уже заниматься искусственным.
                            А то что сделали вы называется Computer Vision, а не AI.
                            Если по существу, то вот Питерский математик, который дает очень оригинальную концепцию работы нашего мозга.
                            Удачи в ваших начинаниях!
                              0
                              Будьте внимательней. Модель для работы на прямую с изображениями не пригодна. И модель предназначена для демонстрации процесса мышления.
                              А интеллект — это качественный показатель.
                                0
                                Ваш ответ — набор ничего не значащих фраз.
                                А интеллект — это качественный показатель.
                                Показатель качества чего?
                                И модель предназначена для демонстрации процесса мышления.
                                Процесса мышления или все-таки это процесс обучения ИНС типо back propagation?

                            Only users with full accounts can post comments. Log in, please.