В реальном проекте покрыть всю логику и все бранчи тестами нереально. Правильная деградация - это тоже часть логики программы, тогда как ассерт - это верный путь к UB на проде, и может быть ещё хуже. Для горячих мест окей, но много ли их реально?
А так, конечно, разработка ведётся также и на проде (в релизе). Пользователи присылают баг-репорты, а анализ логов и корок даёт много полезной инфы, причём в реальных юзкейсах. Чем не тестирование!
Фортран жив по тем же причинам, что и Кобол: никто не хочет и/или не может переписывать существующий код, десятилетиями оттестированный и оптимизированный для вычислений. Да и зачем, если есть полная совместимость с C ABI? Написали врапперов для всех языков программирования и погнали. NumPy внутри дёргает Фортран. В стандартную библиотеку C++26 внесли библиотеку linalg, которая по сути биндинги для BLAS (как правило, фортрановского). Некий предел оптимизации алгоритмов уже достигнут, практической пользы от переписывания просто нет.
В научной среде Фортран сохраняется именно потому, что профы это те условные "деды", которые этот код и оптимизировали в 80х. Например, мой препод по вычислительной химии рекомендовал учить Фортран как самый важный язык для области. Так он и передается, по сути аспиранты находятся в заложниках ситуации, как, например, биоинформатики вынуждены учить R вместо Python.
Недавно появился новый вид пописки именно для двух людей "Duo subscription plan", по цене 1.5 от одиночного. Все равно очень дорого, мне предлагает за 20 евро.
Нашу турецкую "семью" расформировали, теперь предлагают вместо 4 евро платить 23. Благо есть revanced.
На конфе общался с человеком, который переехал с женой в Гамбург, и работает фрилансером. Он пытался оформить страховку, но во всех ему просто отказали и он попал в правовой коллапс - без страховки нельзя, но как оформить не понятно.
Страховка в Нидерландах обязательная и примерно одинакова для всех. Стоит 150 евро в месяц, плюс первые 385 евро в год платишь за свой счет. Дальше почти все бесплатно, вклю.чая таблетки и лекарства.
К сожалению, зубы в нее не входят, и выходят в копеечку. Местным норм, т.к. до 18 лет стоматология бесплатна и все успевают отходить в брекетах и сделать себе идеальные зубы.
Пусть есть модель, которая параметризуется весами. В ходе обучения мы подбираем такие значения весов, которые наилучшим образом описывают входные данные. Таким образом, информация, содержащаяся во входных данных, перетекает в информацию, содержащуюся в весах. Если веса могут сохранить больше информации, чем содержится в исходных данных, то появляется вероятность переобучения. А именно: модель будет просто воспроизводить исходные данные вместо описания взаимосвязей. Простейший пример это фиттинг полинома N-й степени по N точкам, такую модель можно обучить всегда со стопроцентной точностью. Но на любой точке вне обучающей выборки она будет давать рандомный результат.
Как можно измерить информацию? Веса хранятся в памяти компьютера в виде байтов. Т.е., если байтов для весов выделенно много, возникает вероятность переобучения. Как решать эту проблему?
Во-первых, можно уменьшить количество весов. Меньше данных - меньше информации. Однако такая модель может недостаточно хорошо описывать сложные закономерности, например, кубическую функцию с 4 параметрами невозможно хорошо описать параболой из 3 параметров.
Во-вторых, можно уменьшить информацию в каждом отдельном весе. Чем больше число, тем больше байтов оно требует для хранения. И тут возникает идея регуляризации: давайте ограничим или введем штраф на размер весов, и тогда мы ограничим количество информации в них. При этом мы сохраняем возможность модели описывать сложные закономерности. Поэтому простейшие регуляризации L1 и L2 просто штрафуют за величину весов. Получается trade off в ходе обучения: оптимизатору выгодно частично запомнить данные, но не выгодно хранить слишком много информации. Итоговый результат с регуляризацией получается полезнее для объемной модели: она хорошо описывает сложные зависимости, но просто запомнить все не будет оптимальным.
Худший случай тут не при чем. Существует несколько алгоритмов построения бинарной кучи. Способ, который вы описали в сообщении действительно работает за O(N log N). По сути мы наращиваем кучу: добавляем новый элемент в конец и выполняем для него процедуру sift_up (восстанавливаем кучу). На последнем шаге будет N/2 * log(N/2) сравнений, что уже ограничивает снизу сложность алгоритма.
Однако это не оптимальный способ, можно построить кучу быстрее за O(N). Так как массив эквивалентен бинарному дереву, нам нужно лишь сделать из этого дерева кучу. Вместо процедуры sift_up мы будем двигать элементы вниз с помощью процедуры sift_down, начиная с конца. Количество сравнений будет таково: N/2*0 + N/4*1 + ... + 1*log(N). Удивительно, но асимптотика суммы данного ряда будет линейной! Магия, да и только :)
Вот тут есть еще одно объяснение. Ну и не грех заглядывать на википедию, особенно английскую.
данный массив преобразуется в двоичную кучу: занимает эта операция O(N*log2(N))
Операция построения двоичной кучи из неупорядоченного массива имеет оптимальную сложность O(N). Пример доказательства можно найти, в том числе, на хабре https://habr.com/ru/post/195832/
Позавчера мне позвонили из маркета в 12 ночи из-за перепутанного заказа. На мой вопрос, не смущает ли их время звонка, гордо ответили — наш сервис работает круглосуточно!
Фейковые подписки Мегафона попортили много нервов, так как часто пользуюсь раздачей интернета со смартфона. Решение было найдено: запретить подписки отправив пять смс на бесплатный номер 5151 со словами:
успзапретвп
успзапретcп
успзапрет1
устпбк1
нетклик1
Раз в три месяца повторить процедуру (благо за пару дней приходят смс об окончании запрета). Это официальная услуга.
Выглядит как дикий костыль, и ужас — но стоит замешкаться на пару дней, и новая подписка на приколы ждёт тебя. После чего семь кругов ада из ботов, операторов, заявок и тп. Если стоять на своем и требовать вернуть деньги — их возвращают. Но это все неприятно.
Спасибо что делитесь своим опытом)
Может быть подскажете что-нибудь подобное для разложения Холецкого? Работаю с матрицами ковариации 100*100, и точности double не хватает. Приходится пользоваться длинной арифметикой, что сильно замедляет код
Меня в свое время очень впечатлил следующий каверзный пример из книги Л. Ромальо:
>>> a = {True : "1", 1 : "one"}
>>> print(a) #?
Вывод print(a)
>>> print(a)
{True: 'one'}
Объяснение
В python3 тип bool реализован как подкласс инта, поэтому хеши True и 1 (а также False и 0) cовпадают. Для словаря, который использует хеш-функцию как индекс это одинаковые объекты.
Можно пойти еще дальше и вспомнить, как считаются хешы для float:
В реальном проекте покрыть всю логику и все бранчи тестами нереально. Правильная деградация - это тоже часть логики программы, тогда как ассерт - это верный путь к UB на проде, и может быть ещё хуже. Для горячих мест окей, но много ли их реально?
А так, конечно, разработка ведётся также и на проде (в релизе). Пользователи присылают баг-репорты, а анализ логов и корок даёт много полезной инфы, причём в реальных юзкейсах. Чем не тестирование!
Мы не тестируем на животных
К сожалению, аssert не спасет от разыменования nullptr в релизе. А в C++26 завезли контракты специально для этой цели.
Фортран жив по тем же причинам, что и Кобол: никто не хочет и/или не может переписывать существующий код, десятилетиями оттестированный и оптимизированный для вычислений. Да и зачем, если есть полная совместимость с C ABI? Написали врапперов для всех языков программирования и погнали. NumPy внутри дёргает Фортран. В стандартную библиотеку C++26 внесли библиотеку linalg, которая по сути биндинги для BLAS (как правило, фортрановского). Некий предел оптимизации алгоритмов уже достигнут, практической пользы от переписывания просто нет.
В научной среде Фортран сохраняется именно потому, что профы это те условные "деды", которые этот код и оптимизировали в 80х. Например, мой препод по вычислительной химии рекомендовал учить Фортран как самый важный язык для области. Так он и передается, по сути аспиранты находятся в заложниках ситуации, как, например, биоинформатики вынуждены учить R вместо Python.
Недавно появился новый вид пописки именно для двух людей "Duo subscription plan", по цене 1.5 от одиночного. Все равно очень дорого, мне предлагает за 20 евро.
Нашу турецкую "семью" расформировали, теперь предлагают вместо 4 евро платить 23. Благо есть revanced.
Бывает еще публичный WiFi - технически проводной, но с точки зрения удаленщика другая важная категория.
Дико плюсую, даже если забыть про цены, плохо развитый сервис и коворкинги - тут с интернетом все грустно, даже с проводным и мобильным.
Список рандомно составлялся.
На конфе общался с человеком, который переехал с женой в Гамбург, и работает фрилансером. Он пытался оформить страховку, но во всех ему просто отказали и он попал в правовой коллапс - без страховки нельзя, но как оформить не понятно.
Страховка в Нидерландах обязательная и примерно одинакова для всех. Стоит 150 евро в месяц, плюс первые 385 евро в год платишь за свой счет. Дальше почти все бесплатно, вклю.чая таблетки и лекарства.
К сожалению, зубы в нее не входят, и выходят в копеечку. Местным норм, т.к. до 18 лет стоматология бесплатна и все успевают отходить в брекетах и сделать себе идеальные зубы.
Могу предложить следующее объяснение.
Пусть есть модель, которая параметризуется весами. В ходе обучения мы подбираем такие значения весов, которые наилучшим образом описывают входные данные. Таким образом, информация, содержащаяся во входных данных, перетекает в информацию, содержащуюся в весах. Если веса могут сохранить больше информации, чем содержится в исходных данных, то появляется вероятность переобучения. А именно: модель будет просто воспроизводить исходные данные вместо описания взаимосвязей. Простейший пример это фиттинг полинома N-й степени по N точкам, такую модель можно обучить всегда со стопроцентной точностью. Но на любой точке вне обучающей выборки она будет давать рандомный результат.
Как можно измерить информацию? Веса хранятся в памяти компьютера в виде байтов. Т.е., если байтов для весов выделенно много, возникает вероятность переобучения. Как решать эту проблему?
Во-первых, можно уменьшить количество весов. Меньше данных - меньше информации. Однако такая модель может недостаточно хорошо описывать сложные закономерности, например, кубическую функцию с 4 параметрами невозможно хорошо описать параболой из 3 параметров.
Во-вторых, можно уменьшить информацию в каждом отдельном весе. Чем больше число, тем больше байтов оно требует для хранения. И тут возникает идея регуляризации: давайте ограничим или введем штраф на размер весов, и тогда мы ограничим количество информации в них. При этом мы сохраняем возможность модели описывать сложные закономерности. Поэтому простейшие регуляризации L1 и L2 просто штрафуют за величину весов. Получается trade off в ходе обучения: оптимизатору выгодно частично запомнить данные, но не выгодно хранить слишком много информации. Итоговый результат с регуляризацией получается полезнее для объемной модели: она хорошо описывает сложные зависимости, но просто запомнить все не будет оптимальным.
Худший случай тут не при чем. Существует несколько алгоритмов построения бинарной кучи. Способ, который вы описали в сообщении действительно работает за O(N log N). По сути мы наращиваем кучу: добавляем новый элемент в конец и выполняем для него процедуру sift_up (восстанавливаем кучу). На последнем шаге будет N/2 * log(N/2) сравнений, что уже ограничивает снизу сложность алгоритма.
Однако это не оптимальный способ, можно построить кучу быстрее за O(N). Так как массив эквивалентен бинарному дереву, нам нужно лишь сделать из этого дерева кучу. Вместо процедуры sift_up мы будем двигать элементы вниз с помощью процедуры sift_down, начиная с конца. Количество сравнений будет таково: N/2*0 + N/4*1 + ... + 1*log(N). Удивительно, но асимптотика суммы данного ряда будет линейной! Магия, да и только :)
Вот тут есть еще одно объяснение. Ну и не грех заглядывать на википедию, особенно английскую.
Операция построения двоичной кучи из неупорядоченного массива имеет оптимальную сложность O(N). Пример доказательства можно найти, в том числе, на хабре https://habr.com/ru/post/195832/
Раз в три месяца повторить процедуру (благо за пару дней приходят смс об окончании запрета). Это официальная услуга.
Выглядит как дикий костыль, и ужас — но стоит замешкаться на пару дней, и новая подписка на приколы ждёт тебя. После чего семь кругов ада из ботов, операторов, заявок и тп. Если стоять на своем и требовать вернуть деньги — их возвращают. Но это все неприятно.
Кстати, на Хабре уже была статья про связь мегафона и подписок habr.com/ru/post/448530
Может быть подскажете что-нибудь подобное для разложения Холецкого? Работаю с матрицами ковариации 100*100, и точности double не хватает. Приходится пользоваться длинной арифметикой, что сильно замедляет код
Можно пойти еще дальше и вспомнить, как считаются хешы для float:
Такой вот коварный питон :)
Попробовал еще раз утром — тоже неудачно, появляется ошибка с proot. Она описана по моей предыдущей ссылке, там же и альтернативный вариант установки.
К сожалению, убунта по вашему рецепту не встала, но сработал метод вот отсюда.