Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

「高速フーリエ変換」を含む日記 RSS

はてなキーワード: 高速フーリエ変換とは

2024-11-08

[][]量子コンピュータについて彼らがあなたに語らない事

漫画家エナガの複雑社会を超定義」の「量子コンピューター」の回がこの後1:20からNHK総合再放送するようなので、本放送を見たとき自分感想を改めてここにまとめる。

 一般メディアにおける「量子コンピューター」の取り上げ方はいつも、専門知識を持っている人間から見たらとんでもない誇張と飛躍で充ちている。もはやSTAP細胞詐欺か何かに近い危険性を感じるので、こういう話に接する時の注意点、「ここを省略していることに気づくべき」要点を解説する。

 

 メディアにおける「量子コンピューター」の説明は、大体いつもストーリーが似通っている。

  1. 量子ビットは重ね合わせの並列計算が出来る
  2. 量子チューリングマシンには素数暗号を高速に解けてしまアルゴリズム存在する
  3. Googleなどが量子コンピュータを開発した(と称している)
  4. 量子コンピュータは我々の未来を一変させるかも知れない

 件の軽い調子番組だけでなく、ニュートンだろうと日経サイエンスだろうと、まあおおよそ複素関数論の「ふ」の字も紙面に出したら読者がついてこれなくなる程度のメディアではほとんど同じ構成である

 これはこの20年ほど変わらない一種パターンになっているが、実はこのそれなりに繋がっているように見える一行一行の行間すべてに論理的問題を孕んでいる。

 この行間に実は存在する論理の省略、あるいは嘘と言っても良い誤摩化しをひとつひとつ指摘していこうと思う。

 

行間1→2:量子コンピュータは「並列計算が出来る」わけではない

 量子ビットには重ね合わせの状態が保持できる。これに対して計算処理をすれば、重ね合わせたすべての状態に並列に計算を実行できる。ように見える。

 しかし、これも一般的に聞いたことがあるはずなので思い出して欲しいが、「量子力学の重ね合わせの状態は、『観測』により収束する」。

 つまりどういうことか? 量子ビットに対する処理が並列に実行出来たとしても、量子コンピュータの出力はそれをすべて利用できるわけではない。

 量子コンピュータの出力とは、量子ビットに対する並列処理の結果の、確率的な観測に過ぎない。

 なので、手法的な話をすれば、量子アルゴリズムとはこの「確率確率振幅という量子状態パラメータ)」を操作して、望む入力に対する結果が観測されやすくする、というちょっとひとひねりした考え方のものになる。

 単に並列処理ができるから凄いんだという説明は、増田自身一般向けの説明に何度も繰り返したことがあるが、まあ基本的には素人相手の誤摩化しである

 ここさえ踏まえれば、知識がなくともある程度論理的ものを考えられる人には、量子コンピュータに対する色々な期待も「そう簡単な話ではない」となんとなく感じられると思う。

 

行間2→3:暗号解読のできる量子チューリングマシンは開発されていない

 量子コンピュータキラーアプリとされている暗号解読は「ショアのアルゴリズム」という非常に巧妙な計算を通して得られる。

 上で説明したように、量子コンピュータは単に「並列計算から」なんでも高速な処理ができる訳ではない。暗号解読については、この「ショアのアルゴリズム」という自明でない計算手法高速フーリエ変換の応用)が見つかってしまたからこそ問題になっているのであって、このアルゴリズムの実行が出来なければ暗号解読ができるとは言えない。

 さてここから量子力学というより計算機科学の話になるが、あるチューリングマシン上のアルゴリズムが別の計算モデルで実行可能かどうかは、その計算モデルチューリング完全であるかどうかによるというのはプログラマには常識である

 これは量子コンピュータにおいても変わらない。量子コンピュータ一般に知られる多くのアルゴリズムはドイチュの量子チューリングマシンを前提に作られており、チューリング完全でないアーキテクチャでは実行できない。できるはずがない。ショアのアルゴリズムも当然そうだ。

 しかしながら、この20年弱、D-Wave社が最初の「自称量子コンピュータ」を開発したと発表して以来、さまざまな企業が「開発に成功した」と発表した「量子コンピューター」の中で、このチューリング完全ものは何一つ存在しない。

 これらでは、今後どれだけ「性能」が伸びようとも、暗号解読の役には立たないのである

 

