Category: технологии

Category was added automatically. Read all entries about "технологии".

with Cat The Cat

Вашему вниманию...

...предлагается взглянуть на DOP, применённый к HIGGS.

DOP - это сокращение от "diagonal outer product". В выражении для аффинного преобразования Ax+b плотная матрица A заменена на сумму diag(d)+uvT. То есть, теперь выражение выглядит, как (diag(d)+uvT)x+b. Вместо N(N+1) коэффициентов мы получаем 4N коэффициентов.

Проверял я это на HIGGS - он относительно небольшой и на нём тяжело получить высокую точность.

В сумме всё выглядит, что оный ДВП ("диагональ и внешнее произведение") вполне себе работает. Не будучи снабжён ДВП уровнями, последний сигмоид сам по себе показывает точность в 64,1%, что подтверждает, что моя реализация сопряжённого градиента вполне работает. Добавление ДВП уровней повышает точность, и 12 уровней дотренировываются до 65,9%, на 0,2% меньше, чем логистическая регрессия на расширенных квадратами векторах.

В своё время OpenAI выполнили работы по тренировке сетей с уровнями, в которых разреженность либо задавалась случайным образом (как безмасштабный граф), либо тренировалась. У них получалось, что разреженные уровни позволяют хранить в 10 раз меньше коэффициентов - то есть, всё равно O(N2). При поднятии количества коэффициентов до прежнего уровня (через расширение и углубление сети) они получали улучшение предсказания.

Меня хватило только на один эксперимент. ;)

Ещё интересно, что с увеличением глубины сила предсказания растёт и глубокие сети могут быть более мощными, чем неглубокие и широкие.

В любом случае, мне было интересно и, наверное, будет полезно в каком-либо будущем.
with Cat The Cat

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

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

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

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

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

Технонанологии.

Оказывается, медный купорос (кстати, это тавтология) сублимирует в газ в вакууме при температуре 150-200 градусов Цельсия.

Знакомые мне нанотехнологи использовали шестихлорид вольфрама, испаряющийся при 600 градусах Цельсия - из газообразного вольфрама вытаскивались ионы вольфрама при поднятии иглы-головки и потом помещались на подложку при опускании головки и изменении полярности напряжения. 100-150 тысяч атомов в секунду с помощью Texas Instruments DSP в 2006 году. Транзистор стоил 80-100 атомов, бит памяти примерно столько же. То есть, за три-шесть секунд можно было получить аналог 6502.

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

Но всё равно - медь доступней, менее вредна и температура работы ниже.

Теперь меня будет мучить вопрос - почему не медь?
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

Секретные материалы

5-й сезон, 11 серия.

Про искусственный интеллект, что убил своего создателя.

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

Я до этого (в седьмой серии) опознал серию будущего сериала Агентов Щита, про планету, где прятался умеющий управлять мутантами мутант.

Право слово, плохо иметь хорошую память. Помнишь время, когда ничего не болело и ничего нового не происходит.
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://arxiv.org/pdf/1908.01580.pdf
Два: http://proceedings.mlr.press/v48/taylor16.pdf
Три: https://arxiv.org/pdf/1910.01526.pdf

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

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

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

Самое интересное во второй статье на странице 8: метод обратного распространения ошибок (backpropagation) заканчивает там, где метод второй статьи (ADMM) начинает работу. Да и сопряжённый градиент не отстал.

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

Вдогонку: https://arxiv.org/pdf/1409.5827.pdf - как вместо сложных статистических вычислений использовать невероятно параллельные.
with Cat The Cat

Управление версиями.

Дерево слияний в git представляет собой граф, который эквивалентен графу зависимостей возможностей ПО.

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

Получается, что управление требованиями и планирование можно вести в ветках git/mercurial.
with Cat The Cat

Поржать.

https://matloff.wordpress.com/2018/06/20/neural-networks-are-essentially-polynomial-regression/ - нейронки смело уподоблены полиномам, причём полиномы добиваются схожей точности при степени полинома 2. По мнению авторов, поскольку на каждом следующем слое степень полинома перемножаются, это приводит к переобучению.

https://arxiv.org/abs/1611.03530 - современные нейронки свободно учатся на случайных метках в тренировочных данных, достигая нулевой ошибки предсказания на них.
with Cat The Cat

Эксперимент.

А что будет, если мы попробуем приблизить градиент случайными векторами?

(проверяю идеи)

Collapse )

Предел получается в районе обратного корня из 2. Это разумно ожидать. До косинуса, равного половине, мы добираемся за выборку, равную трети от размерности вектора. Четверть - где-то в районе 7%, пятая часть - 4,7%. Снижая скорость приближения, мы можем уменьшить количество вычислений.

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

Мне не нравится градиентный спуск, как его применяют сейчас. Он был придуман, в его современной форме, из-за ограниченности ресурсов (особенно learning rate) и уже довольно давно. У него есть проблемы со значениями и он плохо применим в новых системах (то самое обучение подкреплением). Поэтому я и пытаюсь получить что-то другое. Две вещи, которые мне очень не нравятся, это скорость обучения (learning rate) и обратное распространение ошибок (backpropagation). Обе они подозрительны мне из-за связанной с ними магии - для скорости обучения придумывают вычурные "расписания" (learning rate cosine schedule, например), обратное распространение ошибок требует хитрых приведений (batch normalization, ADAM и тп), чтобы оно обучало более-менее быстро на современных данных.