INDEX 2016

1223 0828 0427 0330

December 2016

December 23 Friday 2016

書きそびれたネタたち

テクスト分析にコーパス言語学や自然言語処理の知見アレコレを導入してどーのこーの、というのが私のやりたいことなのですが、何やら予想外に激しくキッパリした抵抗に合うという経験をしてきました。で、その「抵抗勢力」(?)を無視して突き進める力は全然持ち合わせていないため、色々人生が座礁して今に至る、と。

それでも根が真面目なので(←!)一応彼らの言い分を自分なりに再構成しつつ分析して妥協点を探ったり、それと並行して数学方面のアレコレみたいなことについても再学習(?)のようなことをしていました。嫌々取り組んだことでしたが、それなりに視野が広がった感じもあります。

備忘録的にそうしたことどもをここに書きとめようとは思いつつ、よく見知っている分野ではないので分かったつもりで何か酷い勘違いをしているのかもしれない不安が常に付き纏い、根が真面目なため(←!!)その確認作業が済むまで...とかウダウダしているうちに幾星霜。

しかし忘却力の酷さは年々増大中でもあり、メモでも何でもとにかく残しておいた方が良い気がするので生煮えの感じでとりあえず項目だけ列挙しておきまする。

「dy/dx」は分数か否か論争
菊川怜が解いた積分について
△自己相似形による「ギャンブラーの錯誤」解説
△非現実すぎて理解を阻害する例示
△漸化式とマルコフ連鎖
△清水のUFO大作戦
△掛け算を幾何的に示す方法

これらは「言語の本体は文法であり、文法は論理であるから、言語も論理である」という考え方に対処しようとして勉強(?)していた中で関心を持ったりして考察したことです(←割とそうでもないのも含まれてる気が...:汗)。数学と論理と自然言語の間にあるアレコレに関すること、とも言えるかもしれません。

巷を騒がしている「掛け算の順序固定強要問題」なんかの根底にも「言語の本質は論理であり数学の本質も論理だから両者には対応関係が成立しており相互変換も可能でなければならない」という信念がありそうです。またこの信念からは「論理や数学も言語と同様に相対的なもので主観を逃れた客観的真理などは存在し得ない」および「言語も論理や数学と同様に客観的真理に基づく自然科学の対象である」という相反する主張が生じているのを観測できます(←後者の立場(=生成文法派)から見た前者(=言語相対論)への執拗な攻撃について以前書いたことがあります...)。しかし両者のうちどちらが正しいのか?を問うことに意味があるとも思えません。この現象(?)は単に「言語と論理や数学は似ていない」というシンプルな事実を示唆しているだけではないでしょうか。

数学の歴史では、数学で扱う概念や操作の手法そのものの発展と並んで、表記法の改善が試みられてきたようです。最初は自然言語(と作図)しか表記に使える手段がなく(←漢字文化圏にいるとピンと来ないのですが古代ギリシアでは数字を表す専用の記号さえ存在せずアルファベットで代用し、しかもその割り当ては最初の9文字で1から9を、次の9文字で10,20,30,という感じで90までとかとか非効率の極み...:汗)そのため数学で扱う概念や論理それ自身とは別の記号システム(である言語など)の影響を強く受けて思考が混線する状況があった。つまり自然言語の影響からいかにして離脱するか、というのは数学の発展において重要な取り組みだったと言って良いでしょう。

同様のことは論理にも言えて、数学で開発されたものを導入する形で自然言語による制限から(数学は16世紀、論理学は19世紀ぐらい?に)脱しました。で、その後は数学と一体化(?)しつつそれまでの停滞が嘘のように解消されて高度化していったのですから、いかに自然言語が悪影響を与えていたかがわかります。それにしてもアリストテレスの時代とブールやカントールまでの間に行われて2000年以上にわたり営々と積み上げられてきた膨大な研究には(純粋?に記号論理学的観点?から見たら...ということですが:汗)ほぼ全く意味がなかった、というのも切ない。文化史や思想史的には有意義な資料になるんでしょうけど。

以下、上で示した項目について簡単にコメントしておきます。

「dy/dx」は分数か否か論争

算数や数学教育で学習者の理解を促進するどころか混乱させる原因になっているような教え方が多数ある、というような話を垣間見ます。そのうち微積分に関するもので「dy/dx」を分数と捉えてはならず、読み方も「ディーエックスぶんのディーワイ」ではなく「ディーワイディーエックス」としなければならない、というのがあるのだとか。

そもそもdy/dxが何だったのか、を思い出してみると(←なにせ高校数学プラスちょびっと独学分くらいしか手の内がない文系ちゃん脳で書いているので、まあ、すんまそん...)たぶん関数y=f(x)の「微分係数(differential coefficient)」を要素とする集合である変数です。雑に説明すると「独立変数xの変化量と、それに対応した従属変数yの変化量の比の極限値」ということかと。

もとの関数y=f(x)の独立変数xを流用(?)しつつ、dy/dxをそれに対する従属変数とする新たな関数をもとの関数に対する「導関数(derived function)」と呼びます。式として書けばdy/dx=g(x)ということですが普通はdy/dx=f'(x)というように書く(←「dy/dx」はライプニッツ方式でプライムを付けるのはラグランジェ流らしいっす...)慣わしです。で、関数y=f(x)の導関数y'=f'(x)を求めることを「関数y=f(x)をxについて微分する」という等々。

話がクドくなるのでε-δ論法とコミコミで以下に『数学は言葉』(新井紀子、2009)の誤植(?)疑惑ページ(p.141)を貼っておきますので、こんな感じということで(←!)。

>>

さて、話を戻します。

>> dy/dxを分数だと見なさないのはトンデモでは無いから(togetter)

bit.ly/2h7ksMT 今、すごく時間がないので、数日後にきちんといろいろ書こうと思っているのだけど、今\int(x/\sqrt{x^2+4})dx=(1/2)\int(1/\sqrt{x^2+4}))dx^2+4=sqrt(x^2+4)という答案が出てきてビックリした。dx^2+4はせめてd(x^2+4)と書いてほしいけど、そこを見逃せば間違ってないので正答ということに。(16 Dec 2016)

togetterまとめの冒頭に出てくるtweetから引用。ふたつの発言を繋げています。なお最初に出てくるリンクは「dy/dxは分数なのか否か?dx分のdyと読んでいいのかどうか?微積分をどう教えるべきか?どう認識すべきか?」というtogetterまとめへのものです。

発言中の数式部分がわかりにくいのでそれっぽい表記にしてみました。修正要求(?)の出ていた部分を反映させてあります。うーん、左端の式からどうして真ん中の式になるのかわからないし、それがどうやって右端の結果に繋がるのか理解できないのですが、確かにこれだとdy/dxが分数かどうかみたいな話と無関係に解けてますね。

ちなみに俺ちゃんのゆるふわ文系脳で解く(?)ならdxをdtで表す過程があるので分数っぽく扱う部分が入ってきます。その具体的アレコレを以下に書き出してみることにしましょう(なんか高校生っぽいですが:笑?)。確か「置換積分」とかいう方法です。

上記の結果をtで微分します。簡単のため右辺が正の場合だけを扱いますが負でも最終的な結果は同じです。

左辺分母...っぽいdt(←dx/dtが分数じゃないとすると分母とはいえませんもんね:汗)を右辺に移項するとdxをtとdtで表せました。

ここまでの結果を使って最初の式を次のように整理します。dxを積分記号の右側に書かれた式に掛けているひとつの変数のように扱って計算していますが「積分記号とdxは括弧のようなもので二つセットでひとつの記号」という(dy/dxは分数ではなくそれ全体で不可分なひとつの記号だ、というのと同一の場面でなされる)教え方とも齟齬があるような...。

これを積分します(←積分する前の式にあるt字をdtのt部分も区別せずx^2+4に置換するとtweetにあった式の真ん中のヤツになります...つまりこの程度の計算は脳内処理で済んでしまうわけか...)。簡単のため積分定数は省略しました。

一応tをx表記に戻して整理すると引用したtweetにあった正答と一致します。

で、この件についてどう考えるか、なのですが、まあ、数学的なことについて数学者の議論に口を挟むなどということはおこがましいので当然アレです、沈黙は金的な。それでもひとつ指摘しておきたいかな?と思えるのは、この論争(?)が「論理」対「数学(と物理)」みたいな構図になっている点です。なんか変な言い方ですが。

ええと、ときどき引用している『家庭の算数・数学百科』(数学教育協議会,2005)の数学者小伝コーナー(?)に小平邦彦という日本人で初めてフィールズ賞を受賞した大先生のことが載っているのですが、そこに気になることが書いてありました。

