И в этот момент на сцену выходят ранее активно хайповавшиеся, но не имевшие реальных задач квантовые компьютеры, которые как раз отлично подходят для задач, связанных с векторами и матрицами, которые у нейронок где-то глубоко под капотом...)
Вот думал, не написать ли подобную статью, а ее уже написали, шо ж такое=) но вот именно по суперпозиции - мне кажется, что этой особенности уделяют как-то излишне много внимания. В конце концов, стакан с водой тоже может принимать не только значения 0 или 1(пуст-полон), а любые промежуточные- никто ж из них компьютер сделать не пытается. Решает именно запутанность, а точнее то, что она описывается не декартовым, как в классическом компьютере, а тензорным произведением, то есть сложность системы как раз зависит от числа кубитов не линейно, а экспоненциально (а число ее возможных состояний - как экспонента от экспоненты). И тут как раз кроется потенциальное преимущество для реальных задач- добавим в классическую систему 1 бит, и мы ее количество состояний удвоим; а добавим в квантовую кубит- возведем в квадрат. А это уже звучит потенциально интересно для этих ваших машинных обучений с векторами признаков очень большой длины(которые вотпрямщас по сути есть). Ну и да, вторая практическая сфера- моделировать что-то квантовое типа молекул, обычные компы в это не могут именно из-за той самой экспоненциальной сложности квантовой системы.
Ну да, требует иногда, но кмк так читаемость таки будет лучше. Вообще я бы прилично подвис, если бы надо было придумать пример, когда нужен посконный for, но не .map, .filter, .foreach или .reduce(бывает, но очень нечасто кмк).
Ваще ни к чему не было возражений, кроме как вот к этой штуке "ну если сложное условие написать в фильтре, то будет нечитаемо, в for лучше"- собственно, почему нечитаемо? Ну то есть если прям адски нафигачить все условия как есть- да, будет треш, но так оно и в цикле будет несильно лучше. Не лучше ли сделать просто .filter(checkVeryDifficultCondition), а уже в отдельном методе checkVeryDifficultCondition спокойно и, вероятно, тоже с подфункциями (как минимум применение весов типа 0.8 для боссов и -1 для внештатников напрашивается на отдельный метод через что-то типа массива объектов вида {condition: (employee: Employee) => boolean, weight: number}, через который мы прогоним каждый элемент и который потом меняется при желании за 2 минуты)? А если ещё и нормально имена методов подобрать, так и ваще огонь и никаких проблем с читаемостью, несмотря на .filter:)
Помните, был такой стартап про вывод грузов на орбиту через раскручивание его в гигантской спирали? Вот, ставим в местах избыточной генерации такую спираль и крутим её излишками. И тогда у нас есть даже джве опции: понадобилось электричество в сети- тормозим вращение и получаем с этого ток. Не нужно - раскручиваем до нужных оборотов и пуляем груз на орбиту почти что на халяву. А там уже космические фабрики, делающие всякое трудновыполнимое в условиях гравитации, вот это вот всё...
Кажется, можно было еще одну область применения упомянуть: химия/материаловедение. Природа, зараза, на уровне атомов и молекул взаимодействует как раз квантово, а это собственно дает точно такую же экспоненциальную от числа атомов сложность модели, как производительность КК- от числа кубитов. Классический компьютер, если верить примеру в "Танце с кубитами", уже для моделирования молекулы пенициллина(41 ЕМНИП атом, фигня по меркам органики) потребует где-то 10^83 транзисторов. А квантовому нужно будет где-то около 200-300 кубитов- от текущего момента еще далеко, но цифра, по крайней мере, реалистичная.
Ну на самом деле в общем случае не так- есть квантовые алгоритмы, которые гарантированно выдают правильный результат(алгоритм Дейча-Йожи, например). Но там задача, которая решается, довольно искусственная(но при этом вполне ускоряема квантово с линейной сложности до решения за 1 итерацию), которую непонятно, можно ли куда-то применить вообще.
И в этот момент на сцену выходят ранее активно хайповавшиеся, но не имевшие реальных задач квантовые компьютеры, которые как раз отлично подходят для задач, связанных с векторами и матрицами, которые у нейронок где-то глубоко под капотом...)
Вот думал, не написать ли подобную статью, а ее уже написали, шо ж такое=) но вот именно по суперпозиции - мне кажется, что этой особенности уделяют как-то излишне много внимания. В конце концов, стакан с водой тоже может принимать не только значения 0 или 1(пуст-полон), а любые промежуточные- никто ж из них компьютер сделать не пытается. Решает именно запутанность, а точнее то, что она описывается не декартовым, как в классическом компьютере, а тензорным произведением, то есть сложность системы как раз зависит от числа кубитов не линейно, а экспоненциально (а число ее возможных состояний - как экспонента от экспоненты). И тут как раз кроется потенциальное преимущество для реальных задач- добавим в классическую систему 1 бит, и мы ее количество состояний удвоим; а добавим в квантовую кубит- возведем в квадрат. А это уже звучит потенциально интересно для этих ваших машинных обучений с векторами признаков очень большой длины(которые вотпрямщас по сути есть). Ну и да, вторая практическая сфера- моделировать что-то квантовое типа молекул, обычные компы в это не могут именно из-за той самой экспоненциальной сложности квантовой системы.
Ну да, требует иногда, но кмк так читаемость таки будет лучше. Вообще я бы прилично подвис, если бы надо было придумать пример, когда нужен посконный for, но не .map, .filter, .foreach или .reduce(бывает, но очень нечасто кмк).
Привет, да)))
Ваще ни к чему не было возражений, кроме как вот к этой штуке "ну если сложное условие написать в фильтре, то будет нечитаемо, в for лучше"- собственно, почему нечитаемо? Ну то есть если прям адски нафигачить все условия как есть- да, будет треш, но так оно и в цикле будет несильно лучше. Не лучше ли сделать просто .filter(checkVeryDifficultCondition), а уже в отдельном методе checkVeryDifficultCondition спокойно и, вероятно, тоже с подфункциями (как минимум применение весов типа 0.8 для боссов и -1 для внештатников напрашивается на отдельный метод через что-то типа массива объектов вида {condition: (employee: Employee) => boolean, weight: number}, через который мы прогоним каждый элемент и который потом меняется при желании за 2 минуты)? А если ещё и нормально имена методов подобрать, так и ваще огонь и никаких проблем с читаемостью, несмотря на .filter:)
Ну, уж если заниматься механопанком...
Помните, был такой стартап про вывод грузов на орбиту через раскручивание его в гигантской спирали? Вот, ставим в местах избыточной генерации такую спираль и крутим её излишками. И тогда у нас есть даже джве опции: понадобилось электричество в сети- тормозим вращение и получаем с этого ток. Не нужно - раскручиваем до нужных оборотов и пуляем груз на орбиту почти что на халяву. А там уже космические фабрики, делающие всякое трудновыполнимое в условиях гравитации, вот это вот всё...
Кажется, можно было еще одну область применения упомянуть: химия/материаловедение. Природа, зараза, на уровне атомов и молекул взаимодействует как раз квантово, а это собственно дает точно такую же экспоненциальную от числа атомов сложность модели, как производительность КК- от числа кубитов. Классический компьютер, если верить примеру в "Танце с кубитами", уже для моделирования молекулы пенициллина(41 ЕМНИП атом, фигня по меркам органики) потребует где-то 10^83 транзисторов. А квантовому нужно будет где-то около 200-300 кубитов- от текущего момента еще далеко, но цифра, по крайней мере, реалистичная.
Ну на самом деле в общем случае не так- есть квантовые алгоритмы, которые гарантированно выдают правильный результат(алгоритм Дейча-Йожи, например). Но там задача, которая решается, довольно искусственная(но при этом вполне ускоряема квантово с линейной сложности до решения за 1 итерацию), которую непонятно, можно ли куда-то применить вообще.