zekeの日記

素人です、記事内容に間違いなどがあればご連絡ください。

大文字山に39回登った話

前口上

これはKumano dorm.(2nd) Advent Calendar 2021の14日目の記事です。

adventar.org

ハッシュタグ#kmnac2021」で宣伝&感想とかをつぶやこう!

本題

タイトルの通り、寮祭期間中に京都は東山、送り火で有名な大文字山に39回登った。 どうしてこんな奇行に走ったのかを説明するには、ある寮祭企画を紹介しないといけない。

twitter.com

その企画の名前は「1日1回大文字火床」である。Twitterのbioには「生活習慣が崩壊しがちな寮祭期間。大文字山を登ることで健康になりませんか?」とゆるふわ文句が並べられているが、ところがどっこい怪我人 が出るほどの鬼畜企画だったのである。

企画自体はいたってシンプルで寮祭期間中にできるだけ登るというものだ。ただし一日三回までという制約がある。一日三回登るというのも少々ネジが飛んでいる気がするのだが、問題はそこじゃない。さらに追加されたルールとして「登り放題の日を一回だけ設けられる」というものがある。このルールは字面以上に鬼畜だ。考えてほしい。一日は24時間で1440分である。その間常に登り続けるなど正気の沙汰ではない。比較として寮祭名物「エクストリーム帰寮」を例に挙げるが、この企画は平均時間歩き続けるものだ。

自分がこの企画に参加しようと思ったのは11/27の18:00である。ちょうど日本シリーズ第6戦が行われていて、オリックスとヤクルトが白熱した戦いをしていた頃だ。ちょうど実験レポートのキリがよく、日曜何やろうかなと考えていた。その時、ふと最近フォローされたアカウント「1日1回大文字火床」の存在を思い出し、ためしにやってみるかとゆるふわな気持ちで準備を始めた。まず準備したのは靴だ。一年間履きつぶされた1300円のスニーカーは穴が空いていたので早急に新品の靴を買う必要があった。だがもう時間も遅く店も閉まりつつあった。そのことをサークルメンバーに相談すると川端のケイヨーデンツーで安全靴を売ってる情報が得られた。安全靴とは先芯の入ったスニーカーのようなものである。断じて長時間山登りするのに適した靴ではない。その時はまあいいかと思って、¥2500の靴を購入した。その後は普通に学食を食って、無限大文字に備えて仮眠をした。

23:00起床、23:30出立、途中でパンとかを買っていると出発地点の自販機に着くころには00:05になっていた。この時点でもう寒い。温度は7℃で白い息が見えた。しかも小雨が降ってる。体感温度は5℃を下回ってるだろう。持ってきた耳あてと手袋をつけ、登り口に立った。

夜に大文字山に登った人は分かるだろうが、出発点の自販機を過ぎると光源はない。唯一頼れるのはヘッドライトと頭上で輝く月光である。一応今回の企画にあたっての装備をのせておく。

f:id:zekehamp:20211213031054j:plain

まあ限界まで軽装で臨んでいることが分かってもらえればいい。とにもかくにも登り始めた。夜の大文字山には過去2回ほど登ったことがあったので道に迷うことはなかった(まあほとんど迷う要素はないが)。順調に登り続け、一人の登山客とすれ違い火床に到着した。

mobile.twitter.com

時間にして約18分である。大文字山からの夜景は素晴らしく、遠く大阪の光も見えた。5分ほど夜景を楽しんでから下り始めた。この時はこの後に起こることも知らず鼻息交じりで下山していた。さて下りも一人の登山客とすれ違っただけで何の問題もなく自販機までたどり着いた。同じように二回目も一人の登山客と2回すれ違いつつ終え…「あれ、この人さっきもいたな」と気づくわけである。こんな時間に大文字山シャトルランをしているのは、夢遊病患者か企画参加者ぐらいである。三回目の登りでまた出会ったので、話しかけてみるとやはり企画参加者であった。@syokubutus(以下 植物の人)と名乗った人物は、トレッキングポールを両手に抱え、いかにもな登山熟練者の風格を出していた。三回目の下山が終わって自販機まで戻ると植物の人が待っていてくれて一緒に登ることになった。登りながら互いの自己紹介や専攻のことを話して楽しく2回の登下山をした。しかし身体に異常が出始めたのは5回目の下山の時であった。手先が不自然に震え、頭がぼうっとしてきた。この感じはどっかで体験したことがある…そうだハンガーノックだ。ハンガーノックは体内のエネルギー不足になったときにおこる現象だ。後で知ったのだが、大文字山を一回上り下りするだけで300 kcalほど消費するらしい。これに従うならいままでで1500 kcalを消費したことになる。5回の大文字山登山は貧弱な自分には苛酷な運動だったらしい。そこで急遽パンを胃袋に収めつつ、体力回復を待った。体力回復後は夜明けまでに2回登り、7回まで記録を伸ばした。しかしここで強烈な睡魔に襲われたため、一度下宿に戻り6時間の睡眠をとった。

休息後は14:30から登山を再開した。休みなしで登り続けていた植物の人に差し入れをしつつ(凄すぎる…)、昼の大文字山を登り続けた。昼の大文字山は夜とうってかわって明るく、紅葉の綺麗な山であった。そんな雰囲気に押されてからか、序盤は飛ばしに飛ばし登り15分、下り12分のペースで回数を稼いでいった。日暮れまでに記録を12まで伸ばし、再び夜を迎えることになった。ところで、大文字山からの景色だがおそらく日暮れ直後が最もエモいと思われた。

mobile.twitter.com

さてこの時ぐらいから左膝に異常を感じるようになった。鈍い痛みというか、このまま続けていると悪いことが起こりそうな痛みであった。無知な自分はそんなことを気にも留めず無理に登り続けていたのだが、13回目下りで突き刺すような痛みへと変わった。これはどう考えてもヤバイ痛みである。急遽歩調をゆっくり目にして、膝をいたわりながら下山した。雑にもんだりしながら登り30分のペースで歩いていると、なんだか痛みが引いてきた。人間、極限状態に陥ると痛みが引くらしいが、それに近い現象だったのかもしれない。おかげで15回目は登り17分ペースで突き進んだ。しかし、一時のごまかしだったらしく、16回目の下りに痛みが再発したため、あえなく断念した。同じく登り続けていた植物の人は21回まで記録を伸ばしたらしい。化け物かよ。

