資産形成の戦略

要旨

資産形成の考え方をまとめます

1. 計画

まず何のために資産形成を始めるのか、資産形成のゴールは何か、ゴール達成後はどのような生活をするかを計画しよう。 例えば(現実的かは一旦抜きにして)「40歳までに1億円貯めてFIRE」とか、「65歳までに退職金と併せて4000万円貯める」とか。 FIREするならその後の生活、特に支出も綿密に予測する必要がある。

1-1. 4%ルール

目的設定のために役立つ情報として「4%ルール」がある。 これは、金融資産総額の4%を毎年取り崩して生活すれば、運用益と取り崩した分がちょうど相殺され、持続的な生活が見込まれるというものである。 ただし、税金のため実際に得られる収入は3%程度であることに注意が必要だ。 例えば「FIRE後は毎月15万円使うような生活をしたい」とすると、それに必要な金融資産総額は 15 \times 12 \div 0.03 = 6000万円必要であると言える。

1-2. サイドFIRE

サイドFIREとは、「少量の労働収入と資産収入によって生活する」スタイルである。 毎月15万円の生活をするには6000万円の資産が必要と上で述べたが、それはあくまで「資産収入だけで」毎月15万円を得る場合である。 労働収入も併せて毎月15万円なら必要な金融資産総額はグッと減り、より現実的な設計ができる。 例えば毎月5万円の労働収入が見込めるのなら、必要な資産収入は毎月10万円、必要な金融資産総額は4000万円まで減る。

他にもリーンFIREやコーストFIREなど、「ぼくの考えた最強のFIRE」は色々あるが、重要なのは「毎年資産収入としていくら得たいか」だろう。 それさえ決めてしまえば、4%(3%)ルールに従って目標の資産総額が定まる。

1-3. 積立設定

目標金額と期限が決まったら、毎月いくら投資に回せす必要があるかを考えよう。 金融庁をはじめとした様々なサイトが積立投資のシミュレーターを公開しているため、積立期間と想定利回りを設定すれば毎月いくら必要かがすぐにわかる。

https://www.fsa.go.jp/policy/nisa2/tsumitate-simulator/

例えば想定利回りを3%として、20年後に1000万円を達成したいなら、毎月の積み立て金額は3万円ちょいである。 積立投資に加え一括投資も行う場合はこの金額も変動するので、あくまで参考程度である。

2. 家計簿

毎月どれだけ投資するべきかが分かったら、現在の経済状況でそれが可能かを知るべきだ。 そのため、毎月どこからどれぐらいの金額が入り、どれぐらいの金額が出ていくのかを帳簿につける必要がある。

2-1. キャッシュレス決済

家計簿をつける上でキャッシュレス決済は非常に強力である。 なぜなら決済履歴がアプリやサイト上で確認できるからだ。 最近のキャッシュレス決済はポイントがついたりもするので、現金は緊急用として、基本的にはキャッシュレス決済をしよう。

2-2. クレジットカード

キャッシュレスといえばクレカである。 またいろんな何ちゃらPayも、クレカと紐づけられて請求されることが多い。 これは個人的なハックだが、種別ごとにクレカを分けると管理がしやすいと考える。 例えば食費専用のクレカを作成すれば、そのクレカの請求額がそのままその月の食費になる。 ただし、あまり細かくクレカを使い分けるのも面倒なので、主要な種別に絞った方が良いだろう。 私は投資用のクレカ、食費用のクレカ、交通費用のクレカ(というかICカード)そしてそれ以外のクレカに分けている。

3. 金策

さて、目標の投資金額と家計簿を見れば、多くの場合現状では無理がある計画であると分かるだろう。 ではどうすべきか。 大きく分けて2つの施策がある;収入を増やすこと、支出を減らすことである。

3-1. 収入を増やす

収入を増やすための施策はさらに4つに分けられる;昇給、残業、副業、転職である。

  • 昇給は単位時間あたりの給料を高めることである。 上司や人事に対して自分の功績をアピールし、昇給すべき人材であることを訴える。
  • 残業は時間外労働である。この中だと最も手っ取り早い。
  • 副業は本業とは別の仕事をすることである。 会社によっては副業を禁止しているので、就業規則を確認しよう。
  • 転職はより給与の高い仕事に就くことである。 社内外どちらもありうる話である。

どれが良いかは人による。 残業が最も楽に稼げるが、「税金周りの勉強にもなるので副業をするべきだ」という主張もある。 また転職も、「給与ではなく社内環境の改善のためにすべき」とも言われる。 択一ではないので残業しながら副業もアリだ。

3-2. 支出を減らす

支出を減らす方法はいろいろあるが、代表的なものとして:

  • 外食をやめて自炊か、スーパーの半額弁当を狙う
  • 携帯のキャリアを格安のものに変更する
  • 使ってないサブスク(保険含む)を解約する
  • コーヒーを自分で淹れる、カフェ行かない
  • ポイントを貯める・使う(いわゆるポイ活)

などが挙げられる。 ただ一つ言えるのは、ストレスを貯めるような倹約はしてはいけないということである。 ストレスを貯めると破滅的な浪費に繋がるからだ。 自分でできる範囲の節約に留めよう。

4. 投資

何も考えずにインデックス投信をしろ。 ...と言いたいところだが、最近はインデックス投信の皮を被ったアクティブ投信(スマートベータとか)があるので、より厳密に「S&P500かオルカンを買え」と言うべきなのかもしれない。 「古典的な」インデックス投信の何が良いかを確認して、変なインデックス投信を買わないようにしよう。

4-1. インデックス投信はアクティブ投信に勝つ

ウォール街の多くの天才たちが、自分の知識と経験を総動員した戦略を策定し、各企業の経済状況や世界的なトレンドを精査した上で投資先を厳選し、その結果インデックス投信に負けるか、勝ったり負けたりするか。 これが金融市場の歴史である。 我々素人が浅知恵でアクティブ投信を買ったろころで勝てるはずがない。 また、ここでいう「勝つ」とは「アクティブ投信がインデックス投信に勝つ」という意味であり、長期的に見て運用益を出しているから勝ち、ではないことに注意。 たとえアクティブ投信で運用益100%を達成しても、インデックス投信で運用益300%を達成しているのなら負けだ。

4-2. 手数料が安い

アクティブ投信は信託報酬として1%ぐらい取ってくる。 一方インデックス投信の王「eMAXIS Slim 米国株式(S&P500)」の信託報酬は0.0814%である(執筆時現在)。 信託報酬は純資産総額に依存して決まるので、この差は致命的だ。 現在の環境なら、0.15%以上の信託報酬を取ってくる商品は、例えインデックス投信を標榜していても黄色信号を出すべきだろう。

なお、私はiFreeNEXT FANG+インデックス(執筆時現在信託報酬0.7755%)を積立購入している。 10社にしか分散投資してないのに高すぎない? やめよかなこれ

4-3. 素人はインデックス投信以外買うな

  • 個別株を買うな。まとまった金が必要だし、安定した配当収入を得るには各企業の経営状況を毎年精査する必要が出てくる。
  • 債券を買うな。個別株以上にまとまった金が必要だし、リスクが低い分リターンも低い。
  • 貴金属を買うな。NISA対象外だ。
  • 外貨建MMFをやるな。それならS&P500買え。
  • 外貨定期預金やるな。まだレバレッジ1倍のFXやった方がマシ。
  • FXやるな。どうせ欲をかいてレバレッジ吊り上げ始めて破滅する。
  • 仮想通貨やるな。ボラティリティ大きすぎて精神的に疲弊する。
  • ETFはまだやるな。リアルタイムで売り買いできる分狼狽売りのハードルが低いし、自動積立できないのが多い。コスト面の差も微々たるものだ。

素人がやって良いのは、インデックス投信と、積立待ち資金置き場としての(円建ての)MRF、定期預金ぐらいのものである。 ただし趣味と割り切るのなら良いものとする(私も仮想通貨に2万円入れた 今3万円になった✌️)。

5. まとめ

信頼できそうな資料、胡散臭い広告、断言するタイプのYoutuberの動画などなど色々見漁ったが、結局結論は「稼いで節約してS&P500かオルカン」になるだろう。 それを守らず強欲にリターンを求めて破滅した人間がたくさんいるから、この世は投資系インフルエンサーやそれに対する注意喚起などに溢れている。 黙って買い続けよう。

