雑記」カテゴリーアーカイブ

似ているgraphを探す方法

ある与えられたグラフに対して,全く同じ形をしているグラフを探す問題をグラフ同型判定問題という.数学の分野で同型という言葉が出てくるときは,一見同じようには見えない場合でも,見方(例えば記号の付け方)などを変えることで同じにできるような場合にそう呼ぶことが多い.この場合の同型も同じような意味合いである.グラフには大きく分けて有向グラフなのか無効グラフなのかという違いがあるが,ここでは話を簡単にするため無向グラフに限定する.実は,多くの実問題で計算量や問題設定の緩和を図るために有向グラフを無向グラフにすることは比較的ありふれた話である.したがって,以下の話は必ずしも有向グラフでは無駄というわけではない.

グラフの同型判定問題や,もしくはより難しい問題である,あるグラフの中に探したいグラフを一部として含むかどうかを探す部分グラフ同型判定問題はNPであることはわかっているものの,NP困難であるかどうかはわかっていない(Web上の記事によってNP完全だったりNP困難であったり,もしくはどちらかわかっていないと書かれていたり,実際のところどうなのかわからない).どちらにせよ,この問題を解くことが今の所容易ではないことは変わらない.多くの文脈(例えば化学式の検索など)で,このグラフ同型性判定問題を解決したいと考えられており,多くのアルゴリズムが今までに提案されてきた.

さて,私が今回,扱いたいのはこのグラフ同型性判定問題ではなく,より曖昧とした問題,すなわち2つのグラフの類似度を知りたいという問題である.

不完全マッチング(inexact matching)

今回扱いたいのは不完全マッチング(inexact matching)である.実はこの単語,論文中に出てきた表現であり,私の知る限り日本語訳を見たことがない.inexact matchingは直訳すれば不正確マッチングだが,不正確は日本語の意味合いを考えると,誤解を招きかねない.完全マッチングという別の用語はあるものの,不完全という用語がおそらく今回の意味ではピッタリのように感じられるので,ここでは便宜上,不完全マッチングと呼ぶことにする.

さて,不完全マッチングとは要するに,与えられた2つのグラフは同型ではないのだが,微妙に似ており,その上で2つのグラフ間の最も妥当なノードもしくはエッジの対応付けはどのようなものかという問題である.この対応付けがわかると,2つのグラフの間の距離のような概念まで導入することができ,一昔に流行ったSVNではカーネル法に帰着できると分類問題に帰着可能になるため,このグラフ間の距離を求めることにはビッグデータなどの応用も含めて,一定の需要があるらしいのだ.さて,不完全マッチングでは,この妥当な対応付けというところが味噌で,不完全マッチングを提供するアルゴリズムによって,妥当の意味が違ってくる.一番多く使われているのは,グラフ編集距離(graph edit distance)と呼ばれるものを用いるやり方である.これは文字列に対する編集距離に概念としては近い.グラフのノードもしくはエッジの追加や削除などを行って,片方のグラフをもう片方のグラフに近づけたときに,最も少ない手数で対応付けられたときのコストをもって,2つのグラフの距離とする.また,このときに対応付けられたノードもしくはエッジが今回の場合の答えになるというものだ.しかし,この最も最短のグラフ編集の手順を探す問題はNP困難であることが知られている.最も高速に厳密解を得る方法としては,A*アルゴリズムを用いる方法があるが,この方法ではたかだか15ノード程度が求められる関の山で,それ以上となると手も足も出ない.そこで,これまでに提案されたアルゴリズムでは,近似的にこの問題を解く方法が模索されてきた.

もう一つのこの問題の考え方は,2つのグラフのノード,エッジ同士の対応付に関する適応関数を定義し,その適応関数が最大となるような割当を探す問題に帰着させる方法である.この方法では,予め2つのグラフ間のノードもしくはエッジを対応付けした際の利益のようなものを設定しておく.例えば,グラフA, Bについて,Aの1番めのノードとBの2番めのノードを対応付けたら,10点だとか,Aの2番めとBの2番め同士なら5点みたいな感じである.その上で,すべてのノードとエッジを対応付けたあとのすべての適応値の合計が最大となるように対応付けを行ったときの対応をマッチングの結果とするのである.

上記の2つのやり方,すなわち
1. グラフの編集距離を最小とするやり方
2. グラフの各要素の対応付で最も適応関数の値が最大となるものを探すやり方
の2つは,本質的に違う問題のように感じられるだろうが,実はどちらについても二次割当問題(QAP)というNP困難な問題に帰着できることが知られている.したがって,結局の所,この問題を解くことはQAPを如何に高速に解くかという話になる.

手っ取り早く最新の結果を使いたい人へ

