たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

インスタンス状態の保存と復元

引数で初期化され内部状態を持つインスタンスがあったとき、それをいかに保存し、のちに復元するか.

問題整理

class A:
  def __init__(self, arg1):
    parts = SubA(arg1)
    self.var = 1
  def add(self):
    self.var += 5
  def save(self):
    pass
  def from_snapshot(self):
    pass

# Initialize
a = A(2)
# Update
a.add()
# Save
snapshot = a.save()
# Restore
a_2 = A.from_snapshot(snapshot)

見えてくる課題/制約は

  • arg1 はコンストラクタに与えなくてはならない(後から変更できない)
  • self.var はコンストラクタ引数にない

すなわちhyperparameter的なものと内部state的なものの2つをsnapshotとして扱う必要がある.

解決案

すべてinit引数にする

内部状態をinit引数にし、内部状態の初期化/復元を同じに扱う.

# Restore
snapshot = {arg1: 2, var: 6}
a_2 = A(**snapshot)

問題点: 煩雑
内部状態が増減するたびに引数のリライトが必要
透過的に扱えるはずの内部状態を明示的引数として外部に晒している(複雑になるうえ、不正な初期化のリスクも生む)
snapshotを明示的な型として扱わない限り型の支援が減る(dict展開は型支援があいまいになりがち)

static関数から復元する

Cls.from_snapshot関数を用意してsnapshotを突っ込み、そこで初期化と内部状態復元をおこなう.

課題/制約から

  1. snapshotから引数hparamsと内部stateを取り出し
  2. hparamsを引数としたinit
  3. 内部stateの上書き
  4. 復元済みインスタンスの返却

のステップにわけると制約を分離できることがわかる.
なので

class A:
  def from_snapshot(ckpt):
    hparams, state = ckpt
    a_2 = A(**hparams)
    a_2.var = state.var
    return a_2

で綺麗に復元できる.

stateがたくさんある場合、この素朴な実装だと内部状態が増えるたびにrestore関数へも追記が必要.
なのでstate_dict的な変数の下に保存対象となる内部状態を吊るす形が綺麗.

PyTorch-Lightning

PyTorchの制約でhparamsとstateの両方が必ず発生する.
なのでこの方式を内部で使ってる.
実装としてはinit引数の解析でselfを取り除くとかこまごましたテクニックがあるのでいい参考になる.

static関数の命名

hparamsから再構築するという意味ではreconstructがよく合っていて、内部状態を載せなおすという意味ではloadがよく合っている.
両方やっている、かつstatic関数なので、Cls.from_snapshotがちょうどいい命名だと思う.

選民思想の芽吹き

自分の (高い) 水準に満たないことに対して何かと理由をつけて文句言う.
本人的の感情はつまるところ「ミーハー・本質見えてない奴お断り」なんだろうが、それこそまさに選民思想.

「盛り上げようとしてくれるのは良いんだけど、予選は見もせず、本戦から我が物顔で応援されるとビジネス感が出ててどうかと思うよね」
「無邪気にやるのは結構だけど、よく分かってないミーハーなんだからデカい声でドヤ顔しないで最初は謙虚にやるべきだよね」

#

理屈として「よそ者が、我々が積み上げてきた文化を壊すな」があり得る.
それ自体には一定の合理性がある.
ただ、内と外を分ける考え自体が選民思想にとても近い.
普通の社会は明確な境界などなくぬるっと文化に近づいたり遠ざかったりするもの.
それをラベル付けとフィルタリングでくっきり境界付けし、その境界の内側と同化することを善とするのが選民思想.

フレーム問題の根底: 無謬性

フレーム問題
「有限の計算能力をもつ知能体を、ある環境に置き、目的を与えて、『思考行動し、間違えずに目標を達成せよ』と命ずる」
この命令を下すと知性体は思考ロックを起こして行動が出来なくなる. これがフレーム問題.