後年、日本に戻り、東京大学教授、学習院大学教授を歴任、数学界の重鎮として数学教育への発言も積極的に行い、数学教育現代化、とりわけ集合論の数学教育への導入に強烈な批判的論陣を張りました。(p.399)

小学生に集合論を教えてどうなるというのか、という話らしいです。たぶん1971年に実施された学習指導要領(←もっとも詰め込みだったヤツ)でそうなってたことを批判したのでしょう。この要領には「現代化カリキュラム」という俗称があるらしいので「強烈な批判的論陣を張」った対象である「数学教育現代化」というのは「現代化カリキュラムでの数学教育」という意味かと。

>> 「現代化カリキュラム」と「ゆとり」(早稲田塾)

例えば一時期は高校にまで遠ざけられ、今は中学で教え始めている算数・数学の「集合」を親世代は小学校で習っていました。高校1年で習った親世代の「数学機廚瞭睛討砲蓮∈の高校生が2年以上で習う内容が大幅に記載されていました(指数関数・対数関数など)。高校数学は「機廚濃実上学ぶ範囲の半分ぐらいまでカバーしていたのです。日本の発展のために教育は重要だ。そのためには欧米に並ぶ人材育成を少しでも早く「現代化」しなければならないという時代だったのです。

下線は引用者がつけました。ここで「親世代」と言われているのが「現代化カリキュラム」で教育を受けた世代のことです。下線部にあるように小学校で集合論をやってたんですね。まあ「集合論をやった」と言っても内容は色々なんだと思うんですが(←ていうか論理と集合はセットで教えないと全く意味ないから小中学生には無理ゲーぽい)。ちなみに「小平邦彦」「集合論」でググったら以下の研究報告がヒットしました。

>> 「数学教育はどのような順序で行うべきか」(若槻実,1977)

この中で引用されているのは「数学教育を歪めるもの (戦後教育はこれでいいのか)」(小平邦彦,1975)です。

「数学の教育は、数学の歴史的発展の順序に従って行うべきである。生物の個体の発生はその系統の発生を繰り返すが、数学の教育もそれと同様で、論理的に基礎的な概念よりも歴史的に早く現れた概念ほど子供にとってわかり易い。この順序を逆にして子供に教えようとすれば、その分野の本質的な部分は理解できないので、結局、非本質的なつまらない部分を教えることになる」「高等学校までに教え得る数学は18世紀に発展した微積分までであろう。したがって19世紀末にはじまった集合論を小学校で教えるなどとんでもない間違いである」「小学生には対角線論法も実数もわからないから、集合論の最もつまらない、どうでもよい部分を教えることになる。小学生に教える集合論は決して難しくはないが、それは集合論の最もつまらない部分だからである」

若槻(1977)に引用されている小平(1975)を三箇所抜き出してみました。最初のヤツは芳醇な(?)トンデモ臭がしていないこともないですが、あとの二つはまあ正論かな、と(←フィールズ賞の大先生やぞ!もっと敬意を持て!!)。二番目のヤツに従えば集合論は小学校どころか高校で教えてもダメということになりそうです。

そういえば最近(←過去二年以内の意:笑?)twitterで見た気がするのですが、どこかの大学で新入生用授業が集合論中心のカリキュラムになっていることを批判していました。そんなこと(?)やってる間に高校で勉強したことを全部忘れてしまって学生のほとんどが大学での数学についていけなくなっちゃう(?)みたいな感じで。

集合論は論理とほぼ同義(←ゆるふわ文系ちゃんから見て...ってことなのでホントは色々異論もあるのかも...)なので、新入生を集合論漬けにするというのは、それまで獲得してきた数学で使われる色々な概念を論理的に正確なものに定義し直させる試練(?)と思われまする。それは数学能力の飛躍に必要なんでしょうけど、残念ながらその過程で凡庸な学生は耐え切れずに潰れてしまう、と。で、各自の必要に応じてそれなりに道具として使えればいいだけなのに、なんでそんなことすんの?やめろや!という主張だったのかなあ...。

一人の人間が何かを認識するとき、最初から厳密に精密に一般的に見えるわけではない。次第に正確に精しく見え構造や関係がわかって来るのである。(中略)例えば微積分を教える場合、はじめから実数の連続性やε-δ論法を教えても微積分の本質は摑み難い。はじまった当時の微積分がそうであったように、余り厳密な事はいわずに、区分求積によって体積を求めたり、平均速度の極限として速度を求めたりして、その生まれた当時の姿を味わせ、しかる後厳密化一般化されたものを教えるべきであろう。勿論厳密化や一般化も数学の重要な仕事である事に違いないのである。

上記のように(←あ、下線は引用者がつけました:汗)若槻(1977)では具体例を出して小平(1975)の「歴史的発展の順序」で数学教育をすべきという主張の妥当性を認めます。ただ実際に数学各分野の「歴史的な位置づけ方」を規定するのは難しいよね、という面から否定していく感じ。ザッと見ただけなのでよくわかってませんけど。

ところで最初の下線部なんですが「実数の連続性」は微積分やる前に教えといて欲しかったなあ...と個人的には思わなくもありません。数列やってるときに組み込めるよね?的な。というか「変数」概念を獲得し損なっていた(←しかも自覚は無かった...こわっ!)せいで関連分野全般(←ほぼ数学全部とも言う...:涙)の理解がガッタガタで苦労した身としては「離散/連続」は最重要概念やんけ!(←ま、こういうのは個人差があるから誰にとっても良い順番なんて決めるの無理っぽい...それはわかるけども...)と主張したい。これはもっと曖昧な「数/量」区分という形で英語でも必要になるし。

そもそも数学界(?)における微積分というのは関数の性質を調べるツールであって(←しかも自身も関数だから微分を微分とか色々KUFUの幅が広い)そのノウハウと分析結果の集積が解析学なわけやん?(←ですよね?)なんでそういう一発で視界をクリアにする事実(?)を敢えて言わないわけ?いじめ?わけわからんよ。てか、小学校からこっちずーっと何らかの数学的対象(←図形とか方程式とか四則演算とか)の性質を調べる方法とその歴史的成果を学んできていたわけだから微積分もその延長上にある...くっそメンドイし計算がヤバイけど...と考えればいいだけじゃん。この点が腑に落ちてないと延々執拗に色々な関数を微積分する方法について学んでいく苦行の意味もわからんし。だいたい「関数とは?」みたいな根本すら曖昧だったしな。数学教育界はなにやっとったんや!(←あの人らにも色々事情があんねんて...←なっとくできん!!)

えーと、話があっちゃこっちゃいってますので戻します。二つ目の下線部にある「区分求積」法の説明でよく使われる「sum」の「s」から派生した二種類の記号を結んだ式(←Σはギリシア文字でsにあたる字だし∫はsを縦に伸ばしたもの...らしい)は積分を理解する上でスッゴクイイ!と思ってたのですが、なんか集合論=厳密論理の立場(←上で紹介したtogetterまとめに出てくる集合論の先生も主張)からはそれも否定されるらしくて結構ショック。

これは『数学は無限を創る』(リーバー,2013)に載っていたもの。他にも例えばググってみつけた「区分求積法の基本式」に以下の式があります。

参照先サイトにある式をそのまま写したんですが、なんか変ですよね...僭越ながら誤植(?)と判断して以下に修正版を。

で、リーバー(2013)はMidpointでやってますがこっちの式はUpper SumとLower Sumを意識したものなんでしょうか?(←質問か!) これらが一致していると「リーマン可積分」とかいうんでしたっけ?(←ウロか!!←文系ちゃんだから...ショーガナイネ)

揚げ足取りのように思われると困るのですが 定積分は【微小に分割して足し上げた結果】ではなく、その直感をリーマン和の極限という形で表現したものと考えます。その差は初学者相手でも、より高度な文脈では無視できても、触れるべきだと思います。(30 Dec 2016)

togetterまとめの集合論の先生の発言は上記のような感じ。引用に際して言及先へのリンクは割愛しています。「リーマン和」については以下が参考になるかも。

>> Riemann Sum(WolframMathWorld)

備忘録的に簡単にコメントしておくだけのつもりが混乱したまま長大になってしまったので、更なる考察とちゃんとしたまとめみたいなのは未来に託してブツ切りにしときます。すんまそん。ええと、それでも唐突にまとめ意見的なものは残しておきましょう。

dy/dxや微積分について(だけではなく数学全般において)教育上もっとも配慮しなくてはならないのは概念の獲得に貢献するような自然言語(など)での説明がどうあるべきかであって、自然言語(など)でもっとも正確にその概念を表現する(=定義する)にはどうすれば良いか、ではない。ただどのように説明すれば概念獲得がしやすくなるのかは学習者により個人差が(たぶん、かなり)あって一概には言えない。