本当は,このあとにこの問題がどうして二次割当問題に帰着可能で,過去の研究ではいかにしてこれを解こうとしているのかを説明しようと思ったのだが,今回も例に漏れず面倒になってきたので,すでにあるライブラリだけ紹介して終わりにする.余裕があれば,そのあたりの話も追記したい.調べた感じでは,次の3つのgithubの実装が役立ちそうだ.
– https://github.com/bgauzere/graph-lib
– http://www.f-zhou.com/gm_code.html
– https://github.com/egbertbouman/fgm-cpp
上記の内,2つはC++で実装されており,残りの一つはMatlabだ.特にこれらは割と最近の結果(2017年)のものまで含まれており,その論文によれば500ノードくらいまではぼちぼち動くらしいので,それなりに使い物になるのではないかと思う.

内容についてどう思いますか?
  • いいね (2)
  • だめ (0)

枯れる分野と研究生活

私がまだ小学生や中学生だった頃,未来は非常に明るいもののように感じられた.その頃は自分がおとなになったときに,どんなことをしてるかは漠然としていたけれど,それでも将来の自分に対する夢と希望であふれていたように思う.ところが大学に入り周りの状況を知るに連れて,世の中がそれほど甘いものではないことを徐々に理解していった.

枯れる分野と研究室選択

一応忠告だが,これからする話はあくまで工学部の情報系に限ったことである.他の分野でどうであるかは,その分野によりすぎるところがあるので,参考程度に留めるように.

研究分野には,当然人気がある分野とない分野がある.今の流れで言えば,人気がある分野は,例えば画像や音声などのマルチメディア系であり,人気がない分野は例えばプログラミングの型システムや,デバイス系などだろうか.実はこういった画像系や音声系などの人気のある分野は,重箱の隅をつつくような地味な研究テーマを扱っていることが多い.今でこそディープラーニングで賑わっているものの,それより少し前はやることに意味があまり見いだせないようなことをやっていることが多々あった.これは,人気があればあるほど研究が進んでしまうために,やり尽くされてしまう傾向があるためだ.アカデミックの世界では既存研究がすでに存在することはやっても意味がないとみなされるため,分野が発展にするに連れてどうしても苦しくなる.そして苦しくなれば苦しくなるほど,重箱の隅をつつくような研究が増えていく.こういった研究は,大抵の場合,やってる側としてもつまらない事が多く,またつまらない研究はインパクトも大したものではないことがほとんどである.しかし,こういった状況はよほどの革新がない限り改善されることはないため,ジリ貧状態は悪化する一方だ.もしジリ貧状態から本当に脱却したいのであれば,異なる分野にシフトするかない.

大学の学部生の段階では,上記のような,分野によってはやることがないくらい堀尽くされていることがあることをよく知らないため,研究室選びのときに,単に面白そうという理由だけで選択することになる.面白くなさそうな分野をやるのは,苦痛にしかならないことがあるため,当然,面白そうな分野を選択するべきなのだが,だからといって本当に面白いことができるかどうかは別問題である.実のところ,入るべき研究室とは,
– 分野が枯れておらず
– 先生が人としてまともで
– それなりに興味が持てる分野
という三拍子を揃えているところをいう.そして,当たり前だが,この3つの要素を満たしている研究室というのは一握りしかない.それ以外の大多数の研究室は,致命的な問題を多く抱えているのが実情なのだ.特に,その先,研究者として生きていくことを考えているのであれば,トップカンファレンスや高インパクトファクターのジャーナルに論文を通していることも重要となってくる.しかし,今の時代,流行に乗った分野かつ,まともな指導教官などそうそういるはずもなく,理想とは一転して暗い研究室生活を経験するのは理系大学ではありふれたことである.

完璧とは絶望だヨ。

サブタイのセリフを知っている人は多いだろう.これはBLEACHの涅マユリの有名なセリフの一つだ.BLEACHの作者である久保帯人が科学についての知識があるとは思えないが,この「完璧とは絶望だヨ。」は科学のある側面を絶妙に捉えている.分野にもよるだろうが,特に工学は人にとっての利便性が最も重要視されるため,研究が進むに連れ,ほとんど完璧とでも言える状態になってしまう事がある.そうなると,研究する意味がほぼ皆無になってしまい,その分野で食っていくのが絶望的な状態になってしまう.例えば,通信路における符号理論,ネットワークセキュリティ,回路設計における論理回路や回路アーキテクチャの研究は大部分がやり尽くされた感があるように思う.加えて,世の中がこれほど便利になったのは,様々な分野が彫り尽くされたことの裏返しなのだから,上に上げた以外にも多くの分野がやり尽くされてしまっているのではなかろうか.

