Задать вопрос
  • Можно ли заставить нейросеть заставить избегать определенных состояний?

    @rPman
    Главный инструмент обучения нейросети (не единственный) - это создание функции ошибки и подбор параметров для ее минимизации.

    Я буду говорить про обычные сети без обратной связи (одно или многослойные), но и рекурентные нейронные сети так же могут похожим способом обучены..

    Классический но не единственный способ определения функции ошибки - это сумма всех расстояний (если вектор состояния это координаты в многомерном пространстве) между ожидаемым выходом и полученным текущей сетью. Самая простая метрика расстояния для одного 'эксперимента' - квадратный корень суммы квадратов разницы значений векторов, т.е. A(a1,a2,a3,...) - это вектор из обучающей выборки, а B(b1,b2,b3,...) то что вернула сеть, то расстояние sqrt((a1-b1)^2+(a2-b2)^2+...), соответственно полученные ошибки нужно просто сложить для всей обучающей выборки, и получить полную ошибку.

    Так вот, есть разные способы повысить/понизить значимость конкретному значению вход+выход из обучающей выборки - это:
    a) добавить коэффициент к ошибке, т.е. умножить ошибку на какое то фиксированное значение (для каждой пары вход-выход свое значение, по умолчанию 1), увеличивая этот коэффициент можно заставить нейросеть более строго изучать какие то конкретные примеры из обучающей выборки, а какие то наоборот, менее строго.
    b) исключать примеры из обучающей выборки или добавлять их несколько раз (я находил несколько исследований этого метода, точнее частично похожих на это)

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

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

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

    p.s. могу предложить один алгоритм, выбора какие примеры из обучающей выборки нужно исключать а какие нет - периодически, с некоторой частотой, из обучающей выборки исключаются примеры, по которым сеть выдает хороший результат, т.е. которые заучила или по которым выявила закономерности (ошибка меньше некоторого порога или выбирать какой то процент примеров, отсортированных по значению этой ошибки).

    В этом случае сеть будет обучаться дольше на тех примерах, которые у нее не получаются и не будет тратить время на те примеры, с которыми она уже разобралась. Само собой, любое обучение без хороших примеров заставит сеть забывать их, поэтому их нужно возвращать назад в выборку, можно даже привязать вероятность исключения примера обратно пропорционально ошибке, поделив на какое то число (чтобы они все же попадали в выборку)
    Ответ написан
    Комментировать
  • Так КАКАЯ математика нужна для работы с базами данных???

    @rPman
    хватит школьных знаний

    Да, когда говорят про реляционную алгебру, мыслят категориями математического анализа, но знаний особых тут не нужно, достаточно просто запомнить (если честно, серьезно углубляться в такую математику нужно разработчикам серверов баз данных, когда начинаешь это дело оптимизировать, не забывая про доказуемую корректность, обывателю же это не надо)
    Ответ написан
    Комментировать
  • Можно ли как-то отдать все ресурсы компьютера одной вкладке Chrome?

    @rPman
    Нет, процесс хрома, управляющий вкладкой (на самом деле сложнее) уже берет все что может (пример, у меня жена играет в какую то игрушку во ВК, так эта недопрога там 'майнит' на всех доступных ядрах так что машина лагает (на минуточку - linux).

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

    windows пишет загрузку от количества ядер, т.е. 100% это загрузка всех твоих 6 ядер (это я вангую что у тебя за машина), твои 21% это притмерно одно ядро плюс по мелочи (браузеры давно что могут стараются сами оптимизировать, например отрисовка фоном там идет, но javascript работает в одном потоке вкладки, чтобы использовать больше нужно использовать воркеров)
    Ответ написан
    1 комментарий
  • Какая библиотека лучше всего использовать для голосового ассистента (бесплатно без регистрации) на C#?

    @rPman
    Хорошее и бесплатное не совместимы, можешь попробовать 'воровать' у Гугла, запилив веб приложение и запускай его в google chrome, на сколько я знаю оно использует облачное распознавание, тебе можно то же самое использовать от Яндекс браузера, у этих обоих лучший движок распознавания русской речи
    Ответ написан
  • Как в windows 11 посмотреть какой процесс грузит видеокарту?

    @rPman
    Наличие колонки нагрузки GPU по процессам зависит от версии драйверов, например старый драйвер catalyst (есть у меня машина с amd rx 5030) есть под win10 но возможность смотреть нагрузку по GPU не дает.

    upd. попробуй в консоли, запущенной под администратором, запустить команду
    lodctr /R
    Ответ написан
  • Какая топовая оперативная память DDR5?

    @rPman
    Открываешь support ram материнской платы и процессора, смотришь какие наибольшие частоты с нименьшими таймингами пересекаются, та и наилучший вариант.

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

    Зарисуй себе в табличке доступные варианты оперативки с ценами и этим посчитанным числом, отсортируй и выбирай по доступности цены.

    Теперь о главном - вся возня с выбором топовой оперативной памяти разбивается о реалии - на производительность это влияет только для программ интенсивной работы с памятью (у обывателей это только архиваторы и синтетические бенчмарки), в играх прирост считанные проценты (для непонятливых, уменьшение CL в два раза, что буквально должно увеличить скорость ram в два раза, дает 4% fps, цена же на такую память на порядок выше) и то, только если производительности не хватает, если же упирается в возможности видеокарты - прироста от улучшения памяти не будет (смотри график в статье (старая но для понимания пойдет) раздел Тайминги, на примере Serious Sam 3 - игра старая, процессор утилизировать не может)
    Ответ написан
  • Какие таблицы работают эффективнее?

    @rPman
    На каждую таблицу будет заводиться индекс PK, если количество записей будет одинаковое (в смысле на каждое значение PK будет по одной записи в каждой таблице) - будет хуже, так как размер индекса у каждой таблице растет с ростом количества записей в ней, и много таблиц - много по факту отдинаковых индексов (но для разных таблиц он хранится), поэтому разделять по мелким узким таблицам имеет смысл только для разряженных данных, когда записи появляются только при наличии данных, причем чем больше таких отдельных таблиц тем больше должна быть 'разряженность' данных, чтобы это имело смысл.

    Так как объем ПЗУ значительно выше (при той же стоимости) чем ОЗУ (а требования к ней таковы что индексы желательны влезать в нее, хотя бы для оперативных запросов) то лучше забить на оптимизацию по занимаемому месту данными, чем увеличить кратно требования для оперативного хранения индексов.

    Поэтому - не дроби на большое количество таблиц, пусть будет меньше таблиц с большим количеством полей, но без фанатизма, если видишь что появляется куча условий not null когда как для нескольких таблиц это отрабатывается inner join, то тогда да (not exists лучше чем is null).

    p.s. в догонку про сериализацию данных в одно поле, когда одно поле БД хранит сразу несколько значений - это оправдано и даже рекомендуется, если эти данные не имеют смысл по отдельности, красивый пример ip-адрес и порт как настройки подключения - суть одни данные, и нет никакого смысла разделять их на разные поля базы, за исключением случаев когда возможно потребуется активная аналитика по отдельному полю (например по ip адресу) - 'активная' тут это значит нужно строить индексы и делать частые запросы а не разовый full scan бакэндом.

    Дробление данных на большое количество полей - повышает нагрузку на бакэнд (спорное утверждение, бывает наоборот, но зачастую да), правда для тех разработчиков, где такая оптимизация имеет смысл, такими вопросами не задаются, нужны действительно большие нагрузки.
    Ответ написан
    1 комментарий
  • Как сделать свою сборку Windows 7 с нужными обновлениями?

    @rPman
    ntlite
    позволяет вручную указать список обновлений, которые нужно интегрировать в установочный образ (а так же драйвера и кучу настроек таких как тип запуска служб), работает с файлами, скопированными с cdrom/iso, обратно записывать любым соответствующим приложением (можно сделать загрузочную флешку и прямо на ней обновлять, но быстрее скопировать на ssd диск)

    поддерживает кажется даже winxp, но вот возможность загрузить обновления с офф сайта хз (для win7 в этом году еще работало)
    Ответ написан
    3 комментария
  • Что из себя представляет должность администратора баз данных?

    @rPman
    Администратор БД это тот кто следит за работой базы, раздает и управляет правами доступа пользователей, настраивает размещение tablespace, настройка репликации и резеврной копии и т.п.

    Если администратор БД часть команды разработчика приложения (это важное дополнение) то на него обычно ложится все что касается оптимизации скорости (проектирование индексов и вообще участие в проектировании базы данных). Абсолютно бессмысленно просить словами администратора создать/удалить таблицу, но прежде чем что либо в базе делать, лучше обсудить, особенно если это все на продакшн базе будет происходить, так как когда размер базы большой, простейшее добавление или удаление колонки (например если там есть default value) может занимать сутки-недели.

    Написание триггеров, хранимых процедур и представлений - это не дело администратора БД но очень часто он совмещает функцию разработчика БД (само собой об этом нужно заранее договариваться) и это становится само собой разумеющимся.
    Ответ написан
    Комментировать
  • Как увеличить скорость загрузки данных в Mysql?

    @rPman
    Отключить/удалить индексы, вернуть после полного импорта. Это самое большое ускорение.

    Ещё можно изменить стратегию кеширования данных, дело в том что сервер базы данных слишком щепитильно относится к корректности загружаемых данных, выдавая частый fflush, т.е. принудительную запись данных с ожиданием ее окончания. Это актуально для режима работы с базой но первоначальное наполнение пустой базы можно не боятся сбоев, ведь попытку можно перезапустить с нуля. Например можно изменить режим записи в журнал ext4 на data writeback или лучше средствами виртуализации настроить кеширования диска на -device cache=unsafe для qemu.
    Ещё круче можно настроить bcache с кеширующим диском на ramdisk....

    В общем есть где творчески разгуляться, в итоге можно поднять скорость импорта на порядок, особенно если хватает оперативной памяти
    Ответ написан
    Комментировать
  • Как зашифровать логин и пароль в проекте exe (windows form)?

    @rPman
    Ключевое слово для дальнейшего поиска решения - обфускация.

    Бессмысленно что то делать с паролем, если декодировав исходники можно будет понять как он расшифровывается или просто посмотреть в отладчике место в коде где он используется. Если пароль отсылается в запросе по сети, то иногда достаточно этот запрос подсмотреть, а https шифрование обойти подменой сертификата.

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

    P.s. подумай, такая борьба с ветреными мельницами может оказаться сложнее чем запилить сервис посредника
    Ответ написан
  • Вызов функции, экспортируемой из EXE. Как это сделать нормально?

    @rPman
    То есть из любого процесса можно по идее подцепиться к работающей консоли.
    при наличии администраторских прав в windows можно сделать dll injection

    Нормальным такой способ назвать нельзя, пользоваться этим можно только от безысходности.

    Для коммуникации между процессами в пределах одной машины настоятельно рекомендуется использовать shared memory (и как частный случай - memory mapped files) + semaphores, любые другие способы медленнее или используют их для реализации. Сокеты и named pipes везде почему то сильно медленнее (на порядок или даже два). Вот пример взаимодействия приложений на c++ и php там и бенчмарки

    гуглим: Inter-process communication
    Ответ написан
    Комментировать
  • Популярные блокчейны очень объемные. Как поднимать ноды популярных блокчейнов быстро?

    @rPman
    Такова селяви.
    Скорость интернета тут не причем, нода должна выполнить все транзакции всех контрактов на блокчейне, чтобы собрать базу состояний (условно балансов)

    На эфире для этого в протокол запилили поддержку, ключи geth кажется --fast, когда ты соглашаешься доверять готовым дампам

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

    @rPman
    Failed to verify authentication
    ничего не навивает?
    Ответ написан
  • Зависит ли производительность базы данных от количества записей?

    @rPman
    Зависимость требований ресурсов от количества записей (участвующих в индексах) - примерно логарифм log(N) или если индексы не используются то N*log(N)

    Про скорость чтения:

    Пока файлы индексов или не иднексируемые данные кешируются в RAM, с увеличением объема данных скорость работы БД будет падать незначительно (время на получение самих данных будет выше чем их поиск), но как только оперативная память закончится (индексы в кеши не влезают) то скорость работы скачкоорбазно упадет.

    Про скорость записи:
    К сожалению на запись данных в базу данных активно используется диск, соответственно зависимость log(N) сохраняется, но будет с большим коэффициентом от скорости диска на запись.

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

    Вот к примеру задача хранения и быстрого доступа к хешам может быть решена быстрее любой БД за счет накладных расходов на дисковое хранилище со скоростями почти равными iops накопителей помноженное на их количество.

    Вот в это же время на хабре была статья (зачем ее автор удалил, найти не могу) тестирования записей в mssql с миллионом как раз с индекосом по хешу, на каждый за несколько секунд - уныло.
    Ответ написан
    Комментировать
  • Как заменить диски в RAID 1 на диски меньшего объема?

    @rPman
    99% проблем у тебя создает аппаратный raid, зачастую функционал там ограничивается вендором.

    если бы рейд был софтовым, я бы сделал бакап (бакап нужно делать всегда), затем отключил бы один из дисков из рейда (рейд перейдет в состояние degraded но будет продолжать работать), затем

    для linux mdadm:
    - создаешь второй software рейд из одного диска (того что из рейда убрал), указав что второй missing
    mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1

    - переносишь данные со старого degraded рейда на новый тоже degraded
    - удаляешь аппаратный рейд, и добавляешь освободившийся диск к софтварному рейду
    mdadm /dev/md0 -a /dev/sda1

    для windows:
    - можно просто создать обычный раздел (сразу делай gpt разметку), скопировать и позже конвертировать в динамический

    обе системы сделают rebuild автоматически (синхронизацию данных)

    p.s. аппаратные рейды, если это не дорогой контроллер с батарейкой и собственным кешем, абсолютно бесполезны, как минимум домашнему пользователю... проблем они создают больше чем пользы.

    многие NAS внутри используют софтварный mdadm за что им спасибо
    Ответ написан
    Комментировать
  • Как узнать процент похожести текста?

    @rPman
    Похожесть - перебором.

    У меня в поиске заголовков статей (40к) postgres подсчет левенштейн со всеми записями был меньше секунды, а ведь он фактически перебор делает. Но задача на самом деле сложнее.

    Посмотри хорошую статья с обзором алгоритмов, статья старая но взяв из нее алгоритмы будет что гуглить дальше

    p.s. рандомная ссылка из гугла, в работе есть код на питоне
    Ответ написан
    Комментировать
  • Как поставить точку в коде?

    @rPman
    везде одинаково:

    return - выход из функции/метода
    break - выход из switch для выбранных секций case
    goto - выход на метку (только в пределах метода), можно использовать как выход из многоуровневого цикла без определения переменных состояний, но вообще плохой тон
    Ответ написан
    2 комментария