さてこの日の記録は16回であった。しかし、時間が経つにつれ、いろんな反省点が見えてきてもう一度大文字山に登りたい欲が高まってきた。反省点とは以下のようなものである。

  • 食料がパンなどが主だったため、疲れているとき喉を通らなかった。

  • 睡眠をとってしまった

  • ペースに起伏があった

そんな思いを抱きつつ、一週間が過ぎもう一度無限大文字に参加することになってしまったのである。

今回は対策として

  • 過剰量の補給物資(ゼリーなど)を準備

  • 睡眠調整

  • 痛みを飛ばすお薬ロキソニンの準備

  • 山の歩き方をググる

ことをした。

さて12/5になった。二回目の無限大文字のスタートである。前回の反省から無限大文字山の攻略法が見えつつあった。それは「往復40分のペースをどのくらい続けられるか?」というものだ。40分という時間は速くもなく遅くもなくちょうどよいもので、このペースを維持し続けるかどうかが勝負の鍵であると睨んだ。当時、無限大文字山のトップは27回(人外の中の人外)だったので、このペースを18時間続ければよいという計算になる。せっかくならということでこれを目指していることにした。最低20回登れたらいいなとも思っていた。

最初の方は一回目と同じような感じである。異なる点は山頂付近の階段を無限に往復している奇行集団*1を観測したぐらいである。夜明けまでに記録を9まで伸ばしたが、雨が降ってきたので2時間の休息をとった。途中で参加者の@kinnsann624(以下 金原さん)とも出会った。この時は「もしかしたら27回いけるんじゃないか?」と妄想していたことを付け加えておく。休息後、再び往復40分のペースで登り続けていたが、11回目の下りの時に体に異常が起こる。そう、左膝である。一回目の無限大文字山の時と同じく鈍い痛みから激しい痛みに変わった。このことは想定していたのでロキソニンを素早く服用、痛みを抑えた。しかし、この抑えられた痛みもマスキング越しの痛みというか、とにかく嫌な予感を感じさせた。案の定13回目の下りで痛みが再発し、それ以上の登山を断念し下宿に戻った。

そしてとりあえず少し休むか…と思ってベッドに横になったが最期、起きたのは17:15である。実に5:30に及ぶ熟睡である。もちろん文字通りの絶起である。この時点で予定は全部狂ってしまった。とにもかくも再開させないといけないと思い、17:50から再開した。

しかし左膝の痛みが続いていたため、ロキソニンを再注入しつつ登り続けた。すっかり暗くなっていたのだが、推しのVtuberの歌ってみたを聴きながら登り続けた。すでに18回登っていた金原さんに畏怖の念を抱きつつ登り続けた。だがしかし、別の問題が生じた。お腹を壊したのである。理由は明白だ。この男、開始からゼリーと羊羹しか食べていない。しかも睡眠調整という名の生活習慣崩壊を同時にしていたので、内臓が不調をきたすのは必然ともいえる。結局、下山を駆け足で行い、銀閣寺前のトイレまでダッシュする羽目になった。そして16回目の下山。時間は20:00を回っていた。心は完全に折れてかけていた。当初の27回には遠く及ばず、目標の20回にも届かない。下山最中もなぜ自分はこんなことをしているのかと自問していた。しかしここで終わっては今日登った意義が皆無となると言い聞かせ、RedBullを注入し、1回の大文字山登頂を成し遂げ、記録を17まで伸ばした。時間はまだあったが、ここで完全に心が折れてしまいギブアップすることになった。

mobile.twitter.com

まとめ

結果として無限大文字は17回(4位)、全体で26回(4位)の記録だった(一回目の無限大文字分は3回としてカウントされた)。 13回分無駄になっているのもったいなすぎる…

mobile.twitter.com

mobile.twitter.com

まあ上位勢が異常すぎる…打ち上げ焼肉で話を聞いていると、あの山に登ったこの山に登ったという話が出てきて強者共は格が違うことを実感させられた。

あと詳しくは測定していないのだが、寮祭期間中だけで、獲得標高9200m、歩行距離100km、消費カロリー13000kcalの運動をしたらしい。

かれこれ2ヶ月分ぐらいの運動をしたのではないだろうか

ともあれ去年はあまり参加できなかった熊野寮祭に参加できて楽しかったです。来年桂か宇治に飛ばされても参加したいな。

*1:どうやら彼らは無限大文字のルールの穴をかいくぐっていたらしい。ルールの中でスタートの自販機について明文化されていなかったため、山頂付近に熊野自販機を設置し、2時間ぐらい火床との間をシャトルランしていたのだという。ちなみに記録は111回だったようだ。

理科系の作文技術 読書記録

世界の工化の推し本だったので読んだ。一読したところ意外に内容が多く、忘れそうになったので適当に記事にしたよ。

