https://qiita.com/N-H-Shimadaこの広告は、90日以上更新していないブログに表示しています。創造情報学専攻の冬院試を受験し、合格しました。事、冬院試問題(公式には公開されない)の再現pdf、その他感想などを載せておきます。物理系学科に進学しました。修士ラボは研究方針が合わなかったなどの理由でドロップアウト、いろいろ考えた結果、専攻分野を完全変更して情報系に行くことにしました(決めたのは2017年の11月頃)。冬院試をやっている専攻を見てる中でおもしろそうなテーマやってるラボを見つけて最終的に創造情報を受けることにした、という感じです。CS分野の知識はゼロからのスタートでした。他の院試合格ブログで紹介されているやつを適当に見て良さげなやつに決めました。結局まともに読んだのは次の4冊でした。見るだいたいこの順番で、1週間1冊ぐらいのペースで進めました。OSの本はプレミアがついてるっぽくて、院試直前だと中古で6000円以上とかの値がついてました。院試の流れ12/1から勉強開始、ここから1ヶ月間で参考書4冊を一通りと、過去問3年分ぐらい解きました。ここで飽きてしまって試験前々日までほぼ何も出来ませんでした。12/13に出願2/7~2/9に本試験2/20に郵送で結果が届きました。入学手続き用書類が同封されたデカイ封筒が速達で届きます。冬院試は掲示板発表無しの郵送のみなので、この合格発表までの1~2週間はずっとそわそわしてました。合格者は例年数人とからしい(?)ので、倍率は5倍以上ということになります。周り見渡すと8割ぐらいは留学生でした。Twitterで検索すると、夏院試落ちた東大情報系の学生(ISer)も数人いたっぽいです。留学生の学力レベルというのが未知過ぎてよくわかんないですね。この高倍率でも合格ラインがそこまで高くないっぽいことを考えると、あんまり点数取れてなさそうですが。ここ2年ぐらいは問題の選択が出来なくなってます。必然的に語句問題という運ゲーをやらされます。パソコン部屋に放置して昼休憩。午後は1人づつ部屋に呼ばれて、教員の見てる横で指示されたとおりに実行する。面接1人あたり5分ぐらい控室で待機して、順番が来たら別室に呼ばれます。教員10人ぐらいの前で座って質問に答えるスタイル。第一志望ラボの先生からの質問、「当該分野について何か勉強などしていますか?その内容について説明してください」。ラボで出た論文読んでますって言って、その内容を1分ぐらいで話しました。配属希望は第二志望まで書いていたのですがそちらからは質問されずでした。あまりに特徴的な受け答えをすると教員にTwitterで晒されるっぽいです。冬院試の問題は公式サイトでは公開されていません。試験終わった直後に一通り内容メモしていたので、それに基づいてLaTeXで書き起こしました。行ったので、結果出たら公開します。体感としては筆記7割、プログラミング7割かなという感じでした。iBTは64/120でした。合格発表直後に院試点数開示申請して、1ヶ月後に結果が届きました。平均点も合格最低点もわからず、自分の点数だけみても特になんとも言えないですね...ただ、筆記プログラミング合わせて7割弱ということで、自分の体感値とそれほど大きなズレはありませんでした。筆記試験は、出題範囲が広い割に問題数が極端に少ない、ということで勉強量や実力が反映されにくい試験になってます。最近は易化傾向で、何をさせたいのかわからないような問題も減って来ている気がします。プログラミング試験は難化傾向にあると思います。過去問で一番むずかしいと思った2016年夏院試は、プログラミング3割でも受かっている人もいるらしいです。自分が出来ないやつは周りも出来てないんやろなあぐらいの気持ちでいきました。不明瞭なまま、これからの生活を左右する高倍率試験を受けさせられるのは精神的にひたすらしんどかったです。ここ一本で受けるより情報学環とか併願してればよかったなあと何度か思いました。Pyhtonでやった1週間後くらいに結果が届いて、電話で配属先の研究室を確認するという流れ得点開示したところ筆記・プログラミング共に6割強くらいでした。学科?)(2014年8月と2015年2月に受験)勉強期間は、夏入試も冬入試も10日〜14日くらい某大学新聞に結果が載っていました。(電気電子系出身)大事な本はこれだけです。500ページくらいのもんでしょう。勉強手順wikiを見て軽く理解する→4~8行で説明出来るか確認する→出来たら次の言葉へ、出来なかったらwikiを読み直すこの繰り返しで語彙を増やすことができます。Kit」のプレビュー版が公開されました。Kit」には含まれています。Studio)上において、Q#のコードを実装して量子計算のシミュレーションを行います。「準備編」および「Q#を書いてみよう」の内容は、公式HP(英語)に準拠して書いています(2017年12月15日時点)。重ね合わせエンタングルメント量子テレポーテーション参考サイトなど準備編Q#の開発環境を構築します。次の2つのソフトウェアのインストールが必要となります。2017」のインストールこちらの公式サイトからダウンロードすることが出来ます。2017を選択するとダウンロード出来ます。vs_community~から始まる名前の実行ファイルがダウンロードされているはずなので、これを実行しインストールします。インストールを進めていくと次の画面が表示されます。「.NETデスクトップ開発」の2つの項目に必ずチェックを付けておきましょう。チェックを付けたら、右下のインストールをクリックします。インストールに成功すれば完了です。nowボタンをクリックすると、次のページが表示されます。ここでDownloadをクリックします。QsharpVSIX.vsixというファイルがダウンロードされているはずなので、実行します。Studioの拡張インストールパッケージであることが認識され、次のようなインストール画面が表示さあれます。指示に沿ってインストールします。これで環境構築は終了しました。Studioを起動し、メニューバーのチーム>接続の管理をクリックします。エクスプローラーが出現します。ローカルGitリポジトリの下の複製をクリックします。「複製するGitリポジトリのURLを入力してください」の欄に、https://github.com/Microsoft/Quantum.gitと入力し、複製をクリックします。エクスプローラーがソリューションエクスプローラーに切り替わります。切り替わったソリューションエクスプローラー内にある、QsharpLIbraries.slnをダブルクリックします。何らかのインストールが要求される場合があるので、指示に従ってインストールを行います。TeleportationSampleを右クリック、スタートアッププロジェクトに設定を左クリックします。上の開始ボタンをクリックすると、Debug用プログラムが動きます。最終的にコマンドプロンプトが起動し、次のようなメッセージが表示されればおkです。表示されるTrue/Falseはランダムに変わるので、完全にこの通りでなくても大丈夫です。量子コンピューターについて現在使われている古典コンピューターでは、1ビット情報が「0」と「1」の2値で表現されています。物理的には電圧の高低で0と1を表現していることが多いです。これに対して、量子コンピューターでは、1ビットとして「0」と「1」が確率的に重ね合わさった状態を用います(キュービット、Qubit)。この重ね合わせ状態をわれわれは直接観測によって捉えることができません。観測という行為によって重ね合わせ状態は破壊され、確率に応じて「0」か「1」に収束してしまうからです。ように、観測値が得られます。100個分観測すれば、およそ30個が「0」、70個が「1」となります。量子コンピューターでは、この確率的重ね合わせという特殊な性質を用いることで、離散フーリエ変換や素因数分解(RSA暗号の解読)を古典コンピューターより圧倒的に高速で解くことが出来るアルゴリズムが考案されており、量子コンピューターの性能がキャッチアップすれば、いずれ現実のものとなるでしょう。今のところ、実在の量子コンピューターで古典コンピューターを超える性能を持つモノは存在しておらず、古典コンピューターを超える(=量子超越性)ことを目指した開発が進んでいます。itpro.nikkeibp.co.jp量子計算について今後のために、量子計算における記号の定義や回路図の表現をまとめておきます。量子計算において、1ビットの状態を表す2値(0と1)は$|0\rangle$や$|1\rangle$のように表記します。\rangle$は、ブラケット記法という量子力学特有の書き方です。量子計算回路では、左から入力、右に進みながら、途中に設けられたゲートなどで操作を受けます。以下、具体的な入力・ゲート・出力を示しておきます。|1\rangle$)させるゲートです。後に詳しく見ますが、重ね合わせ状態を作るアダマールゲートや、エンタングルメント状態を作成するCNOTゲートなどがあります。Q#を書いてみようQubitの操作・観測まずは、Qubitの操作・観測を行ってみましょう。Applicationを選択、名前を「Bell」としてOKボタンをクリックします。すると、次のようなコードが書かれたコーディング画面が表示されます。エクスプローラー内のOperation.qsを名前変更(右クリック)し、Bell.qsとします。ここからコードを修正・加筆していきます。内部に次のような処理を書き加えます。"Set"関数を定義。"count"回数だけSet関数を実行する。}}Q#の特徴として、letで不変変数を定義、mutableで可変変数を定義、setで算術結果などの代入、を行います。次は、Driver.csファイルを編集します。.csファイルはC#で記述します。{}内に、次のコードを挿入します。"BellTest"関数を実行し、結果を出力します。continue...");System.Console.ReadKey();以上でQubit操作・観測のプログラムが完成しました。F5キー(または開始ボタン)を押して実行してください。continue...出力の解釈(1行目)としては、「初期状態として$|0\rangle$を用意し、これを観測した結果を蓄積する」というプロセスを1000回行った結果、$|0\rangle$が1000回得られ、$|1\rangle$が0回得られたという風になります。(qubits[0]);このように反転(Flip)した結果が得られます。continue...これは、量子計算の節で示した、次のような回路を動かしたことになります。重ね合わせここまでは、Qubitとは言っても、初期値が$|0\rangle$または$|1\rangle$、これをX(Xゲート)によるフリップ操作で$|1\rangle$または$|0\rangle$に変化させるというだけで、古典的な2値ビットと同じことしかやっていませんでした。ここからは、完全な量子現象である、「重ね合わせ(superposition)」および「エンタングルメント(entanglement)」の状態を生成していきます。1\rangle}{\sqrt2}\end{eqnarray}重ね合わせ状態を観測した場合、観測値は状態に付いている係数の2乗に応じた確率で、その状態が得られます。0\rangle$の観測値が得られます。1\rangle$についても同様です。回路図は、次のようになります。実際にQ#で重ね合わせ状態を作成・観測してみましょう。先のBell.qsにおいて、観測前に作用させたXゲートをHゲートに書き換えるだけです。1\rangle$がおよそ半々の確率で観測されている、という結果になりました。エンタングルメント前節の「重ね合わせ」は1キュービット上における量子現象でした。ここからは、キュービットが2つ存在している場合について考えていきます。本格的に量子計算っぽい内容になっていきます。2キュービットが存在する下のような回路を考えます。入力と出力が2つに増えました。\rangle$のように表します。出力の方も同様の表記をすると、下図のようになります。ここに、CNOTゲートを追加してみましょう。ここに示したCNOTゲートは、A側とB側の入力を足した結果をB側に出力します(A側は変化しない)。すると、状態1から状態2のように変化します。この状態2では、片方(A)を観測するともう一方(B)の状態が必然的に確定します。Aを観測して0ならばBが0、Aが1と出ればBも1になります。10\rangle$といった状態が存在しないからです。(ちなみに状態1では、どちらか一方を観測しても他方に影響は及はず、このような2つのキュービット間の相関はありません。)この、一方による観測で他方の状態が収束してしまうという物理現象は瞬時に伝わりますが、これを認めると直感的には信じられない事が起きます。エンタングル状態となった2つのキュービットの片方Aを地球に置いておき、片方Bを月へ持っていきます。1\rangle$へと収束します。38万kmの距離を超えて瞬時に物理現象が伝わっているのです。実際、これは量子力学の持つ欠陥(ありえない現象)として指摘され「EPRパラドックス」と呼ばれていました(1935年)。「EPR」は指摘を行った3人の研究者アインシュタイン、ポドルスキー、ローゼンの頭文字を取ったものです。EPRペア」と呼ぶようになりました。ここからは実際にQ#を用いてEPRペアを作成してみましょう。qubits[1]);さらにSet関数による初期化、HゲートとCNOTゲートを設置します。(qubits[0]);まとめると、次のようになります。}これでエンタングルメント状態が生成されます。エンタングルメントしているかどうかを判定するために、2つの観測値が等しい場合をカウントします。agree);さらに、Driver.csも3変数の受け取り、出力をするように変更します。agree=10002つのキュービットが毎回同じ値を取る(独立でない)、つまりエンタングルしていることがわかります。量子テレポーテーション「量子テレポーテーション」とは、キュービットを(重ね合わせ状態を保ったまま)別の場所に送信する技術のことです。(物体を瞬間移動させたり、情報が超光速で伝わるといった現象を引き起こすものではありません。)古典計算では、ビットのデータを読み込んで0か1を観測すれば、他の場所にそれと同じもの作る(コピーする)ことは容易です。量子計算では、一度観測してしまえば重ね合わせ状態は消えてしまい、元の状態を復元することが出来なくなります。得られるたった1つの観測値からどのような重ね合わせ状態であったのか知ることも出来ません。このような事情で、量子計算において量子状態を別の場所に移すには、キュービットを物理的に動かしてしまうか、エンタングルメントの性質を巧みに利用した量子テレポーテーションのアルゴリズムを用います。問題設定としては、以下のようになります。AliceとBobの二人がいます。\rangle$を送信したいと考えています。(単純に回路繋げばいけそうですが、どうなんでしょうか。)答えとなる量子テレポーテーション回路図を示します。アダマールゲートとCNOTゲートの定義通り計算していけば、点線部分で全体の状態が図のようになることがわかります。次のMゲートは観測を行うことを意味します。観測値が「1」の時、回路でつながったXゲートやZゲートが作動するとします。Aliceの持っていたキュービット情報の詳細(重ね合わせの係数a,bの具体値)自体は観測していませんが、たしかにBobの元へと同じ状態が送り届けられます。Q#による実装を見てみましょう。コードは、以下のようになります。(参照:公式GitHub)ここでは簡単のため、古典ビット("True"/"False"のメッセージを"1"/"0"と訳したもの)の転送を行っています。Teleport関数において、上で示した量子計算が行われています。}}Driver.csは次のようになります。Stories・量子コンピューターの勉強に使いました。わかりやすかったです。開講の海洋科学野外実習に参加してきました。JR久里浜駅に向かう。お仕事でやっていたDQNでブロック崩しAI(土曜締め切り)が完成しておらず、電車の中でデバッグ作業。駅着いたら既に全員集合してた。最大20人とかだったので予想より少ない。タクシーでフェリー乗り場へ。フェリーは日常的に運行しているのに乗せてもらった。久里浜(神奈川)-金谷(千葉)を結ぶ路線。車を久里浜に置いて、フェリーで千葉のゴルフ場へ行くゴルフ客がメインらしい。10時頃にフェリー乗船。一般客なら立ち入り禁止区域となっている、船の後ろ端で東京湾のXBT(水温)測定。一個5000円する測定器を使い捨てで海にどんどん投げ込む。ガチ研究で使う高性能なやつやと数万円のものを使うらしい。やば金谷についたら次の出港まで船内を見学。一般人は絶対に入れない場所。貴重な写真(?)帰りも水温測定。