自分に関していえば

「dy/dxはひとまとまりの記号」←微分方程式解くときパニクった
「∫とdxでひとまとまりの記号」←積分概念獲得に失敗した
「実数の連続性を教えない」←先述した通り
「ε-δ論法」←教えても教えなくてもどっちでもいい
「積分は微小に分割して足し上げた結果ではない」←たぶん混乱する

みたいな感じです。

菊川怜が解いた積分について

『おしゃれカンケイ』という番組の2005年2月27日放送回にゲストとして出演した菊川怜氏が数靴量簑蠅魏鬚ました(←1978年2月28日生まれだそうなので大学を卒業してから4年くらいは経過)。出題内容はホワイトボードに「次の定積分の値を求めよ」とあってその下に式が書かれているというものです。

菊川氏は「これはもう公式なので...パーッとやっちゃうと...」と言いながら難なく以下のように解いていきます。対数の底は明示されていませんが数靴任△(←日本の高校数学教育での慣習に従う)こと及び推定される出題者の意図からネイピア数eであると判断しているようです。

このあと司会者の「このぐらいだと現役だいぶ離れてるのにスッといけるんだ?」という問いに「公式なんとか覚えてればいけます」と答えました。それから「数学の魅力」について聞かれて以下のように話し出します。

この式だけだと全然つまらないんですよ、あの、理論背景がすっごく面白くって、それはもうすっごく理論的でクリアで一点の曇りも無いので、それがわかると、なんかパズルが解けたみたいな、こう、すっごく一個一個、しっかりした理論が面白くって、それでわかると、逆に暗記物とかって絶対暗記したりとかしないと、こ、答案でないんですけど、あれは全部理論がわかれば何にも覚えてなくても解けるから、そこが好きで

一方では「公式を覚えていたので解けた」的なことを言いつつ、上記発言下線部にあるように「何も覚えてなくても解ける」とも話しているため、相矛盾したことを述べているように見えます。しかも「あれは」のときに後ろを指差しているので「数学一般」の話ではなく番組で解いた問題のことを言っていると考えざるを得ません。

おそらく菊川氏は(この番組での姿だけから推察しても)思考速度と発話速度の間に相当の開きがある人物だと見受けられます。発話速度が思考速度よりも遥かに遅いため、コマ落とし映像のような話し方になってしまうのでしょう。ですから発言から欠落した部分を復元していけば「公式を使わないと解けないのに何も覚えていなくても解ける」の意味もわかってくるんじゃないかと思われます。

で、まずは「公式」を特定するあたりから。以降なんだか高校生の勉強ノート(笑?)みたいな話が続きます...。

「積の積分(部分積分)」公式と呼ばれるヤツです。左辺を積分した結果である右辺にまだ積分が残っているので「部分」積分と呼ぶみたい。

さて、解かねばならない式のx^{2}logxをx^2とlogxの積と見なして積分しようとする場合、それぞれを個別に積分してから単純に掛け合わせるという方法は使えません。微積分は「線形」という性質を持つので「和の微積分は微積分の和」なのですが「積の微積分は微積分の積」ではないからです。そのためこの公式が必要になります。

ところで、そもそもなんで「積の積分」とみなすのでしょうか。菊川氏はf'(x)=x^2およびg(x)=logxと公式に当てはめていますが、これによってlogxを積分しないで済んでいます(←代わりにlogxの微分を含む積を積分)。ここに動機がありそうですが、それを知るには対数の微分について確認してみないといけません。でもその件はとりあえず後回しにして、先に部分積分公式の成り立ち(?)の方を確かめます。

先述した公式のf(x)g(x)を左辺に移項して積分項(?)を右辺に固めました。更に「積分の和は和の積分」ということから右辺全体を積分する形にします。また左辺はf(x)g(x)の微分を積分していると考えることにします(←微分と積分は互いに逆関数なので...為念)。というわけで、なんと「積の積分」公式の本体(?)は「積の微分」公式だったんですね。

公式を導き出す過程を簡単に書き出してみました。2行目には通称「坊さんのロバ」(?)という小細工をしています。計算を整理しやすくするために何かを足して引く(←つまりプラマイゼロ)みたいな。元ネタは『今日から使える微積分』(大村平,2004)のp.63あたりです。「和の極限は極限の和」であると同時に「積の極限は極限の積」でもあるので一気にまとめて3行目のように整理できます。

こうしてみるとどうやら「積の積分」公式を詳細に覚えていなくても「積の微分」公式あたりから順に辿っていけば自力で導出できそうです。もちろん暗記していた方が話は早いので、ああいう番組で視聴者や他の出演者・スタッフに迷惑じゃない時間でサッと解くことを考慮して「公式なんとか覚えてれば」と言ったんじゃないでしょうか。そして時間や状況の制約が無いのであれば「理論がわかれば何にも覚えてなくても解ける」という話かと。

さて、一応頑張って対数の微分もやっときますか...(←謎の義務感:笑?)。大村(2004)のpp.38-40あたりを参考にしました。

対数でも普通(?)の関数を扱うときと同じに計算していきます。対数の差はそれぞれの引数(?)の商になるので(←大丈夫だろうかこんな表現で...:滝汗)2行目のようになります。4行目ではΔx/x=hと置いて全体を書き替えました。このときΔx→0ならばΔx/x=h→0なので極限の下のヤツ(←!)もそんな感じで変更しています。

5行目は極限の右側(?)を対数と1/hxの積と考えた上で1/hxを更に1/xと1/hに分割してから「積の極限は極限の積」ルール(?)によって1/xとその他に分割。対数の係数は引数の累乗になるのでそんな感じで処理。

この引数部分=「(1+h)の1/h乗」でhが限りなく0に近づいていくというのは「1に限りなく小さな正の値を加えたものを無限回累乗する」という意味になります(←補足:hが負の場合もあり、そのときは「1に限りなく近いけどちょっと小さい値を無限回かけたのの逆数」という意味になります...1/hが負になるからですね...)。えーと、このネタ(?)は折に触れて個人的にすっごくホッコリするなあ、と感じていてとっても好きです(←!)。無限力(むげんちから)の凄まじさと割とそうでもなさが同時に現れているといいますか...。ほぼ「1」を無理やり「2.71828...=e」までもっていくのは確かに凄いけど、でも2.7ちょっとか...無限なのに...みたいな(笑?)

対数の底がe(=自然対数)のとき引数が同じくeだと1になるので微分した結果は1/xというシンプルなものになります。これをうまく利用すればいつも計算が楽になるかどうかは知りませんが、少なくとも菊川氏のケースでは役に立っているようでした。

出題された式は非常にシンプルですが、それを解くにあたっては「理論背景」「すっごく一個一個しっかりした理論」といったものをわかっていなければならないことが確認できました。まさにおっしゃる通りという感じ。ただ「理論的でクリアで一点の曇りも無い」という部分についてはゆるふわ文系眼でみていることと面倒で端折った(←微積分が線形である証明、極限の性質についての証明、ネイピア数が出てくるところのアレコレ等々)ため傷だらけの磨りガラス状の視界で十分に確認できませんでしたが、それはこっちの問題なのでアレです。

ああ、あと、ついでというかこの番組で気になったことがあったのでオマケで書いときます。それは菊川氏が定積分について司会者に説明しているときに画面に出たテロップなんですけど...。

インテグラル…積分、または積分記号「」の呼称

なぜ案外誰でも見覚えのある「∫」記号とcontour integral専用のアレ(←こんな高度?な記号使ったことないナリ...)を取り違えたのか。司会者や他の出演者が大げさにバカっぽく振舞っていたのは演出かな?と思ってましたが、キャプションでこんなことする意味がわからなくてコワイ...。ちな以下参照。

>> Definition:Contour Integral(Proof Wiki)

とりあえずのまとめ

今回は微積分の話だけにしときます。次は...「清水のUFO大作戦」(←ググってみると「UFOベクトル」はヒットするものの、この単語は見つからない...記憶違いかも...:滝汗)について語るところから始めたい気がしてます。道民受験生が大昔に使っていたチート技なんですけろ。しかしこれはイイ!チートだったと思われます。文系ちゃんにも線形代数への道をチラと示す的な意味で。

で、微積分についてもまだ少々言い足りないので以下余力の許す限りダラダラ書く(←!)つもりです。結論の出てない話(←もちろん私の文系脳では...の意)なども含んで。

ええと、最初に言及した上記の式をもう少しコネコネしてみます。