実は物理学の分野でも,このように言われた負の時代があったようだ.大昔,ギブスという有名な物理学者がちょうど学生だった頃,物理学では,まだ量子力学と相対性理論が知られておらず,すべての事象はニュートン力学で書き表されると考えられていた.ニュートン力学では,初期状態として位置と運動量(速度)が与えられれば,あらゆる物体の挙動が一意に定まるという性質がある.そのため,当時はラプラスの悪魔という,世界は実は生まれた直後から将来どうなるのかが全て決まっているという考えに支配されていた.そのため,物理学をそれ以上,研究することに意味があるとは考えられておらず,当時成績優秀であったギブズが物理を専攻した際には,周りに物理学なんてやめたほうがいいと促されたという話が残っている.しかし,その後すぐに相対性理論と量子力学が主にアインシュタインやボーアによって切り開かれることで,そんな負の時代から一転,黄金時代に移り変わったのだから皮肉なものである.

企業で働くという考え

すでに述べたとおり,面白そうなことほど研究が進むため,現状残っている研究課題が面白い内容である保証はまったくない.特にお金になる分野は,企業が一気に投資して研究を進めるため,大学の研究者はジリ貧になりやすい傾向がある.

数学の分野では世の中の問題がすべて解かれることはないことを次のように説明する.すなわち,今の世界に残された問題の数は明らかに加算無限個存在するが,人間がいくら頑張っても永遠にとき続けることは不可能であり,したがって,世の中のすべての問題がとき終わることはない.これは確かに数学では真だろうが,他の分野ではおそらくそうではない.どうしても先行研究があると論文にならないという性質上,ジリ貧になってしまうものである.

面白いことがしたいのであれば,あえて研究者になるという道を選ぶ必要はない.もっと手っ取り早く面白いことをする方法として,企業で働くという選択肢もある.大企業に行ってしまったら,面白いことをするという目的はほとんど叶えられそうにないが,ベンチャーや起業などを行えば,比較的望み通りの結末が得られるのではないかと思う.

内容についてどう思いますか?
  • いいね (5)
  • だめ (0)

頭の中のざわざわ

ざわざわという言葉が正しいのかどうかわからないが,昔から頭の中で何かが暴れだすような感覚に襲われて苦しい状態になることが時々あった.特に子供の頃,風邪などで寝込んでいるときにこの状態になることがあって,その場合は辛くて寝ることができなくなる.

大人になるに連れて症状が軽減されてきていて,今の今まで完全に忘れていたのだが,つい先程その症状に襲われて,そういえばと思い出したのであった.頭の中がざわついて辛くなるという症状がよくある話なのかわからないが,実際にそれに悩まされている人の話を聞いたことは殆ど無い.この症状についてすぐに思い当たったのは脳内のニューロンの発火が暴走するような現象が起きているのではないかという仮説だ.ビッグファイブでいうところの開放性は,脳内のニューロン同士の結びつき(シナプス)が強さを示す指標で,開放性が高い人はそれが災いして幻聴や幻覚などを感じ取る傾向にある.それと似たようなことが頭の中で起きて,勝手に頭の中がざわつき始めるのではないだろうか.もしそうであるならば,この症状は開放性が高い統合失調症やADHDの患者によく当てはまるように思われる.

実際に調べてみると,やはり統合失調症やADHDなどの疾患と関係があるようだった.私の場合は症状が軽い上に,現在は比較的落ち着いてきているため,そこまで問題になってはいないが,この状態に頻繁になる人は生きていくのが結構大変なのだろう.

内容についてどう思いますか?
  • いいね (2)
  • だめ (0)

ハンドフルート

最近めっきり更新してなかったので,昨日今日と色々書いてみようと思う.

ハンドフルートという手だけを使ってリコーダのような音を奏でる方法がある.詳しくはこのページなどを見てもらえれば分かる通り,両手をお祈りのように組んで息を吹き込むだけで音がなる.

原理としては非常に簡単だが,実際に音がなるまでは恐ろしいほど大変だ.私はある日,手だけで音がなる笛があるんじゃないかと思い調べた際にハンドフルートを知り,その手軽さと面白さに惹かれて始めたのだが,すでに半年近く続けているにも関わらず,未だ上手に吹けている気がしない.試しに千と千尋の神隠しで有名な曲(曲名を忘れてしまったが)を吹いてみて録音したものをアップロードする.

微妙に音がずれてしまっているところなどが多々存在している.いつかこういった部分も含めてうまく引けるようになりたい.

内容についてどう思いますか?
  • いいね (5)
  • だめ (2)

ビッグファイブ

心理学にビッグファイブと呼ばれる性格診断があるらしい.世の中で有名な性格診断といえばMBTIだとかエニアグラムなどがあるだろうけれど,これらには科学的根拠があまりないことが知られている.

対して,ビッグファイブは統計的な,もしくは脳科学や行動遺伝学的な観点からある程度の信頼が置けるものであることがわかっている.多くの場合,性格診断といえば怪しげな占いのような印象を抱く人が多いのではないかと思うが,ビッグファイブはそういった今までの性格診断とは一線を画している.詳しい話は,良書があるためそちらに譲るとして,ここでは簡単にビッグファイブがどのように性格を分析するのかを述べてみようと思う.