対比として、思考能力を持たないランダムウォーカーを考える.
同じ命令を下すとランダムウォーカーは即座に行動し、十中八九失敗する. ただ、たまたま正解する場合もある (c.f. ショパン猿)
ただ「間違えずに」という命令定義に基づくと、成功の確証が無いから命令には従えていない.

フレーム問題はしばしば「無限に総当たりしなきゃいけないから解決不能」と解説される.
それは正しいが、そもそもなぜ総当たりしなければいけないのか.
それが問題定義に (暗示的に) 含まれている無謬性.

無謬性の立証は悪魔の証明そのもの.
失敗しない保証をするにはあらゆるパターンを網羅しなければならず、それは「有限の計算能力」という定義とぶつかる.
だからフレーム問題は解けない.

無謬性の制約さえ除けばいくらでも解決できる.
そもそもランダムウォーカーがたまに上手くやれるのだから、その時点で問題は解けている.
いかに成功率をあげるかという別の問題に帰着するだけ.
フレームを設定すれば云々という話は、無謬性がgivenな有限フレームがあれば総当たりが解けるという話.
知能体に無謬有限フレームを自己設定させるとその時点でロック起こすし、外から無謬有限フレームを与えるのは問題の前提を破壊してるのでダメ.

フレーム問題から導き出せるのは「無謬性の保証はナンセンス」ということ.

意思決定

何に基づくか

意思決定の素材

  • 事実/インテリジェンス
  • 経験/勘
    • リスク: 「時代が違うのよおじいちゃん」
  • 知識
    • リスク: 「そのテンプレ古いっす」
  • 目標
    • ないと: 「事実に変化無しなので前回同様で」
  • 見通し
  • 啓示「神のお告げでこうせよと」
  • ランダム「サイコロで決めましょう」

旧軍「支那での戦闘経験と確固たる戦訓そして陛下の御加護あらば、その屈強な肉体と精神をもって米英鬼畜を撃滅すること疑い無し」
→ 経験は現代戦に活きず、戦訓は時代遅れで、曖昧な戦略しか描けず、その事実に向き合わず精神主義に走り、負けるべくして負けた

どう構想するか

素材が良くても頭が悪けりゃ良い案は出ない.
分析官がよくても参謀がダメならオワリ.

レポート『日本陸海軍の情報部について』の原著

堀栄三「大本営参謀の情報戦記」の中に、旧軍の情報教育に関する米軍レポート『日本陸海軍の情報部について』が出てくる.
興味深い報告書でぜひ読みたかったが、このタイトルでググっても当該論文が出てこない1.
なので探し出した.

レポート情報

米軍が日本を占領し、日本軍を調査した中で、昭和二十一年四月に『日本陸海軍の情報部について』と題した調査書が出されている (p. 29)

調査書を米政府に提出している。(p.327)

堀 (1996). 大本営参謀の情報戦記 -情報なき国家の悲劇-. 文春文庫.

つまり

  • タイトル: 日本陸海軍の情報部について
  • 出版年月: 1946/04
  • 著者: 米軍属
  • 関係者: 米政府 (報告先)

当該レポート

United States Strategic Bombing Survey. (1946). Japanese military and naval intelligence division. U.S. Government Printing Office.

ということでこれがその報告書.
120ページほどある骨太レポート, GHQ 参謀第二部; G-2が直接の著者.


  1. ググるとこのレポートを引用してドヤ顔する記事がいくつも出てくるが、この人達が原レポートを読んでるとは思えない. 堀の記述を再引用した内容しか書いていないのだ. 情報の審査、あなたもしてないですね.

共産主義と資本主義

資本主義: 「資本をもつ人」が「能力ある人」と資本契約を結べば世界はどんどん成長して幸せになるに違いない!という主義

共産主義: みんなで資本を持ちみんなで作ればみんなの資本が増えていく、搾取のない幸せな世界になる!という主義