京都大学大学院情報学研究科情報学専攻知能情報学コースを卒業しました

はじめに

私は同志社大学から京都大学院に転身し、2025年度に卒業しました。 本記事はなぜ京都大学院に進もうとしたのか、そこで何を得たのか、今何をしようと考えているのかについて、備忘録として書き記すものです。

なぜ京都大学院に進もうとしたのか

一概にこれ、といった理由はありませんが、一番真面目な理由から述べます。

学部のときは同志社大学理工学部情報システムデザイン学科に所属していました。 そこを選んだ理由に大したものはなく、ただ漠然と「プログラミングがしたい」と考えていた記憶があります。 そこで実際プログラミングの実験等々をやってみましたが、そこでニューラルネットワークの実験をやったときに思ったんですよね。 「え、人工知能バカおもろくね?」と。 で、人工知能について非常に興味を持ったは良いものの、ここは情報システムデザイン学科でした; あくまで情報システムの社会実装についての勉強がメインであって、人工知能はあくまでその手段に過ぎず、この機構については深く学ぶことはなかったのです。 「つまんねーな」と思った自分は、人工知能についてさらに専門的に学べる場所を求めました。

「いや、それは転学する理由であって、京都大学大学院を選ぶ理由ではなくね?」といった感じですが、そこで2つ目の理由、学費が効いてきます。 大学院に進学することを決めたものの、その学費を自分で負担したいと考えていたので、学費が安いほうが経済的に都合が良かった、ということです。 実際、同志社大学院の学費と比較して、京都大学院の学費は半分で済みました。

まあ方々から邪推されているように、ロンダリングしたかった一面もあります。 ただ人工知能についてより深く学びたいというモチベーションは嘘ではなかったし、今も持ち続けています。

京都大学院で何を得たのか

たくさん得ました、しかしまだ不十分です。

前述のとおり、学部では人工知能についての勉強がほぼなく、また独学でも限りがありました。 恥ずかしい話、入学当初はKLダイバージェンスも知らなかったです。 2年の間、それらについてがむしゃらに学んだ結果、まあマシにはなったと思います。

データ科学エキスパート副プログラムも修了しました。

ただ、これらの学習を通じてもなお、自分はまだまだ人工知能の門に立ったに過ぎないと痛感しています。 というより、これらの学習を通じて、未知の世界の広がりを知ったと感じています。 論語に、「知之為知之、不知為不知、是知也。」とありますが、まさにそうで、学部では「知らない」とすら思えなかった領域を「知らない」と知覚できた、というのが2年の成果です。

今後何をするのか

上述の「知らず」を「知る」に変えます。

私はまだ何も知らないといって過言ではない状態です。 モーダルで言えば時系列も、画像も、グラフも知りません。 理論的な話では漸近理論を、応用的な話ではLLMを知りません。 因果推論や、変わり種では情報論的学習理論を知りません。 これから社会人となり、勉強の時間は限られると思いますが、それを言い訳にせず、貪欲に「知らず」をなくしていきたいと思います。

おわりに

学生時代を振り返り、改めて初心を表明しました。 この記事をもって学生時代に別れを告げたいと思います。

追記

結局最後までなぜ京都大学大学院を選んだのか分からなかった。

京都大学大学院を選んだのは以下の3つです。 1. 人工知能について専門的に学ぶことができる研究科があった。 2. 学費が安かった。 3. より良い学歴を得たかった。

学部時代より学費が安く専門的に人工知能を学べる(かつ、ロンダリングに値する)環境なら、関西でそれを満たす他の国立大学の研究室はある

ロンダリングに値する」かどうかはあなたの主観であって私の判断基準にはありませんので、この主張には同意しかねます。 ただ付け加えるならば、実際大阪大学大学院にも席をいただきました。 しかし、その研究室は特定のモーダルに特化していたので、より広範な人工知能についての知識を得るべく京都大学大学院を選択しています。

課題解決するために複数ある手段の中でどうしてその選択肢を選んだのか周囲に適切に説明できない人材なのだろう

頑張ります。

資産形成(運用)についてまとめ

資産形成、運用に関して調べたことをまとめる。

0. 要約

  • 高いリスクを負わなければ高いリターンを得ることはできないが、高いリスクを負ったからと言って高いリターンが得られるとは限らない。
  • 十分低いリスクで得られる運用益は年利で1~2%まで。個人が負えるリスクでは4~5%。
  • 上の理由から、労働収入を増やし支出を減らすことが最も効率の良い資産形成術であり、働かずに高収入は不可能。
  • 考えるのが面倒ならiDeCo、NISAだけすれば十分。購入する銘柄はインデックス投信(S&P500、オルカンなど)。

1. 家計管理

まず現在の月収がいくらで、支出がいくらで、それぞれの内訳を明確にする。

1-1. 支出を減らす

当然だが使っていないサブスクや年会費のかかるクレカは解約する。 次に、固定費を中心に、無理のない範囲内で支出を減らす(インフラ関係はQOLに直結するので慎重に)。

1-2. 収入を分類する

収入を以下の3つに分類する。

  1. 生活費...上で圧縮した、日々の生活に必要な資金。
  2. 予備費...事故や病気、震災、失業など、不測の事態に備えて準備しておく資金。一般には、その総額は月収の3~6ヶ月分が良いとされている。
  3. 余剰資金...リスク性金融商品に出資できる、余った資金。

余剰資金の全てを投資に回す必要はないが、投資資金はここから出さなければならない。 余剰資金が少ない場合は、生活費をさらに圧縮するか、転職や副業によって労働収入を増やす。

2. 金融商品

投資先である金融商品は様々あるが、高いリターンを求めるには高いリスクを負う必要があり、また考えるのが面倒ならインデックス投信(と普通預金)だけで良い。

2-1. 預金

預金とは、一般に銀行に資金を預けることを指す。 銀行はそれらを元本に企業への融資などを行うので、預金もまた立派な金融商品である。 一般に「金融商品」にイメージされるようなリスクは非常に小さいが、あるにはある。 まず、預けた先の銀行が存続する限り元本は保証される。 その銀行が怪しくなってきた場合、財務状況の健全化のために他の銀行との合併が実施されることが(歴史的にも)多い。 仮にその銀行が破綻した場合でも、基本的には他の銀行(救済金融機関)が預金の保護を行い、それすら無理な場合は預金保険機構が補填を行う(ペイオフ)。 ただし、預金保険機構が補填するのは1000万円+利息までであり、またそれもベストエフォート、つまり補填対象の預金者が多すぎる場合は満額の補填がなされない危険性がある(まあ多分公的資金が投入されるので大丈夫ではある)。 このように、非常に小さいとは言えリスクが存在し、また何にしてもインフレによる通貨価値現存リスクを避けることはできない。 また、リスクが小さい分利率も非常に小さい。

2-1-1. 普通預金

説明不要。 いつでも振込、引出が可能である一方で、後述の定期預金と比較して金利が(基本的に)小さい。 生活費の支払いのため用いられることが多い。 金利は0~0.4%で最低レベル。

2-1-2. 定期預金

あらかじめ定められた期間引出が不可能となる一方で、普通預金と比較して金利が(基本的に)大きくなる預金制度。 定められた期日に満期になること、また預金の安全性から、引当金、つまり車の購入費や子供の学費のようないつ必要になるか明確な出費に対する準備金を定期預金に預け入れることが有効である。 一般な定期預金に加え、新型定期預金(仕組預金)と呼ばれる、何らかの特約がついた定期預金もあるが、満期がいつか分からないやつだったり外貨になってたりするのであんまりおすすめできない。 金利は0.2~0.8%程度で、特約が付くと1.0%ぐらいにまで上昇する。

2-1-3. 外貨預金