ビッグファイブの概要

ビッグファイブは特性論の一つであり,人の性格は幾つかの要素の足し合わせで表せると考える.数学に強い人は線形代数のようなものを思い浮かべてもらえればいい.性格を表す正規直交基底が存在し,それらのスカラー倍(強い,弱い)の総和で人の性格が表現できると考える.これだけだとMBTIに非常に近いと思われるかもしれないが,MBTIとは違いビッグファイブではその名の通り5つの要素が登場する.これらの要素の強弱で表現されるため,MBTIのようなタイプ別(例えば,ENTPのように4つのアルファベットの組で人の性格が表現されるような)というよりも,5次元空間上の点という見方をする.

多くの日本人が信じている性格診断に血液型診断があるが,それに対するよくある反論は人の性格が高々4つ程度で表せるわけがないというものである.確かに,今まで出会った人々の性格をたった4つのグループに分けろと言われれば,ある一側面で分けることは出来ても,それでその人の性格を表せているとは言えないだろう.同様にMBTIでは人の性格が(中間を許す場合を除いて)16タイプしか存在しないことになる.これをベクトル量子化とみなせば,点数を増やすことで精度は向上しているかもしれないが,人間の性格が離散値ではなく連続値であることを考えれば,不充分であることは明らかだ.実際,今まで関わってきた人々の性格が離散的な代表ベクトルで表現できると考えるのは難しいように思われる.それに対してビッグファイブのような連続値的な考えは非常に納得が行く.

さて,ビッグファイブをなす構成要素とは,勤勉性,調和性,外向性,神経質傾向,開放性である.英語がもとであるためか,これらの用語には決まった日本語訳が存在しないため,文献により表現が変わっているかもしれないが,基本的には同じことを言っている.以降ではこれらについて説明する.

勤勉性

私は宿題が非常に嫌いで,特に夏休みの宿題は大っ嫌いだった.最終的にはやらなければならないことはわかっていても,夏休みに余裕がある内は決して宿題を取り出すことはせず,本当にギリギリになったところで焦って終わらせることが恒例行事となっていた.読者の中には,真面目で早めにきっちり終わらせる人もいるかもしれないが,私のようなタイプも相当数いると思う.さて,このようなギリギリまでサボってしまう人々の共通点とは一体なんだろうか.ビッグファイブにおける勤勉性の低い人とは,まさにこのようなサボりグセがある人のことを指す.宿題の例から言えば,勤勉性とはすなわち計画的に物事を遂行できる能力と言い換えることもできる.勤勉性が高い人ほど,自分を律して今やらなければならないことを行うことができる.したがって,世の中で真面目と呼ばれるような人たちは,勤勉性が高いと考えられるわけだ.

また,勤勉性は単にその人の真面目さを表す指標だけではなく,依存症のなりやすさを表すものでもある.ギャンブルやアルコールなどの依存症の原因は,それらをやりたい使いたいというよりも,それらをやめることが出来ないことにある.例えば麻薬を常習的に使用する人々は,比較的早い段階で免疫がつき,薬の効果が弱くなってくる.単に快楽が原因であれば,効果が次第に弱くなる麻薬をいつか手放す日がやってきてもいいはずだ.しかし,実際にはそうはならない.これらの常習者は,麻薬を断つことが出来ないのだ.

今までの話を総合すると,勤勉性はとにかく高いほうが良いと思われるだろう.しかし,ここで生物の進化という点に着目してみる.生物は生き残るのに有利な個体が増えることで繁栄してきた.したがって,もし勤勉性が高いほうが生きていく上で有利であれば,そうではない個体は不利となり減少していくことになる.しかし,実際は勤勉性の高い人も低い人も世の中には多くいる.このように均衡が保たれているのは,裏を返せば勤勉性の低い人も生物学的には必要であることにほかならない.では,勤勉性が高すぎると何がいけないのだろうか.

勤勉性はすでに述べたとおり,計画性に関わっている.その為,高すぎる勤勉性は,計画通りに物事が進まないと精神をやんでしまう,強迫性パーソナリティ障害という病気を引き起こす.これは自分の中のルールに囚われ,秩序や完璧主義が行き過ぎ日常生活に支障をきたす病気だ.例えば,会社である資料を作成しなければいけないとする.資料は出来る限り完成度が高いほうが望ましいが,期限に間に合わなければなんの意味もない.作らなければならない資料の期限がすでに差し迫っているのであれば,たとえ雑であろうと完成させて提出するのが普通の感覚だろう.しかし,強迫性パーソナリティ障害の人は締切よりも,資料が完璧であることのほうが優先順位が高い.そのため,たとえ締め切りを破って上司に怒られたとしても,資料を完璧に作り上げようとする.