とりあえず第一章から第八章の内容が参考になったので箇条書きでまとめた。

  • 心得
    • 必要なことはすべて記述し、必要なことは書かない
    • 事実と意見を明確に分けよ
    • それらを順序よく、明快簡潔に記述せよ
  • 準備
    • 書く前に材料をそろえる必要がある
    • 文書の読む対象を確認せよ
    • 主題の選定
      • 一つの文書は一つの主題に集中すべき
      • 長さの制限を考慮せよ
      • 読者の予備知識、期待、要求を考慮せよ
      • 自分が直接関与した主題にせよ
    • 目標規定文をはじめに書け
    • 材料集め
  • 文章の組み立て
    • 順序
      • 序論、本論、結びが基本構成
      • 結論は冒頭に一度記述したほうが良い(重点先行主義)
    • 序論
      • 序論の役割
        • 読者が読むべきかどうかを判断する材料を示す
        • 予備知識を提供する
    • 結び
      • 必ずしも書く必要はない(一度書いたことを繰り返す必要はない)
      • だが書くほうが望ましい
  • 本論の順序
    • 概観の記述から細部の記述をせよ
    • 細部の記述の順序
      • どの順序で書くかの原則をあらかじめ決めておく
      • 原則が守れなさそうだったら最初から書き直す
    • 論理展開の順序
      • 理論叙述では最も簡明な道に沿って記述せよ、また仮定を浮きだたせよ
      • 説得を目的とする場合、臨機応変に対応せよ
    • 文章の構成の考え方
      • 文章構成とは「目標規定文をにらみながら、集めた材料とその考察を記述の順序・文章の組み立てなどを考慮して、明快な形に構成する作業」である
      • 文章構成術
        • 構成表
        • スケッチノート
        • カードによる整理、収束法
  • パラグラフ

    • 条件
      • あるトピックについて述べる文の集まり
      • トピックセンテンスが存在する
      • トピックセンテンスに関係ない情報を一切記述してはならない
    • トピックセンテンス
      • パラグラフの最初に書くのが推奨される
      • 文章を書く最中にも読み返して、トピックセンテンスの存在と目標規定文との関連とを確認し続けなければならない
    • 展開部
      • トピックセンテンスとの自然なつながりを意識せよ
      • 文ごとの関係性を明瞭にせよ
    • パラグラフの連結
      • パラグラフの配列には必然的な流れがなければならない
      • パラグラフ同士の関係性を示す文または句を適宜入れよ
  • 文の構造と文章の流れ

    • 巨視的な文章の組み立て方
    • 逆茂木型の文構造を書いてはいけない
      • 一つの文の中には二つ以上の長い前置修飾節を書くな
      • 修飾節に修飾節をつけるな
      • 文または節は前とのつながりを明らかにするように書け  - 長すぎる文章は書くな
    • 逆茂木型の文章の流れを書いてはいけない
  • はっきり言いきるには

    • レゲット曰く
      • 文を書くたびに正確に何を意味しているかを自問しなくてはならない
      • 指示語は明確に何を指すのかを意識しなければならない
      • できる限り断定的な言い方をすべきだ
  • 心得

    • 特別な表現技術は必要ない
    • 受け身は使わずに能動態を使う
  • 事実と意見

    • どこまでが事実か、どこからが意見かを見分ける必要がある
      • 事実と意見を使い分ける
      • 事実と裏打ちのない意見の記述を避ける
    • 事実、意見の定義
      • 事実
        • 自然に起こる現象や自然法
        • 信頼できる文献、調査によって、その真偽が客観的に確認できるもの
      • 意見
        • 推論
        • 判断
        • 意見
        • 確信
        • 仮説
        • 理論
  • 事実、意見の記述
  • 事実の記述
    • 材料の中で何を書くのかを吟味せよ
    • 明確な表現を使え
    • 主観に依存する修飾語を使うな
  • 意見の記述
    • 「私は...と考える」が基本
    • 主観に依存する修飾語が意見の核となるときには↑の表現でなくても許される
  • 事実と意見の書き分け
    • 事実を書いているのか意見を書いているのかを常に意識しなくてはならない
    • 事実の記述に意見を入れてはならない
  • 事実として説得する

    • 事実の記述は特定的ではっきりして具体的であるほど信憑性が高まる
    • 意見は入れずに読者の考察に任せる
  • わかりやすく簡潔に書く方法

  • 文は短くかけ
    • 書きたいことを一つ一つ短い文にまとめる
    • それらを論理的につなげる
    • 主語を意識する
  • 各は正しく
    • 主語と述語を意識せよ
    • ねじれ文を書くな
  • 一意に読める文を書く
    • 一文を書くたびに読者がそれをどう読み取るかを検討する
  • 簡潔に書く
    • 必要な要素はもれなく書かなくてはならない
    • いらない情報はぎりぎりまで削り、一語一語が欠くべからず役割を持たなくてはならない
    • 電報文のような省略をしてはならない
    • 文の主節を式で置き換えてはならない、文として式を書くのは許される
  • 読みやすさへの配慮
    • 奇をてらわず読みやすい文章を書かなくてはならない
    • 不必要に難しい漢字や、かたい漢語、独特な表現をしてはならない
    • むやみに受け身を使わない(特に翻訳文において)
  • 文章中における区切り記号
    • ピリオド、コンマ、なかぐろ、リーダー、傍点
    • セミコロン
      • 一つの文の中で強く区切りをつけたいときに使う
      • 特に、方程式を書いた後で式の中の記号を説明するときに使う
    • コロン
      • 続いて書かれる内容が、前の内容の詳細・要約・説明であることを示唆する
    • ダッシュ
      • 英語におけるwhich,whoなどの関係代名詞に該当
      • 気軽にカッコのような役目を果たす

第九章以降の内容は、学会とか分野でいろいろ違うらしいのであまり読んでなかったりする。

個人的には

  • 第八章・・・小学校とかでやった内容
  • 第三章、第四章・・・ライリスでやった内容
  • 第六章・・・巷でよく言われていること
  • 第二章、第九章以降・・・実際にやってみないとわからないやつ
  • 第五章、第七章・・・いままであまり意識してこなかった

という印象を得た。特に第七章の「事実と意見」という章は、特に理系である限りはずっと付きまとう問題なように感じた。

全体の流れとしては、

  • 第二章~第五章・・・マクロな作文技法
  • 第五章~第八章・・・文単位のミクロな作文技法

といった流れなので、前半を習慣として早く身に着けて、忘れたころに後半を何度も読み直すといった活用をしていこうと思う。

この本のいいところは

  • 理系向けの作文技法を体系立てて書いてあること
  • 著者自身も研究者らしく、例が潤沢であること
  • 提案する技法が具体的で、すぐに実行することができること
  • 比較的短いのですぐ読み終えることができること

にあると思う。

これは私個人の見解だが、比較的伝統的な記法をする物理書、悪くいってしまえば分かりにくい物理本を読む際にも役立つのではないかと思った。例えば「概観から細部へ」というモットーは普段の学習においても活用できそうだ。

量子情報科学入門 読書記録 ~第三章~

量子アルゴリズムやってく

第三章の内容

第三章では第二章までの内容を踏まえて量子アルゴリズムを導入する。古典的に考えれば指数時間になるような計算を、多項式時間で解いたりすることが可能になるかもしれない可能性がある。

Deutsch-Jozsaのアルゴリズム

Deutsch-Jozsaのアルゴリズムが扱う問題は以下のとおりである。

バランス関数判定問題
入力:f: \{ 0,1\}^n→\{0,1\} ただし、fはバランス関数か定数関数であることが保証されている