行間3→4:量子コンピュータ可能性は、あるとしても非常に限られたものである

 以上の議論から総合すればわかると思うが、量子コンピュータ世界が一変するなんてヴィジョンははっきり言ってSF以下のファンタジーというレベルしかない。

 第一に、量子コンピュータの利用できるドメインは非常に限られたものであるし、第二に、その中の最も宣伝されているものである暗号解読の可能な量子チューリングマシンの開発の目処などまったく立っていない。どころか、業界ほとんど誰も挑戦することすら本気では考えていない。

 現状の「自称量子コンピュータ」(量子情報システム、とでも言おうか)にも利用の可能性はある。何より量子状態のものが作れるので、物理学化学領域の量子システムシミュレーションするのに適しているのは言うまでもないだろう。しかし、まあ、現状あり得る比較現実味のある用途というのは、それくらいではないか

 

 このように、メディア量子コンピュータについて語るとき、そこには非常に多くの誤摩化しや飛躍が含まれる。これは結構業界の根幹に関わる問題なのではと思うが、時間が来たので総括は後述にでもすることにする。

 何か質問があればどうぞ。

2022-12-05

anond:20221205195519

コンピュータ概念すら存在しなかった頃に何故か高速フーリエ変換アルゴリズムを知ってたガウスかいマジで転生者なんじゃねーかこいつっていう存在が既にいるんだよなあ。

2021-06-17

anond:20210617075257

web技術ってつくづく興味湧かねーな…。技術と言うよりは技能なんだよなあ。原理がなくてノウハウの寄せ集めでしかないというか。それはそれで世の中には求められてるんだけどさ。

高速フーリエ変換のような高度な数学必要ないが

FFTは「高度な数学」ではないだろ。

経験から1ヶ月でWeb企業就職する勉強法

取り上げた技術は、本格的な開発でも役に立つもので、最も学習コストが低いものを選んだ。

重要度が低いものは載せていない。たとえばHTMLCSSなんてググりながら書けば全く問題ない。Bootstrapなどのフレームワークも全くやる必要はなく、仮に就職先で使っていたら覚えればいい。

逆に言えば以下に挙げる技術は、そもそも概念自体プログラミングにとって普遍的ものであり、(基礎的な部分を)調べながら使うようではエンジニア失格ということ。

基本的現在では、バックエンドフロントエンド運用保守全てができないエンジニア価値は無い。

以下に挙げた技術(①⑤⑥は他の言語フレームワーク代替可能)が身に付いていなければまともな企業就職することは難しい(もちろん、下らない業務システム下請けで作ってる底辺企業には入れるだろうが)。

経験者でも、これらができない/わからないのは、相当恥ずかしいことだと思った方がいい。

特定言語フレームワークの書き方を知っていること自体意味は無い。

重要なのは、他の言語フレームワークにも共通する基礎を理解すること・保守性やセキュリティなどの品質を高める使い方ができること。

PythonJavaScriptマスターする

この2つは習得が容易だし、今覚えておけば向こう10年腐ることはないだろう。

プログラミング言語完璧理解する必要がある。

基本的な構文や、よく使う標準ライブラリは勿論、高階関数クラス・非同期処理等の発展的な機能も知り尽くしていなければならない。

言語のみではなく、パッケージ管理単体テストタスクランナー等の周辺ツールの使い方も熟知している必要がある。

また、「リーダブルコード」や「コードコンプリート」に書いてあるような良い作法も身に付ける必要がある。


Gitの基本操作を覚える

Gitを使えないのはプログラマーとして論外。細かい機能は調べればよいが、

等の基本的フローは必ずできなければならない。


Linuxの基本操作を覚える

多くの場合、本番環境テスト環境Linuxサーバーであるから、以下のような基本的概念と使い方を知っておく必要がある。


Dockerの基本操作を覚える

環境構築、CIデプロイなどは、現在コンテナを使って行うことが当たり前になっている。

これも細かいことをすべて覚える必要はないが、Dockerfileの書き方や、docker-composeの使い方などは知っておかなければいけない。