積分する元の関数での従属変数(←コレのことも「関数」と呼ぶから混乱すると思うのですが...)の数式としての見かけは同じであっても独立変数の設定如何で関数の姿が変わることをラムダ式で確認してみました。微積分の対象は従属変数ではなくあくまで関数なわけですから微積分が可能かどうかも独立変数の設定によって変わります。それを「置換積分」などといって文字を置き換えて云々という話(←微分で使う「合成関数」での文字の置き換えなども同様)にするのは何か誤魔化しているとまではいいませんが、ある種の学習者(←例:俺ちゃん)の理解を大きく妨げるのではないか、と感じられました。本質的には関数の構造(?)を独立変数の設定変換で微積分可能なものに再解釈するという話なんですよね?

dxについても同様の意識(?)で調べてみると上記のようなことになります。1行目はx=xをxで微分してdxを求めています。2行目ではx=\sqrt{(x^2+4)-4}を(x^2+4)で微分しなければなりませんが根号(?)に阻まれて直接は微分できません。3行目のケースも同様です。

そこで根号を処理するために根号内(?)の数式と同様のものを使って微分します。その結果が2と3行にある二つ目の等号右の乗算記号で分けられた数式の左端ブロックです(←この説明で伝わります?)。同じ構造(?)の微分を行ったので比較すると係数と指数が一致しています。

右隣のブロック(?)はこのとき微分に使った単位(?)を例えば2行目なら(x^2+4)にあたる本来微分に使いたかった変数で微分した結果です。左端ブロックとその右隣の積が本来求めたかった微分結果になります。(dy/dt)(dt/dx)=(dy/dx)という「合成関数」の公式通り。一瞬「なんで微分の積なのにそのまま掛けてんの!!」と言いたくなりますが(←なりませんか、そうですか...)両者の違いは例えば以下のようなことです。

「積の微分」では微分に使っている独立変数は同一ですが「合成関数」では二種類が使われています。これに限らず同じ結果に至る異なった方法が存在することで微積分では苦難の少ないルート選択が可能になる(←苦痛の過多は程度問題のときも...)のですが、それにはたくさんパズルのような事例を解いて選択可能な手段の蓄積に励まなくてはなりません。そういうことが好きかそうでないかというのは習得に大きく影響するんだろうなあ...とパズル嫌いの自身を振り返って溜息をつくわけですけろ(←数学が得意な人は概ねパズル好きという気が...)

dxについてもラムダ式で独立変数に応じた構造(?)をまとめてみました。前のラムダ式によるまとめと合わせてみると実は独立変数を\sqrt{x^2+4}とした3行目が最も積分計算が楽になることがわかります。こんな感じで。

ところでここまでコネコネしてきた問題を菊川怜氏のように「積の積分」で解こうとしたらどうなるのでしょうか。その場合は最初の設定(?)でxと1/\sqrt{x^2+4}のどちらを微分済みと見做すかで2種類のルートが存在し得ます。

で、やってみた結果からいうと、まずそもそも論として「この問題で積の積分はヤメロ」です(笑?)。どのみち計算過程で「置換積分」は必要になるし。特に1/\sqrt{x^2+4}を微分済みと見做す(から積分しとかなくちゃならない)のはパズル好きには堪らない(←!)超くそルートと言ってよいでしょう。

>> 特殊な置換をする定積分(受験の月)

高校数学で登場する中で最高難度の積分パターンである

最高難度キタコレ。ちなみに上記はすばらしく参考になるサイトです。ありがとう&幸多かれ。で、ここで紹介されている方法を導入してまたラムダ式にまとめてみます。

新たに三種類の解釈(?)が加わります。なにしてくれてんの...といいたくなりますが(←確かに根号内多項式という積分の障害は消えてますけどね...)三つとも背景に「双曲線」を考えると腑に落ちることらしい。ちなみに「双曲線関数」は『関数のはなし 下巻』(大村平,1977)pp.200-208に「指数・対数・三角の大学院の巻」の一項目として出ていましたので少なくとも70年代末あたりでは大学どころか大学院で扱う内容だったみたいです。難度の問題ではなく単に優先順位が下で後回しにされていただけかもしれませんが。

中学校で習った比例・反比例のうち前者は一次関数、二次関数云々と発展(?)していきますが反比例(=双曲線)の方はあまり存在感がなかったような。思い出してみると数式で表せば例えばy=1/xみたいなもので、x=0のときyの値が存在し得なくて(←ゼロ除算になるため)グラフが二つに分裂(?)とかとか。

この双曲線と上で書いた三つの式がどう繋がるのかはピンときません。そこで次回(?)扱う予定の技術(←!)を使ってy=1/xを左45度回転して頂点(?)を(0,1)及び(0,-1)にもってくるように変換してみました。「奇関数」であったy=1/xをy軸で対称な「偶関数」に変換した、ということです。とりあえず何かしてみよう、ということで。

それっぽいものが出てきました。変換に使う行列部分を整理してy=4/xの場合を書くと次のようになり、頂点(?)が(0,2)と(0,-2)である双曲線を表していると思われます。

このケースでXをxで表すように変形してみましょう。

何やら見たようなものが。改行のあとついでに指数関数を使った方についても(その上の結果を再利用して)やってみました。ほぼ似たような理屈(?)が使われているようです。

さて、単位円がX^2+Y^2=1であるのと似て標準双曲線は-X^2+Y^2=1と表せるのだとか。このXとYに入れると丁度いいモノ(?)について考えます。

色々と適当に書き綴ってみました。2から4行目までが1行目のXとYに色々入れてみた結果(?)です。一見すると4行目は上2行と少し趣が違いますが1/cos(x)をsec(=secant、正割)に置き換えると(改行のみの行を除いて)8行目と同じ構成といえます。sinhはhyperbolic sineでcoshがhyperbolic cosineという双曲線関数ですが(指数関数、対数関数および三角関数といった他の初等「超」関数やマクローリン級数等々との係わり合いについて)深入りするのはまた今度(?)ということで。

一応最後のオマケ的に三角関数を使った超超メンドクセ版の積分をメモっておきます。まずはもともとの積分で分子(?)にxがあるヤツから。なんかゴチャゴチャにして語ってきましたがこのタイプは別に最難関じゃないんですよね。今まで見てきたように簡単に解くことも可能なわけですから。

途中ラムダ式内で独立変数をcos(w)に換えて積分を行っています。またここまでとくに言及していませんでしたがtan^{-1}というのはarctanのことでtanの逆関数の意味です。1/tanθということではありません。

そしていよいよ次が本当の(高校生にとっては:笑?)最難関問題を非推奨のメンドクサイ方法で積分したものです。途中スンナリいかない部分を色々な工夫で乗り越えています。最後のところで+log_e(1/2)という余計なのが目に付きますが、これは積分定数Cの中(?)に含まれるのでここまでのやり方に従えば表記せず無視すべきでしょう。なんとなく残しましたが。

上記積分で使った小技(?)や補足をちょっとだけメモ。ここまでコネコネやってみた感想をいえば、やはり微積分(特に積分)周辺はパズルっぽいな...つまり高校数学ではパズル耐性の有無が試されていたのかな?と思えまする。その先にいくとパズルが成立する条件みたいなものを扱う視点も必要になってくるようですけろけろ。

とりあえずそんな感じで。

August 2016

August 28 Sunday 2016

確率に関する話

「創発」とか「線形性」について何か書こうとアレコレしている(というか「ワカラン」部分があってモニョってる:汗)うちに盛大に時間が経過してしまってショボボボーン。で、そのあたりの話は一旦横に置きつつ、最近見た「確率」を巡る喧々諤々に関してちょっと何か言ってみようと思います。

>> 確率に関してのやりとり(togetter)

言及するのは上記の一件。

コメント欄も含めて長大ですし何やら色々コジれているようでもあり、こちらで興味(?)を持った点だけに的を絞ってみます。

【承前】例えば、サイコロを6000回振ったとき、出る目の数はどれも1000回ずつになるというのが数学の理論に基づく結論である。しかし実際にやってみれば分かることだが、相当精巧なサイコロであっても6000回振ってみると1は998回、2は1003回等々となるのが普通であって、すべて1000回ぴったりとなることは稀であろう。仮にすべて1000回ずつになったとしても、それは偶々そうなったというだけであって、確率論の結論と同じ結果となったからといって、その理論の「正しさ」が立証されたということにはならないだろう。両者はあくまでも次元を異にするのだから。(15 Oct 2015)

二つの連続する発言をくっつけました。下線は引用者によります。

この発言について(そういえばなんで今頃2015年の発言が取り上げられたんだろう...よくわからんけろ...)間違いの指摘があったようです。そこでの主張を私のゆるふわ文系ちゃん脳で単純化して整理(?)してみますと、

