比喩の種類とアレゴリー
3連休(2025/7/21). 久々にブログ書いてみます。
文章を書くとき、何かを別の何かで置き換えて表現する言葉遣い(=修辞技法、レトリック)を良く用います。 そういう置き換え技法にも、
といったバリエーションがあります。これらが分かりにくいので、整理してみます. (ってのが本記事の主旨です)
シンボル(象徴)
- ハトは平和のシンボルだ
- 天皇は日本の象徴である
- 各種の企業ロゴ
シンボル・象徴の特徴は、それが表す内容との結びつきが「恣意的」であることです。
鳩と平和の間の関係に必然性はありません。確かにハトはのんびりした動きとか平和っぽさがあるかもしれませんが、他にもそういう動物はいっぱいいるでしょう。 天皇については、こちら*1で説明します。
企業ロゴも、由来を含めたりしますが、基本的には「何でもアリ」つまり恣意的です。
抽象化
- リンゴは果物(の一種)だ
- 日本にある季節は「4季+梅雨」だ
概念や事物を「階層化」したり「分類」したりして、個別のことを語らずに済ますのが抽象化です。例外をいったん無視(捨象)するのも特徴です。
抽象化の利点は、一言で多くの内容を言えることです。例えば、「果物は大抵甘い」とか。 逆に欠点は、例外を掬い取れないことです。苦い果物(アボカドとか?)もあります。
アナロジー(類推)
- コンピュータ「ウィルス」
- ワールドワイド「ウェブ」
平たく言えば「意味のあるこじつけ」です。人体を侵して自己増殖するウィルスになぞらえて、コンピュータを侵すウィルス、ってわけです。また、ウェブって、もともとはクモの巣っていう意味です。
アナロジーは、比喩表現の一種ですが特に「全然違うものを共通点だけでこじつける」のがアナロジーの本領です。だから、「初めて遭遇する事象」を「既存の知ってること」を使って表現する際にとくに重要です。なぜかというと「初めて遭遇する」というのは「今までの経験とイコールでない」からです。
これはビジネスで特に重要です。「なんとか料」を新しく定義するときに、アナロジーが不可欠です。例えば、「ソフトウェアライセンス使用料」という概念は50年前とかはあまり例が無かったはずです。「形が無くいくらでもコピーできるのに、レンタル料を徴収する」って、かなりのこじつけだと思いませんか?ビルゲイツえらい。
メタファー(隠喩)
- 時は「金」なり
- 10連勤の「嵐」が過ぎて、休暇に入る
何が何かを明言してない(隠している)けど、文脈から明らかに何を指し示してるのか分かるような比喩表現です。 時は貴重なもので使ったら無くなることをお金に喩えられるし、長期連勤は休む暇なく対応が必要という面で嵐に喩えられます。
メタファーは明言せずに使う表現なので、誤解のないように文脈を工夫する必要があります。歌詞などでも良く用いられます。
メトニミー(換喩)
- 「永田町が」揺れている
- 俺は若い頃「ギターで」食ってた
- 「一杯飲ん」でく?
メタファーに似てますが、「字面どおりの意味から、1段ジャンプしてる」のが特長です。
例えば、「永田町」は国会や内閣やそれを取り巻く政治系の言論やメディアを指しています。本来の地名から意味がジャンプしてます。 「ギターで食う」というのは「音楽活動で生計を立てる」という意味で、ギターというモノの意味から「音楽活動」に意味がジャンプしてます。 「一杯飲む」は、ジュースではなく普通はお酒という意味のジャンプがありますし、一杯では済まないことのほうが多いです(ってそれは俺だけか笑)。
それに対して、「時は金なり」の「金」は「貴重で、使ったら無くなる」というお金本来の意味をそのまま適用しており、意味のジャンプは特にありません。 「10連勤の嵐」も、「嵐」の「対応に迫られる状況」という意味をそのまま使って例えており、意味がジャンプしてるというほどではありません。
メタファーとメトニミーの違いは、程度問題で人によってどちらに分類すべきかは意見が分かれるかもしれません。 でも少なくともこの2つの概念の違いという意識を持つことで、表現の幅が広がると思います。
アレゴリー(寓意)
- (寓話) ウサギとカメ
- 自由の女神像
- (神話のシーン)
アレゴリーは、単一の事物や概念ではなく、物語やシーン(複数の事物の相互作用)を使った表現です。
例えば、「ウサギとカメという物語は、コツコツ真面目にやることと、効率よくやったりサボったりすることの、対比」という「全体的な相関・相互作用」を使って他の物事を説明する際に引き合いに出されます。
自由の女神像は、それ自体は単一の事物ですが、着飾ってる衣装や装飾品、抱えてる書物や掲げる聖火、そびえたつ台座といったその構成要素一つ一つが象徴的な意味があり、それらの相互作用の全体像として意味が成り立っています。そして、アメリカが目指すものを全体的に象徴する際に、単なるシンボルではなくその構成要素にも一定の内容をもって言及してることになるところが、単一のシンボルとアレゴリーの大きな違いです。
また、ときどき教養あるっぽい人が神話のシーンを使って物事を説明することありますが、知らねーよって言いたくなることが多いですが、これもこれで、複合的な象徴同士の相互作用を一発で言い表すレトリックとして有用なものだと言えるのです。
だから理系なら神話なんて意味無さそうに思えちゃいますが、あれはあれで知識の宝庫で知っておくと様々な複雑な表現をズバッと言い表せるようになったりするものなんだと思います。
というわけで
言葉の置き換えレトリックについて列挙・比較をしてみました。特にアレゴリーという概念を僕は最近知ったので、ちょっとだけ(1ミリくらい)神話にも興味が湧いてきた今日この頃です。
投資戦略を考えた
先日の日経平均の大暴落をみて、10年以上離れていた株を再開してみようと思った。
これまでそんなに取引経験はないが、個別銘柄を売り買いするアクティブ投資が好きで、トータルではトントンくらいかと思う(つまり、インデックス投資に負けている)。
以前は割と漠然と取引してたけど、少し時間を使って色々調べたり考えたりしてやってみようと。 新しく別の証券会社の口座も開設した。
以下、自分で考えたことを書いてみる。 ※あくまでも1個人の観測なのでうのみにしないで下さい(参考にして損しても知らないよ!)
マクロ環境と投資スタイル
個別銘柄投資といっても、多かれ少なかれマクロ環境には左右される。左右されにくいディフェンシブ銘柄であるかどうかというのは自分の今回の投資戦略としてはあまり考えないことにした。
いまどういう状況か
自分なりに考えると、アベノミクス以来大きな金融緩和政策が続き、コロナで世界的に大きな財政出動があってコロナの沈静化とともに景気が上向き、米国ではインフレを抑えるために利上げ、今年になって日本も3月にマイナス金利を解除し、7月末にはついに利上げ。
日経平均は、基本的に円ドルレートにほぼ連動していて、そのレートは円ドルの金利差に大体起因するので、金利差縮小の方向が強まると円高・日経平均安になる。どうして米国ではインフレで高金利政策になり日本では緩和政策がコロナ後も続いていたのかというと、世界的にみてコロナ禍のときに日本政府の財政出動は相対的に少なかったせいらしい。日本政府は赤字国債に及び腰なのだ。アベノミクスでさえ「民主党政権の反省」という流れがなかったら実現してなかったかもしれないくらいだ。
そういうわけで、世界的にはインフレだけど日本はデフレ、みたいな感じで金利差があってコロナ後も円安ドル高の流れになってたわけだけど、この流れを利用してあちこちのヘッジファンドがキャリートレードの源泉として、円を借りて世界のあちこちに投資するポジションが膨らんでいた。そこに金融引き締めの牽制を当てたショックで急に円高にふれ日経平均も大きく下がった。タイミング的には割と適切だったかもしれない。もう少し遅かったら、もっとひどい暴落になってたんじゃないかなと思う。ヘッジファンドの投機ムーブによって実態を越えたバブルが定常化するのはよろしくない。
この先どうなるか
報道を読んだ限り、この連休前の段階で、60~75%くらいキャリートレードが巻き戻ったそうである。残り25%~40%。まだまだ円高になる余地はあるわけだ。つまり日経平均はいま中空飛行をしてるような状態。 今後の見込みとしては、日銀は投機筋に冷や水を浴びせたけれども、日経平均の暴落をうけてなだめに掛かるような姿勢もみせてきてるので、しばらくは中空飛行を維持するムードが続きそう。
9月は米国FOMCで政策金利引き下げの期待もあり、円高/日経平均安への方向感は強い。大統領選でトランプ氏が中央銀行を牽制してきたり、トランプ政権になるとさらに金融政策への発言力を強めたりしそうで、方向感はあれど時期的な見通しは立てづらいというのが現状。
日本株の個別銘柄への投資に当たっては、そうした下落イベントをまだまだ孕んだ相場だということを意識する必要があるし、円高の可能性にベットして海外からの調達の影響を強く受ける企業や、海外への投資を柱の一つとして持つ企業などに注目する必要もある。
投資スタイル
会社員をやりながら株取引をするから、デイトレや1,2週間のスイングトレードには手を出さない。テクニカルは見るけど、主にファンダメンタルズ投資を行う。 とはいえ目に見えるような大きな成果を出したいので、1年あたりの目標パフォーマンスを1.4~1.5倍程度におく。
そのためには、直近1,2年で株価が2倍以上になりうる銘柄を選ぶ必要がある。
バフェット先生の真似をする
投資の神様・ウォーレンバフェットは、ブランド力と経営力をみて、財務健全性と株価の割安性をみる、という投資スタイルであることはメディアによく書かれている。
なぜそれが重要なのか、自分なりに考えたので説明しよう。株価が長期的に大きくあがるというのがどういうメカニズムにあるのかについての私見、だ。
株主は何を受け取るのか
まず、利益の源泉とは何か?を考えると、コストに対して利幅を乗せるのは基本的に「リスクプレミアム」だ。 例えば人材派遣業ではスタッフに支払う給与よりも大きな額をクライアントから受け取り、企業はマージンを手にする。企業はクライアントに対して役務の提供というコミットメントを引き受けているので、従業員よりもリスクを抱えている。なので管理コストを引いてもなおプレミアムが乗った額をマージンとすることには正当性がある。
この状況でこの人材派遣会社の株価はどうなるかというと、リスクプレミアムとしてのマージンは株価に反映されないはずである。なぜなら、何らかのインシデントが発生しリスクが本当に財務的なロスとして実体化された場合を補填しなければならないからだ。だから株価にはそのことを加味した値が付けられるはずだ。
では、そういう人材派遣の業態を同じくする企業がいくつかあって、ある企業Aはそうしたインシデントが発生する可能性を抑える「経営力」があったとしよう。それでもクライアントからみたら提供される役務に対して支払う対価は同業他社との同レベルで問題ない。そのため、企業Aが受け取るマージンに占めるリスクプレミアムは同業他社よりも低くなる。つまり、マージンのなかに「本当の利益」が発生することになる。これを受け取るのは誰だろう?経営力を発揮した経営陣だろうか?否。株主である。経営力に対する対価は役員報酬として支払われるだけだ。
経営力の内訳
つまり、経営力によって生まれる、リスクプレミアムを越える余剰は株主が手にする利得となるのだ。これが配当として還元されようと、内部保留として事業運営に再投資されようと、株主にとってそれを所有していることは変わらないのでここで配当性向を気にする必要はない。
経営力を分解すると他にも余剰の源泉になるものとして
- 商品開発力/事業開発力(マーケット適応力)
- 人材開発力
がある。
ヒット商品を生み出す仕組みが、企業の従業員の個人的な資質に起因するというより、それを育てる人材開発力や、チームプロジェクトや社内組織体制に起因するのであれば、それによってもたらされる余剰は株主が受け取ることになる。 (経営陣が受け取るのはあくまでも「役員報酬」であることに注意)
本当にそれが今後長期にわたって再現性を有するものであるか?を吟味する必要があるが、もし長期安定的に再現性を持ち、それが株価に反映されてない(例えば同業他社でより組織力の劣る会社とくらべてPERが低いなど)場合はチャンスということになる。
経営力以外の余剰
また、経営力の他に株主が受け取る余剰にはどんなものがあるか?
それは、
- ブランド力
- 独占(からスイッチングリスクプレミアムを引いたもの)
- IP(知財: 特許や版権など)
だ。
ブランド力は、一見、現在株価に反映されていそうに思える。しかし、ブランド力は事業の進展とともに自然に拡大していく性質がある。認知が定着し、拡大し、事業規模のスケールをノンリニアに引っ張るドライバーになる。現在株価は、その長期の未来の進展に対する不確実性のプレミアムのぶんだけ引かれている。
ブランド力というのは、同じカテゴリの商品に対して、独占的な地位を生み出す源泉になる、つまりブランド力は長期安定的な成長の必要条件になる。でもそれだけではだめで、「独占状態にあるかどうか」をちゃんと見極める必要がある。
バフェットが好んだ銘柄であるコカ・コーラは、確かにコーラ市場ではペプシなどの競合はいたものの、コカ・コーラがもつ地位は唯一無二のものだ。しかもコーラ市場を100%独占してるわけではないので法的には独占にならない。
こういう「X社がXを独占している」と言えるほど、市場においてXがデファクトスタンダードになった状態は、大きく株価に反映される。だから、ブランド力を持つというだけではだめで、それが独占的な地位にあるか?あるならそれがこの先もスケールしてゆくか?また、この先ブランドが独占的な地位を獲得しうるか?という観点で現在株価を吟味する必要がある。その確度に対して、株価が割安であればチャンスだ。
NVIDIAとバフェット的スタイル
IPや知財なども、同様だ。NVIDIAは、GPUのユーザがCUDAというソフトウェアインタフェースに対応して各種アプリケーションを創り上げてきたため、そういう無形の資産がNVIDIAの「社外」に蓄積され、それがもたらす余剰が株価に反映された。ふつう、ITの世界はスイッチングコストが低いことが多く、それが多くの場合長期の独占を保証しない要因になっているが、NVIDIAの場合はそのスイッチングコストが高く、スイッチングリスクが低く抑えられているのが大きい。
バフェットはITベンチャーなどに投資しないスタイルだそうだが、テクノロジー業界でも、こうやってちゃんと考えて銘柄を評価すれば、長期的に儲かる銘柄をちゃんと見つけらるはずだ。なので、バフェットの真似をするといっても本質的な部分を真似するという意味で、テクノロジー企業についても自分なりに考えて投資しようと思う。
事業環境はあくまでも「場」として意識
ここまでのことを念頭に置くと、生成AIとか、再生可能エネルギーとか、インバウンド観光需要とか、この先の材料となりうるようなホットなテーマに目を向けなくても良いのではないかという気がしてくる。
今回の自分の投資戦略としては、そうした事業を取り巻く環境、例えばインバウンド観光需要などの大きな流れについてはある程度念頭に置くものの、あくまでもそれは経営力やブランド力などの「株主が受け取る余剰」が構成される流れを想像する場として考え、「インバウンド銘柄」のようにそれ自体を直接評価したりしないように注意する。(過去に、そうした材料視のみで直接株買って失敗したことがある)
そんな感じで
以上の背景をもって個別銘柄を色々と物色してるのだが、なんだかあっという間に連休が終わってしまいそうである。
「数学」は何をやってるのか
最近考えたことを書いてみる。
数学って難しいよね
大学レベルの数学を学んでいると、色んな新しい概念の定義が出てきて、それに付随する主張が並んでいて、そこから知識を得るという趣味的な愉しみはあるものの、
「そもそもこれは一体何をやってるんだろう?」
「ゴールはなんなのだろう?」
「ってか数学の目標って何?」
という気分になることが少なくない。
他の学問、例えば、物理学だったら、「自然界の物理的な事象を(数式をはじめとする、人間に理解可能な模型を使って)説明する」のようなゴールを割とはっきり感じられる。 工学だったら有用な人工物を作るための仕組みを見出すことがゴールだし、医学なら人間の心身とくに肉体的な健康を保つ/疾病状態から回復するというゴールがある。
もちろん数学にも、「数学的な方法論で用いることの出来るツールを整備する」という目的感はあるけど、「じゃあそのツールを使って何をするの?」とも思う。
そんなモヤモヤをずっと抱えてきたのだけど、最近、数学とは関係ないこの本を読んでいて「あっ!」と思った。
これは「生物分類学」の一般向けの啓蒙書なのだけど、この学問の方法論が凄く数学と似てるのだ。
分類体系を作るという「学問」
どこが似てるかというと
- 新しいものを発見する
- 発見したものに対して「既存の体系」と照らし合わせる
- 既存体系から外れるものについて新たな分類軸を打ち立てる
- より包括的で説明力/弁別力の良い軸があると分類軸が置き換わる
という点だ。
では、「生物分類学」という学問の「目的」は何だろう?
それは、知識を体系化することだ…。
。。。
えっと、なんだか議論が振出しに戻って堂々巡りな話をしてしまってるようだが…ちゃんと言い換えると、
「『手段の整備』そのこと自体」を目的とする学問にも「実学的な感じ」が結構ある
ということに気づいたのだ。
というかそれは、僕ら人間がみんな日常的にやっていることの延長にあるのだ。
例えば、街で赤の他人とすれ違う時、男性か女性か、子供か大人か、若いか中年か老齢か、といったことを瞬時に認識する。
もし、(そんなことあり得ないが)男性・女性という性別概念を人類がもっていなかったら、そうした認識さえも持てないのだ。
そして、これがとても重要なことだが、例えば男性・女性という区別ですら人工的な概念にすぎないのだ。 自然界の生物のメカニズムとして性差なるものが存在するのだとしても、そうなっているのだとしても、それを存在として認め、その差によって区別する、すなわち、それを分類軸として採用するのは、それが人間の認識にとって都合が良いからなのだ。
「道具」と「対象」の区別を意識する
数学の話に戻そう。
群だの環だの加群だの、多様体だの、数学の本を紐解けばどんどんと概念が出てくるんだけど、それらはみんな「対象を分類して理解するための軸」に過ぎない。
大学レベルの数学は自分にとって難しいので、そうした概念が出てくるとどうしても「その概念自体が調べる対象」であるかのように思ってしまう。
これがこれまで自分にとって大きなワナになっていたように感じる。
それは例えば、ノコギリという道具を初めてみたときに、ギザギザで切れる部分や、握って掴む柄の部分に意識が向いてしまい、「それが木を切る道具だ」ということを忘れてしまうことに似ている。そんな見方をしていたら、ノコギリはひどく難しいものに見えてしまうだろう。
やっかいなことに、数学の概念は、ノコギリがもつ「木を切るという目的」のような目的が、ハッキリと特定されてないことが多い。 群や環や加群のような概念は「汎用的な道具」なので、初学者にはことさら特定の目的をパッと認識しづらい。 さらに、その道具さえも調べる対象になってたりして(数学の「研究」というのはそういうものだ)、教科書もそういうノリで書かれているのも厄介なことだ。
だが最近得た(上述の)「気づき」によって、「いま読んでいる話において、何が対象で、何が道具になってるか?」をかなり意識するようになった。その結果、プラセボかもしれないけどなんとなく、自分にとって少し数学の敷居が下がってくれたように思う。
競プロ始めて半月経った
4月だし新しいことをやろうと思い、学生時代に少しだけかじった競プロを再開すべく4/10にatcoderのBeginnersSelectionというのを解いてみた。2時間半ほどで全て解くことが出来て、(今思い返すとこれは勘違いなのだが)「お、割といけるじゃん!」って思って本格的に趣味の競プロをやることにした。
平日夜と週末、atcoderの過去問をひたすら解く。普段の仕事でのコーディングとは別の数学パズルっぽい考察が必要で、なかなか楽しい。毎週末やってるABC(ビギナーズコンテスト)にも2回でてみたりした。現時点の実力はレーティング1200点前後(緑と水色の間)のようだ。
書籍は二冊、とくに鉄則本は読み通して、演習問題も結構解いた。 book.mynavi.jp
蟻本も持っているが、こちらは半分も読めてない。蟻本を何周もしてきっちり自分のものにするだけで青コーダーは行ける気がする。 book.mynavi.jp
それにしても自分が学生時代のときよりも練習サイトやノウハウ資料などが整備されていて、非常に取り組みやすい。 練習の達成度を可視化してくれるAtcoder Problemsという有志サイトもあって、これがまたモチベーションをアゲてくれる。こういうゲーミフィケーション大事ですね。
本エントリ書いてる時点で完答136問. 難易度は色々混じってるので目安ではあるが数字で見れるのは嬉しい。