出力:fが定数関数ならば0,バランス関数なら1

バランス関数というのは2^n個のありうる入力のうち2^{n-1}個の入力に対して0を2^{n-1}個の入力に対して1を出力をする関数である。前提としてこの関数はオラクルといって中身はブラックボックスであり、この関数への質問回数を全体の計算量とする。古典的に考えるならば、この問題を解くには最悪2^{n-1}+1回質問しなくてはならない。しかし、Deutsch-Jozsaのアルゴリズムは1回の質問だけで確率1で正しい出力をする。

f:id:zekehamp:20210315040237p:plain

なんとも不思議な話だ。ユニタリ変換とアダマール変換をすることで、定数関数だった場合確実に0...0を得るのだ。これについては計算をするとちゃんとできていることが証明できるのだが、筆者は以下のような説明をしている。

f:id:zekehamp:20210315040241p:plain

ユニタリ作用後の状態は、定数関数とバランス関数とで直交の関係を満たす。この時、ユニタリ行列は基底変換をすることができるので、片方を0...0にするように変換すれば、もう片方は0...0と直交した状態、つまりは0...0以外の状態に変換されるのだ。このことから、一般的に入力状態を区別したいもの同士で直交した状態に変換することができれば効率よく正答を得ることができることがわかる。すげえ(小並感)。

Groverのアルゴリズム

先ほどのバランス関数判定問題は量子アルゴリズムの優位性を証明する、悪くいってしまえば都合のいい問題提起であった。対してGroverのアルゴリズムが扱う問題はより汎用的なものとなる。

Groverの探索問題

入力:f: \{ 0,1\}^n→\{0,1\}、ただしf(x_0)=1となる解x_0\in \{0,1\}^nがただ一つ存在する。

出力:f(x_0)=1を満たす解x_0

古典的に考えると、最悪2^n-1回の質問をしないといけないことがわかる。ラン宅アルゴリズムでもO(2^n)かかるらしい(Yaoの原理)のだがよくわからかったので飛ばす。とにかくGroverのアルゴリズムではO( \sqrt{2^n} )で済むらしい。しかしこれは1-1/{2^n}の確率で正しくx_0を出力するという制約がつく。※N=2^nと表記することがある。

f:id:zekehamp:20210315042850p:plain

よく見ると、Deutsch-Jazsaのアルゴリズムと最初の部分は似ているが途中でD_Nという変換が加えられている。これは拡散行列といって対角成分が-1+2/Nで他が2/Nの行列である。この行列は-1成分のみを増幅するという特徴があり、これを用いて[x_0]の成分だけを増幅することができる。ここでも、入力状態を注目したいものとそれ以外で直交化とまではいかないが、差別化することに成功している。これを適切な回数を繰り返すことで、目的の値を高確率で得ることが可能になる。

これをベクトルとして可視化する解説されていたのがわかりやすかったので紹介する。

f:id:zekehamp:20210315053858p:plain

f:id:zekehamp:20210315053903p:plain

 |φ_0\rangleよりも|φ_1\rangleのほうが|x_0\rangle基底ベクトルに近づいていることがわかる。

 

Shorのアルゴリズム

Shorのアルゴリズムは一定の衝撃を社会に与えた。というのも、Shorのアルゴリズム素因数分解の計算困難性をひっくり返すアイデアであり、既存の暗号技術の破れにつながる可能性があったのである。しかし、今現在は多量子bit系を再現する実験段階だそうで実践段階ではない。

Shorのアルゴリズムの前に導入前に周期発見問題を導入しなくてはならない。

 

周期発見問題

入力:f(a)=f(a+s mod N)=f(a+2s mod N)...を満たすf。ただしN\in\mathbb{N}はある値s\in \mathbb{N}で割り切れる。

出力:s

言ってみればfは周期関数だから、その周期を求めてほしいというものである。

f:id:zekehamp:20210315060519p:plain

このようなアルゴリズムで求めることができる。ここで大事になってくるのが量子フーリエ変換である。F|a\rangle=1/\sqrt{N}\sum_{k=0}^{N-1}exp(2ak\pi i/N)|k\rangleを満たす変換であり、ユニタリ行列でもある。

この量子フーリエ変換の役割を具体例を用いて説明すると、

f:id:zekehamp:20210315202639p:plain

となる。こうしてN/sの倍数に当たる状態を得ることができるのだ。これも所詮ユニタリ行列なので、基底変換したに過ぎない結果であることに注意しなくてはならない。さあ、これでN/sの倍数がランダムで得られるので何回か試行して、そのGCDをとってあげればN/sを求めることができそうである。

 

さて素因数分解をやっていく。

素因数分解問題

入力:nビット長のN,ただしN=pq(p,qは素数)

出力:p,q

一つ確認しないといけないことがある。それは、Nと互いに素な整数xについてx^r\equiv 1 \, mod \, Nを満たす最小のrを見つけることができれば素因数分解することが簡単にできるという事実である。

以下のような手法で解ける。

f:id:zekehamp:20210315205202p:plain

意外と簡単にできるもんなんだなと思ったり。

 

この章を終えて

この章では3つのアルゴリズムを学習した。少しだけ知っていたShorのアルゴリズムの正体を知ることができて少し満足した。この章は結構計算が多く理解するのに時間がかかった印象がある。特に周期発見アルゴリズムの理解が大変だった。記事執筆時は第四章に取り掛かっているのだが、本格的に理論体系を学ぶことになっており、いかに一回生のころに線形代数をさぼっていたかを身をもって体感している状態だったりする。最近、量子情報理論で日本最先端を行く藤井研究室にお邪魔しました。将来的には、こういった研究室で研究したいなとか思ったり。

以下ノート

量子情報科学入門 読書記録 ~第二章~

 ぶっちゃけすべてわかった気もするし、何もわかっていない気もする。

第二章の内容

第一章では量子情報でよく使われるブラケット記法の練習や基本的な量子ビット系の計算を学んだ。第二章では一章をふまえて量子計算と量子回路を学んでいく。

計算量

どの分野でも嫌というほど見る気がする。ある問題に対する大雑把な計算回数を示したものであり、O(n)などで表記する。OΩの違いに注意する。

古典回路モデル