日本円ではなく外貨(代表的には、米ドル)として預金する方式。 従来の円預金と比較して金利が(基本的に)高くなる代わり、大きく分けて2つのリスクが追加される。

  1. 為替リスク...日本円から外貨、また外貨から日本円に変換する際に、そのレートに依存して損をするリスク。例えば、1ドル150円の時に日本円から預け入れ、1ドル100円の時に日本円に変えた場合、たとえ高い利子を得ていても元本割れのリスクがある。
  2. カントリーリスク...預け入れた外貨を法定通貨とする国(例えば、米ドルならアメリカ、人民元なら中国)の政策や情勢などによってその通貨の流動性が著しく低下し、銀行側が日本円への払い戻しを拒否するリスク。特に新興国通貨(人民元南アフリカランドなど)はリスクが大きい。

外貨預金は日本円が外貨に変わっただけなので、円預金同様定期預金が存在する。 上のリスクを考えれば、より利率の大きい定期預金を、さらに為替リスクを低減するため積立てて利用することが推奨される。 その場合の利率は通貨にもよるが1~4%程度となる。

2-1-4. ネット銀行

ソニー銀行楽天銀行、SBI新生銀行など、実店舗を持たない銀行はネット銀行と総称される。 ネット銀行は従来の銀行と比較して、店頭での相談ができない代わり、比較的高めの金利が提供されたり、手数料が無料になったりする。 そのため、メインバンクはネット銀行としつつ、貯蓄や融資、給料の振り込み等は従来の銀行とする、といった組み合わせが可能となる。

2-2. 債券

債券とは要するに借金である。 そのため、「発行体が健全であれば」利率はもちろん満期時の元本が保証される。 健全でない場合は状況にもよるが、他会社が買収した場合などはその会社が弁済義務を負うことが多く、やはり元本が保証される。

元本が保証されること、決められた期日に返還されることなどから定期預金と非常に近い性質を持つが、期間の長さが違い、定期預金は最短7日で償還される一方で、債券は10年以上先であることが多い。

2-2-1. 国債

国が発行する債券であり、この場合その国がデフォルトに陥らない限り元本が保証される。 利率は国に依存し、現在の日本の利率は約1%だが、例えば戦争中の国の債券(戦時国債)の場合は25%になったりする。 いわゆる「国の借金」であり、日本の借金がデカすぎると定期的に話題になる。

2-2-2. 社債

企業が発行する債券であり、その企業が倒産しない限り元本が保証される。 当然国が滅びるより企業が滅びる方が可能性が高いので国債よりも利率が高い。 ただし販売単価が高いのであんまり手出しするものではない。

2-2-3. 既発債券

新規に発行された債券を新発債と呼び、その債券が売却され流通しているものを既発債券と呼ぶ。 流通量に限りがあるため需要と供給の関係があり、販売単価は常に変動する。

2-2-4. 仕組債

何らかの特約がついた社債で、特約がつき弁済順位が低くなる分利率が通常の債券(プレーン債)より高い。 例えば財務状況が悪くなったりすると扱いが株式と同じになったりする偶発転換社債(Coco債)など。 基本的に発行体の(多分財務上の)都合で組成され、富裕層向けに売り出されるものなので手を出してはいけない。

2-3. 株式

株式は、企業の資産調達手段の一つである。 債券との違いは発行体が健全であっても元本が保証されないことと、破産時の弁済順位が低いこと。 後述の投資信託と比較して、以下の点が挙げられる。

  • 販売単価が高い...株式は株単位で売買されるので、株単価が高ければ最低買付可能金額も高くなる。そのため、ある程度固まった資金が必要。
  • 分散投資が必要...リスク分散を考えると複数の企業、国、事業領域に投資することが求められる。
  • 投資先企業の審査が必要...今後株価が(短期的、あるいは長期的に)上昇することを十分期待できる企業かどうかを調べる必要がある。

上で述べたように、株式投資は十分な資金と時間が必要なので、基本的には推しの企業の株を買うぐらいで良い。 配当も今後永久にもらえるとは限らないし、そこまで期待しない。

2-4. 投資信託

専門の機関群が、複数の出資者から得た資金をまとめて元金とした分散投資を行い、その利益を出資者に還元、分配する方式。

専門の機関群は販売会社、信託銀行、運用会社の3者から構成される。 販売会社は出資者からの資金を受け付け、口座を管理し、利益の還元を担う。 信託銀行は出資者からの資金をまとめ、運用会社の指示に従って投資を行う。 運用会社は出資先の選定を行い、信託銀行に対して投資を指示する。 集められた資金自体は信託銀行にあるため、信託銀行が破綻したとしても預金と同様最大限保護されるし、他の機関が破綻してもすげ変わるだけで影響はない。

投資先の選定などを外部が行うため、売買コスト(購入時手数料)や保有コスト(信託報酬)、解約コスト(信託財産留保額)などがかかる(かからないのもある)。 特に信託報酬が高いと思うように資産が伸びないので注意。

投資信託にはさまざまなポリシーが存在し、利率はそれに強く依存する形になる。 例えばMMFなどは主に債券に投資するものであるし、株式に投資するものでもアメリカ株や日本株だけのものや全世界のものもある。 が、まあ基本的には5%を超えない。

2-4-1. インデックス投信・アクティブ投信

インデックス投信は何らかの経済指標(S&P500、オールカントリー、日経平均TOPIXなど)に評価額が追従することを目指す投資信託で、アクティブ投信はそれを上回ることを目指す投資信託である。 アクティブ投信はより高い信託報酬をもらう代わりに、経済指標を上回るために投資先をより厳選する、とされているが、恒久的に上回ることは不可能で、追従するのが関の山であることは歴史が証明しているために推奨できない。

2-4-2. テーマ型投信

何らかのテーマに従って投資先を選ぶ投信をテーマ型投信と呼ぶ。 過去には5GやSDGsなどのテーマが設定され、今はAIがあるが、結局組入銘柄が同じなことが多く、そのくせしっかり信託報酬をとってくるので旨みがない。 さらに言えば、テーマ型投信が組成されるのはもうそのテーマが白熱し株価が高騰した後なのでやはり旨みがない。 買わなくて良い。

2-4-3. 毎月分配型投信

毎月いくらかの分配が得られる投資信託を指す。 パフォーマンスが悪いと運用益より分配額が大きくなり、元本から支払われることがある(特別分配金)。 買わなくて良い。

2-4-4. ETF(上場投資信託)

上場している投資信託で、株式と同様リアルタイムに売買することが可能である一方、投資信託と同様信託報酬が発生し、また資金の運用方式は投資信託と同様である。

2-5. 貴金属

金、銀、プラチナなど、生産量、流通量が少ない金属を売買する投資。 基本的に世界情勢が不安定になると、通貨価値の下落を嫌って貴金属の買いが集中する。 つまり、株価と貴金属は逆相関の関係性にあり、十分に株式や投信に投資した人間がリスク分散手段として投資するような商品である。

2-6. FX

外貨の両替によって利益を得る投資手法。 悪名高いのは外貨両替そのものではなく、レバレッジ信用取引にある、と思う。 まあやらなくて良い。

2-7. 仮想通貨

ビットコインに代表される、ブロックチェーン技術を用いた分散型台帳によって取引を保証する通貨体系。 現在ではさまざまな種類の仮想通貨が取引されているが、ある仮想通貨が資産形成に向いているかどうかは、その仮想通貨の性質による。 特に、その仮想通貨の希少価値を担保する施策が取られているものは長期投資に向いていることが多いと言える。 ただし、組成直後の仮想通貨は投機筋による罠(つまり、資金を注入して価値を跳ね上げ、釣られた情弱が集まってきたら売り抜ける、仕手株みたいなもの)の可能性があるため注意。

2-8. 保険

一部の保険は満期まで支払いを続けると返戻金が得られるものが存在し、金融商品として解釈できる。 返戻率が100%を超えるものがあるものの、何らかの保証をする分低いリターンである。

3. 税制上の優遇

3-1. 新NISA

NISA(少額投資非課税制度)とは、定められた額、定められた銘柄に対する投資であれば、運用益にかかる税金(所得税15%、地方税5%、復興特別所得税0.315%の計20.315%)が非課税となる制度。 現行のNISAは積立投資枠と成長投資枠に分けられ、積立投資枠は年120万円まで、成長投資枠は年240万円まで、また累計では積立投資枠が600万円まで、成長投資枠が1200万円までとなる。 基本的には、まとまった資金が入れば成長投資枠で、毎月決まった額の収入があれば積立投資枠で投資すれば良い。

3-2. iDeCo