強迫性パーソナリティ障害は非常に偏った場合だが,そこまででなくても高い勤勉性は柔軟性を損なわせる.臨機応変な対応が求められる場合ほど,勤勉性は低いほうが望ましい.したがって,どちらのほうがよいなどという議論は意味がなく,勤勉性が高くても低くても,一長一短であるといえる.これは勤勉性に限らず,これから述べるすべての因子でいえることでもある.

調和性

他人に対して共感できるかどうかを表す指標がこの調和性である.他人に共感する能力は面白いことに動物の中で人間しか持っていない能力であることが知られている.例えばチンパンジーで次のような面白い実験を行った例がある.まず隣接した2つのオリを用意する.それぞれに一匹ずつチンパンジーを入れ,お互いの様子が視覚的にわかるようにしておく.片方のオリの中には2つのレバーを用意しておき,1つめのレバーを引くとレバーがあるオリにのみ餌を与え,2つ目のレバーを引くとどちらのオリにも餌が与えられる.もしこれが人間であれば,隣の檻の様子を考慮してどちらのオリにも餌が与えられるレバーを引くだろう.ただし,他人に完全に無関心であれば,どちらのレバーを引いても自分が得る利益は変わらないので,結果的に2つのレバーがランダムに引かれるはずである.

実際,これをチンパンジーで実験すると,レバーを無作為に半々の割合で引くことが知られている.すなわち比較的人間に近いチンパンジーですら,他の個体を意識してレバーを引くことはないということである.その為,この調和性という他人への共感能力は人間だけの特異なものであると信じられている.調和性が高い人は,他人への思いやりが強く,進んでお世話をする.対して,これが低い人は他人に無関心で,自己中心的な行動が多くなる.低すぎる調和性は,サイコパスや自閉的な行動を誘発しやすくなるため,人間関係でトラブルが起きやすいと考えられる.

外向性

外向的な人といえばアウトドア派で,パーティなどを進んで主催し,他人との交流が好きな人というイメージが有るだろう.また,反対に内向的な人といえばインドア派で内気,パーティに参加するくらいなら一人で読書することを好むような人といったイメージだろうか.このような世間一般に想像されるものと,ビッグファイブにおける外向性は近いものはあるものの,実際には少し違った意味を持つ.ここでの外向性を適切に説明するためには,それが脳のどのような機能によるものなのかを説明する必要がある.そこで次のような実験を紹介しよう.まず被験者はMRIに乗せられ,実験中の脳の活動状態を観測される.MRIの中で被験者は複数の画像を見せられる.それは例えば子供が楽しげに遊んでいるようなポジティブなものだったり,反対に特になんでもない街の風景だったりといった様々なものだ.これらの画像を見たときの被験者の脳の活動を見ると,子供の写真のようなポジティブな写真を見た際には,報酬系と呼ばれる快楽を司る部分の働きが強くなることがわかった.特に,外向性のスコアと,報酬系の働きには正の相関が見られたそうだ.これは何を指しているかというと,外向性とはポジティブなことがあった際に,どれくらいそれを嬉しいと感じるかを図る指標となるということである.では外向性が低い人はネガティブな画像を見たときに,気持ちが落ち込みやすいのかというとそうではない.外向性が低いことは単に,報酬系の働きが弱いことを表しているに過ぎない.ネガティブ要因に対する反応性の高さは,外向性ではなく神経質傾向の高さによる.

ビッグファイブにおける外向性は,何か行動を積極的に起こそうとするかどうかを表す指標になっている.例えばパーティで様々な人と交流することや,旅行に行ったりすること,また異性と一夜をともに過ごすことなどのいろいろなことが,外向性が高い人にとってはとても魅力的なことに感じられる.対して,外向性が低い人からすれば,それらのことはそれほど魅力的には映らない.その為,あえて危険を犯すような行為,例えばエベレストを登ることや,起業することなどを外向性が低い人々は行わない.ここで重要なことは,外向性が低い人(内向的な人)は人前に出て発表するようなことを嫌がるタイプではないということである.彼らは,発表することが嫌いなのではなく,発表することで他人に注目をあびることがそれほど嬉しいことではないため,積極的に発表をしないだけである.発表を嫌がる人たちは,内向的な人ではなく,発表することで失敗することを恐れているシャイな人たちなのである.またそれはこのあと説明する神経質傾向の高い人であることを意味している.

神経質傾向

疲れたのでまたあとで更新

内容についてどう思いますか?
  • いいね (2)
  • だめ (1)

技術系のブログを書いてて思うこと

書き始めると連日投稿してしまうのは,関心がブログに向くとき向かないときに波があるからだ.本来コンスタントに続けるということが非常に重要なのはわかっているつもりだが,実際のところ気分屋の私には非常に難しい話である.

ブログという媒体に関して