最近はそのAtcoderProblemsにあるBootCampという初級+αくらいの問題集と、Atcoderで常設コンテストとして出ている典型90問という問題集(こちらは中級レベル)を解いている。
週末よく一人で部屋で酒を飲む習慣があったが、この半月で酒量がものすごく減った。なので競プロが何の役にも立たなかったとしても、これはこれで凄く良い気がする。
小さなジャンプ
最近、自分の強みって何だろう?というのを改めて考えた。
私は色んなことに興味があって世間一般のエンジニアと比べると新しいことを学び取るのが多分かなり速いほうで、だから知識はいっぱい持ってると思うのだが、知識それ自体は仕事のアウトプットに直接結びつくものではない。 実際、知識ってありすぎると逆に頭でっかちになって行動力を削ぐような副作用も実際あると思う。
じゃあ肝心のエンジニアとしてのスキルは?と自問すると、そんなに強い方でもないと思う。 バグなく機能を実装したり、込み入った問題やバグを素早く原因究明して直したり、というソフトエンジニアの実務上の能力は低くはないと思うが(今の会社の同僚のエンジニアと比べると)取り立てて高くもない。
じゃあ新しいものを生み出す研究や発明的な能力は?と考えると、それも国際学会で賞を取ったり有用な特許技術を考案したりとかいう実績もないから、そういう領分でもない。
そうやって今までの経験を棚卸しして思ったのは、
自分は「小さなジャンプ」が得意だな。
ということだった。それについて、以下にちょっと詳しく書いてみる。
スキルの高いエンジニアと会話してると良く感じるのが、「これは出来る」「これは試行錯誤が必要」「これは出来ない」という判断を取り組む前にかなり正確に見積もることが出来て、実際そのとおりなことが多いという点だ。研究と違ってプロダクト開発では試行錯誤には時間的な「期限」があるから、確実に出来ることを積み上げて何かを作り上げようとする。それは合理的だし、それを確実にやりきれる優秀さは大事だ。
でも、僕は言ってみれば「ロマン派」というか「ちょっとそれは期間内にやると言い切っちゃうのは出来なかったら信用失いそう」みたいなところのギリギリのところをどうしてもやりたくて、期間が決まってるなかでそういうテーマをつい入れてしまう。で、それを数日間(他の作業やったりしながら)「良い答えがパッと思いつかないものを、ずーっと考え続ける苦しいマゾ時間」として浴びつづけると、何か最後にはシンプルなウマい方法を思いつくのだ。思いついたら実際にそれを形にする。
その、最終的に出来上がったものは「ぱっと見、すぐに思いつきそうなごく当たり前の単純な感じ」のものであることが多く、なのでそれが「うぉーすごいね!」とはならないことが多く、少し悲しくもあるのだが「自分はそういうことが出来るのが当たり前」なんだから「別に褒められなくてもそれが当たり前の人として平然と生きていれば神様がこの能力をどんどん強くしてくれるだろう」みたいな心の処理をして今までやってきた(今回、そういえばそういう風にいつからか心がけてきたな、と改めて思った)。
これが僕にとっての「小さなジャンプが得意」という強みだなと思った。
ググっても出てこないし、どこの本にもどこの論文にも書いて無くて、ちょっとした発想のジャンプが必要になるのだけど、いったん飛び越えてしまうと「誰でも思いつきそうな感じ」の単純な解決策になるようなものを見出すのが得意
AIの新しい方法(TransformerとかNeRFとか)を生み出すとかいうレベルではないのだけど、どこにも答えが書いてない小さな課題を前にして小さなジャンプが出来ること、これは「あなたの仕事の上での強みは何ですか?」と聞かれてぱっと説明するのが難しいけど、仕事する上で重要な能力の一つだと自負してよいだろう、と思ったのだった。
論文の気になるところだけを短時間で読む方法
先日、ビット量子化の手法でBitNetの論文がでてSNSで話題になりました。私も気になったので論文(とその参照論文)を1時間ほど確認して自分なりの要約をツイートしたところ、結構多くのリツイートやいいねをもらいました。
bitnetの論文気になるとこだけ読んだ。
— Masayuki Isobe (@chiral) 2024年2月28日
・二値じゃなく三値(±1と0)なので1.58ビット
・そのビットで演算するのは積和演算部のみで活性化関数は8ビット(256階調でしきい値で3値化)
・学習も推論もちゃんと1.58ビットでやる
・ゼロWeightが特徴量選択として機能
専用ハード化可能なパート小さそう…
僕みたいなソフトウェアエンジニア職ではあるけどプロの研究者ではない人が最新の技術や論文を読む際に、「気になるところだけに絞って読む」ことが出来ると都合が良いです。
それについて人それぞれ色んなやり方あると思いますが、本エントリでは私の読み方を説明し、それに基づいた具体的な論文読み例を書いてみます。
その論文から得たいことを明確にする
論文には概要(アブストラクト)が付いているので、まずそれを読んで「その論文から得たいこと」を明確にします。アブストラクトに加えて、本文の最後の結論(コンクルージョン)も併せて確認すると良いこともあります。
例えば、BitNetの論文でしたら、
- どの部分をビットで計算してるのか?DNNモデル全体か?それとも一部か?
- 4bitや8bit量子化と比べて何が優り何が劣るのか?性能的に完全に上位互換なのか?
- 蒸留(学習時は普通の数値を使い、学習済みモデルをbitに変換する)と比べて(以下同様)
が私にとって「気になること」でした。なので「これらの問いの答えを論文の中から探す」という読み方をすることになります。
しかしそれだと、もし仮に論文の中でこれらの問い以外の重要なことが書かれていてもそれに気づけない可能性はあります。そうだとしても、割り切ってそれを諦めるのが重要です。そもそも、論文の内容をくまなく読もうとしたら短時間で読むのは(その分野のプロの研究者とかじゃない限り)困難だと思います。
「問い」の答えになりうる「自分の仮説」をでっち上げる
前節で述べたとおり、論文から得たいことを「問い」のリストとして明確にしました。そうしたら早速本文の確認に入る、、、のは得策ではないと私は思っています。
その前に各「問い」の「答え」が「論文中にどのように書かれているだろうか?」というのを考えます。そして「こういう答えが書かれているのではないか?」という仮説を自分なりにでっち上げます。
例えば、BitNetの論文でしたら、以下のとおりです。
- 「どの部分がビット計算か?」および「蒸留と比べてどうか?」についての仮説
学習フェーズと推論フェーズでいうと、既に蒸留という手法があるから推論フェーズだけでビット計算するというのではインパクトが薄そう。NVIDIAのハードは特に学習時に掛かる大量の計算負荷をさばけるという点で市場で圧倒的優位に立っていて、この論文はマイクロソフト系の研究室のものだからそれに対抗する技術開発のはずで、だから特に学習時の計算を軽くする話に違いない。
DNNのモデル全体をビットでやるものかどうかはよくわからない。積和演算と活性化関数の全てをビットでやるとしたら、それは決定的な論理回路になってしまってAI的ではない気もするから一部だけビットでやるという話かもしれない。でも全てをビットで計算しながらAI的な振る舞いを可能にする手法なのかもしれない、そこは注意してみよう。
- 「4bitや8bit量子化と比べてどうか?」についての仮説
素朴に考えれば、ビット数の少なさとモデルの性能は原理的にトレードオフの関係にあるはず。その原理を打ち破る性質があるとしたらどんなものだろう?情報が少ないほうが過学習を避けて汎化能力があがるドロップアウト正則化みたいな話と関連してるのだろうか? しかしそれだと逆にバイアスが掛かりにくくて学習が進みにくそう。モデルの表現力を維持しつつ少ビット化による正則化の効果が相まって性能があがりましたという話になりそうだ。だから、特にビット計算でありながら表現力を維持するためのキーポイントが何かという点が問題であり、そこに注目して読む必要がありそう。例えば最終レイヤは通常ビット数のDenseネットがあるとか、あるいは活性化関数はビット演算じゃないとか?だろうか。
このように、仮説を立てると論文に対する読みが「オープンクエスチョン」ではなく「クローズドクエスチョン」になります。友人と食事にいくときに「今日何食べたい?」って聞くよりも「今日カレー食べたくない?」って聞いたほうがお店が決まるまでスムーズであることが多いのと同じです。また、仮説を立てることによって、たとえ仮説が外れた時に「仮説とどう違っていたのか」という情報が読みに加わり、同じ時間で論文を読んだときに得られる情報が増えます。「カレーは今日はいいかなぁ」「どうして?」「もう少しさっぱりしたものが食べたい」という風に、「カレーに対する反論としての情報」が得られるわけです。
仮説を立てにくい時
前節で、仮説を立てるのが大事、と書きましたが土地勘がない分野の論文の場合、その仮説を立てようにも糸口すらみえないこともあると思います。そういうときは「ガード下の居酒屋で飲んでるおっちゃんとの対話」法という方法を僕はよく使います。
これは、めちゃくちゃ素人の相手、すなわち話を聞いた範囲だけから率直にツッコミや感想を述べる相手を論文読みの相談相手として想像するという方法です。「飲んでるおっちゃん」はいわばそのモデル像です。
BitNetの論文の例でやってみましょう。
(Q) 最近流行りのAIで、深層学習っていうのがあって、いわば脳みそを真似た仕組みなんですけど、脳みその中の神経回路って電気信号で動いてるんで何ボルトみたいな電圧の高いところ電圧の低いところという感じで電圧の計算をしてるんです。 電圧って3.5ボルトみたいな小数点以下の微妙な数もちゃんと加味しないと正確な計算ができないから、脳の仕組みを真似しようとしたら小数点の計算をしないといけないんですけど、最近、少数じゃなくて整数、それも0から255までの数で計算するという方法が出てきて、少数の計算よりもコンピュータの回路が小さくて済むのでお得だということで注目されてるんです。
(A おっちゃん). それは、255だったら2.55ボルトってことにすれば少数と同じじゃねーの?
(Q) そうなんですけど、本当の脳みその神経は厳密に3.1415926535ボルトとかあるわけで、それを少数2桁にちょんぎってしまうという方法がAI研究の世界で流行ってるって話なんですよ。
(A) ふーん. で、君は今日オレに何を聞きたいわけ?
(Q) で、今日僕が読もうと思ってる論文、0から255じゃなくて「0か1」という極端な方法でも結構上手く行くよ!っていう方法らしいんです。結構中身が難しいので読む前に中身を想像してから読もうと思って話し相手になってもらいたくて。
(A) 0か1ってスイッチみたいなものか。電気つけるつけない、ってことかな。それじゃ、スイッチとAIは何が違うのよ?
(Q) えーと、コンピュータの集積回路はスイッチの集まりなんですけど今のAIはスイッチだけじゃなくて、学習が出来るためにはパラメータの勾配を計算する仕組みがあって、、ってあれ?「パラメータがビット表現なのか計算結果がビット表現なのか」というのはビット量子化においてどういう分類になるんだろう?…。それと、もしスイッチの仕組みだけでAIやるとしたら…決定木みたいな感じしか思いつかないな…。
(A) 何言ってるか全然わかんねーよ。簡単に説明しろ。
(Q) あ、、すみません。でも、話し相手になってもらって結構自分なりに掘り下げることが出来たんで、家に帰ってその論文読もうと思います。あ、これ、飲み代です。
(A) お、サンキュー!
みたいな感じです。(ふざけてるように思われるかもしれませんが、「最先端の論文を素人目線で考える」のはめちゃくちゃ大事なことだと思ってます。何事も「本質的な理解は常に素人目線に帰着する」って僕は信じています。
本文も2段階読み「目星を付ける→入念に理解する」
さて、仮説を何らか立てたので、本文を確認する準備ができました。本文を確認しましょう。
ここでのコツは、「読むべき箇所をピックアップする」と「実際にその箇所を読む」とで2段階でやるということです。「目星を付けてから読みに入る」ということです。
具体的にはまず本文を上から下までざーっと眺めたり拾い見たりしつつ「自分なりに立てた仮説に関係ありそうなところ」をピックアップします。繰り返しになりますが「論文を読んで」はいけません。でも「読まなくても目に入って分かってしまった」というときもあり、それはそれで良いです。
そうやって目星をつけて大体全体見たかな、と思ったらピックアップした箇所とその周辺を入念に読み込みます。そこで書いてあることが、その論文の別の箇所や、ときには別の論文(特に、同じ著者による従前の研究)を参照しているケースもあります。どうしてもそれを参照しないと明確に分からなそうだと思ったら、それもちゃんと参照しに行きます。参照論文の読みに移る際も「いま何を読もうとしてるのか」を明確にし、目星を付けてから読むという風に徹底します。けっして上から下まで全部を読み込んではいけません。
そうやって読んでいくと、最初に目星をつけたところが大体読めてきます。それで、当初の目的である「問いのリスト」が消化できたら、それで論文を読み終えたことにして、自分なりに問に対する答えをまとめて終わり、ですし、「新たな問い」や「新たな仮説」が浮かんできたら引き続き論文を同様の方法で読んでいくことになります。
というわけで
論文読みに関する自分なりの方法を書いてみました。 実際に、BitNetの論文はこのような方法で1時間ほどで読みました(なのでもしかしたら読んだ結果の私の理解は厳密には正しくないかもしれませんが、少なくとも自分にとって得るものはありました)。
特にポイントとなるのは、「仮説を立てる」部分で、仮説の巧拙は「もともと自分が持っている知識の幅や量」に依存していることも分かります。なので、最先端の技術確認と同じく既存の知識を体系的に理解(それは論文ではなく書籍であることが多いでしょう)することも大事でしょう。
ではまた!
位相空間の連続写像や測度空間の可測関数が「逆」写像を使って定義される理由
当日投稿でもう一つ adventar.org の記事を書いてみました。
突然ですが、数学を勉強してると、以下のような疑問に突き当たるのは僕だけでしょうか?
これは分かってしまえばとても簡単なので、説明します。
結論をいうと、逆写像は集合の演算(AND, OR = 共通部分、合併)を保つけど、写像(を集合関数と見たもの)は保たない、からです。
それぞれ見ていきましょう。
写像と集合演算
例えば集合をX,YとしてXからYへの写像Fがあるとします。 Xの部分集合X1,X2に対してAND,ORしたものと、それらのFによる像 F(X1),F(X2) (=Yの部分集合) に対してAND,ORしたものを比較してみましょう。
- F(X1 and X2) ⊆ F(X1) and F(X2)
- F(X1 or X2) = F(X1) or F(X2) (これはOK)
像はAND演算を保ちません。写像は「行き先が一つに定まってれば良い」、つまり異なる入力に対して同じ出力があってもよいです。これは直感的には「写像を通すと情報が減る」という風に私はイメージしています。
逆写像と集合演算
同様のことを、今度はYの部分集合Y1,Y2を使って逆写像F^{-1}について考えてみましょう。逆写像は写像と違ってもともと集合関数です。
- F^{-1} (Y1 and Y2) = F^{-1} (Y1) and F^{-1} (Y2)
- F^{-1} (Y1 or Y2) = F^{-1} (Y1) or F^{-1} (Y2)
こちらはイコールになります!「逆写像を通しても、情報は減らない」し、「増えもしない(なぜなら入力よりも情報量が減ってるのだから当然)」から、「情報は同じ」です。それが「逆像が集合演算と可換」になることの直感的なイメージです。
つまりは、
位相空間における開集合や、測度空間における可測集合は、集合演算に対して閉じていることが要請されるので、well-definedな理論を作るにはその要請をキープするような写像を考える必要があるので、集合関数が集合演算と可換になってる必要があるので、逆写像で定義されるわけです。
余談: コホモロジーがホモロジーよりも重要になる理由
また、これと直接同じ理屈ではないのですが、「ホモロジーよりもコホモロジーの方が自然で使い勝手が良い」という、似た話があるので余談ですが紹介しておきます。
集合XとYがあり、X上で定義された関数F1と、Y上の定義された関数F2があるとします。値域はF1、F2とも例えば自然数だとしましょう。 (別に自然数じゃなくても連続値でもTrue/Falseの2値でも{男、女}でも{英語,日本語,中国語,ドイツ語,..}とかでも、なんでも良いです。機械学習の特徴量抽出とかのイメージでも良いです。)
それと、XからYへの写像fがあるとします。このときに、fとの合成を使って「新しい関数」を作る方法を考えてみましょう。
まず、F1とfの合成を考えてみましょう。F1はX上の関数ですが、x∊Xに対してF1(x)は自然数(値域の要素)になってしまい、写像fと合成が出来ません。またx∊Xに対して先に写像fを適用してしまうと集合Yのほうに舞台が移ってしまい関数F1は置いてけぼりです。なので合成が出来ません。
では、F2とfの合成はどうでしょうか?F2はY上の関数ですが、 x∊X に対して写像fで写すとf(x)∊Yとなり、関数F2を適用でき、F2(f(x))は自然数(値域の要素)となります。めでたく、Y上の関数F2からfとの合成によって新しい(X上で定義された、値域が自然数の)関数を作り出すことができました!!
(まだ私も勉強し始めたばかりですが)ホモロジーよりもコホモロジーのほうが出来ることが多い、っていう話はこういう理由から来てるようで、一見違いがないように見える部分にも「本質的な違い」が秘められてるという面白い例だと思います。