古典回路モデルはよく知られているデジタル回路の一番基礎に当たるものである。具体的にはAND,OR,NOT演算子の組み合わせによって関数を実現することを目的とする。この時できる限り少ない演算子の組み合わせで関数を作りたいと考える。例えば、与えられたビット列の立っているビットの数の偶奇を判定する関数はO(n)で作成可能だ。ここではあまり古典回路モデルを注視することはなかったが、いくつかの定理を紹介している。「nビット入力1ビット出力関数の回路計算量の最大は5・2^{n-1}-4」、「前述の関数に関して、ある関数の回路計算量は少なくとも2^n/2n」などの定理の紹介の紹介がなされているが、むしろ証明のほうが興味深かった。本証明中で使用されたnビット入力1ビット出力関数の数と素子数s以下で構成可能な回路の数を比較する考え方は頑張って慣れていきたい。

量子回路モデル

本章の主題である量子モデルをやっていく。基本的に古典回路モデルと同じように「素子」を組み合わせて作っていくのだが、使うビットが量子ビットであること、量子ビットの変換は「測定」と「ユニタリ変換」でしか行えないことに注意しなくてはならない。ここで一章で紹介されたユニタリ行列を実際に使っていくようになる。例えばσ_xσ_x|0\rangle=|1\rangleとなることからNOT演算子のように使えるようになる。またHadamard変換は量子計算において重要な意味を持つ。このように入出力長が決められてあたかも演算子のようにふるまうユニタリ行列を量子素子と呼ぶ。

f:id:zekehamp:20210218011534p:plain

Hadamard変換後、制御NOT素子を加えた量子回路

*1

 このように量子回路を記述することもできる。個人的には数式をたどるよりもこういった図を介した説明のほうがわかりやすいと思う。また量子計算を行う上で注意しなければいけないことが二つある。

  • ユニタリ行列は可逆であり逆演算が存在する。
  • (U\otimes V)|\phi,\psi\rangle=U|\phi\rangle \otimes V|\psi\rangle

一つ目はユニタリ行列を示していて、これはたとえユニタリ変換後の量子ビットが必要なくても可逆性を満たすために残さなくてはならないことを示唆する。二つ目は二種類のユニタリ変換を量子ビット列に適用した場合、ユニタリ行列同士のテンソル積抜きで計算する手法を提案したものである。

さてここまで量子計算の基礎が説明されたが、量子回路中でよく使われる量子素子が存在する。それが制御NOT素子(CNOT素子である)とHadamard素子である。

CNOT=\left( \begin{array}{ccc} 1,0,0,0\\0,1,0,0\\0,0,0,1\\0,0,1,0\end {array}\right)

 

f:id:zekehamp:20210218020308p:plain

CNOT演算子

 *2

この演算子は1-量子ビット|1\rangleの時2-量子ビットを反転させる性質を持つ。一方Hadamard素子はH|0\rangle=1/\sqrt{2}(|0\rangle+|1\rangle)H|1\rangle=1/\sqrt{2}(|0\rangle-|1\rangle)を満たす。すなわち等振幅の重ね合わせを実現することができる。

Z-Y分解

任意のユニタリ行列はR_x,R_y,R_zのうち二つを利用して表現することができる。これらのユニタリ行列はBloch球上のX軸、Y軸、Z軸回転で使用されていた。極座標を考えると定性的に成り立つことがわかる。

量子回路の定式化

先ほどよく使う素子としてCNOT素子が紹介されたが、制御ビットを2つに増やしたCCNOT素子というのが存在する。これは二つの制御ビットが両方|1\rangleの場合のみ3ビット目が反転する性質を持つ。

 

f:id:zekehamp:20210218030226p:plain

CCNOT素子

*3

これをうまく使うと古典回路モデルにおける大体の論理演算子を模倣することができる。具体的には

  • CCNOT(x_1,x_2,x_3)=(x_1,x_2,(x_1 \land x_2)\oplus x_3)と書ける。
  • CCNOT(1,1,x_3)=(1,1,\lnot x_3)はNOTの模倣。
  • CCNOT(x_1,x_2,0)=(x_1,x_2,x_1 \land x_2)はANDの模倣。
  • ドモルガンの法則よりNOTとANDからORを作ることができる。

となる。

またCCNOTを使用した量子回路として以下のように書ける。

ビット入力1ビット出力関数fを回路サイズs(n)の論理回路で計算可能な任意の関数としたとき、

U_f|x\rangle|0\rangle|011\rangle|0^{l(n)}\rangle=|x\rangle|f(x)\rangle|011\rangle|G(x)\rangleを満たすCCNOT素子からのみからなる量子回路U_fが存在する。ただしG:\{0,1\}^n\rightarrow\{0,1\}^{l(n)}l(n)=O(s(n)+n)

ここでケットを連続しているのはテンソル積を示している?本文中に言及を見つけられなかった…

これを量子回路として書くと

f:id:zekehamp:20210218032335p:plain

こんな感じ(手書き)。この時にユニタリ行列が可逆であったことを思い出さなくてはならない。ゆえに、G(x)が必要のない量子ビット列として出てくるのにもかかわらず、中身がわからないので分離することができない。ここで知りたいのはf(x)なので、どうにかしてG(x)を別のビット列に変えたい。

そこで、以下のような回路を考える。

f:id:zekehamp:20210218032626p:plain

これをまとめると、

U_f'|x\rangle|0\rangle|0\rangle|011\rangle|0^{l(n)}\rangle=|x\rangle|f(x)\rangle|0\rangle|011\rangle|0^{l(n)}\rangleとなる。なお、U_f'U_fを二つとCCNOTを二つ含んでいる。これでf(x)以外がわかっている状態となるので、測定によって分離することができる。

 

この章を終えて

この章で量子回路の基礎を学んだ。個人的には最後の論理回路の理解に手間取った。しかし、どこか古典回路に似通った部分があって若干安心感がある。それでも新しい概念がポンポン出てきて、それらの概念をベースに理論が展開しているので奇妙なSF小説を読んでいるかのような印象を受ける。古典回路はトランジスタを最小単位としているため、トランジスタを実際に見ることができるという面では古典回路は現実に即しているのだと納得することができるのだが、こっちはつい最近まで存在すら明らかになっていなかった量子ビットを考えなくてはならない。あまりにも常識を逸脱しているのと実際に実験できないのも相まって、巷の似非量子科学者と大差ないような理解をしているのではないかと不安になってしまう。それでも量子世界を少しでも解き明かしてみたい。三章もこの調子でやっていきたい。

 以下ノート