iDeCo(個人型確定拠出年金)とは、毎月決まった額を掛金として、個人が指定した金融商品に積立投資し、60歳にその運用益が得られる制度。 iDeCoのメリットは大きく分けて3つ。

  1. iDeCo(含む拠出年金)の掛金は所得控除
  2. iDeCoで拠出した掛金による運用益は非課税
  3. 受け取り時も何らかの控除

掛金の限度額は人によって違う。 最も税制上の優遇を受けた制度ではあるが、60歳になるまで受け取れない点には注意が必要。

4. 結局どうすれば良いのか

何にせよ働く。給料が少ないなら副業とか転職とかキャリアアップとか頑張る。

4-1. 最もシンプルなプラン

資産のうちの何割かをNISA成長投資枠に、また月収の何割かをNISA積立投資枠およびiDeCoに突っ込む。 銘柄は米国インデックス投信。 残りは普通預金に。

4-2. 最も複雑なプラン

生活費は普通預金予備費は長期の定期預金か個人向け国債(緊急時は解約)か保険。 余剰資金のうち近々使う予定のものについては短期の定期預金。 残りはまず成長投資枠を全額埋めたあと、積立投資枠とiDeCoに投資しながら、オルタナ投資として外貨定期預金を積立、また金を投資。 趣味程度に仮想通貨やFX、推し活程度に個別株投資。

5. おまけ

5-1. 一発逆転とか

ない。元外銀がどうだのファイナンシャルプランナーがどうだの最新AIがどうだのブロックチェーンがどうだの手を替え品を替え買わせようとしてくるが全て詐欺である。

5-2. FIREとか

基本やめた方が良い。 まずFIREのために交際費を極限まで切り詰め投資に回す必要があり、人間関係が希薄になる。 FIREしたとしても人生は長い。暇で気がおかしくなってしまう。 暇だから資産状況を見る。好調なら良いが不調の時は非常に不安になる。 残り資産は残り寿命を意味するから。 人間関係が希薄になったのに、資産を気にして付き合いがさらに減る。 結局就労を目指しても空白期間に何もしていなければ再就職は難しい。 よく4%ルール(残り資産の4%を毎年使うようにすれば長いこと生きられる)と言われるが、やるならマージンとって2%ルールぐらいにしといた方が良いと思う。 まあその場合月10万でも6000万必要になるが...


まあ、とりあえずNISAですかね。

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction

メタデータ

著者: Keyu Tian, Yi Jiang, Zehuan Yuan, Bingyue Peng, Liwei Wang

journal: NeurIPS 2024

arxiv: arxiv.org

筆頭著者のTianさんはByteDance社のインターン中にこの研究をしていたが、同社の他の研究プロジェクトを妨害したり、計算機リソースを不正に利用したりしたと同社から1.1億円の訴訟を受けているらしい。


ChatGPTに代表されるようなLLM(特に、アテンション機構を中心とした自己回帰モデル)は、スケール則などの良い特徴を持っている。 そこで、これらの構造を真似てコンピュータビジョン(画像生成など)を行う研究(例えばVQGANやDALL-Eなど)が、今まで盛んに行われてきた。 しかし、同じ問題を取り扱うDiffusion Modelに負けてしまっていることが、問題点として挙げられている。

本研究はその問題の主な原因を、以下のように分析した; 既存研究における自己回帰画像生成モデルは、大きく分けて2つに分けられる。

  • Pixel-based: 2次元配列である画像を1次元に平坦化し、順に予測させる(つまり、画像の左上から右下に向けて1ピクセルずつ予測)
  • Token-based: 連続値である画像特徴を離散的な潜在符号に変換し、やはり平坦化ののち順に予測させる

この設定には以下のような欠点がある。

  1. 左上から右下にかけて予測させるので、例えば画像の下部だけを与え、上部を予測させるタスクが解けない。
  2. 自己回帰モデルにおける仮定(各特徴は直前までの特徴列にのみ確率的に依存する)は画像には適用できない(相互関係があるはず)
  3. 2と関連して、平坦化する際に縦の情報が劣化する

本研究では、単一の画像の左上から右下に向けて生成するような(Raster-scan)自己回帰モデルではなく、まず解像度の荒い画像を生成して、だんだんその解像度を上げていくような(coarse-to-fine)自己回帰モデルを提案した。本研究の貢献はこの新しい学習アプローチの提案であり、構造自体は既存研究(VQGAN)のそれとほぼ同じである。

変分推論を復習する

要旨

変分推論について勉強し直す。

問題設定

 \boldsymbol{Z}を潜在変数として持つ確率分布 p(\boldsymbol{X}|\boldsymbol{Z})から \boldsymbol{X} = \lbrace \boldsymbol{x}_1, \cdots, \boldsymbol{x}_N \rbraceが観測されました。さて、潜在変数 \boldsymbol{Z}はいくらであったと考えられますか?

頻度主義者の考え方-最尤推定

頻度主義とは、確率を「ある事象が何回中何回起きるか」、つまり、その事象が生起する頻度と解釈する考え方である。

  • 赤玉と白玉が混ぜて入れられている箱があって、その箱から1個の玉を取り出して色を確認し、また戻すという操作を行うとする。「赤玉を取り出す確率は0.6である」という主張は、この操作を無限回繰り返した時、5回中3回の頻度で赤玉が取り出されることを意味している。

また、頻度主義では、推定したい潜在変数は固定されている(確率変数ではない)という考え方をする。例えば上の例において、赤玉と白玉の混合率は潜在変数であると言えるが、その値は特定の値に固定され、確率変数としてみなされない。

母平均の検定のような多くの統計的検定では、帰無仮説として潜在変数(平均値のような)が特定の値であると仮定し、その上で標本が観測される確率を評価しているが、これはまさに頻度主義的な考え方であると言えよう。

  • 母平均が 0だと仮定した場合、この標本が観測されるのは100回中1回ぐらいの頻度でしかない、だから母平均が 0であるとは考えにくい \cdotsといった具合である。

さて、上で定義した問題について考える。頻度主義者たちは、観測データ \boldsymbol{X}が実現される確率を最大化するような潜在変数 \boldsymbol{Z}を探すことで問題解決を試みた。


\begin{align}
\boldsymbol{Z}^* = \text{arg} \max_{\boldsymbol{Z}} p(\boldsymbol{X} | \boldsymbol{Z})
\end{align}

母平均を 0と仮定したときの標本の実現確率を評価したように、 \boldsymbol{Z}を固定したときの観測データの確率(尤度関数と言う)を評価することで、尤もらしい潜在変数を得ることを目指している。このような手法を最尤推定(Maximum Likelihood Estimation, MLE)という。

最大事後確率推定(MAP推定)

この問題をパッと見たときに、「いや、 p(\boldsymbol{Z} | \boldsymbol{X})を最大化した方が良くね?」と考えたかもしれない。この最大化は、直感的には「得られた観測データから、最も確からしそうな潜在変数を推定する」という解釈ができる。これを最大事後確率推定(Maximum A Posteriori Estimation, MAP推定)と言う。


\begin{align}
\boldsymbol{Z}^* = \text{arg} \max_{\boldsymbol{Z}} p(\boldsymbol{Z} | \boldsymbol{X})
\end{align}

一見単純に見えるこの考え方は、その実考察を要する。ベイズの定理によれば、


\begin{align}
p(\boldsymbol{Z} | \boldsymbol{X})
 &= \frac{p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z})}{p(\boldsymbol{X})} \\
 &= \frac{p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z})}{ \int p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z}) d\boldsymbol{Z}}
\end{align}

のように書けるが、 p(\boldsymbol{Z})が含まれていることに注意しよう; この定式化は \boldsymbol{Z}がある確率分布に従っている(客観的に定義できるものではないため、主観確率である)ことを暗示している。この考え方では \boldsymbol{Z}は確率変数とみなされ、頻度主義から逸脱している。「いや、 p(\boldsymbol{Z} | \boldsymbol{X})を最大化した方が良くね?」と考えた人間は、知らず知らずのうちに \boldsymbol{Z}を確率的に変動する量だと捉えているのだ。

ベイズ主義者の考え方-ベイズ推定