自分を売り込むというくだらない理由でやり始めたこのやる気のないブログだが,地味に続いていて,やはり金をかけてサーバを借りているということの重みがわかる.まあそれはいいとして,私としては細心の注意を払って各記事を書いているつもりだが,記載している情報については多くの間違いを含んでいる可能性が多分にある.
そもそもブログという媒体の性質上,それほど堅苦しく厳密さを求めるようなものではないので,間違った内容を含んでいることは,むしろあって当然という気がする.別に内容を誰かが査読しているわけでもないし,私個人の趣味で書いているようなものなので,これをお読みの皆様には疑ってかかってほしいくらいの気持ちである.

そもそもブログというものは,自由にかつスピーディーに投稿できるということが最大の利点であって,中身の正確さや厳密さは二の次にしている.ただし,私がまだブログを殆ど書いたことがなかった頃は,ネット上で調べたときに引っかかった,なんの信憑性もないブログ記事を深く信用して読んでいたように思う.まあそれはネット上には優れた人たちがたくさんいて,間違いの少ないよくできた記事を大量に提供してくれていたおかげなのだろう.世の中の記事がみんな悪質なものだったら今ほど信用して技術系ブログを読んでいなかったのではないかと思う.

ただし,こうして自分でブログに技術系の内容をまとめてみると,案外多くの人が見てくれていることに気がつく.私のブログでアクセス数が多いのはCPUをFPGAで作ったやつと,モンゴメリ乗算の2つだ.1日あたりのアクセス数はそれほど多いというわけではないが(マイナーだろうし),ちりも積もればなんとやらで毎日一定数の人に見てもらっているということは,総和としては多くの人の目に触れているのだろうと思われる.

私は昔から人に何かを説明するのが好きだったし,今でもそうだがその場合には質問という形で,私に対して何かしらの反応があるものだが,ブログという形態はコメントという形を取らなければならないので,躊躇してしまう人が多いのだろうと思う.個人的には,内容の不備や質問は随時受け付けたいと思っているわけだが,なかなかそうは行かないものだ.そこで各記事の最後には内容についての評価をボタンという形で簡単に投票できるようにしている.まあこんなのはただの気休めにすぎないわけだが,ないよりは全然いいのだろう.身内の人が多いのかも知れないが,それでもそこそこボタンが押されている形跡がある辺り,役目を果たしているのだと思っている.

でもしかし,実際にはコメントをくださる方もいらして,過去に記事の訂正を行ったこともある.そういったコメントをこんなわけの分からないブログにくださる方には非常に感謝している.私としては,疑問や質問,もっと説明してほしい,お前の言ってることはおかしい等々,好きにコメントを書いてほしい.読者の方々のフィードバックが私の原動力になっていると言っても過言ではない.

さて,ここまでごちゃごちゃといろいろ言ってきたが,結局渡しが言いたいことは,私のブログを疑ってかかりながら読んでほしいということだ.間違っている可能性は十分あるわけで,何も考えずうのみにすることは私にとっても,これを読んでいる方にとってもマイナスにしかならない.それに勉強というのはアウトプットしたときが最も負荷がかかって,良いトレーニングとなる.受動的な姿勢で読むのではなく,能動的な姿勢で批判的に受け取ることがwin-winの関係をもたらすのではないかと思う(と言っても私もそれは全くできていないわけだが).

内容についてどう思いますか?
  • いいね (2)
  • だめ (0)

正解するカド

ここ最近色々考え込んでいて,全く何をするやる気もなかったわけだが,ようやく回復してきて久しぶりにアニメをみた.

今回見たのは今季放送中の正解するカドである.この作品,どうやらアニメ原作らしくまだ9話までしか放送していない現時点では,一体どのような最後を迎えるのかはわからない.
しかし,ここ最近ではいくらか面白いと思うアニメであることや,珍しく3D作画で成功しそうな気配を感じるので,感想を述べようかと思った次第である.
ちなみに2chではすごい勢いでスレが伸びているようで,見た感じセカイ系なのかで盛り上がっているようである.まあ私としてはどちらであるかはそれほど重要ではないのだが.

正解するカド

羽田空港の滑走路に突如として謎の1辺が2キロメートルを超す超巨大な正立方体が出現し、出現場所に居合わせた旅客機256便(ボーイング777型)が、乗員乗客もろとも立方体に飲み込まれた。政府が関係各省と連携を取り合い、この立方体の調査と飲み込まれた乗員乗客の救命に奔走する中、立方体上部にヤハクィザシュニナと名乗る人物と、偶然256便に乗り合わせていた凄腕の交渉官真道 幸路朗が現れる。(wikipeida)

上記がwikipediaに記載されているあらすじである.突如羽田空港に出現した巨大立方体に主人公である真道が飛行機ごと飲み込まれ,そこで謎の人物ヤハクィザシュニナと出会うことから物語が始まる.
始まりとしては一見シンゴジラに近いものを感じるが,実際はあまり関連性はなさそうである.そもそも政府とか国際連盟とかを引き合いに出す割には,後半に進むにつれその存在は希薄になってしまう.シンゴジラは,そういった官僚や国といった不自由な存在が話の根幹をいくらかになっているように感じたが,正解するカドではそこには重きは置かれてなさそうだ.これが2chでセカイ系だどうだと叩かれてることの理由の一つであろう.

