Category: it

Category was added automatically. Read all entries about "it".

with Cat The Cat

Повою про БД

Первое: B-tree любого рода это полустатическая структура данных. Она работает "хорошо" в предположении, что чтение или запись любого блока данных это одинаково затратная операция. Однако, в жизни чтение и запись последовательных блоков менее затратно, чем чтение и запись произвольных блоков. Поэтому на случайных данных, когда могут переполнится и быть разбиты любые узлы и листья дерева, B-tree деградирует - начинается обращение в произвольные места системы хранения. В произвольном случае, B-tree не умеет использовать получаемую от последовательного доступа выгоду.

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

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

"Туман войны"

Перегрузка информацией привела к появлению целе-ориентированной системы отдачи приказов.

Рассчитывать на то, что какой-то супермозг сможет вычленить нужное из всякого, не стоит.

Собирать надо важное, а не всё подряд.

Ну, и посмотрите на количество коэффициентов в GPT-3 - 175 миллиардов чисел. Эта штука способна запомнить текст в 175 гигабайт (вообще, не байтов, а символов - то есть, ещё больше) дословно. Это уровень Шерешевского, так сказать, который был способен поражать способностью к запоминанию своего редактора (обычного умного человека) в начале прошлого века. Способность к "пониманию" у GPT-3 отлично продемонстрирована текстом про единорогов с четырьмя рогами.
with Cat The Cat

Описание систем.

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

Я написал программу - но это только полдела. Программа должна быть обёрнута в окружение и подключена к, как минимум, одной другой программе (серверу БД, обычно). Что в этом окружении важно? Как другие программы влияют на то, что я должен написать?

Дальше больше. Вот мы склеили систему, обычно, сценариями на Питоне или bash. Является ли эта система оптимальной? Склейка же, обычно, рассчитывает на разделение работы - вот тут у нас балансировка нагрузки, а вот тут мы эти запросы обрабатываем, рассчитывая, что подключение к программе не будет установлено, пока не обработаем запрос. Прогоняя запрос через ядро ОС, с копированием и прочими атрибутами разделения.

Можем ли мы склеить nginx и приложение, склеенные Питоном? Чтобы сэкономить процентов десять-двадцать энергии системы в целом. Да ни за что - почти никому, кроме Microsoft, это даже в голову не приходит.

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

Остановлюсь.
with Cat The Cat

Блок чейны.

Чтобы бы мне не высказаться.

Биткойн и Эфириум - число-отгадка (nonce) стоит последним в заголовке блока. Поэтому клиенту можно передавать не весь заголовок, а лишь состояние SHA-256 (или что там у эфира) перед отгадкой. Это позволяет использовать плохо ("хорошо" с точки зрения авторов - обдимиcация!) написанные клиенты шахтёрских артелей вслепую, что позволяет выполнять перестройку цепочек. Что и произошло с Эфириумом несколько раз. И что позволяет переносить мощности вычисления SHA-256 между криптовалютами.

Ergo - "защитимся от артелей! Артели плохи!" Через месяц после старта "артели же позволяют распределить риски участников... надо сделать обходной манёвр, чтобы обойти то, что мы тут натворили". В исходной статье про PoW забыли упомянуть про гомоморфное шифрование, что пускает под откос все их труды по созданию "доказательства работы, не поддающегося субподряду".

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

Avalanche, симулятор - симуляция не выполняется стохастически с "пересылкой" сообщений и ожиданием, а сперва симулируется один узел, затем другой и так далее. Получаются волшебные числа пропускной способности.

HotStuff - "если потребовать от сетевого уровня гарантий, что не предоставляет даже TCP, то у нас всё получится! а на краевые случаи мы не будем обращать внимания" Тоже получаются волшебные числа пропускной способности. Но в случае Libra Foundation (авторы) все же джентельмены, на слово верят.

В общем, я разочарован - и это слабо сказано.
with Cat The Cat

Разное.

Выясняем с коллегой причины проблем сборки некоей БД с несколько изменённым хранилищем. Оба смотрим на, вроде бы, один и тот же RPM - md5sum одинаковый, имена файлов тоже. В моей копии RPM некоторый файл отсутствует, у коллеги он присутствует. Качали из одного места, прошу прощения за каламбур.

Восхищённый ситуацией, я решил поделиться с ним Палкой с Резиновой Нахлобучкой, в котором подходящую к ситуации последнюю строчку имеет стих:

Туман поутру.
Вдалеке забивают сваю:
Бам-бам-бам-бам!
....
Бусон

Коллега в ответ говорит, что у него сейчас 11 утра (утро, то бишь), за окном туман и где-то, судя по звукам, забивают сваю.
with Cat The Cat