「サイコロを6000回振ってどの目も1000回ずつになることは...」
(1)現実的経験世界では希であろう(二番目の下線部)→その通り
(2)数学の理論に基づく結論である(最初の下線部)→ちがう、数学でも希と結論する

ということかと。具体的には以下のように発言されていました。言及先のtwitterアカウント名は省略しています。

根本的に勘違いされているようですが、数学の理論・確率論では、6000回投げて各目が丁度1000回ずつになる確率は 6000!/{(1000!)^6・6^6000} で求められて、これはちゃんと計算していないので詳細は分かりませんがきわめて低い確率です。(17 Aug 2016)

どちらの言い分が正しいのか、以下で自分なりに確認(?)してみることにします。

6000回振ってどの目も1000回ずつになる確率

「サイコロを6000回振ってどの目も1000回ずつになる」確率はどうやったら求められるのでしょうか。たぶん(A)「サイコロを6000回振ってどの目も1000回ずつになるパターンの総数」を(B)「サイコロを6000回振ったときに出現(?)する可能性のある全パターン数」で割ればよろしいかと(注:このあたり若干わかりにくいかもしれないので、あとでコインを4回投げて表と裏が2回ずつになる確率なんかを使って再度確認してみます)

上記(A)と(B)に関してそれぞれどうやって計算すればよいかがわかれば確率はもとまります。で、(B)についてはすぐわかるんじゃないかな?

最初の1投目で起こりえるのは1か2か3か4か5か6のいずれかの目が出るパターンしかないので6パターンです。2投目までに出現するのは1投目の6パターンのそれぞれから6パターンの分岐があって6^2で36パターンになります。同様に3投目の段階では36パターンのそれぞれにまた6パターンの分岐があるから6^3=1295パターン。つまり6000回振ったときには6^6000パターンということになります。

逆に言えば(?)この6^6000パターン以外の結果が存在する可能性はなく、実際の試行(=この場合は6000回サイコロを振るという行為を1セット行うこと)ではこの中から一つを選ぶということを意味するはずです。なんでしょうね、上流から一定区間ごとに6本に分岐が増えていく川を下っていくとき、可能性としては色々なルートは取りえるけれども、実際の選択の結果はこう、一本の道になってる的な(←説明下手か!)

また、サイコロの出目はどれも同じ確率という条件ですから、6^6000パターンのすべては同一の生起確率(?)であり、値は1/(6^6000)です。1/6を6000回掛けているということですね。で、これが6^6000個(?)あるので全部足すと1になる、と。何やら蛇足気味に過剰説明してますが(汗)。

さて(A)に取り掛かります。とりあえず「サイコロを6000回振って1の目が1000回でるパターン数」から考えてみましょう。とはいえ抽象思考が苦手なもんで...同じような構造(?)の別の具体的な話に一旦変えてみます。

「左から右へと横にズラッとサイコロが嵌る穴が一列に6000箇所並んでいて、そこに1の目を上にしたサイコロを1000個はめ込むパターン数(ただしサイコロは必ず左から右の順ではめ込む)」というのが(自分にとっては:笑?)わかりやすいかな。これなら求めるのは、単なる6000箇所から1000箇所を選択する「組み合わせ(combination)」数だとすぐ気付けます。「順列(permutation)」じゃないのは1000個はめ込まれるときの作業順序(?)のバリエーションが「左から右ルール」によって一つに絞られるから...でいいのかな?(←疑問か!)

で、「1の目」を1000個埋め込んだ各パターンにおいて、まだ空いている6000-1000=5000個の穴に対して、今度は「2の目」を1000個埋め込むパターン数を計算します。5000箇所から1000箇所を選択する「組み合わせ」数ということになるでしょう。同様にして「3の目」は4000箇所から1000箇所を選択、「4の目」は3000箇所から1000箇所、「5の目」は2000箇所から1000箇所を選ぶときの「組み合わせ」数ということになります。「6の目」については残った1000箇所に選択の余地無く自動的にはめ込まれるため、パターン数云々には影響しません。

これを実際に計算してみますと、以下のような感じになります。

関数C(N,m)はN個の中からm個選択する「組み合わせ」パターン数を返してくるもので、P(N,m)は「順列」の場合です。関数C(N,m)とP(N,m)にはP(N,m)=C(N,m)×P(m,m)という関係があります。x個の中からy個選ぶときの順列パターン数に関する関数Pを別な仕方で表現するとP:(x,y)→x!/(x-y)!みたいなことかと。二つの(0を含む自然数である)変数の組に対して有理数である値が関連付けられている的な。このときx≧yが条件ですね。ま、なんか雑な説明でアレですけろ。

解像度低くて見づらい(←思い通りにならん...kstexg:涙)ですが(A)は6000!/(1000!)^6とわかりました。これと(B)の計算結果である6^6000を使って(A)/(B)=(A)×(1/(B))=(6000!/(1000!)^6)×(1/6^6000)が計算できます(「7.8237477367814982E-10」とからしいですけろ...E-10は10のマイナス10乗、つまり1/10^10...100億分の1を掛けろということのようです...100億分の7.8ナントカということですからメッチャちっさい値になるってことかと)

すったもんだしましたが、どうやら数学においても「サイコロを6000回振ってどの目も1000回ずつになること」は「希である」という結論で正しいようです。

4回投げて裏表2回ずつになる確率

サイコロの例では計算がややこしかったのでシンプルな例を使って同様のことをやってみます。具体的には裏表が同確率のコインを4回投げて裏表がぴったり2回ずつになる場合について調べます。

まず、ありえる全パターン数は裏表2つのパターンを(各分岐先ごとに)4回選択するので2^4=16パターンです。このうち裏表が2回ずつであるパターンはサイコロのときと同様の計算で4!/{(2!)^2}=6となります。

内訳(?)としては「コインを嵌め込む4個の窪みが一列に左から右へと並んでいるときに表を上にしたコインを2個嵌め込むパターン数」という考え方でC(4,2)=P(4,2)/P(2,2)=4!/{(4-2)!×2!}=6となり、(サイコロでいえば6の目の扱いと同様に)表の位置が決まると自動的に裏の位置も決まるため、これがそのまま表裏2回ずつのパターン数です。数が少ないので実際に書き出してみましょう。

○○●●
○●○●
○●●○
●○○●
●○●○
●●○○

白丸が表で黒丸が裏のつもりです。疑っていたわけではないですが、なるほどホントに6パターンですね。確率としては6/16=0.375となります。一般に(?)偶数回投げたときに表裏が半々となる確率が存在するので試しに少し他も計算してみます。

2回:2/4=0.5
4回:6/16=0.375
6回:20/64=0.3125
8回:70/256=0.2734375

段々減っているので、たぶん6000回投げたときにはものすごく低い確率になるのではないかと(ちなみにサイコロの場合、6回振って各目が1回ずつ出る確率は720/46656=0.01543209876...なので初っ端からコインより大分低いです...)。実は同様のことを「間違いの指摘者」である人物がtweetしています。