ベイズ主義者にとって確率とは、「ある事象の(情報不足に起因する)不確実性に対する(主観的な)尺度」と解釈される。ややこしいね。赤玉白玉の例で「赤玉を取り出す確率は0.6である」という主張を取り上げたが、ベイズ主義においてこの主張は、主張した人間の(それまでの経験に基づいた)主観において、「赤玉が取り出される」と言う事象の不確実性を定量化したら0.6でした、以上の意味を持たない。

両者の確率に対する解釈の違いは非常に重要である。頻度論者にとって確率は極限から算出される客観的な事実であり、それが実際に得られるかは別にして不変である。一方で、ベイズ主義者にとって確率はただ属人的な主観の定量化に過ぎず、今後の観測次第で変化する余地を残している。

また、ベイズ主義の枠組みでは \boldsymbol{Z}もまた確率変数であると言える。潜在変数は観測されていない変数であり、その意味では"不確実"な変数であるから、その不確実性を評価する指標として p(\boldsymbol{Z})が定義できる、というわけである。

要するにベイズ主義者は、今ある観測データからそれっぽい確率分布(主観確率)をデザインしてきて、新しいデータを得たらそれに応じて確率分布を修正する、得られない場合は一生それを使い回す、といったことを良しとしているのだ。確率を無限回の反復試行の末に頻度として得られる客観的事実と定義している頻度主義者にはできない芸当やね。

さて、ベイズ推定の話をしよう。最尤推定では p(\boldsymbol{Z})の存在を認めていなかった、MAP推定では認めているものの最大化によって一点 \boldsymbol{Z}^*のみを得ることを目指していたが、ベイズ推定では事後分布 p(\boldsymbol{Z} | \boldsymbol{X})そのものを得ること、つまり分布の形状を知ることを目的としている(その意味では、MAP推定はベイズ推定の特殊系であると言える)。具体的な例としてベイズ線形回帰などが挙げられるが、これ以上風呂敷広げるとマジで終わらないので割愛。

変分推論

ベイズ推定は「事後分布 p(\boldsymbol{Z} | \boldsymbol{X})そのものを得ること」を目的としていた。


\begin{align}
p(\boldsymbol{Z} | \boldsymbol{X})
 &= \frac{p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z})}{p(\boldsymbol{X})} \\
 &= \frac{p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z})}{ \int p(\boldsymbol{X} | \boldsymbol{Z}) p(\boldsymbol{Z}) d\boldsymbol{Z}}
\end{align}

ここで、後のためにもう少し捻った言い方をしよう; 今、確率分布の族 \mathcal{Q}がある。この中から最も p(\boldsymbol{Z} | \boldsymbol{X})に近い確率分布 q(\boldsymbol{Z}) \in \mathcal{Q} (変分分布, Variational Distribution)を選ぶことが、ベイズ推定における目標である。


\begin{align}
q^*(\boldsymbol{Z}) = \text{arg} \min_{q(\boldsymbol{Z})} \text{KL} \left( q(\boldsymbol{Z}) || p(\boldsymbol{Z} | \boldsymbol{X}) \right)
\end{align}

 \mathcal{Q}は広ければ広いほど良い。良いが、広ければ広いほど、最適な q^*(\boldsymbol{Z})を選んでくるのに時間がかかる。実際の応用では、計算機の能力や性能と相談しながら、族 \mathcal{Q}を適切に制限することが必要になってくる。

平均場近似による分布の分解

 \mathcal{Q}を適切に制限する手法の一つに、変分分布を独立した複数の分布に分解することが挙げられる。潜在変数 \boldsymbol{Z}をいくつかの排反なグループ \lbrace \boldsymbol{Z}_1, \cdots, \boldsymbol{Z}_M \rbraceに分解して、


\begin{align}
q(\boldsymbol{Z}) = \prod_{m=1}^M q_m (\boldsymbol{Z}_m)
\end{align}

のように分解する。これを平均場近似(Mean Field Approximation)と言う。

  • 混合ガウス分布(Gaussian Mixture Model, GMM)では、潜在変数 \boldsymbol{z} (データ点がどの正規分布から生起したかを示すone-hotベクトルで、これまでの \boldsymbol{Z}とは定義が違うことに注意)のみのグループと、混合率 \boldsymbol{\pi}および各正規分布のパラメタ \boldsymbol{\mu} \boldsymbol{\Sigma}の3種からなるグループに分けた。詳しい話はググってください。

平均場近似はまあまあ強い仮定であるから、あんまり適当にやると \mathcal{Q}の柔軟性が失われてしまう。基本的には、やるとしても意味的に独立であると言えそうなもののみにしよう。

償却推論

平均場近似は潜在変数の意味に基づいて変分分布を分割する手法であった。一方で、 \boldsymbol{Z}の規模を大きくさせるものとして、データ数 Nがある。ここまで Nについて語らなかったが、各観測データ \boldsymbol{x}_nに対して変分分布 q(\boldsymbol{z}_n)を最適化するのは結構しんどい。そこで、変分分布 q(\boldsymbol{z}_n)を何らかの回帰モデル f_\varphi(\boldsymbol{x}_n)を用いて表現する( \varphiはモデルが持つパラメタ)ことが提案されている。これを償却推論(Amortized Inference, あるいは単純に償却, Amortization)と言う。

  •  \boldsymbol{z}_nは各観測データに対応した潜在変数であって、意味的に分けた潜在変数のグループ \boldsymbol{Z}_mとは全く定義が違うことに注意!

  •  \mathcal{Q}を、考えられるすべての正規分布の族であるとしよう。観測データ \boldsymbol{x}_nを得たとき、 f_\varphi(\boldsymbol{x}_n) q_nが保持すべきパラメタ、すなわち平均 \mu_{\varphi, n}標準偏差 \sigma_{\varphi, n}を出力する。

 f_\varphi(\cdot) nに全く依存していないことは非常に有益である;  f_\varphi(\cdot) \lbrace \boldsymbol{x}_1, \cdots, \boldsymbol{x}_N \rbraceのそれぞれについて対応する分布を計算する必要がないので空間計算量を削減でき、またあるサンプルで更新した回帰モデルは他のサンプルに対してもその知見を転用できるので、時間計算量も削減できる。

この手法がうまくいくかどうかは、 f_\varphi(\cdot)の表現能力にかかっている。もし表現能力の乏しいモデルを用いる、つまり、族 \mathcal{Q}に対する制約が強すぎると、償却ギャップと呼ばれる、真の事後分布との差が大きくなってしまう。モデル自体に対する制約は全くないため、多くの場合において、表現能力の豊かなDNNが用いられている(ここ偉いポイント)。

  • 当然だが、平均場近似と償却は別に排反な方法ではない。実際多くの手法において、変分分布は(暗黙的に)いくつかの分布に分割され、またそれらの平均分散は観測データから算出されている。

以下では、 f_\varphi(\boldsymbol{x})によって得られる分布を q_\varphi(\boldsymbol{z}|\boldsymbol{x})と表現するようにする。

モデルの学習

先で定義した f_\varphi(\cdot)は当然、学習が必要である。では、この手法における目的関数は何であろうか?ベイズ推論における目標は、以下の式であった。


\begin{align}
q_\varphi^*(\boldsymbol{Z}|\boldsymbol{X}) = \text{arg} \min_{q_\varphi(\boldsymbol{Z}|\boldsymbol{X})} \text{KL} \left( q_\varphi(\boldsymbol{Z}|\boldsymbol{X}) || p(\boldsymbol{Z} | \boldsymbol{X}) \right) 
\end{align}
  • 償却のため q(\boldsymbol{Z}) q_\varphi(\boldsymbol{Z}|\boldsymbol{X})に変化していることに注意。

しかし、右辺の値を評価できるのは、真の事後分布 p(\boldsymbol{Z} | \boldsymbol{X})が既知である時に限り、既知なら学習する必要がない。そこで、何とかして目的関数から p(\boldsymbol{Z} | \boldsymbol{X})を排除することを試みる。同時分布 p(\boldsymbol{X}, \boldsymbol{Z})なら事前分布 p(\boldsymbol{X} | \boldsymbol{Z}), p(\boldsymbol{Z})の積として容易に計算することができることを活用して、