⑤ Flaskを覚える

Flaskは、数あるWebフレームワークの中で最も簡単。本当に呆れるほど簡単で、Pythonさえ書ければすぐにアプリを作れる。

フレームワークを覚えること自体重要なのではなく、Web開発の基本を習得することが重要HTTPルーティングデータベースSQL認証セッション管理などは当然すべて覚える。

データベースは、就職したらMySQLPostgreSQLなどを使うことが多いかも知れないが、今はPythonの標準ライブラリにあるSQLite3を使えば十分。

作ったアプリを公開したければ、「Heroku」などにデプロイするのが良いだろう。

追記 2021/06/17 14:07

ブコメで指摘をいただきました。HerokuではSQLite3は使用できないようです。公式ドキュメントに従ってPostgreSQL使用して下さい。

SQLite3はファイルデータを持てる簡易DBなんだけど、Herokuデプロイしてもストレージ的な使い方はできないから、結局PostgreSQLを使う必要あるから注意してね。(DAOを丸ごと書き換える羽目になる)

参考: https://devcenter.heroku.com/ja/articles/sqlite3

ありがとうございます

Vue.jsを覚える

今の時代フロントエンドフレームワークなしで作るのはただのバカ

2021年現在実用的なフロントエンドフレームワークはReactとVueしかない。Vueの方が少し簡単なのでこちらを選んだが、JavaScriptをしっかり理解しているなら大差は無い。

フロントエンドには膨大なパッケージ群があって全部覚えるのは大変だが、とりあえずまずはVue完璧に使えればいい。Webpackの設定などは既存のものを流用すればいい。



基本的アルゴリズムを学ぶ

アルゴリズムは全てのコンピュータ技術の基礎であり、絶対に知っていなければならない。

高速フーリエ変換のような高度な数学必要ないが、クイックソート木構造のような基本的アルゴリズムは当然、その性質を知っていなければならない。

それらは言語組み込み関数や標準ライブラリでも使われており、理解していなければ、それらの機能を正しく使うことができない。

また、プログラムを読み書きする際には、そのコード計算量を見積もれなければならない。

セキュリティを学ぶ

セキュリティは言うまでもなく学ばなければならない。

有名な脆弱性攻撃手法XSSSQLインジェクション・CSRFなど)が何だか理解していて、その対策実装できなければならない。

各種暗号化技術署名などについても、実装の詳細は知らなくていいが、共通鍵暗号や公開鍵暗号などの特性理解する必要がある。

認証パスワード管理などを実装する際は、当然ベストプラクティスに従わなければならない。

2021-05-02

anond:20191113175923

高速フーリエ変換が未だによく分からないので誰か教えてください

回転子とか使った解説の方が分かりやすい感じがしたんだけど途中で投げてる

2020-10-28

別に高速フーリエ変換アルゴリズムは知らなくてもいいけど、Web制作者ならPNGJPEGの違いくらい知っててくれ。

2018-12-31

anond:20181231202418

普通にコード書いたけど、リアルタイムなら特にコード最適化してないプログラムinMBPでも N=2000位まではいけるっぽい。

cos()とsin()を大量に計算するだけなので、最適化すれば多分44.1Khzくらいまではレイテンシ1秒以内で計算できるんちゃうかな。

γ線かになると流石に不可能ってのは理解したが。(そのために高速フーリエ変換があるってのはわかった)

2018-07-31

数値計算問題をいまどきの言語で教わりたい

横軸に言語を並べる。 Fortran, C, C++, Python, Go, Rust, Kotlin, あとなんか好きなもの並べる。

おっさんに対抗するためにFortranとCとPythonは必ず書いておく。

縦軸に数値計算関連のキーワードを並べる。

標準で扱える数値の精度、複素数, 多倍長演算, 特殊関数, 線形代数, 乱数, 高速フーリエ変換, 統計, その他いろいろ。

交差するところにライブラリ名前を書く。標準で持ってるなら標準装備とか○とか書いとく。

という作業を誰か俺の代わりにやってくれるか既にあるなら教えてください。

 
ログイン ユーザー登録
ようこそ ゲスト さん