もしかして、確立(#原文ママ、たぶん「確率」)の概念そのものを理解していない、あるいは大数の法則を誤解しているのかもしれませんが、 コインを偶数回投げるとして、表が投げた回数の丁度半分になる確率は、回数が大きくなればなるほど0に近づきます。では、何度も繰り返したら確率通りの結果になる、という大数の原理とは何かというと、 表が出た回数/投げた回数 この値が、投げる回数を大きくすればするほど1/2にどんどん近づき、無限回なげたらぴったり1/2となるということです。(20 Aug 2016)

赤字は引用者注(?)です。言及先twitterアカウントは省略して二つの発言を繋げています。下線は引用者が付けました。

最初の下線部にこれまで述べてきたようなことが指摘されています。「丁度半分になる」パターン数自身は「投げた回数」が大きくなるのにともなって巨大になっていくのですが、起こりえることの総パターン数の方がそれ以上のペースで増大するため、前者を後者で割った値である「確率」は0に近づいていくことになるのでしょう。

また、二つ目の下線部では「大数の原理」(=「大数の法則」)を説明してくれています。これについては『家庭の算数・数学百科』(数学教育協議会、2005)の解説から一部引用してみましょう。

「サイコロを振って1の目が出る確率」は1/6です。しかし、これは「6回振れば必ず1回、1の目が出る」ということではありません。1回も出ないこともあるし、2、3回出ることだってあります。それでも何回も振り続けると、1の目が出る割合は1/6に近づいていきます。これが大数の法則で、一般的にいうと、「多数回繰り返せば、起こる割合は正しい確率に近づく」ということです。(p.208)

どうやらこれを誤解する人が多いようです。ただこの説明だと誤解する人もいるのかな、という気もしないでもありません(個人的な推測ですが、この原因のひとつは、そもそも「分数」の理解の段階で問題がある人が実は意外に多い、ということがあるんではないかと...分数が比であることがピンときてなくて、また日本語では「ナニソレ分のホゲホゲ」みたいに、物理的な存在をいくつかに分割したもののうちの何個分か、を意味するような言い方をするのもそれに拍車をかけているような...「アナタブンスウワカテナイネ!」とかいうと罵倒としか受け取られないしなあ...)。「多数回繰り返せば、起こる割合は正しい確率に近づく」というときの「正しい確率に近づく」を「正しい回数に近づく」と同義だと勘違いしてしまうから、ってとこでしょうか。以下、余計なお世話でしょうが私なりの説明を試みてみます。

ええと、4回コインを投げたときの裏表パターンを左から右に伸びる樹形図のようなものとしてイメージしてください。左端から二股に分かれてその先が「表」と「裏」を意味するノードになっていて、その二つのノードからそれぞれまた同様の分岐があって...という繰り返しを計4回行って形成される図です。

>>

コインを4回投げるという行為は、この図の出発点から3つのノードを経由して行き、4つめのノードで末端に達することと同じと扱えます。出発点から末端までの経路パターンは16あって、そのどれもが4つのノードを含み、ノードの選択はどこも1/2という確率で偶然に行われていくため、16ある経路のどれが選択されるかの確率は一律で(1/2)^4=1/16です。

この樹形図でスタートでの分岐の先にあるノードを縦にみると「表」と「裏」の数は同じになっています(当たり前ですね...表と裏が1つずつです...)。この2つのノードから裏表二股分岐の先端として生じた4つが並んでいるところでも表裏の内訳は必然的に同数です。その更に先には8つのノードがありますが全く同様の理由で表裏は同数。最後に並んでいるノードも縦に見ると表裏は同数になります。

結局この樹形図に含まれている表と裏のノード数は全く同数ということです。

私たちが実際にコインを4回投げると、この樹形図を左から右へとノードを(自分の意思ではなく確率1/2で偶然に)選択しながら移動していくのですが、このとき通過するノードの裏表は同数とは限りません。図全体、および各段階でのノード集合縦列では表裏は同数なのですが、移動経路に沿って横方向に見たとき、表裏が同数になる保障は全く無いのです。

確認してみましょう。

表が1つだけの場合はC(4,1)=4で4パターン。2つのときはすでに計算したように6パターン。表が3つは裏が1つと言い換えられます(?)から4パターン(普通に計算してもC(4,3)=4です)。ここまでで14パターン。残りの二つは全部表の場合と全部裏の場合の各1パターンです。

各パターンは一律1/16という出現率ですから、

表0:(1/16)×1パターン=1/16=0.0625
表1:(1/16)×4パターン=4/16=0.25
表2:(1/16)×6パターン=6/16=0.375
表3:裏1率なので0.25
表4:裏0率なので0.0625

という具合に分布(?)します。ちなみに6回投げたときには以下のようになります(後半?は省略しました...)

表0:0.015625
表1:0.09375
表2:0.234375
表3:0.3125

ちょうど半々のところは確かにボリュームゾーン(?)みたいですけど、投げる回数が増えるとパターンの分布(?)も散らばっていくのでそれ自身の確率もちっちゃくなっていく感じ?

ただ、表の割合が1/2に近い経路パターン群は、そうではないパターンに対して(窪みのある列に表コインをはめ込むケースでも多くのコインを色んな箇所にはめるときほど選択の余地が大きく「組み合わせ」数が増大するように)バリエーションが多く存在します(一方、表の割合が0であるような経路パターンはコインを投げる回数がどれだけ増えても1パターンしかありません...逆の裏0パターンも同様です...つまり両者半々のときが並べ方の選択肢が最大になるわけです...)。よって(?)コインを投げる回数を増大させていくと、表の割合が1/2に近いパターン群が実際に経路として選択される確率が上がっていく=「起こる割合は正しい確率に近づく」ということであるが、ただし、割合が1/2に「近い」というときの実際の表裏の数が半々からズレている度合いはすっごいことになっていっているんだよ、ってことかと。

変なたとえですが、20歳で10歳と結婚した人(ex.近い人だと前田利家、まつ)の結婚時10歳側の両者年齢に占める割合(?)は10/(10+20)=1/3=0.333...ですが、その人が100歳になった時点ですと100/(100+110)=0.476...という具合に割合としては1/2に近づいていきます。10という差が持つ影響が小さくなっていっているんですね。20歳と10歳は「近い」年齢とは言わないと思いますが(←どっちもヤングじゃよ、ふぉふぉふぉ...という立場もありえまするが...:汗)110歳と100歳なら「近い」と感じるんじゃないでしょうか。そこまでいくとギネス記録とか人間の寿命の限界とかの問題があってアレですけろ。まあ、同じではないけど、これと似たような(←!)ことなんじゃないのかなあ...。

まとめ?

このまま「ギャンブラーの錯誤」(←「丁」が連続したらその後は「半」の出現率があがるんじゃね?みたいなヤツ)に関する話なども続けてしまうとあんまりにも長くなってしまいそうなので、まだもう少し「確率」について言いたいことが残ってはいますが、ネタを次回に繰り越すことにします。

あとDOT言語で実際に作図してみると、横長になるつもりだった樹形図が縦に長くなってしまって収まりと使い勝手が悪くて...という予想外(←予測可能やろ...jk)のアクシデント(?)もあって、まあ、仕切り直しです。

ちなみにDOT言語については以下のサイトを参考にさせてもらいました。ありがとう&幸あれ。しかしまだまだちゃんと参考にできてはいません。なんかすみますみません...。

>> Graphvizとdot言語でグラフを描く方法のまとめ

で、今回みてきた喧々諤々の根本原因についてなんですけど、

(1)「サイコロで1の目が出る確率は1/6である」
(2)「サイコロで1の目が出るのは6回に1回である」

この二つが同じことを言っていると考えてしまう人が結構たくさんいる、ってところにあったんじゃないかと思うのです。

(1)は数学でも現実的経験世界(?)でも真である命題なんですが、これを(2)と同じ意味だと信じている人は「数学が言ってるみたいに6回に1回じゃなくて、経験的現実世界では3回だったり0回だったりして違う結果になることが多い」という認識なんじゃないでしょうか。もちろん(2)は数学でも経験的現実世界でも偽である命題というだけのことなんですが。

でも日常会話では(2)みたいな言いまわしをよく耳にするような...。

そんな感じで。

April 2016

April 27 Wednesday 2016

人工生命

例によって一応前回からの続きです。とりあえずdot言語について扱う予定。しかし淡々とTipsを列挙するのもアレなので、20年くらい昔の理論というか知見(?)みたいなものを復習するついでにユルユルとやってみます。

取り上げるのは『人工生命の夢と悩み』(星野力、1994)です。ここでいう「人工生命(Artificial Life)」というのは、たとえば遺伝子操作で新たな恐竜を作り出す、というような話ではありません。ホムンクルスとかそういうのとも違う。何ということはなく単に「人工知能」(のサブセット?)のことです。

じゃあなんで「人工生命」なんて言っているのかといえば、この当時は「人工知能」という語のイメージが最悪だったからではないかと思われます。1960年代後半からこの時代くらいまでは人工知能研究にとって忍耐の時代だったのだとか。使い物にならない、とかペテンとかそういう印象が持たれて、世間からはまともな研究扱いされてなかったっぽいのです。

第二次大戦後の電子計算機の登場と、おそらくは記号論理学や新たな代数学(記号システムのアレコレを研究する...みたいな?)の発展から、そういった道具や理論で人間の思考や言語の仕組みは簡単に理解できる、という見込みが持たれ、初期の人工知能研究には多額の予算が投下されたようです。しかし皮肉にもそうした後押しによる研究の進展によって、実は何から手をつければ良いかわからんくらいの超難問だったことがわかってしまう、と。そんで基礎研究からやり直しマッスルと襟を正したところ、資金拠出サイドからは失望の反動としてのバッシングと嘲笑が向けられ...みたいな感じ。

ではいったい、期待はずれに終わった初期の「人工知能」と1990年代の「人工生命」では何が変わったのでしょうか。そのもっとも大きな相違点は、人工生命では自身が従う行動プログラムを(作成者が与えたものに留まらず)「創発(emergence)現象」によって自ら作り出して(改変して?)いくところのようです。これによって人工知能は人間知能に並び、超えていく可能性さえ獲得したらしい。

前出の星野(1994)には「人工生命の著しい特徴は、非明示性、無目的性、集団性、進化可能性である」(p.12)とあります。そして従来の人工知能は「すべての知識を人間が書き下す明示主義、すべての事象を記号化する表象主義」(p.15)に基づくものである、と。つまり「人間知能」(が、自身を表現できていると自認して記述した内容)を計算機による計算に置き換えるというものなのだそうです。「明示的な記号化と、内観によってえられた明示的論理から出発し、コンピュータによって計算する」(p.15)とも言い換えられています。

AlphaGoと東ロボくんの差異

たとえば最近世間で話題になっている人工知能でいえば、GoogleのAlphaGoは人工生命に近く、「東ロボくん」(ロボットは東大に入れるか)は1960年代モデルの人工知能に近い存在といえるでしょう。前者は「非明示性」を持つ対象を扱います。

>> 人間を超えたアルファ碁(AlphaGo)は、どのようにして強くなったのか

山本 じゃあ、まずは、チェスと将棋と囲碁の違いについて話しましょうか。将棋や囲碁がこんなに強くなったのは、コンピュータがデータから自分で学習する「機械学習」という分野の研究が発展したからなんですけど、一番最初に勝ったチェスのときは、機械学習はいらなかったんです。(略)つまり、チェスというゲームは、人間が強さを記述することが可能だった。言い換えると、言葉に還元することができたわけです。でも、将棋はちょっとむずかしかったんですよね。

加藤 機械学習が導入される前、将棋プログラムの強さがアマチュア四・五段くらいで止まっていたころがありましたよね。

山本 それはつまり、人間が「将棋の上手な指し方」を、そこそこプログラムで書くことができたということですよね。でも、将棋というゲームを書き切ることまではできなかった。だから、それ以上強くならなかったわけです。そして、囲碁はもっとややこしいんです。そもそも何をどう書けば、囲碁というゲームを表現できるのか、まったくわからなかった

加藤 それは、人間の論理力に限界があるということですかね?

山本 というより、言葉の限界ですね。言葉ってけっこう無力なんですよ。(略)プログラムの要素の一つは言葉なので、記述可能であるかどうかというのは、プログラムにできるかどうかということに大きく関わるんです。そして、チェスは記述可能で、将棋はイマイチで、囲碁はわけわからない、という時代が続いていました

大橋 なるほど、そうだったんだ。たしかに囲碁は、言葉でうまく言えないことが多いかもしれない。ぼくは常々、人に囲碁を教えるときにそれを感じていました。言葉で伝えきれないところを端折ってしまうから、それが嘘をついているみたいになってしまうな、と。

下線は引用者が付けました。少し長く引用した上記の鼎談では、ゲームにおける局面がどういう状態か(どちらがどのくらい有利なのか、決着が近いのかそうでないのかetc...)を明示的に判断する方法を記述する上での難易度の話がされているのだと思われます。一般的にいって、どのゲームも最終的な勝敗の判断は確実に可能です。ですからこの明らかな最終目的(=自分が勝者となる状態)に向かって状態を遷移させようとスタートから選択を繰り返していくことになります。このとき適切なサブゴール(たとえばオセロゲームにおける四隅の奪取など)を途中通過点と想定しつつ、相手の選択は妨害しながら行動しなければなりません。

つまり対戦において取るべき必勝戦略を明示できれば、そのゲームは完全に明示的に記述できたことになり、この戦略を使う手順をそのままプログラム化すると1960年代型人工知能バージョンが出来上がるのです。で、チェスやオセロやマルバツゲームでは人間の「内観によってえられた明示的論理」を使ってこうしたプログラムを作成することは可能だったわけですから、この方法で完全に人間によって理解され攻略されたということでもあります。

一方、将棋や囲碁では違った状況にあったらしい。上記の下線部三箇所ではいずれもそれについて言及していますが、それでも現在では別の方法で最強レベルの人間を打ち負かすものが作られました。けれど(チェスなどとは違って)このことは将棋や囲碁というゲームが人間に明瞭かつ明示的に理解された、ということは恐らく意味していません。

星野(1994)から引用します。下線は引用者がつけました。

いまのコンピュータに、漠然としていて言葉や数式で説明できないことを、やらせることはまずできない。言葉で説明できない能力が、人工生命という工学的な手段で獲得できるとすれば、すばらしいことである。人工生命は人工知能の行き詰まりを打開し、われわれの周りのコンピュータはもっと知的になるだろう。これはすごい夢だが、その恐ろしい代償は、われわれが「明示的理解」を放棄せねばならないことである。(p.114)

つまり(AlphaGoが人工生命であるという私の理解通りであるなら、ですが:汗)人間には到底到達できない強さを体現しているが、ゲームへの「明示的理解」は放棄されてしまっているということなのでしょう。最強の囲碁人工知能を作り出しはしたものの、人間にはそれがどういう能力であるか定義はできない(=明示的に説明を記述できない)ということかと。これが下線部にあるような「恐ろしい代償」だと考えられます。

一方、センター試験で東大合格レベルの点数を取ろうとしているとかいう、通称「東ロボくん」はどんな感じなんでしょうか。

ところで、国語の入試はどうして今のスタイルを続けるのだろう?国語の点数は総点とも、他のどの科目とも相関が全然ないのは周知の事実。もちろん、「これが国語力なんです」という主張があってもいいけど、何が国語力なのか、せめて、きっちり定義すべきなんじゃないかと思われ。(24 Dec 2015)

プロジェクトディレクターである人物のtweetを引用しました。下線は引用者によります。なにやら国語の試験問題に苦情を言ってるようですが...。

>> 新井紀子教授が予見!ロボットで失業するのは「銀行の窓口」より「半沢直樹」

 2015年、東ロボくんはセンター入試受験者の8割に相当する約40万人の高校3年生と一緒に進研マーク模試を受け、5教科合計で全国平均点を大きく上回った。

「特に数学IA、数学IIB、世界史Bでは、全国平均を30点近く上回りました。うまく当たれば合格点が出ます。しかし、文脈を見なければならない国語や英語は厳しいですね。また物理も全国平均を下回りました。よく数学ができれば物理もできると言われるが両者はまったく異なるものです」

国語は苦手科目の模様。具体的には200点満点中90点で偏差値45.1みたいです(→参照)。ちと東大はキツそうですな(笑?)。模試の学生平均点が105.4点で(他教科と違って)半分を超えているのもあって余計目立つのかと。

具体的にこのプロジェクトの人たちが何をやっているのかは全く知らないのですが、少なくとも国語については彼らの「内観によってえられた明示的論理」を中核に据えた手法では有効な戦略は発見できていないと考えて良いでしょう。つまり言語化が困難なためうまく行っていないわけです。

で、AlphaGoを作った人々との間にある本質的な差異は、攻略対象に向かって「きっちり定義すべき」(=言語化しろ!)と要求している点です。これでは囲碁ソフトが作りにくいからといってオセロのように戦略が明示的に記述できるようルールを変更してはどうか、と言っているのと同じです。(参考:面白いことに「東ロボくん」側はAlphaGoの強さに大いに貢献した「深層学習」を研究するに値しないものだと断じています→中国の人工知能研究が日本を一気に抜き去った理由

さて、こうしたことと関係あるような無いような話ですが(←!)1960年代型人工知能の問題点とは、結局「明示的に語りやすい内容のみを記述して、それを定義とする」という本末転倒さにあったのだと思います。明示的であることだけにこだわって、それが現実の問題に対して無力だったり見当違いの結果を出してしまうことは意に介さない。それどころか現実の方を定義に合わせろと強弁する。このことが結局(人間知能から内観によって)生み出される人工知能を「悪しき教条的官僚主義の権化」にしてしまうのでしょう。

人工知能の作成者が全能感を持ってしまって現実世界の出来事に(イラつきながら)意見しだす、というのは、散々創作などで描かれてきた「人類を破滅に導く独善的な人工知能」像と重なってみえます。そういう人工知能像というのはある種の人間知能のあり方の反映なわけですから、これは人工知能の普及が将来的に社会にもたらす問題というよりは、昔からある人間知能の問題、というかある種の人格をもつ人間が社会に及ぼす問題を比喩的に描いたものだったんじゃないかと。目下コンプラコンプラ唱えて熱心に働く人々によって私たちの社会は異常に窮屈で非効率なものにされて滅茶苦茶になっていっていますよね...。

遺伝的アルゴリズム

人工生命的な人工知能と1960年代型人工知能の間にある差異については言語モデルとの関連でもかなり言いたいことはあるのですが、書くと膨大に長くなるのでここでは差し控えつつ、星野(1994)からいくつかトピックを抜き出して語ってみます。

まずは「遺伝的アルゴリズム(genetic algorithm)」について。で、星野(1994)の内容を逐一紹介しつつ、というよりは割と自由にこちらで思ったことというか、理解したことについて書いていきます。

生命の著しい特徴の一つは、この進化が可能なシステムということなのだ。進化は時間的な発展の過程で、遺伝子型中に生存に有利な構造を自然選択によって順次獲得し、それらの有利な部分構造を逐次結合することで、より環境とその変化に適応する個体へと発展した。この発展過程すなわち進化は、集団としての時間発展と並列適応選択が本質である。(p.27)

与えた環境に適応して「進化」するように人工生命を設計(?)するという話のようです。何らかの仕方で環境に適応しなければならない集団があり、その構成要素である各「個体(individual)」には「遺伝子型(genotype)」が紐づけられる。記号化された情報である「遺伝子型」に対して個体そのものは「表現型(phenotype)」とも呼ばれるみたい。

最初の遺伝子型は個体の有り様を記号化することで作られるわけですが、その後は遺伝子型からその表現型として個体が作り出されていきます。そして個体=表現型を何らかの仕組みによって評価し、その結果に基づいて次世代に残す遺伝子型を選別。で、そうして選ばれた遺伝子型集合に一定の確率で(交叉、突然変異、削除、重複などの)変化を起こすという過程を組み込んで、次世代の遺伝子型を決定するという繰り返しの中で環境適応に関して「有利な部分構造」すなわちbuilding blockを遺伝子型が獲得していく、と。大枠としてはこういう仕組みのようです。

星野(1994)では「白鷺」「八目ニ輪ロボ」「ネズミを捕らえる猫」「食物連鎖」などの例が出てきます。そういえば、そもそもこの本を私が知ったきっかけとなったのは(たぶん?)『月刊アスキー』で「八目ニ輪ロボ」(→参照:Khepera)に関するコラムを読んだことだったような。

でも、ここは敢えて何か別の具体例で考えてみます。

たとえば『自然言語処理』(黒橋禎夫、2015)で単純ベイズ分類器について述べた部分に出てきた「毒キノコ」問題の例なんかはどうでしょうか。この場合の素性は「色(赤/青/黄)」「笠の形(丸/四角)」「柄の長さ(長い/短い)」「場所(樹木/地面)」「毒(ある/なし)」とされていました。これは遺伝子型(=素性の束)だけを使ってキノコを表現した、とも言えそうです。

黒橋(2015)の該当箇所では、8つのキノコを教師データに使い、それらと(毒以外の素性束の比較で)遺伝子型が一致しない未知のキノコについて毒の有無を判別させていました。遺伝的アルゴリズムの事例として使うなら、あるキノコ栽培業者がいて、最初はこの教師データにつかったキノコ集団と同様の遺伝子型を持ったキノコを栽培して八百屋に卸すが、次回以降の栽培計画は八百屋が個々のキノコを買い取ったときの値段に応じて変化していく、というようなものが考えられます。これを繰り返していくと、キノコ集団が「進化」(?)することで、高利益を生む(=高評価を得る)遺伝子型の発見に繋がっていく、と期待できるのではないでしょうか。環境を「解くべき問題」と考え、進化によってそれに適応した遺伝子型をその「解」とみなすこともできます。

このとき着目すべき点は、八百屋のキノコ買取アルゴリズムが明示的には理解できないままでも適切な栽培計画を決定していくことは可能というところです。というか、そもそも一定の基準で買い取っている保証もありません。評価基準そのものが常に(偶発的な要因込みで)変動していっているのかもしれない。

そうなってくると、たとえばある時点で「最適解かな?」と思える遺伝子型が見つかったからといって、(利益最大化のために)その遺伝子型一種類だけを栽培していく、という戦略は(集団の評価平均値をできるだけ高く保ち続けたいという目標にとって)大変危険だとわかります。実社会でも「選択と集中!」みたいなことを言って一時的には大きな利益をあげつつも、市場のニーズが変化すると適応不能となって消滅...という大企業がいたような。

まとめ?

dot言語を使ったアレコレのところまでたどりつかんかった...。まず「創発」を語らないとダメなんだけど、それに関連して「線形性」にも言及しないといけないし、というのを処理(?)した後でようやくニューラルネットの話に入って、それでやっとdot言語の出番。

March 2016

March 30 Wednesday 2016

道具の強化

前回は条件付確率に言及しました。事前確率をアレコレして事後確率を上げたり下げたりする仕組みなんかについての考察です。

よくある入門解説本(?)なんかだと、このあと「単純ベイズ分類器(naive Bayes classifier)」の話へと移行するのが定番みたい。確率変数についての情報をもとにして未知の事例(?)の帰属先(?)を推定できる手法のうちもっとも簡易なもの、という性格を考えると極めて妥当な流れと思います。

たとえば『これならわかる!ベイズ統計学』(涌井良幸/涌井貞美、2012)でもそんな順でした。ちなみに初版にあった変なミス(たとえば冒頭p.8でいきなりベイズの定理を示す式が間違っていたり、p.40に3/52=1/4という謎の約分があったり...)は第8刷では直ってます。いいことなり。

昨年の放送大学授業の教科書である『自然言語処理』(黒橋禎夫、2015)の第4章「分類問題としての自然言語処理」でも言及がありましたが、1から3章が導入というか概説みたいなものだったので、具体的な話が始まって真っ先に出てきたネタと言えるのではないかと。最初の小ボスというか中ボスというか、なんというかそんな感じ。

で、早速とりかかりたいのですが、それには以下のような図を頻繁に書いたりとか、面倒くさい計算をささっとこなせるようなアレコレも必要になってきます。というか、無いとメッチャ辛い。

そこでEmacsのorg-modeをいじってみることにしました。この機能ってスケジュール管理に使うものかと思ってたのですがそれだけじゃなかったんですね。と、感心しつつ便利機能について言及してみようと思います。

org-modeを使う

Emacsにはorg-modeというのがあるらしい、というのは最近(←!)知りました。どうやら昔の「アウトラインモード」を発展改良(=廃物利用?)したものっぽい。ちなみにorg-modeがある現在でも試しにM-x outline-modeとやるとmode lineにOutlineと表示されます。行頭アスタリスク+半角空白のあとに書いた文字列は色が変わって「見出し」認識されるのでこのモードの機能は生きてるっぽい。単純にorg-modeに置き換わってしまったわけではないということかと。

outline-modeでは見出しのレベル(大、中、小?)で文章を階層化することが可能であり、そして(たぶん?)それしかできませんが、org-modeではもっと多彩かつ複雑なことができるようです。たとえば、カレンダー機能と連携したスケジュール管理ツールという面とか。

TODOだとかDONEといった切り替え可能の表示が利用できる、作表や(階層構造のある)集計機能のついたチェックリストも簡単につくれる等々、予定を整理しながら見通しよく簡便かつ遺漏なく処理していける仕組みがたくさん用意されているようです。しかも割りとカスタマイズし放題。上にもちょっと書きましたが、最初にorg-modeを知ったきっかけはこの点についての関心からでした。

そのうち、これとは全く別な方面でも強力な機能を有しているらしいことに気づきます。うまく説明し難いのですが、一つのファイル上にスクリプトを書いてその場で実行(C-c C-c)、結果を別言語でまた利用して...というような使い方ができるのです。私が確認してみただけでもC++、Ruby、Emacs Lisp、Perl、Shell Scriptなどが使えました。またTeXの書式で記述した数式をその場で画像として表示したり、R言語でグラフを作成するなどといったこともできました。一言でいうと「ソースコードと実行結果を同一ファイルにまとめる」機能ということかと。

上記の他にもこうして利用できる(広義の?)計算機言語はたくさんあるようですが、そうしたものの中にdot言語(DOT言語?)があります。先に例示した図はこれを使って描きました。句構造文法のところで言及したオートマトン、ベイズネットワーク、ラティス構造みたいにノードを矢印で結んだもの(遷移図)だけじゃなく、階層構造を示すツリーを書くのにもこういうツールが必要になります。

ちなみに多言語の同時使用は素の状態のorg-modeだけではダメでorg-babel(の設定?)が必要になります。dot言語の使用に際しては確かに「org-babel-do-load-languages」云々とEmacs設定ファイルに書き込みました。このあたりのアレコレについてもorg-modeのバージョンやら何やらで結構違ってくるらしく、色々ややこしいこともあるようです。とりあえず適当にググってなんとか動かしている状況なのであんまり書けることはないのですけど。

と、いうわけで詳しい(?)話は結局次回以降ということで...。

Copyright(c)2006-2016 ccoe@mac.com All rights reserved.