\begin{align}
\text{KL}& \left( q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) || p(\boldsymbol{Z} | \boldsymbol{X}) \right) \\
 &= \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }{ p(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z} \\
 &= \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \left( \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ p(\boldsymbol{Z} | \boldsymbol{X}) }} - \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }} \right) d\boldsymbol{Z} \\
&= \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ p(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z} - \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z} \\
&= \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{ p(\boldsymbol{X}) } d\boldsymbol{Z} - \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z} \\
&= \log{ p(\boldsymbol{X}) } - \int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z} \\
\end{align}

と書ける。最右辺第一項は \boldsymbol{Z}に依らないため、KLダイバージェンスの最小化は、最右辺第二項の最大化に等しい。この項のことを変分下限 (Evidence Lower Bound, ELBO)と呼ぶ。この値を最大化するように f(\cdot)を学習させることで、変分分布を事後分布に近づけることができる。

モンテカルロサンプリング

ELBOは期待値として表現することができる。


\begin{align}
\int q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) \log{\frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) }} d\boldsymbol{Z}
 = \mathbb{E}_{\boldsymbol{Z} \sim q_\varphi(\boldsymbol{Z} | \boldsymbol{X})} \left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack
\end{align}

この期待値は解析的には得ることが難しいことが多いが、標本平均によって近似することができる。サンプル数を K個とすると、


\begin{align}
\mathbb{E}_{\boldsymbol{Z} \sim q_\varphi(\boldsymbol{Z} | \boldsymbol{X})} \left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \approx \frac{1}{K} \sum_{k=1}^K \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } }
\end{align}

と書ける。これをモンテカルロサンプリングと言う。 Kが十分に大きい時、標本平均は母平均、つまり真のELBOに近づくことは言うまでもないだろう。

勾配ベース学習と変数変換トリック

「モデルの学習」として最も有名なのは、最急降下法などの勾配ベースの学習法だろう。変分推論においても、できれば勾配ベースの学習を行いたい。


\begin{align}
\nabla_\varphi \mathbb{E}_{\boldsymbol{Z} \sim q_\varphi(\boldsymbol{Z} | \boldsymbol{X})} \left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack
\end{align}

しかしやはり多くの場合において、勾配は計算できない。これに対して、変数変換トリック (Reparameterization Trick)が提案されている。

変数変換トリックでは、 \boldsymbol{Z}_nのサンプリングについて、


\begin{align}
\boldsymbol{z}_n \sim q_\varphi(\boldsymbol{z}|\boldsymbol{x}_n) \\
\end{align}

としていたものを、今までのパラメタとは全く無関係の分布 p(\epsilon)と、ある決定的な関数 g(\cdot)を用いて


\begin{align}
\epsilon &\sim p(\epsilon) \\
\boldsymbol{z}_n &= g(\epsilon, f_\varphi(\boldsymbol{x}_n)) \\
\end{align}

のように表現する。

  •  q_\varphi(z|\boldsymbol{x}_n)正規分布 \mathcal{N} (\mu_{\varphi, n}, \sigma_{\varphi, n})であったとする。この時、 \epsilonを標準正規分布 \mathcal{N}(0,1)からサンプリングしてきて、 z_n = \mu_{\varphi, n} + \sigma_{\varphi, n} \epsilonと計算する。この操作は、 z_n正規分布 \mathcal{N} (\mu_{\varphi, n}, \sigma_{\varphi, n})からサンプリングするのと結果的には変わらない。

この操作は非常に重要である; サンプリングされるのはあくまで \epsilon \sim p(\epsilon)であって、パラメタ \varphiを含む q_\varphi(\cdot)ではない。つまり、


\begin{align}
\nabla_\varphi \mathbb{E}_{\boldsymbol{Z} \sim q_\varphi(\boldsymbol{Z} | \boldsymbol{X})} &\left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \\
 &= \nabla_\varphi \mathbb{E}_{\epsilon \sim p(\epsilon)} \left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \\
 &= \nabla_\varphi \int p(\epsilon) \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } d\epsilon \\
 &= \int p(\epsilon) \nabla_\varphi \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } d\epsilon \\
 &= \mathbb{E}_{\epsilon \sim p(\epsilon)} \left\lbrack \nabla_\varphi \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \\
\end{align}

のように、積分の内側に偏微分を入れ込むことができる。 g(\epsilon, f_\varphi(\boldsymbol{X})) \triangleq \boldsymbol{Z}とすると、合成関数の微分により、


\begin{align}
\mathbb{E}_{\epsilon \sim p(\epsilon)} &\left\lbrack \nabla_\varphi \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \\
 &= \mathbb{E}_{\epsilon \sim p(\epsilon)} \left\lbrack \nabla_\boldsymbol{Z} \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \nabla_\varphi g(\epsilon, f_\varphi(\boldsymbol{X})) \right\rbrack \\
\end{align}

と書ける。 g(\cdot)は多くの場合先の例のような単純な線形変換であるから、勾配の計算は容易であることが多い。先に述べたモンテカルロサンプリングと合わせて、


\begin{align}
\mathbb{E}_{\epsilon \sim p(\epsilon)} &\left\lbrack \nabla_\varphi \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack \\
 &\approx \frac{1}{K} \sum_{k=1}^K \nabla_\boldsymbol{Z} \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \nabla_\varphi g(\epsilon, f_\varphi(\boldsymbol{X}))
\end{align}

が導かれる。

まとめ

最尤推定とは、潜在変数に不確実性を認めず(つまり、確率分布を仮定せず)、尤度を最大化する潜在変数を得る手法である。

MAP推定とは、潜在変数がある確率分布に従うと仮定した上で、事後確率を最大化する潜在変数一点を得る手法である。

ベイズ推定とは、MAP推定と同様確率分布を仮定した上で、事後分布全体を推定して潜在変数を得る手法である。

変分推論とは、ベイズ推定の一種であり、時に計算不可能である事後分布を、計算可能な変分分布で近似することによって、潜在変数を推定する手法である。

最初に定義した問題を変分推論で解くには、学習前に、以下の2つを定義する必要がある。

  1. 確率的生成モデルの定義: 確率的生成モデルとは、潜在変数がどのような事前分布に従って実現し、その上で観測データが実現するのかを示したモデル、つまり p(\boldsymbol{X}, \boldsymbol{Z})である。多くの応用において、それは p(\boldsymbol{Z}) p(\boldsymbol{X} | \boldsymbol{Z})の形で表現されることが多い。
  2. 変分分布の定義: 上で定義されたモデルにおける事後分布 p(\boldsymbol{Z} | \boldsymbol{X})に近似する変分分布 q(\boldsymbol{Z})を定義する。前にも述べたが、これは多くの応用において平均場近似によって意味的に独立な潜在変数の分布の積に分割され、また償却によって q_\varphi(\boldsymbol{Z} | \boldsymbol{X})に置き換えられる。

学習時は、ELBOと呼ばれる値を最大化することで、変分分布を真の事後分布に近づけることを目指す。


\begin{align}
\text{ELBO} \triangleq \mathbb{E}_{\boldsymbol{Z} \sim q_\varphi(\boldsymbol{Z} | \boldsymbol{X})} \left\lbrack \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } } \right\rbrack
\end{align}

ただし、一般にはこの値は計算が困難なので、標本分布で近似する。


\begin{align}
\text{ELBO} \approx \frac{1}{K} \sum_{k=1}^K \log{ \frac{ p(\boldsymbol{X}, \boldsymbol{Z}) }{ q_\varphi(\boldsymbol{Z} | \boldsymbol{X}) } }
\end{align}

最適化には勾配ベースの手法が採用されることが多い。その場合、変数変換トリックと呼ばれる手法が用いられる。

仮想環境の構築とその他諸々

ある日、突然全てのpythonパッケージを見失った。

% pip3 list
Package Version
------- -------
pip     24.0
wheel   0.43.0

そして、しょうがないから入れ直そうとしたら拒否された。

% pip3 install numpy
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.
...

これは、Macのシステム側にパッケージをぽこじゃか入れると競合が発生するからやめようね、という意味。

今まで出てきたことなかったのだが...

というわけで今回は、主に備忘録として、仮想環境を構築する方法を記す。


仮想環境とは

プロジェクトごとにパッケージを管理することによって、競合の発生を抑える手法を指す。細かい話は他のサイトの記述で十分だろう。