共產主義の特徵とするところは … ブルジョア財產の廢絕である。… ブルジョアの私有財產は … 生產および生產物領有方法の、最後にしてかつ最も完全󠄃なる表現である。…
資󠄄本は協力的產物である。… 社󠄃會全󠄃員の共同作業によつてのみ働かされうるものである。故に資󠄄本は決して個人的の力でなく、一つの社󠄃會力である。…
共產主義の社󠄃會にあつては、集積された勞働が、ただ勞働者󠄃の生活を擴大し、豐富にし、增進󠄃させる手段になる。

資本契約が肝なので資本主義。共同持分・共同生産が肝なので共産主義

共産主義の実装

産品の決定

生産は有限の資本を特定の商品へ転換する作用.
なので生産する商品を決める必要がある.

資本主義であれば簡単、資本の持ち主が最終決定する.

共産主義では資本が共有されてる、つまり全人類が持ってる.
資本主義と同じ考え方をするなら、社会の合意で決めることになる.
すなわち、共産主義は「何を生産するか社会合意を取る」仕組みが必ず必要.

A. 習慣

「今までなんとなくそうだったから同じように作り続ける」やり方. 既に存在するのに従うのが暗黙の了解.
素朴な農村社会、みたいなもの.

B. 権威

「神の代行者たる代表の指示通りに生産する」やり方. 代表を無条件に信じることで同意となす.
王族や宗教政治のやり方.

C. 投票

「今年分の生産投票をします」なやり方. 社会の成員がみんなで合意を取る.
小さなクリエイター集団がモノづくりするときにやりそうなやつ.

D. 計画

「科学的需要見込み算出とそれに基づく生産」方式. やり方への信頼をもって合意を得る.
まさにゴスプラン.

問題点

  • 習慣: それでうまく行くならずっと村社会
  • 権威: いずれ権威は腐る = 神はいない
  • 投票: 局所最適
  • 計画: 未来を見通せる神はいない

権威型では、最高の決定をおこないタイミングが来たら適切に権限移譲できる人が必須. でもそれを何代も出来る神みたいな人間群はそういない.
投票は人の自己理解を過信してる. 実際に手にとって「なんか微妙」「あれ足りないじゃん」が続出する.
計画は人類の力を過信してる. 5年後に必ず必要となる人類を幸せにするX、を確定で当てることなんてできっこない.

どのやり方でも資本の使い方が不完全になる.
それでも不満を抱かないあるいは不満を飲み込める?
せっかく働いて作った資本を無駄にされたら怒らない?
より効率の良い主義があったりしない?

品物の生産

生産が完璧じゃなかったらどうするのか.
能力不足だったら? やる気が足りかなったら?

資本は共有財なのでサボった人にも同じ分前が無いとと主義に反する. 「俺の資本で生産されたのに俺に分前ないとはどういうことだ」になる.

その鏡で、自分の頑張り単体じゃほとんど見返りがない状況でどう頑張れるのか、もある. つまりインセンティブ.
みんなが5%頑張ればたしかに理屈上は5%向上するけど、サボる人もいるし、ちょっとサボってもバレない…みたいな発想になりがち.

情報の重みづけ: 過信か軽視か

情報を軽視するな、そして過信するな

情報の流れと過信・無視

収集→審査→利用

集めなければ始まらない、ガセを集めるのはむしろ毒、本物も使わなきゃゴミ
なので上記3ステップは必ず出てくる.

各段階で軽視と過信が出てくる.

軽視はわかりやすい.
経験や妄想に頼って情報を軽視すると、集めない・使わないが多発する.
事実に基づかない机上の空論、結果測定のない実験、アリバイづくりの結果報告.

過信は意外とそこらじゅうに潜んでいる.
信用できる情報源への全面的な信頼と他の軽視、審査のない報告に基づく統計、不確実性から目を背けた利用.

なぜ起こるのか

どっちも情報=現実から目を背けてる.
複雑で見えづらい現実から目を背けて、心地よい妄想や報告に逃げてる.