人類の進歩

作中で,人類に接触した異方の存在であるヤハクィザシュニナは,当時の技術力では到底達成できないようなアイテムを人類に無償でプレゼントする.1つ目が異方と我々が生きる宇宙をつなげる存在であるカド,2つ目が無限の電力を提供できる球状物体ワム,3つ目が人類が睡眠を取らなくても大丈夫なようになるサンサ,4つ目が異方の制御がおこなえるナノミスハインである.
これらのまるでドラえもんのひみつ道具のような魔法のアイテムにより,人類は飛躍的な進歩を遂げるだろうということが作中で何度も語られる.多くの登場人物たちは迷いもあるものの,この進歩について肯定的な意見を持っているが,徭 沙羅花はワムの拡散に関して否定的だったりと少数派側の立場に立っている.

この作品の不思議なところは,一見異方からもたらされた贈り物に対する人類の葛藤が一つのテーマのように思わせて,実際のところ主人公の周りを除けばその様子が描かれることがないことである.はじめにワムが日本政府にもたらされたときには,国際連盟がその影をちらつかせ,ワムを取り上げようとするものの,最終的にはワムの製造方法を全世界に配信することで国際連盟の思惑は水の泡になってしまう.このときにはロシアの首相が悔しげな表情を浮かべるなど,他国の様子が多少なりとも描画されていた.ところが,サンサの件については,ワムのときとは異なり,国や国際連盟による干渉は一切行われず,たかが一企業が全世界にサンサを放送してしまうことを決定してしまう.サンサを放映することによる影響について語られる場面がないわけではないが,それもほどほどに全人類は睡眠という枷から解き放たれることになる.あれほどワムのときには過干渉を行ってきた国際連盟が,サンサの件については無関心というのも納得の行かない話である.

結局のところ,人類にもたらされた異方の贈り物が人類にどのような影響をおよぼすのか取り沙汰される割には,そのことに関してはほとんど取り扱われることがない.したがって,この物語は別段,異方によりもたらされたアイテムによる人類の進歩による影響は,あまり重要ではないということである.

宇宙の存在と異方の目的

現在最新話である9話では,宇宙というのがどういう存在で異方が一体何の目的で人類に接触してきたのか明かされる.そして9話の最後にヤハクィザシュニナは真道に一緒に異方に行くことを提案するが,好ましい返事が得られないとなると,打って変わって真道を殺そうとする.ここで突如徭 沙羅花が現れ,真道を命からがら助けるのだった.

この時,徭 沙羅花がどうやらこの世界の管理者であるということが判明するわけだが,ここから何故徭 沙羅花が人類の進歩に否定的だったかが垣間見えてくる.要するに,管理者たる徭 沙羅花にとっていきなり外から現れたヤハクィザシュニナはイレギュラーな存在であり,それによりもたらされる異方の贈り物は好ましいものではなかったということである.そう考えると,この物語はいきなりチープなものに感じられてくる.すなわち,人類や世界と言った広大な話をしていたはずが,実のところヤハクィザシュニナ,真道,沙羅花の3名による内輪もめに過ぎないということだ.他のいろいろな要素は話を面白くするためのお膳立てに過ぎず,特に物語中で一貫したテーマは存在せず,実際は小さいところで話が収まってしまう.まだ最終話まで放映されていないとはいえ,おそらくそのような流れになるだろう.

結局はセカイ系の大したお話ではないのかも

最初に否定したものの,結局セカイ系ということが本題の中心に来てしまった.一見何も考えずに見てる分にはそこそこ面白いものの,よく考えてみると話のあらが目立つ残念な作品なのかもしれない.ただ私としては,ここまで批判的だったとは言え,多少なりとも面白いと感じさせてくれたという点において非常に良かったと思っている.内容はどうあれ,続きすら気にならないようなアニメさえある昨今においては,最後まで見ようと思える珍しい作品ではないかと思う.

内容についてどう思いますか?
  • いいね (1)
  • だめ (1)

やりたいこと

やりたいと思っていることがいくつかある.箇条書きにすると

  • FPGAのCPU実装をもっと頑張る(具体的にはUnix系OSを動かす)
  • Rustをやる(できれば研究とかバイトのコードも徐々に移行したい)
  • 日本語力を上げる
  • もっといろんなことを勉強する(暗号,音声,機械学習,etc)

のような感じ.別に最後のやつは普段のタスクの中に自然と組み込まれている感じなのであまり意識する必要はないだろうけど,上から2つは個人的に時間を作ってやらないとできるとは思えない.3つ目は文章が下手くそなのでうまくなりたいなということ(願望).