やり方

プロジェクトを作成するディレクトリに入って、以下のコマンドを打てば良い。

% python3 -m venv ./venv
% source ./venv/bin/activate

1行目のコマンドにより、フォルダ内にvenvフォルダが生成され、2行目のコマンドにより仮想環境が展開される。続いて何かしらのパッケージをinstallすると、それらはvenvフォルダの中で管理されることとなる。仮想環境から抜ける時は以下。

% deactivate

パッケージのインストール

公式リファレンスに記載のコマンドを仮想環境内で打てば良い。

% pip install numpy
% pip install pandas
% pip install matplotlib
% pip install graphviz
% pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
% pip install pyro-ppl
...

gitignoreの作成

githubにpushする際はvenvの中身をpushしないようにしたい時は以下を実行する

% echo .venv/ > .gitignore

これにより.gitignoreファイルが生成され、その中に.venv/が書き込まれる。

手続き化

仮想環境の思想とは若干外れるが、今までのコマンドを全てファイルにしたためておいてsourceコマンドで呼び出すのもあり。どうせnumpyはほぼ確実に使うので含めるのも良い。

% python3 -m venv ./venv
% echo .venv/ > .gitignore
% source ./venv/bin/activate
% pip install numpy

おまけ

多分勝手にパッケージの参照先が書き換えられたのだろう。今まで入れてきたさまざまなパッケージはこのMacの中のどこかにあるはずだが、サルベージは無理だろうな。

ED法を今更理解する

要旨

Winnyの作者、金子勇が提案した(そしてrejectされたらしい)誤差拡散法(Error Diffusion algorithm, ED法)を理解する。

web.archive.org

今更ではなくない?

ブログに公開されたのは1999年だから今更ではあるよ。



では解説する。

概要

ED法ではNNにおけるニューロン興奮性細胞(excitatory neuron)と抑制性細胞(inhibitory neuron)とに区別し、また重みについても正数であるべき(興奮的に働くべき)興奮性シナプス(excitatory synapse)と負数であるべき(抑制的に働くべき)抑制性シナプス(inhibitory synapse)とに区別する。

学習の際は、残差(教師信号-推定値)が正であれば興奮性細胞からのシナプス(興奮性シナプスとは限らない)を強化し、抑制性細胞からのシナプス(これも抑制性シナプスとは限らない)を弱化する。残差が負である場合はその逆を行う。

興奮性/抑制性 細胞/シナプス

生物学的には興奮性シナプスとはシナプス後細胞の活動電位発生を促進させるシナプスであり、抑制性シナプスとは逆に活動電位発生を抑制するシナプスである。更に、興奮性シナプスを構成するシナプス前細胞を興奮性細胞、逆に抑制性シナプスを構成するシナプス前細胞を抑制性細胞と呼ぶ。

理研によれば、大脳皮質の2割を占める抑制性細胞は、抑制性伝達物質(通称GABA)を放出することによって、残り8割の興奮性細胞の活動を制御しているらしい。

本モデルでは生物学的定義とは少し違い、興奮性シナプスは同種の細胞(つまり、興奮性-興奮性あるいは抑制性-抑制性)を繋ぐシナプス、抑制性シナプスは異種の細胞(興奮性-抑制性あるいは抑制性-興奮性)を繋ぐシナプスであると定義し、また興奮性細胞と抑制性細胞は同じ層の中に(ほぼ)同数存在しているとする。

繰り返すが、興奮性シナプスは「興奮性細胞からのシナプス」という意味ではないし、抑制性シナプスは「抑制性細胞からのシナプス」という意味ではない。接続先であるシナプス後細胞の興奮性/抑制性を強化するか、弱化するかという区別である。

入力層(第 1層)

入力ベクトル \boldsymbol{x} \in \mathbb{R}^{D^{\text{in}}}の各値を興奮性細胞及び抑制性細胞の両方に割り当てる。この時、第 1層の出力 \boldsymbol{o}^{(1)}の次元数は D^{(1)} = 2 D^{\text{in}}となる。

例えば、 \boldsymbol{x} = (a, b)であるとすると、入力層は \boldsymbol{o}^{(1)} = (a, b, a, b)となる。別に (a, a, b, b)としても構わないが、ここで重要なのは、出力 \boldsymbol{o}は興奮性細胞の状態 \boldsymbol{o}_{\text{(ex)}}^{(1)} = (a, b)と抑制性細胞の状態 \boldsymbol{o}_{\text{(in)}}^{(1)} = (a, b)の両方を持つということである。そしてこの性質は後続の層の出力においても(次元数に差あれど)同様である。

中間層と出力層(第 l層)

直前の層の出力が \boldsymbol{o}^{(l-1)} \in \mathbb{R}^{D^{(l-1)}}であったとする( l \geq 2)。第 l層では、以下の計算式に従って \boldsymbol{o}^{(l)}を計算する。


\begin{align}
\boldsymbol{o}^{(l)}
 &= f \left( \boldsymbol{i}^{(l)} \right) \\
 &= f \left( {}^t\boldsymbol{W}^{(l)} \boldsymbol{o}^{(l-1)} + \boldsymbol{b}^{(l)} \right)
\end{align}

ここで、 f (\cdot)は活性化関数、 \boldsymbol{b}^{(l)} \in \mathbb{R}^{D^{(l+1)}}はバイアス項である。ここで、後々のために活性化関数は広義単調増加であることにしよう。

興奮性/抑制性シナプスによる拘束

前述のように、興奮性シナプスとは同種の細胞を繋ぐシナプスであり、抑制性シナプスとは異種の細胞を繋ぐシナプスである。また、興奮性シナプスシナプス後細胞の性質を強化する働きを、抑制性シナプスは後細胞の性質を弱化する働きをするべきである。

以上のような要件を満たすため、本モデルは接続行列 \boldsymbol{W}^{(l)}の各要素に対し、それが興奮性シナプスを意味するのであれば正数に、抑制性シナプスを意味するのであれば負数になるよう強制している。簡易的な数式で表すなら、


\begin{align}
w_{ij}^{(l)}
 & \left\lbrace
    \begin{array}{cc}
        > 0 & \text{if neuron } i,j \text{ is homogenious} \\
        < 0 & \text{if neuron } i,j \text{ is heterogenious}
    \end{array}
 \right.
\end{align}

と書ける。

では、バイアス項 \boldsymbol{b}^{(l)}にはどのような拘束条件が課せられるべきであろうか。その答えを知るためには、バイアス項が「どちらの細胞から」「どちらのシナプスを通じて」加算される値なのかを明確にする必要がある。

本モデルにおけるバイアス項についての自然な解釈を得るため、直前の層、つまり第 l-1層には、 D^{(l-1)}個のニューロンの他に、値が 1で固定である興奮性/抑制性細胞が 1つずつ存在していたとしよう。その上で、この 2つの細胞から第 l層へのシナプスの重みの和こそが \boldsymbol{b}^{(l)}であると解釈する。

より詳細には、値が 1の興奮性細胞からのシナプス \boldsymbol{b}_1^{(l)}と、同じく値が 1の抑制性細胞からのシナプス \boldsymbol{b}_2^{(l)}があって、第 l-1層から第 l層へ伝播する際に、細胞の値が等しいことから、


\boldsymbol{b}^{(l)} = \boldsymbol{b}_1^{(l)} + \boldsymbol{b}_2^{(l)}

のように表現されていると解釈する。

以上の解釈に則れば、 \boldsymbol{b}^{(l)}に課されるべき拘束条件を強いて言うのであれば、 \boldsymbol{b}^{(l)}を興奮性シナプスと抑制性シナプス \boldsymbol{b}_{\text{(ex)}}^{(l)}, \boldsymbol{b}_{\text{(in)}}^{(l)} \in \mathbb{R}^{D^{(l+1)}}に分けた時、


\begin{align}
b_{\text{(ex)}, j}^{(l)} &> 0 \\
b_{\text{(in)}, j}^{(l)} &> 0
\end{align}

を満足することである。要するに \boldsymbol{b}^{(l)}そのものへの拘束条件は陽に与えられないのであるが、バイアス項をシナプスと捉えることでそれを更新することに対する妥当性が得られる。

  • 実際にはこのような拘束条件は守らなくともそこそこの性能が出せている。