量子情報科学入門 読書記録 ~第一章~

線形代数量子力学やらないとな…

第一章やっていくぞい

第一章の内容

量子情報学を学ぶ上での基本的な計算などの紹介らしい。ここで詰まったらヤバイなと思いながら取り組む

量子情報学における一連の基本手順

まず量子系というのを考えるらしい。この系ではψという状態が存在して物理量M測定した後に測定値mをある確率で得ることをする。これらの特徴として状態が単一なものではなくいくつかの測定値を得る確率のある揺らぎの存在ということだ。この章では、これらの手順を定式化することを目標とする。

Dirac表記法

ここ、一回の線形代数でやったところだ!すっかり忘れてしまっていたので復習。Dirac表記法は一般的な行列計算を簡潔に表現する手法として導入される。ψ|\rangleは列ベクトルを表し、\langle|ψはその共役な行ベクトルを示す。すなわち\langle ψ|φ \rangle内積を表し|ψ\rangle \langle φ|は行列を表す。また|φ\rangle\langle ψ||ξ\rangle=\langle ψ|ξ\rangle|φ\rangleをも満たす。

量子bit系

Dirac表記法を踏まえて量子bit系の表現に取り組む。量子bit系の基本手順を定式化するには

  1. 状態を\mathbb{C^2}の単位ベクトルψ|\rangleで表す。
  2. 測定は\mathbb{C^2}の正規直行基\{φ_0|\rangle,φ_1|\rangle\}で表す。
  3. 測定値i=0,1は確率|\langle φ_i|ψ \rangle|^2で見いだされる。

という一連の計算をする必要がある。

 1に関しては状態は二次元の単位ベクトルでないといけないというのがポイント。古典系ではbitは0か1かのどちらかだが、量子系では|ψ\rangle=(a,b)^T=a|0\rangle+b|1\rangle (|a|^2+|b|^2=1)という風に無数の単位ベクトルをとりうることができる。ベクトルで表現することで量子状態特有の「重ね合わせ」を表現できるようになる。また状態と単位ベクトルは1:1対応ではなく、|ψ'\rangle=c|ψ\rangle (cは絶対値が1の複素数)を満たせば同一の状態として扱う。c=e^{iφ}と書け、φを位相と呼ぶ。これを位相の不定性と呼ぶ。これを複素数領域に展開したのがBloch球である。あらゆる量子bit状態はcos(θ/2)|0\rangle+e^{iφ}sin(θ/2)|1\rangle( 0 \le θ \le \pi,0 \le φ\lt2\pi)を満たすことに注意して3次元単位球を極座標表示する。

*1

こうすれば天頂を|0\rangle、地底を|1\rangleとしてパラメータθ,φで動き回るBlochベクトルを表現することができる。

 2は測定に関する内容である。正規直行基底を使った基底測定というものを行う。典型的な基底として|0\rangle,|1\rangleがありこれを量子計算分野では計算基底というらしい。基底はこれでなくとも正規直交の条件を満たせば、どんなベクトルの組でも基底になりうる。

3は任意の測定値をどのような確率で見出すのかを定量的に示したものである。

量子bit系の時間発展

一般に量子bit系は時間経過で変化するようだ。これは|ψ'\rangle=U|ψ\rangleで表記される。Uはユニタリ行列である。このような状態の時間変化をユニタリ発展と呼ぶ。有用なユニタリ行列にPauli行列、Hadamard行列、Bloch球上回転などがある。時間発展した後のある測定値を見出す確率を計算する方法は同様である。

量子bit系の測定過程

 量子bit系では時間経過による変化だけでなく、測定による変化があるらしい。不思議な話だ、測定するだけで状態が変わってしまうとは!そういえば量子力学の文脈でもいくつかの固有状態の重ね合わせであった波動関数が観測によって1つの固有状態に収束するといった話が出てきていた。これを定式化する。{|φ_0\rangle,φ_1\rangle}による測定を行った結果、測定値i(i=0,1)を観測されたとしたら|ψ\rangle \longmapsto |φ_i\rangleに状態が変化する。このように量子状態を測定すると状態の変化は避けられないようである。

多量子bit系

これまでは1つの量子ビット系しか考えてこなかったが、2つ以上の場合も考えていく。まずは2-量子ビット系では

|ψ\rangle \otimes |φ\rangle :=\left( \begin{array}{ccc} a_0|φ\rangle \\ a_1|φ\rangle \\ \end{array} \right):=\left(\begin{array}{ccc}a_0b_0\\a_0b_1\\a_1b_0\\a_1b_1\end{array}\right)

と書ける。これはテンソル積であり\mathbb{C^4}の単位ベクトルとなる。次元が増えた以外は今までと同じように処理できるようである。しかし実際はこの重ね合わせ状態だけでなく、これらをさらに重ね合わせた状態が存在するので厄介だ。上式のように書ける状態を積状態、そうでない場合をエンタングル状態いう。エンタルグル状態は第0章で紹介があったな…。多量子bit系では計算基底の測定を行ううとし、ここでいう計算基底は\{i_0 \otimes i_1 …\otimes i_n\}_{i_0,i_1,...i_n=0,1}を示し、\{(1,0,0,...)^T,(0,1,0,...)^T,...,(0,0...0,1)^T\}となる。つまり一般的に状態は|ψ\rangle=\Sigma_{i_1,...i_n=0,1}x_{i_1}..._{i_n}|i_1i_2...i_n\rangleと表せる。多量子系では部分系のみを測定することが可能だ。n-量子bit系をm-量子bit系の計算基底によって測定する。このmbitは\mathbb{C^2}\otimes\mathbb{C^2}\otimes...のうち左mbitを指すことにする。この時、\langle i_1...i_m|ψ\rangle:=\Sigma_{j_{m+1}...j_{n}=0,1}x_{i_1,..i_m}j_{m+1}...j_n|j_{m+1}...j_n\rangleとなる。これは(\mathbb{C}^{2})^{\otimes n-m}となることに注意する。これをもとに、測定値i_1,i_2...i_mを見出す確率||\langle i_1...i_m|ψ\rangle||^2を求める。最後に観測後の状態は|i_1...i_m\rangle\otimes\langle i_1...i_m|ψ\rangle/||\langle i_1...i_m|ψ\rangle||に変化する。