Не йронки.

https://github.com/thesz/higgs-logistic-regression

Взял HIGGS dataset, натравил на него логистическое приближение (logistic regression) с оптимизацией методом последовательно перевзвешенных наименьших квадратов (Iterated Reweighted Least Squares) и получил для всего 29 коэффициентов точность, сравнимую с точностью нейронки с одним скрытым слоем в 300.

После чего взял, и добавил к исходным значениям ещё и их квадраты (соединив вектора входов и квадратов). Использовал тот же метод и получил точность в 66%. На 57 коэффициентах.

Вопросы? ;)
with Cat The Cat

Связь.

"Стоимость исправления дефекта программы пропорциональна времени между внесением дефекта и его обнаружением" переводится на русский язык, как "взял и попользовался - положи на место, другим и тебе проще будет".

Навело воспоминаниями про серию push ax/push bx/push cx и соответствующие pop cx/bx/ax в статье TechHelp (гипертекстовая программа помощи по MSDOS) про резидентные программы, что ли. Там к этим сохранениям-восстановлениям был комментарий "good housekeeping".
with Cat The Cat

Про word2vec.

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

Его можно считать прямым использованием "дистрибутивной семантики" - смысл слова определяется его типичным окружением.

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

Есть два режима использования word2vec - предсказание непрерывного словесного окружения по слову (continuous skipgram) и предсказание слова по непрерывному словесному окружению (continuous bag of words, CBOW). В первом случае мы по слову предсказываем несколько слов из его окружения, во втором случае мы предсказываем слово по нескольким словам из окружения.

В первом случае у нас на входе слово, закодированное 1-из-N, на выходе - несколько слов, закодированных 1-из-N (softmax) или "кодированный двоичным кодом индекс слова по порядку возрастания частоты" (несколько сигмоидов на слово). Во втором случае у нас на входе сколько-то слов, кодированных так или эдак, на выходе - 1-из-N (softmax).

В первом случае вложения это строки матрицы первого полностью связного преобразования (прошу обратить внимание - там было 1-из-N), во втором случае вложения это строки матрицы второго полностью связного преобразования (снова 1-из-N).

(интересно здесь то, что "начало фразы" и "конец фразы" могут быть словами словаря и для них также может быть вычислены вложения)

Что интересного в этих вложениях?

Если использовать расстояние по косинусу угла между вложениями, то сходные слова будут расположены близко друг от друга. В частности, кластеризация через k-means (которая в исходном пакете word2vec есть из коробки) для предсказания окружения по слову давала интересные классы слов - в одном были прилагательные одного склонения, в другом - другого, и кластера слов ещё и делились по смыслу - вот в этих классах про положение на карте, а вот в этих про бытовую и электронную технику. Что интересно, разные режимы тренировок давали разные кластера и, по словам статьи, отличаются точностью решения языковых задач.

В исходной статье про word2vec давался алгоритм решения простых аналогий: чтобы вычислить "А относится к Б, как В относится к Х", надо было решить простую задачу Х=БлижайшееПоКосинусу(Вложение(Б)-Вложение(А)+Вложение(В)).

Товарищи из Фейсбука пошли чуть дальше (fasttext). В их работе слова разбиваются на части и вложения вычисляются не для слов, а для частей (n-grams - слово "будда" может быть разбито на триграммы "^бу", "удд", "дда" и "да$"). Вложение слова вычисляется простой суммой вложений частей. Таким образом, если для редко (менее 5 раз, обычно это в районе половины процента корпуса, опечатки и тому подобное) встречающихся слов word2vec не мог определить вложения, то фейсбучный подход позволяет и вложения определить, и сами слова использовать для вложений.

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

Можно сделать извлечение смысла, вычисляя вложение текста (например, сверточными сетями) и вычисляя из вложения текста краткое его содержание (encoder-decoder). На входе много слов текста, на выходе вектор размера M (вложение текста), из которого как-то (хоть простым полностью связным слоем) вычисляется несколько векторов-вложений слов смысла текста (см. выше про вложения для "конца фразы").
with Cat The Cat

На память.

https://concatenative.org/wiki/view/Exotic%20Data%20Structures

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

Меня там особо интересует массив, разбитый на √N подмассивов, это самая первая часть раздела. На нём можно оптимально (по словам авторов) реализовать очередь с сортировкой (priority queue), а это открывает интересные возможности.

Ещё в этой структуре количество разбиений √N, что роднит её с прозрачными-для-кеша (cache-oblivious) структурами данных (некоторыми, не всеми).

PS
Твиттер мне перестал нравиться, как средство выражения мыслей. Надо больше писать сюда.