出力層の拘束

本モデルにおいて各層のニューロンは興奮性/抑制性細胞としての意味合いを持つことは前述の通りである。つまり、出力層上の細胞は特定事象に興奮する細胞と、それを抑制する細胞の2種しか持ち得ない。そのため、出力次元数 D^{(L)} 1である必要がある

多クラス分類を行いたい場合は、特定のクラスとその他を識別するモデルをクラス数分用意するOne-vs-Restや、2つの特定のクラスを識別するモデルを組み合わせ数分用意するOne-vs-Oneなどを行う必要がある。

  • この主張は実験的には真であるとされているが、識別クラス数を Kとした時、それぞれのクラスに対して興奮性/抑制性細胞を割り当てる、つまり D^{(L)} = 2Kとした上で、それを縮約する行列(これはもはやシナプスではないが) \boldsymbol{W}^{\text{out}} \in \mathbb{R}^{2K \times K}とSoftmax関数を用いればどうにかなりそうな気がしないでもない。

更新則

入力層は入力を細胞に割り当てているだけであるから更新しない。更新対象は第 2層以降のシナプス:  \boldsymbol{W}^{(l)}, \boldsymbol{b}^{(l)}である。

誤差関数

教師信号を y \in \mathbb{R}、予測値を o^{(L)} \in \mathbb{R}として、


\begin{align}
E
 &= \frac{1}{2} {r}^2 \\
 &= \frac{1}{2} {( y - o^{(L)} )}^2
\end{align}

とする。ここで、 rは残差である。

更新の基本方針

残差 rが正である、つまり推定値 o^{(L)}が教師信号 yより小さい時、興奮性細胞からのシナプスを強化し、抑制性細胞からのシナプスを弱化する。ここで、強化とは「絶対値を大きくすること」を意味し、弱化とは逆に「絶対値を小さくすること」を意味する。また、残差が負である時はその逆を行う。なぜこれにより最適化が行えるのかは不明。

結局増加させるのか減少させるのかを明確にするために、シナプス前細胞と後細胞に着目してまとめる。興奮性シナプスは正、抑制性シナプスが負であることに注意すると、

  •  y > o^{(L)}の時の更新
シナプス 興奮性細胞から 抑制性細胞から
興奮性細胞へ 増加(正の強化) 増加(負の弱化)
抑制性細胞へ 減少(負の強化) 減少(正の弱化)
  •  o^{(L)} > yの時の更新
シナプス 興奮性細胞から 抑制性細胞から
興奮性細胞へ 減少(正の弱化) 減少(負の強化)
抑制性細胞へ 増加(負の弱化) 増加(正の強化)

のように表現できる。表より、接続先であるシナプス後細胞の極性によって増加/減少を決めれば良いことが分かる。以降の節では、接続行列 \boldsymbol{W}^{(l)}及びバイアス \boldsymbol{b}^{(l)}の変量 \Delta \boldsymbol{W}^{(l)}, \Delta \boldsymbol{b}^{(l)}について考える。

変量 \Delta \boldsymbol{W}^{(l)}

端的に言えば勾配である。学習率を \etaとすると、各要素における変量の絶対値は、


\begin{align}
\left| \Delta w_{ij}^{(l)} \right| = \eta \left| \frac{\partial E}{\partial w_{ij}^{(l)}} \right| = \eta \left| \frac{\partial E}{\partial o_j^{(l)}} \frac{\partial o_j^{(l)}}{\partial i_j^{(l)}} \frac{\partial i_j^{(l)}}{\partial w_{ij}^{(l)}} \right|
\end{align}

と書ける。

一部の偏微分は容易に計算できる。


\begin{align}
\frac{\partial o_j^{(l)}}{\partial i_j^{(l)}} &= f' \left( i_j^{(l)} \right)  \\
\frac{\partial i_j^{(l)}}{\partial w_{ij}^{(l)}} &= o_i^{(l-1)}
\end{align}

しかし、 \partial E / \partial o_{j}^{(l)}は層によっては容易に求まらない。もし l=L、つまり出力層であるならば、 D^{(L)} = 1より添字 jが必要ないことに注意すれば、


\begin{align}
\frac{\partial E}{\partial o_j^{(L)}} = \frac{\partial E}{\partial o^{(L)}} = o^{(L)} - y = r
\end{align}

のように書けるが、出力層ではない場合はそうではない。誤差逆伝播法では更に連鎖律を刻むが、本モデルは出力層の場合のそれに単純に減衰率 \varepsilonをかけたもので代用する。つまり、 \partial E / \partial o_{j}^{(l)}は添字 jの値に関わらずに、


\begin{align}
\frac{\partial E}{\partial o_j^{(l)}} \approx \varepsilon \frac{\partial E}{\partial o^{(L)}} = \varepsilon r
\end{align}

と置く。活性化関数 fは広義単調増加であり、その微分は非負であることに注意すれば、


\begin{align}
\left| \Delta w_{ij}^{(l)} \right| = \eta \varepsilon \left| r \right| f' \left( i_j^{(l)} \right) \left| o_i^{(l-1)} \right|
\end{align}

と書ける(前述のように出力層の場合は \varepsilonをかけないことに注意)。

さて、上の更新式はさらに以下のように簡略に書ける:


\begin{align}
\Delta w_{ij}^{(l)} =
\left\lbrace
    \begin{array}{cc}
    + \eta \varepsilon r \left| o_i^{(l-1)} \right| f' \left( i_j^{(l)} \right) & \text{if neuron } j \text{ is excitatory} \\
    - \eta \varepsilon r \left| o_i^{(l-1)} \right| f' \left( i_j^{(l)} \right) & \text{if neuron } j \text{ is inhibitory} \\
    \end{array}
\right.
\end{align}

変量 \boldsymbol{b}^{(l)}

同様に勾配である。


\begin{align}
\left| \Delta b_{j}^{(l)} \right| = \eta \left|  \frac{\partial E}{\partial b_{j}^{(l)}} \right| = \eta \left| \frac{\partial E}{\partial o_j^{(l)}} \frac{\partial o_j^{(l)}}{\partial i_j^{(l)}} \frac{\partial i_j^{(l)}}{\partial b_{j}^{(l)}} \right|
\end{align}

 \partial E / \partial o_j^{(l)} \partial o_j^{(l)} / \partial i_j^{(l)}は先程と同様である。また残る微分


\begin{align}
\frac{\partial i_j^{(l)}}{\partial b_{j}^{(l)}} = 1
\end{align}

と書ける。よって


\begin{align}
\left| \Delta b_{j}^{(l)} \right| &= \eta \varepsilon \left| r \right| f' \left( i_j^{(l)} \right) \\
\end{align}

\begin{align}
\therefore \Delta b_{j}^{(l)} =
\left\lbrace
    \begin{array}{cc}
    + \eta \varepsilon r f' \left( i_j^{(l)} \right) & \text{if neuron } j \text{ is excitatory} \\
    - \eta \varepsilon r f' \left( i_j^{(l)} \right) & \text{if neuron } j \text{ is inhibitory} \\
    \end{array}
\right.
\end{align}

まとめ

誤差逆伝播を行わない学習パラダイムである誤差拡散法をまとめた。

  • ED法の良い点:
    • 誤差逆伝播法と違って何層重ねても勾配消失が発生しない
    • 直後の層の更新を待つ必要がないため高速
  • 悪い点:
    • 収束する理論的保証がない
    • 活性化関数がsigmoid以外基本うまくいかないらしい
    • 2値分類しかできない

一部ではSNNのパクリだろと言われている。

yaneuraou.yaneu.com

さらに「車輪の再発明だけど1人でここまでできるのはすごい」などと言われている。

qiita.com

特に後者は大分気分が悪くなる文であるように個人的には思うが、それはともかく。

私は完全なコピーではないように感じた。だってスパイクエンコーディングしてないしな。従来のArtificial NNとSNNの中間に位置し、ANNの十八番である誤差逆伝播をある程度借用しながら、SNNが持つ生物学的に忠実な構造に寄せているのではないか。

実装したよ

github.com

より高速でメモリ効率が良い実装はQiitaを漁れば見つかると思います。