この章を終えて

この章にある内容は理解したが、本質には程遠いなという感想を得た。例えば時間発展でなぜユニタリ行列を使うのか、どうして状態は二次元の単位ベクトルで表記可能なのか、具体的に基底測定というのはどのような測定なのかと、疑問は湧き出るばかりである。しかし、こういった本の特徴として後で詳しくやるよ!という文言を残していくので、第二章以降もこの調子で読み進めていきたい所存である。またこの本では第0章に明記してあるのだが、量子力学などの物理的背景を若干無視しがちな傾向にある。本書では詳しく取り扱わないようだが春休みの間にスピンの定量的理解を進めたいと思う。また線形代数の復習も進めたい。

以下ノート

以下はこの章を読み解くうえで作った自分なりのノートである。

量子情報科学入門 読書記録 ~第0章~

読み切れたらいいなあ

f:id:zekehamp:20210116101725p:plain

読み始めたきっかけ

量子コンピューターってロマンあるなー、でも巷の解説書は一般向けで大学教養向けがないなと思っていたら見つけた一冊。 パラパラ読んでみたところ、いかつそうな印象を受けたが頑張って読み始めることにした。

序章

量子情報科学の紹介の章。関係ない話だが、本を買う時は内容を俯瞰した章を一読したときにビビッと来たものを買うようにしている。

0.1

量子情報と古典情報の違いなどの紹介。量子的効果を考慮するかで分けられる。情報科学分野において計算と通信の分野で量子的な観点から考え直すことができることを説明している。例えば従来の光ファイバーの長距離伝送で必然的に生じる量子的信号を、古典情報科学ではノイズとして処理するが、量子符号化として割り切ってしまうことで効率的な伝送を可能とする。と書いてあるのだが、よくわからないのでそんなものなんだなあと納得することにする。しかし少なくともよく知られているOSI 7階層参照モデルが崩れる予感がするので大変大事なことがわかる。ここの詳細は第七章で語られるそうだ。

0.2

量子情報科学の将来の展望の話。量子暗号理論というのが社会システムに大きな影響を与えるらしい。なんか聞いたことがある。現在の暗号は計算量的安全性によって守られていると説明がある。これはRSA暗号などが素因数分解問題が困難であることを安全性の根拠にしていることを言っているのだろう。厳密には解けないわけではないが、解くまでに途方もない時間がかかるので実質解読不可能というやつである。対して量子情報科学の世界では情報理論的安全性を保証するらしい。この情報理論的安全性は平文そのものが盗聴者に漏れないという意味である。すごい、完全に通信の秘密を保てるじゃん。また量子計算の分野では従来技術では不可能なアルゴリズムの導入が可能らしい。素因数分解多項式時間で解くShorのアルゴリズムというのが存在してしまい、RSA暗号の解読が可能になってしまう。ここでいう多項式時間は Nが与えられたときにその桁数を kとした時に問題を解くのに a*b ^ kステップかかることを意味している。暗号通信分野でも計算分野でも古典的情報科学を圧倒していて草。どうやら量子計算は状態の重ね合わせをうまく活用することで高度な並列計算を可能とするらしい。大量の高性能なGPUが同時に動いているイメージか。量子計算では並列計算をたださせるだけではなくて、自分の欲しい結果だけをとってくることができるのですごい。これらの仕組みに関しては第三章で説明される予定。楽しみ。量子情報科学は前述したようなシステム(アルゴリズムプロトコル)を理論的に提案する分野と実際に理論を材料力学、物性化学の観点から実証する分野に大別されるそうだ。この本では主に通信と計算分野に関して注視していくようである。

0.3

本書の解説方針についての説明の章。結構筆者の主観が混入している気がする。この本では量子力学をあくまで情報科学の観点から俯瞰することを目的としていて物理現象を中止するわけではないこと、量子力学的体系でこれがこうだからこうと考えるのではなく入力に対する出力を観測する操作主義に基づく説明を行うこと、説明の軸として物理書でよくある歴史的経緯を利用しないことなどを注意している。確かに情報理論で考える以上、複素解析微分方程式、波動論などの量子力学特有の話抜きに説明してくれるのはありがたい。いろいろごちゃごちゃしているとなにがしたいかわかんなくなるし。こうすることで、いろいろな分野に貢献したらしい。これに追随したいところ。

0.4

いっぱい新しい用語が出てきたので整理したい。

  • エンタングルメント:量子もつれのこと。電子のスピンのペアが存在しているとき、未観測の場合状態は2つあるが片方を観測するだけで状態が一つに収束してしまう現象。
  • ユニタリダイナミクス:時間発展のこと。物理系が時間が進むと変化すること。
  • コヒーレンス:量子的重ね合わせが外的要因によって破壊され古典力学的状態、つまり確率的混合に移行すること。量子計算では並列計算された状態が失われることを意味する。

であってるよね?ここら辺は適当にググっただけなのであっているかどうかはわからない。教えて偉い人。量子通信分野ではデコヒーレンスが生じるけど古典的なエラー検出訂正が活用できるので量子情報科学分野で真っ先に実用化されるようだ。ほかにも量子情報科学は周辺の分野に影響を与え続けているようである。

0.5

本書の構成についての説明。

  • 第一章:ベクトルと行列計算による量子論の定式化をする。エンタングルメントを定量化することが大事って書いてあった気がする。物理概念の話と量子bitの測定、量子的演算プロセス下の時間発展、複数の量子bitの合成系の話をする。
  • 第二章:量子計算の基礎と量子回路の説明をする。
  • 第三章:量子計算に本格的に踏み込む。代表的な3つのアルゴリズムを解説するそうだ。個人的にこの章が楽しみ。
  • 第四章:前半は第一章の発展、後半はノイズのある量子情報処理の話が続く。どうやらこのノイズを含む混合状態の理解が難しいとのこと。
  • 第五章:量子系における情報量の話。ここでも出てくるか情報エントロピー
  • 第六章:量子エンタングルメントの話。量子テレポーテーション、超稠密暗号、量子データ圧縮など興味をそそられるテーマが出てくる。
  • 第七章:量子誤り訂正と量子暗号の話。量子伝送技術の話で序章でも結構強調されていたな...

