知識には形があり、その形はDAGである
この記事は、https://blog.plr.moe/blog/dag-based-knowledge-manageから翻訳したものである。
辞書でこんな経験をしたことがきっとあるはずです。ある単語——たとえば ostensible(表向きの)——を引くと、その定義に purported(とされている)という語が使われている。ところが purported も分からないので引いてみると、今度はその定義に ostensible が出てくる。辞書はあなたに閉じたループを手渡したのです。二つの単語が互いを使って定義し合っていて、どこからも始められません。
これは悪い辞書だからではありません。ごく普通の辞書です。同じことは教科書でも、教室でも、そして自分の知っていることをうまく説明できない賢い人との会話でも起こります。
A: 数学でいう「関数」って何?
B: 各入力をちょうど一つの出力に対応づける規則のことだよ。
A: 「規則」って何? それに「対応づける」って?
B: 対応づけっていうのは……まあ、関数みたいなものだね。規則っていうのは、要するに関数そのものだよ。
A: ……
これをコミュニケーションの失敗と呼びたくなります。でも違います。これはデータ構造の失敗です。説明が堂々巡りになるのは、Bの頭の中にある知識が円環の形をしているからです。そして円環は教えることができません。始点がどこにもないのです。
この記事は、これを直すためのデータ構造についての話です。それは有向非巡回グラフ、すなわちDAGと呼ばれます。名前はいかめしく聞こえますが、その中の一語一語にはちゃんと意味があります。そして、それぞれが何をしているのかが見えてしまえば、この考え方はもう見なかったことにはできなくなります。
DAGとは何か、一語ずつ
「グラフ」:点と矢印
いちばん単純な言い方をすれば、グラフとは矢印でつながれた点のことです。
パン作りを学んでいるところを想像してください。組み合わせて理解すべき事実がいくつかあります。
- 小麦粉と水を混ぜると生地ができる。
- 酵母は糖を食べてガスを放出する。
- 生地の中に閉じ込められたガスが生地を膨らませる。
- 熱が膨らんだ生地をパンへと固める。
さて、それぞれの事実を点として描き、AをBより先に理解しておく必要があるときにはいつでも、AからBへ矢印を引きます。「酵母は糖を食べる」は「ガスが生地を膨らませる」を指します。二つ目の文は、そのガスがどこから来たのかをあなたが知っていることを前提にしているからです。「小麦粉と水を混ぜる」もまた「ガスが生地を膨らませる」を指します。生地とは何かも知っている必要があるからです。
二本の矢印が同じ的を指しています。これは許されていて、しかもそこがまさに肝心なところなのです。
「有向」:矢印には向きがある
「AがBのために必要だ」というのは、「BがAのために必要だ」というのと同じではありません。掛け算を理解する前に足し算を理解しておく必要がありますが、足し算を理解するのに掛け算は要りません。矢印は一方向へ進みます。
ポスターにするならこの一文です。あなたが学ぶのを難しいと感じるものの大半が難しいのは、前提知識が一つ欠けているからであって、あなたが十分に賢くないからではありません。
「非巡回」:ループは禁止
非巡回とは、単に循環がないという意味です。矢印をたどっていって、出発点に戻ってきてしまうことがない、ということです。グラフに循環があるなら、そのどこかでAがBに依存し、BがAに依存しています——これはまさに辞書の問題です。循環は禁止されていて、そのルールこそが、この構造を教育にとって有用なものにしています。なぜそうなのかは、少し後で戻ってきます。
というわけで、有向非巡回グラフ。一方向の矢印でつながれた点、そしてループなし。それがすべてです。
なぜリストではだめか、なぜ木ではだめか
私たちが知識を整理するやり方の多くは、DAGではありません。それらは、もう少しで機能しそうなのに惜しい、より単純な形をしています。そして、それらが行き届かない場所こそ、学びが分かりにくくなるまさにその場所なのです。
いちばん単純な形はリストです。順番に並んだ教科書の章。1週目から14週目までの講義。リストはこう言います——知識は一次元だ、これを終えてからあれをやれ、と。でも知識は一次元ではありません。運動量を理解するには、質量 と 速度の両方を理解する必要があります。どちらが先に来るのかを正直に言う方法はありません。二つは独立した前提知識で、両方がそろっていなければならないのです。
リストはあなたに一方を選ばせ、もう一方が存在しないふりをさせます。読者が隠れたほうをすでに知っているなら、それで構いません。知らないと分かりにくくなります。そして読者はたいてい知りません。というのも、読んでいる理由そのものが学ぶためだからです。
一段上が木です。木は階層を許します。ある話題には下位の話題があり、それにはさらに下位の話題があります。学校のシラバスの多くは木のように見えます。しかし木にも厳しいルールが残っています——各話題には親がちょうど一つしかない、というルールです。では物理の木のなかで「エネルギー」はどこに置けばいいでしょう? 「力学」の下? 「熱力学」の下? 「化学」の下? それは三つすべての下に属するのに、木は一つしか選ばせてくれません。選んだ瞬間、あなたは選ばなかったつながりについて嘘をついたことになります。
木は、これほど多くのカリキュラムが「あと一歩で何かを説明できそう」という奇妙な感触を持っている理由です。本物の前提知識が木のどこか別の場所に、触れられないまま座っているのです。階層がそれを収めるための枠を持っていなかったから。
DAGは「親は一つ」というルールを捨てます。ノードは、実際に持っているだけの数の親を持てます。これは小さな変更に聞こえますが、地形と一致する地図と、ページに収めるために折りたたまれた地図との違いに相当します。
循環は、まずい教え方が隠れる場所
さて、私がその価値を実感するのに最も時間がかかった部分です。「非巡回」というルールは、単なる技術的な細部ではありません。この形が学びにとって有用である理由そのものなのです。
自分がよく知っていることについてDAGを描こうと腰を据えると、あなたは必ず循環にぶつかります。「再帰を理解するには、コールスタックを理解する必要がある」と書き、それからコールスタックを再帰を使って説明するつもりだったことに気づくのです。「力は質量かける加速度だ」と書き、それから、あなたが質量について考えてきたやり方が「押したときに加速に抵抗するもの」だったことに気づく——これは加速度が質量を説明し、その質量が加速度を説明している状態です。
どの循環も、あなたの理解が何かをこっそり自分自身によって定義している場所です。自分の頭の中では、誰もチェックしていないので、それでもやり過ごせてしまいます。DAGは、それをやり過ごさせてくれないものなのです。
直し方は、たいてい次の二手のどちらかです。
- 循環している両方のノードが依存する、共通の下地となる概念をくくり出す。 再帰とコールスタックは、どちらもより原始的な考え——「スタックフレームとしての関数呼び出し」——に依存しています。そのノードを追加すると循環は解消します。新しいノードが両方を指し、二つはどちらも互いを指さなくなるのです。
- 二つのノードが、実は服を着替えただけの一つのノードだと気づく。 循環は、あなたが単一の概念を二重に数えてしまっていることを教えている場合があります。「平均速度」と「総距離を総時間で割ったもの」は、互いを指し合う二つの別々の考えである必要はありません。それらは同じ考えなのです。
これが大事なのは、知識の呪いと呼ばれるものがあるからです。ひとたび何かをよく理解してしまうと、それを理解していなかったときのことを思い出すのが非常に難しくなります。そこへたどり着くために踏んだ段階が、あなたには見えなくなってしまうのです。専門家がしばしばひどい教師になるのはこのためで、それは人格の欠陥ではありません——専門性がどう働くかという構造上の特徴なのです。欠けている前提知識とは、定義からして、かつて必要だったことをあなたが忘れてしまったものなのです。
内省によってこの呪いから抜け出すことはできません。でも、循環にはまっている自分を捕まえることは できます。循環は外部からのチェックで引っかかるからです。あなたの下書きのDAGがループするとき、そのループは、本物の前提知識を「まあ当たり前」に圧縮してしまった場所の指紋なのです。循環を解消することは、あなたが埋めてしまった何かを掘り起こすことをあなたに強います。
自分のDAGを作る
実践的な助言を、おおよその順番で。
第一原理からではなく、教えたいものから始めましょう。 公理から前へ進めていくのは、数学者が教科書を書くやり方です。個人的なDAGを見つけるにはまずいやり方です。というのも、誰も必要としていない領域まで残らず地図化してしまうからです。目的地を選び、それから後ろ向きに歩きましょう。
「Xを知っている前提だけど」と自分が言っているのを捕まえるたびに、ノードを一つ追加しましょう。 その前提は一本の辺です。書き留めましょう。最も有用なノードは、前提にしていることに自分でもあやうく気づかなかったようなものです。
聞き手が本当にすでに持っているノードに突き当たったら、そこで止めましょう。 どのDAGにも 公理 があります——それ以上は説明しない、底にある葉のことです。読者がすでに知っているからです。これは読者ごとに異なります。だからこそ「Xを教えるための前提グラフ」は一つのグラフではなく、聞き手ごとに一つずつのグラフなのです。同じ話題を物理学者と高校生に教えるのは、ほとんど文字どおり、たまたま上端を共有している二つの異なるDAGなのです。
ノードの説明は一文に収めましょう。 ノードを一文に収められないなら、それは一つのふりをした二つのノードです。分けてみると、たいてい隠していた辺が一本見えてきます。
循環を見つけたら、くくり出すか、統合しましょう。 ごまかして覆い隠してはいけません。循環は、そのグラフがあなたに教えてくれるうちで最も情報量の多いものなのです。
DAGから教える
私が教えることについての考え方を変えた、そのモデルを紹介します。
学習者とは、どの瞬間においても、すでに習得したノードの集合そのものです。これをその人の習得済み集合と呼びましょう。教えられる最前線とは、親がすべて習得済み集合に入っているノードの集合です。これらは学習者が受け入れる準備が整っているノードです。前提がすべてそろっているので、新しい概念が取りつく場所があるのです。
良い教育とは、最前線から次のノードを選ぶことです。それだけです。教科書の順番からでもなく、あなたが それを学んだ順番からでもなく、先週やめたところからでもありません。この学習者の今の最前線から選ぶのです。
これは教育をめぐる多くのいら立ちを捉え直します。「この生徒は理解してくれない」は、ほぼ必ず「私は、親が生徒の習得済み集合に入っていないノードを教えようとしている」という意味です。それは診断であって、判定ではありません。 別の生徒も、別の説明も要りません。グラフをさかのぼって、欠けている親を見つければいいのです。それがそろえば、元のノードはたいてい、それ以上の労力なしにすっと収まります。
これはまた、同じ主題に 複数の 妥当な教える順番がある理由も説明します。矢印を尊重する順序づけならどれも、妥当な授業計画です。(グラフ理論家はこれを トポロジカルソート と呼び、DAGにはたいてい多数存在します。)それらのあいだの選択こそ、教え方のスタイルと好みが宿る場所です。深さ優先でいく教師もいます。次の枝に入る前に、一つの枝を最後まで作り込むのです。幅優先でいく教師もいます。見返りが出る前に、広い土台を作るのです。早めに見返りを与え、前提知識は後から埋めていく教師もいます。これらはどれもうまくいき得ます。決してうまくいかないのは、どれほど魅力的な教師であっても、DAGに反する順序づけです。BがAを本当に必要としているのに、Aより先にBを教えたら、その授業は何もない上に落ちてしまいます。
グラフを保守する
あなたのDAGは、一度描いて終わりのものではありません。何年もかけてデバッグし続けるものです。
何かをうまく説明できたときはいつも、実際にどの前提知識に寄りかかったのかに注意を払いましょう。それらが本物の辺であり、しかもたいてい、あなたが予想したはずのものではありません。何かをうまく説明できなかったときはいつも、欠けている親を探しましょう——学習者が持っていなかったのに、持っていると思い込んでいたノードです。それを追加しましょう。時間とともに、あなたに固有の、この主題に固有の、そしてあなたが出会いがちな種類の学習者に固有のグラフが積み上がっていきます。それはどんな教科書よりも有用でしょう。教科書は想像上の平均的な読者に向けて書かれているのに対し、あなたのグラフは本物の読者に対してデバッグされているからです。
このグラフはまた、リストや木にはない仕方で自己改善もします。リストは、隙間を見つけても、新しい段階を置くべき明らかな場所がありません。木は、横のつながりを見つけても、階層を壊さずにそれを置く場所がありません。DAGはただ新しい辺か新しいノードを一つ得るだけです。この構造は、新しい理解に抵抗するのではなく、それを吸収するのです。
知識には形がある
たいていの人に知識を思い描いてもらうと、事実の山か、はしごか、木を思い描きます。どれも正しくありません。知識はDAGであり、ひとたびその形が見えてしまえば、もう見なかったことにはできません。
次に誰かがあなたに何かをまずく説明したとき、あなたはその説明のなかに循環を描いている自分に気づくでしょう——二つの考えが、下に何もないまま互いに寄りかかっている場所です。次にあなたが何かをうまく説明したとき、あなたは頭の中でこっそりDAGを歩いていたことに気づくでしょう。聞き手がすでに知っていたことにたまたま合う順番で、最前線からノードを選び取っていたのです。
そして次にあなたが本当に学ぶのが難しい何かに出会ったとき、あなたは尋ねるべき新しい問いを手にしています。「自分はこれに十分賢いだろうか?」ではなく、「自分はどの親を欠いているのだろう?」と。
その問いには答えがあります。もう一方には、ありません。