FPGAのやつはできればCPUの実装のコード(verilog)をきれいにしたというのもある.研修Aという研究室の自由課題でやったものだから,締切に合わせて結構その場しのぎでやってしまった感があって,それをどうにかしないと次に進む上で障害になりそう.かと言ってあれってそんな簡単に直せるとは思えない… 抜本的に書き直す羽目になりそう.そもそもverilogってアセンブリに近いものがあって全然きれいに書けてる自信がわかないんだけどどうすりゃいいんだろう.高位合成とかと違って結構低レイヤだから記述量が多くなりがちなのが影響して,とてもじゃないけど見やすくならない.あれも結局経験値で決まってくるやつなんだろうな.

Rustについて言えば,とにかく実践で使っていくしかないだろうなって思ってる.入門書とか初心者向けの記事とかをただ追って読んでるだけだと全然頭に入ってこないたちなので,実際に使って鍛えていくしかない.自分もそんなに詳しいわけじゃないんであれだけど,c言語とかc++みたいなシステム周りとか結構低いレイヤのプログラミング言語って,D言語とか他にもあるんだろうけど結局のところc言語 or C++がデファクトスタンダードって感じがあるように思う(マイコンとかの開発環境でC++/C以外の言語を使う場面ってなくはないけど少ない気がする).LLだとか関数型言語とかだと選択肢がありすぎるくらいにはあるのに,低レイヤ向けの,アセンブリより抽象度が一つ上なメジャーな高級言語ってのが,もう何十年も前に発明されたCとかC++のまま変わってないってのは,あまりに時代遅れな感じがする.と言いながらもう10年近くCだとかC++を書いてきた人間がこんなことを言うのは説得力にかけるのかもしれないけど,流石に限界というかこのあたりにもイノベーションがあってもいいよねってのは薄々思っていたところ.確かにC++は最近になってC++14とかC++17とか新しくなってきてるけど,もともと難解だったC++に更に付け足しつけたしで色々くっつけたもんだから複雑怪奇になって来てて,「C++を理解してます」ってのがジョークになるという笑うにも笑えない状態になってる.

だから流石にそろそろ新しくそういうシステム周りもかける言語を習得したいなと思ってたわけだけど,ちょうどMozillaがRustを開発してるという話を知って,これは良さそうと感じた.最近はライブラリも結構充実してきてて特に問題もなさそう.他に最近話題のコンパイルするような静的型付け言語としてはGoとかもあるけど,あれはポインタを叩くような処理をするというよりは,コンパイルできるLLみたいなイメージが有る.Google的には速度が出るLLが作りたかったってことなんかなという印象(素人目線).個人的にはやっぱりLLとシステム記述向けの言語って住み分けができてると思ってて,前者が簡単にかける代わりに詳細な記述をしたり速度を出したりすることが難しいもので,後者がその反対という感じ.よくGoとRustを対比させる記事を見るけど,それはこの2つがちょうどLLとシステム記述向け言語の間くらいに位置する言語だからということなんだろうな.ただGoはどちらかと言えばLL寄りで,Rustがシステム記述向けよりなんだろうと思うし,だからこの2つは用途が衝突するところもあるけど,全くかぶらないところもあるんだと思ってる.

確かにLLって半端じゃないくらいに遅いから早くしたいと思う人が多いのは当然だよね.pythonくらいしか経験がないけど,それでもC++なら一瞬で終わる処理が半端じゃないくらいに時間かかったりするのを見て,何とも言えない感じなることはある.プログラミング界隈で有名な話?に80:20則ってのがあって,プログラム全体の20%が実行時間の80%を占めてるって経験則なんだけれど,LLの哲学的には,重い20%のコードをCとかにまかせて,速度がでなくても大丈夫な80%ところをLLでどうにかするって話だったんだと思う.確かにそれは合理的に見えるし,全部を無駄に書くのが大変な言語で修行のごとく記述していくのは意味がないってのは大いに賛同するところなんだけど,現実はやっぱりなかなか厳しいものがあって,そう簡単じゃない.実際に使ってみると,LLがおそくてその80%が馬鹿みたいに大きくなったりして,僕の書き方が悪いってのはあるんだろうけど,なんだかなーって結果になることも往々にしてある.そんなこんなあって,みんな早いLLを求めてたんだろうから,Goみたいな言語が出て来たんだろうなという予想.本当のところどういうことなのかはGoを勉強しないとわからないけど,今のところGoが重要そうなWeb界隈の方には全く関わりがないので,実用的な観点でやることはなさそう.

とまあ前置きが長くなったけどRustを勉強したいなと思ってる.関数型言語の流れを受けて色々と拡張があるみたいだし,加えてC++とかと比べて安全だと言われればやらない理由も特にない.速度も結構早いみたいだしね.

ということで今年度も頑張っていきたいと思います.

内容についてどう思いますか?
  • いいね (2)
  • だめ (1)