どうやら第一章~第三章までは行列&ベクトル計算&「簡単な」確率計算だけで理解できる内容らしい。どうやら本気を出すのは第四章からのようだ。頑張って取り組んでいきたい所存。

「ゼロから始めるDeepLearning」読書記録

年末年始で以前半分ほど読んでいた本書を読んだため、読書記録を残しておく

f:id:zekehamp:20210101142824p:plain

ゼロから作るDeep LearningPythonで学ぶディープラーニングの理論と実装

www.amazon.co.jp

読んだきっかけ

「PyTorch 公式チュートリアル」をやっていて、途中かなり説明が端折られている部分があることに気づいた。ディープラーニングの中身をしっかり理解したかったため、半分だけ読んでいた本書を引っ張り出してきて最初から読み始めた。

中身

全体的な特徴

本書はディープラーニング本では一番有名な本と思われるが、Tensorflowなどのフレームワークの使い方を解説したものではない。ディープラーニングの内部で実際どのような動作が行われているのかを順序だてて説明している。TensorflowやPytorchなどをやっていて疑問に思ったことが説明されていたので、初学者が基礎知識を得てより専門な分野に踏み込むための橋渡しとしてぴったりな本のように感じた。また、説明されているほとんどがPythonで実装されているので、実際に動いている様子も観測することができる。

第一章

Pythonを触ったことない人向けに一通りの説明がなされている。しかし、この章だけでPythonに慣れることは困難なので、以降の章の内容を自分で実装するなどして慣れる必要があるように思えた。

第二章

パーセプトロンの解説がなされている。ここで挫折しないようにかなり丁寧に書いてある印象を受けた。ネットワークの構成部品であるパーセプトロンをAND,OR,XORなどの例を出してどのように実装されるかが説明されている。層を重ねることで非線形な表現を可能にするということをこの章では言いたいのだと思う。余談だが、この章の最後に紹介されていた「コンピュータシステムの理論と実装」(通称Nand2Tetoris)に興味を持ったので実際に読み進めている。ハードウェア層を読破したので本書についても記事を書くかもしれない。

第三章

パーセプトロンを組み合わせたニューラルネットワークの説明がされている。ここで機械学習を勉強しているとよく見るグラフ構造を初めて見ることができる。ニューラルネットワークの概観、活性化関数、ネットワークの中で使う行列計算、出力層の設計の順番で解説が進んでいき、最終的にはMNISTの推論のみを行うことまでやっている(学習はまだ)。行列計算に関しては未学者でもわかるように基礎から説明がされているので、ここで躓くことは少ないと思われた。しかし、ここで出てくる活性化関数とニューラルネットワーク中での行列の扱い方などは今後重要になってくるので、ここでマスターしておく必要がある。

第四章

ニューラルネットワークの学習の章である。挫折するとしたら、この章以降なのではないかと思う。前章ではニューラルネットワークの設計をしたが、この章では実際に重みパラメータを自動で適切な値に決定させる手法を紹介している。損失関数、ミニバッジ学習、行列数値微分の順番で解説が進む。ここでは数値微分が大事になってくるのだが、以前読んだときはこのあたりの理解が生半可で第五章で詰んでしまったので、しっかり押さえておく必要がある。また、この章あたりから実装が大変になってくるのでJupyterNotebookなどを利用してネットワーククラスを設計しながら慎重に理解を進めた。うまくいくと実際に学習が進む様子を観測することができたのでモチベを上げることができた。ニューラルネットワークの原点がこの章にあるので何度も読み返した。

第五章

誤差逆伝播法の章である。以前読んでいた際にはここで挫折した。この章では前章で紹介のあった数値微分を改良した誤差逆伝播法の理解を目的としている。数値微分だとパラメータを一つずつ微小変化させて計算しなくてはいけないので時間がかかる。そこで、「出力が1増えたときにパラメータがどのくらい変化するか」という課題を連鎖律を用いることで高速に求めるという理論を紹介している。この章でうれしかったのは、数式によって読者を圧倒させる解説をせずに、計算グラフを用いた視覚的な解説を提供してくれたところにある。これらを踏まえて乗算、加算、ReLU、Sigmoid、Affine、Softmaxレイヤの実装を行うが、この辺りは美しい実装がなされていたので勉強になった。この章が本書の山場ではないかと思われる。

第六章

前章までとは異なってやや補足的内容が続く。パラメータ更新手法、パラメータの初期化、Batch Normalization,正則化、ハイパーパラメータの検証など、DeepLearningをするうえでよく使われる手法が紹介されている。個人的には更新手法の比較が興味深かった。ここら辺の手法はKaggleで勝つデータ分析の技術 でも説明されているものばかりである。何も知らずに最適化関数としてAdamを選んでいた自分にとっては大変おもしろい章であった。

第七章

CNN(畳み込みニューラルネットワーク)の章である。いままでのAffine層に代替してConvolution層、Pooling層を導入し空間的情報を保存するらしい。この章から多次元情報を多用するので、こんがらがってしまわないようにしたい。個人的にはim2colの実装がややこしいと感じたので読むのに時間がかかった。しかし、わかってしまえば今までと同じようにレイヤを設計することができるようになる。最終的な実装は次元の順番に気を付けないといけない。またCNNの可視化が行われており、層によってどのような特徴量が抽出されているかが見て取れる。有名なCNNの例とともに確認した。

第八章

今現在の機械学習における最前線を紹介している章である。現在よく使用されるCNNは何重もの層を重ねたもので認識精度は非常に高いらしい。層を深くすれば認識精度が上がるということを、やや定性的に説明している。その後はGPUの並列演算による高速化の話、ディープラーニングの将来の話などが続く。CUDAもやりたいし、Deep Q-Networkも気になる…

まとめ

本書は「ゼロから始める」と言っている通り、この分野の初学者が前知識なしで取り組める良書だと思う。しかし完走するのには少なくとも30~50時間を要したと思う。これは本書の内容を理解するとともに、ソースコードを読み実装する手間がかかるからである。それでも機械学習フレームワークを触るのならば事前に一読しておきたい本であることには間違いない。