Мне кажется, что это статья гораздо лучше большинства нейрослопа, которым сейчас переполнен Хабр и не только. Несмотря на это не могу не согласиться с соседними комментариями о низком уровне материала, от себя добавлю про техническую часть, касающуюся математических вычислений:
Вы сравниваете свои реализацию метода №1 и метода №2, полезные для широкого круга инженеров выводы можно было бы делать, если бы ваши рутины были хорошо оптимизированы или использовались известные библиотеки. А так можно легко получиться, что когда вы соптимизируете обе реализации, то результаты поменяются. На хабре есть например отличная статья про то, как умножать матрицы на CPU и что реализации одной и той же математической формулы может различаться по производительности в 1000 раз https://habr.com/ru/articles/359272/
На практике если вы хотите обращать матрицу с помощью LU декомпозиции (или какой-либо другой декомпозиции), то в большинстве случаев нет смысла вычислять обратную матрицу в явной форме, вместо этого вы храните матрицы декомпозиции и используете backward/forward propagation вместо умножения. Для LU (или LDU) декомпозиции при этом всю декомпозицию можно уместить в одной матрице, причем это можно сделать без дополнительной памяти если исходная матрица не нужна, соответствующий код есть на википедии https://en.wikipedia.org/wiki/LU_decomposition#C_code_example
КДПВ -- "картинка для привлечения внимания", т.е. титульная. Статья (и пакет qr-verbose) не про то, чтобы генерировать QR коды, а про то помочь разобраться как они устроены, основной посыл, что данные в нижнем коде уложены уже не так просто, как в верхнем, в других статьях-туториалах на хабре вы такого не найдёте (смотрите самую последнюю картинку в статье). В любом случае, спасибо, что проверили!
По поводу сканируемости: оба сканируются с андроида -- да, так и должно быть. По поводу сбербанка, сам им не пользуюсь, но судя по тому, что вы написали, это видимо сканнер платежа, полагаю что он ожидает какой-то идентификатор платежа, а не просто какую-то произвольную информацию. Думаю, что в Озоне тоже самое
Текст и код усеяны юникодом, который для меня в большинстве случаев признак нейрообработки (и мне кажется не только для меня). Готов поверить, что вы это делаете сами -- в этом случае снимаю шляпу! Если же это всё-таки обработка LLM, то ... просто напишите что и где используете, люди поймут. Мне вот тоже иногда нейрослоп приписывают, думаю перестать тратить время на ручную замену "--" -> "—"
Отличная статья, определенно в закреп! Некоторые отдельные тезисы хотелось бы обсудить
Профилируйте Release билд с debug symbols (-O2 -g), не Debug!
Вопрос, насколько отличается -O2 и -O3? По моему опыту например SIMD clang/gcc поагрессивней в SIMD оптимизациях при -O3, но реально я не никогда особо не замерял, так как для критической части кода SIMDы писал вручную.
1. Меньше кода = быстрее
Категорически не согласен, причем вы сами приводите пример #10 когда это не так -- как-будто хочется уточнения. Ну и касательно примера 10 тоже хочется отметить, что это должно сворачиваться в SIMD.
Деление - дорого
Бессмертная классик, я бы всё-таки дополнил, что деление на константу сильно дешевле деления на переменную.
Ну и отдельно хотелось бы отметить что у вас в кучу смешаны оптимизации разных типов, хотел бы от вас комментарий по опыту. Лично я при оптимизации стараюсь придерживаться приоритета кэш промахи -> ветвление -> арифметика, сам не до конца уверен что это универсальный подход. А какого подхода придерживаетесь вы?
В Формуле-1 нет водителей, есть пилоты. И я себе не могу представить ситуации, чтобы пилот Ф1 работал в маршрутке, только ради контента или если приговорят к общественным работам
Насколько я помню свою быль школьником/студентом, некоторые преподы яро боролись со списыванием, но далеко не все, и уж тем более это не было системным.
По поводу второго тезиса, мне кажется, что это очень кривая реализация принципа "раз работал в течение семестра, то имеешь привелегию". Это можно сделать адекватно, например в СПбГУ/ВШЭ где я работал, важна была только итоговая оценка, которая на 30% состояла из оценки за экзамен и на 70% из оценки за работу в течение семестра, более того это было официально и известно всем учащимся.
На экзамене ты "соревнуешься" сам с собой и никому, кроме себя, не вредишь (наверное).
По результатам экзамена вас сравнивают с другими экзаменуемыми и на основании результатов принимают решения, влияющие на вашу дальнейшую судьбу, обычно выражается в том, что лучшие по результатам так или иначе получают какие-то привелегии.
Единственный способ борьбы со списыванием - перевод школы на осадное
Вообще не согласен. Вы говорите про самую последнюю стадию на самом экзамене, хотя начинать можно гораздо раньше. В России списывание просто никто не считает списывание серьезной проблемой, в связи с чем по сути нет никакого заметного наказания, никто даже не считает нужным в явной форме сказать, что это плохо. Вот есть хорошая статья от ВШЭ
где рассказывается, что в западных вузах делается и то, и другое. В конце концов можно бороться не просто информированием, а социальной рекламой/пропагандой.
Присоединяюсь, вообще лично кажется, что основная проблема -- это не LLM и его использование, а списывание само по себе и отсутствие систематического порицания его. Все знают, что списывание российских вузах -- это норма, риски быть пойманными и реально наказанными малы по сравнению с возможностью на порядок улучшить результаты экзаменов. После защиты диссертации я ретроспективно написал большой текст про мой путь в образовательной среде
И вот я собирался пойти на апелляцию, в преддверии чего мне рекомендовали взять с собой ручку: “если что — допишешь просто что-нибудь, тебе же как раз одного-двух баллов не хватает”. Разумеется, это нарушение, и я не помню, с какой стороны поступало это предложение: от друзей по 239, их родителей или учителей из моей школы. Ручку я с собой взял, но уверен, что не воспользовался, но не могу точно сказать, из-за своего чувства справедливости или боязни того, что поймают. Так-то вроде бояться нечего — ну поймают, выгонят, вроде терять то все равно нечего. Я в итоге отстаивал написанное на олимпиаде и у меня действительно был один момент, который претендовал на те самые недостающие баллы. Обычно в таких спорных ситуациях особо не мучались и разрешали конфликт в сторону учащегося: людей было много, а времени мало. Так я в итоге попал на городской тур, решил там минимальный набор задач, получил свой диплом 3ей степени, в 239 меня не взяли, а вот в АГ СПбГУ взяли.
Случай в ВУЗе
Функциональный анализ, 3ий курс: я думал про списывание написать отдельно поподробней, но наверно хватит и абзаца здесь. Спросил своих однокурсников — в целом консенсусное мнение, что 60% из нас списывали на экзаменах постоянно. Я списал наверно на 1-2 экзаменах за всю учебу ... но не в этот раз. И надо сказать, что в этот раз это действительно имело значение: из двух билетов один я знал полностью, второй — теорема Радона-Никодима, в котором я помнил только половину доказательства, о чем я честно сообщил и получил 4 ровно за это. В конечном счете я не понимаю ни того, почему официально за списывание выгоняют с экзамена, но по факту делают это спустя рукава, и почему вообще проверка знаний устроена так, что это имеет значение. Закрою эту тему старой притчей: Приходит студент на экзамен практически не подготовленным, в итоге получает “отлично”, перед тем как уйти что-то его укусило и он спросил: «А почему Вы мне 5 поставили? Я же почти ничего в предмете не понимаю» — «чем проще студенту получить зачет по моему предмету, тем ценнее я как специалист»
Раз уж рассказали про быстрое приближенное вычисление степени с использованием особенностей IEEE 754, то не лишним будет напомнить про легендарный Быстрый обратный корень.
А еще у вас как-то странно получилось, что вы сначала расписали про x&-x и что он выделяет послений бит .... а потом забыли про это и рассказали уже про x&(x-1) и что это тоже выделяет последний бит.
А так спасибо за статью! Позволю себе оставить немного ссылок по теме
В общем, исходный посыл в том, что визуально конечно аналогия интересная, но при попытке в ней хоть чуть-чуть разобраться оказывается, что она не работает
Так на самом деле они могут накрениться только из-за что зазор есть иначе двигаться пришлось бы. На картинках выше я считал только площадь самих штакетин (они так называются?)
Это было абсолютно строго и при этом интуитивно понятно любому, кто хоть раз видел покосившийся забор.
Я вот представил себе покосившийся забор, для меня довольно очевидно, что у него площадь как и у непокосившегося, также очевидно, что меньше высота, и чуть менее очевидно, что больше площать основания. В доказательстве, которое приводит автор работает другой принцип -- высота и площадь основания не меняются. В общем это яркий пример того "Шедевр инженерной мысли" работает совершенно не так как задумано, а попутно и пояснение того почему в математике существует такой формализм. "Доказательство" пи=4 тоже отличный и я бы сказал что более глубокий пример, который показывает с какими проблемами сталкивались люди у истоков классического анализа, нам в итоге на блюдечке принесли выверенную аксиоматику, а все равно находятся те, кто говорит, что это всё деградация и "убивание смысла".
Мне кажется, что это статья гораздо лучше большинства нейрослопа, которым сейчас переполнен Хабр и не только. Несмотря на это не могу не согласиться с соседними комментариями о низком уровне материала, от себя добавлю про техническую часть, касающуюся математических вычислений:
Вы сравниваете свои реализацию метода №1 и метода №2, полезные для широкого круга инженеров выводы можно было бы делать, если бы ваши рутины были хорошо оптимизированы или использовались известные библиотеки. А так можно легко получиться, что когда вы соптимизируете обе реализации, то результаты поменяются. На хабре есть например отличная статья про то, как умножать матрицы на CPU и что реализации одной и той же математической формулы может различаться по производительности в 1000 раз https://habr.com/ru/articles/359272/
На практике если вы хотите обращать матрицу с помощью LU декомпозиции (или какой-либо другой декомпозиции), то в большинстве случаев нет смысла вычислять обратную матрицу в явной форме, вместо этого вы храните матрицы декомпозиции и используете backward/forward propagation вместо умножения. Для LU (или LDU) декомпозиции при этом всю декомпозицию можно уместить в одной матрице, причем это можно сделать без дополнительной памяти если исходная матрица не нужна, соответствующий код есть на википедии https://en.wikipedia.org/wiki/LU_decomposition#C_code_example
30% кода можно закрыть на любой версии при выставленном уровне коррекции ошибок H и в статье об этом написано.
КДПВ -- "картинка для привлечения внимания", т.е. титульная. Статья (и пакет
qr-verbose) не про то, чтобы генерировать QR коды, а про то помочь разобраться как они устроены, основной посыл, что данные в нижнем коде уложены уже не так просто, как в верхнем, в других статьях-туториалах на хабре вы такого не найдёте (смотрите самую последнюю картинку в статье). В любом случае, спасибо, что проверили!По поводу сканируемости: оба сканируются с андроида -- да, так и должно быть. По поводу сбербанка, сам им не пользуюсь, но судя по тому, что вы написали, это видимо сканнер платежа, полагаю что он ожидает какой-то идентификатор платежа, а не просто какую-то произвольную информацию. Думаю, что в Озоне тоже самое
https://yandex.ru/video/preview/3518178718487329809
https://habr.com/ru/articles/950774/
Да, а еще можно греческий алфавит, значок кубического корня и прочие прелести, но нет, спасибо, я пожалуй всё-таки лучше в
Текст и код усеяны юникодом, который для меня в большинстве случаев признак нейрообработки (и мне кажется не только для меня). Готов поверить, что вы это делаете сами -- в этом случае снимаю шляпу! Если же это всё-таки обработка LLM, то ... просто напишите что и где используете, люди поймут. Мне вот тоже иногда нейрослоп приписывают, думаю перестать тратить время на ручную замену "--" -> "—"
Отличная статья, определенно в закреп! Некоторые отдельные тезисы хотелось бы обсудить
Вопрос, насколько отличается -O2 и -O3? По моему опыту например SIMD clang/gcc поагрессивней в SIMD оптимизациях при -O3, но реально я не никогда особо не замерял, так как для критической части кода SIMDы писал вручную.
Категорически не согласен, причем вы сами приводите пример #10 когда это не так -- как-будто хочется уточнения. Ну и касательно примера 10 тоже хочется отметить, что это должно сворачиваться в SIMD.
Бессмертная классик, я бы всё-таки дополнил, что деление на константу сильно дешевле деления на переменную.
Ну и отдельно хотелось бы отметить что у вас в кучу смешаны оптимизации разных типов, хотел бы от вас комментарий по опыту. Лично я при оптимизации стараюсь придерживаться приоритета кэш промахи -> ветвление -> арифметика, сам не до конца уверен что это универсальный подход. А какого подхода придерживаетесь вы?
Да, в основной статье плотно этот вопрос обсудили, выбранный способ интеграции -- это просто беда
В Формуле-1 нет водителей, есть пилоты. И я себе не могу представить ситуации, чтобы пилот Ф1 работал в маршрутке, только ради контента или если приговорят к общественным работам
Насколько я помню свою быль школьником/студентом, некоторые преподы яро боролись со списыванием, но далеко не все, и уж тем более это не было системным.
По поводу второго тезиса, мне кажется, что это очень кривая реализация принципа "раз работал в течение семестра, то имеешь привелегию". Это можно сделать адекватно, например в СПбГУ/ВШЭ где я работал, важна была только итоговая оценка, которая на 30% состояла из оценки за экзамен и на 70% из оценки за работу в течение семестра, более того это было официально и известно всем учащимся.
По результатам экзамена вас сравнивают с другими экзаменуемыми и на основании результатов принимают решения, влияющие на вашу дальнейшую судьбу, обычно выражается в том, что лучшие по результатам так или иначе получают какие-то привелегии.
Вообще не согласен. Вы говорите про самую последнюю стадию на самом экзамене, хотя начинать можно гораздо раньше. В России списывание просто никто не считает списывание серьезной проблемой, в связи с чем по сути нет никакого заметного наказания, никто даже не считает нужным в явной форме сказать, что это плохо. Вот есть хорошая статья от ВШЭ
https://ioe.hse.ru/news/828962183.html
где рассказывается, что в западных вузах делается и то, и другое. В конце концов можно бороться не просто информированием, а социальной рекламой/пропагандой.
Присоединяюсь, вообще лично кажется, что основная проблема -- это не LLM и его использование, а списывание само по себе и отсутствие систематического порицания его. Все знают, что списывание российских вузах -- это норма, риски быть пойманными и реально наказанными малы по сравнению с возможностью на порядок улучшить результаты экзаменов. После защиты диссертации я ретроспективно написал большой текст про мой путь в образовательной среде
https://vk.com/@938889-o-nauke-i-obrazovanii
По теме там два примечательных случая
Случай на олимпиаде в школе
И вот я собирался пойти на апелляцию, в преддверии чего мне рекомендовали взять с собой ручку: “если что — допишешь просто что-нибудь, тебе же как раз одного-двух баллов не хватает”. Разумеется, это нарушение, и я не помню, с какой стороны поступало это предложение: от друзей по 239, их родителей или учителей из моей школы. Ручку я с собой взял, но уверен, что не воспользовался, но не могу точно сказать, из-за своего чувства справедливости или боязни того, что поймают. Так-то вроде бояться нечего — ну поймают, выгонят, вроде терять то все равно нечего. Я в итоге отстаивал написанное на олимпиаде и у меня действительно был один момент, который претендовал на те самые недостающие баллы. Обычно в таких спорных ситуациях особо не мучались и разрешали конфликт в сторону учащегося: людей было много, а времени мало. Так я в итоге попал на городской тур, решил там минимальный набор задач, получил свой диплом 3ей степени, в 239 меня не взяли, а вот в АГ СПбГУ взяли.
Случай в ВУЗе
Функциональный анализ, 3ий курс: я думал про списывание написать отдельно поподробней, но наверно хватит и абзаца здесь. Спросил своих однокурсников — в целом консенсусное мнение, что 60% из нас списывали на экзаменах постоянно. Я списал наверно на 1-2 экзаменах за всю учебу ... но не в этот раз. И надо сказать, что в этот раз это действительно имело значение: из двух билетов один я знал полностью, второй — теорема Радона-Никодима, в котором я помнил только половину доказательства, о чем я честно сообщил и получил 4 ровно за это. В конечном счете я не понимаю ни того, почему официально за списывание выгоняют с экзамена, но по факту делают это спустя рукава, и почему вообще проверка знаний устроена так, что это имеет значение. Закрою эту тему старой притчей: Приходит студент на экзамен практически не подготовленным, в итоге получает “отлично”, перед тем как уйти что-то его укусило и он спросил: «А почему Вы мне 5 поставили? Я же почти ничего в предмете не понимаю» — «чем проще студенту получить зачет по моему предмету, тем ценнее я как специалист»
А это в браузере или в приложении? Я в приложении проверял, у меня такого эффекта не было.
Можете пожалуйста под спойлер убрать с описанием сути в заголовке? Я тогда закреплю комментарий
Какие штуки? Если подробнее опишете, то могу комментарий закрепить. Есть смысл воспользоваться формой обратной связи
https://habr.com/ru/feedback/
Раз уж рассказали про быстрое приближенное вычисление степени с использованием особенностей IEEE 754, то не лишним будет напомнить про легендарный Быстрый обратный корень.
А еще у вас как-то странно получилось, что вы сначала расписали про x&-x и что он выделяет послений бит .... а потом забыли про это и рассказали уже про x&(x-1) и что это тоже выделяет последний бит.
А так спасибо за статью! Позволю себе оставить немного ссылок по теме
http://www-graphics.stanford.edu/~seander/bithacks.html
Donald E. Knuth's "The Art of Computer Programming", Volume 4A, Chapter 7.1.3
H. S. Warren Hackerʼs Delight
Обстоятельно о подсчёте единичных битов
Алгоритмы манипуляций с битами
В общем, исходный посыл в том, что визуально конечно аналогия интересная, но при попытке в ней хоть чуть-чуть разобраться оказывается, что она не работает
Так на самом деле они могут накрениться только из-за что зазор есть иначе двигаться пришлось бы. На картинках выше я считал только площадь самих штакетин (они так называются?)
Я не знаю, что и как там в современном курсе школьной планиметрии, я увидел у вас вот такое
А вот то, о чем подумал я представив покосившийся забор
Поддержу, хотел бы добавить конкретно вот про это
Я вот представил себе покосившийся забор, для меня довольно очевидно, что у него площадь как и у непокосившегося, также очевидно, что меньше высота, и чуть менее очевидно, что больше площать основания. В доказательстве, которое приводит автор работает другой принцип -- высота и площадь основания не меняются. В общем это яркий пример того "Шедевр инженерной мысли" работает совершенно не так как задумано, а попутно и пояснение того почему в математике существует такой формализм. "Доказательство" пи=4 тоже отличный и я бы сказал что более глубокий пример, который показывает с какими проблемами сталкивались люди у истоков классического анализа, нам в итоге на блюдечке принесли выверенную аксиоматику, а все равно находятся те, кто говорит, что это всё деградация и "убивание смысла".