ひらしょー

平山尚が技術のことを書く場所、にするつもりだったが、ネタを限定するのはやめよう。日記というか思いつきを書く。

CEDEC2018の2日目メモ

https://2018.cedec.cesa.or.jp/session/detail/s5ae163a207655

 

「意識の統合情報理論」。題名に迫力がありすぎて、

失礼ながら地雷を覚悟で聞きに行った。

すごいプレゼンうまい人が出てきてプレゼン力でゴリ押しするような状況を

想像してしまう。のだが、杞憂だった。

地味にフツーにしゃべる人で良かった。

 

で、内容は意識についての話なのだが、

「意識というものが存在することは認めるとして、

それが存在するにはどういう条件が必要か?」

というアプローチで考えるのが面白い。

「弱いロボット」の話と構造は似ている。

「人にそっくりだし意識ありそう」という見掛けを盛るアプローチで行かず、

必要条件から行く引き算アプローチだ。

植物状態の人にテニスの話をしたら、

普通の人と同じように脳の活性化が起こった、という話がある。

全く反応しなくても意識があるのかもしれない。

外から見た目で判断すると誤る可能性がある。

 

そもそも意識は主観的なものなので、

「私の赤と、あいつの赤は同じなのか?」

という問題は絶対に解けない。絶対に解けないとわかっている問題は

問題ではないので、そこには触らない。

そこで「意識のようなものが存在するためには何が必要か」

と考えれば先へ進める。

 

まず、意識は情報を生み出す必要がある。

何かを思い出したり想像したりする時、そこでは情報が生成されている。

単純に言って、脳内で「バカな」と言えば、そこで

「バカな」という文字列の持つ情報量が生成されている。

ダイオードは電流に対応して光るか光らないかで1bitの情報を発生させるので、

「情報を生成する」という機能は持っている、という話があって、

その話の持っていき方はまさしく引き算だと感じた。

もし「情報を生成する」だけをもって意識の条件とすれば、

ダイオードは微小な意識を持っているかもしれない、という話になる。

そういう論法が学者っぽくてすごく参考になる。

 

意識は統合されている。一個しかない。

脳は結構並列で処理してるはずで、自転車乗りながら歌ったりできるわけだが、

それはそれとして意識は一個しかない。2個意識があったりはしない。

脳は左右割れていて、それぞれ右と左の視野がつながっているのだが、

右視野しかない意識と、左視野しかない意識があるわけではない。

くっついてしまって境界がわからない。

これを意識の条件であるとするならば、

デジカメにはたぶん意識がない。

それぞれの画素は情報が混ざらないでそのまま外に取り出される。

デジカメはかなり大きな情報を発生させるので先の条件で見れば

結構意識っぽいのだが、それぞれが独立なので意識っぽくないわけだ。

この論法に痺れる。

 

次は寝ている時と起きている時の比較。

寝ていて意識がない時にも、脳はフツーに活動している。

MRIで見れば脳は動いており、それをもって意識の有無を判定することはできない。

じゃあ何が違うんだ?ということになる。

そこで、「統合情報量」というものを考える。

情報を発生させるネットワークについて、それをテキトーに切った時に

どれくらい情報が失われるか、という量だ。

デジカメはそもそも画素間につながりがないので、減りようがない。

寝ている時には脳の各部位がバラバラに動いていて、

仮にどこかで切れたとしてもあまり影響がないが、

起きている時は一塊のものとして動いているので切れると情報生成量がごっそり減る。

という仮説。細胞の塊と個体の間にある壁、みたいな話だろうか。

 

そして意識の排他性。意識は2個ない。

左脳だけの意識はないし、右脳だけの意識はない。

しかし、左脳と右脳の連絡が切れた人とかでは、二個意識があるかのような

現象が起こることがあるという。

そこで、「統合情報量が最も大きくなる範囲で意識が発生する」という仮説。

左脳と右脳がくっついていれば、個別の統合情報量よりも全体の統合情報量の

方が大きいので、全体で一つ意識が発生する、と説明する。

二人の人の間で意識が一つに融合しないのは、連絡が疎で

統合情報量が少ないからだ。

とすれば、二人の人の脳がもし緊密に連絡するようになったら、意識は統合

されて一つになるかもしれない、という話にもなる。

 

最後に、意識には構造がある。

本とか、風景とか、そういう構造や階層を表現できるデータ構造である必要がある。

デジカメは画素がバラバラなので構造を表現できない。

デジカメには意識がなさそう、というのはここからも言える。

階層や構造が表現できるのであれば、その実装が脳細胞であるか、

電子回路であるかは問題ではないのではなかろうか?

 

という具合で、話が盛り上がってくる。たまらない講演だった。

 

さて、これをどう使うか?

 

引き算路線で、かつファインマンの言う「作れないものは理解できてない」

を信奉する私としては、作ってみるのが良いのだろう。

出てきた条件を満たす最小の何かをソフトウェア実装して、

それがどんな挙動を示すかをゲームの中で見てみたらいいのではなかろうか。

例えばニューラルネットワーク的なデータ構造を作るとして、

統合情報量が大きくなるような接続がどのようなものかはわかっている。

上流と下流がはっきりした接続形ではなく、再帰的に下流から上流へ

情報が流れる形の方が統合情報量は大きい。

そういうものに何かを流して、何かが出てきたとしたら、

そこには意識っぽい何かがあるのだろうか?

さっぱり具体的な想像はできてないが、面白すぎるテーマだと思う。

 

https://2018.cedec.cesa.or.jp/session/detail/s5b14f5a6b9601

 

レイトレ。ラスタライズ時代に最先端から脱落した私としては、

レイトレ時代に一発当てたいという邪な考えがあったりして、

レイトレには微妙に興味がある。

しかし、レイトレ全盛時代を待たずして、

すでにしてレンダリングは一部レイトレ化されているわけで、

ハードが出揃った後にノコノコと参入しても遅いのだろう。

興味あるやらやれよ、と私も思う。

しかし、なにせレンダリングに労力をつっこむのはなかなか割に合わない。

何もしなくてもunityにいろいろ入ってるわけで、

それで出る絵に自分がどれほど価値を加えられるのか?

と考えると、フツーにゲームそのもののコードを書いて客に出す方が

割に合うよなあと思ってしまう。

 

そんな微妙なことを考えつつ、聞きに行った。

「あ、結構行けるじゃんレイトレ」という感じ。

もちろん純粋なレイトレではなくハイブリッドなのだが、

ピクセルあたり2.25レイ、とかで許容できる絵が出るのは驚きだ。

レイのキャッシュ、溜まったレイデータからの空間再構成、

そして輪郭を崩さないフィルタリング。そのあたりがミソなのかと

勉強になった。以前JSでCPU実装した時もちょろっとやったのだが、

なにせ純粋なレイトレだったのでZバッファがなく、

バイラテラルフィルタをかけようがなかった。

どうしても輪郭をまたいでしまってボケボケになっていた。

Zバッファがあればそのあたりはかなり楽になるし、

メインライトからの直接光はフツーにシェーディングしてしまえば、

レイトレにかかる負荷はだいぶ減る。

 

ただ、テンポラルのフィルタにかなり頼っている印象があり、

カメラが激しく動く普通のゲームではなかなか難しいかもしれない。

ドカッと動いてしまった時のテンポラルフィルタの害を

軽減する手法はいろいろあるが、当然その領域ではサンプル数が減って汚なくなる。

もうこれは機械学習じゃないだろうか。

データがない所は生成してしまえばいいのでは?

過去フレームと、今フレームで足されたレイのデータから、

現フレームを生成するようなネットワークに画像を

作らせてしまうことはできないだろうか?

計算量的に可能なのかはさっぱりわからないが、

そういう実験に時間を使えるくらいヒマにならないかなあと思う。

 

レイトレの利点は、ラスタライズ時代に積み上げられた

数々のテクニックが無用になることで技術力競争での不利さが若干緩和されることと、

何よりもデザインの手間が減ることだ。前もって作っておく素材がだいぶ減る。

安くスパイスの効いたゲームを作りたい私としては、

デザインのコストをとにかく下げたい。

今の状況で3Dゲームを真面目に作るとデザイン工数で死ぬし、

真面目に積み上げてきた会社には当然勝てない。

レイトレで多少はマシにならんかなあと思っていたりする。

そのためにも、多少無理をしてでもレイトレを実戦投入してしまいたい。

ゲームのとあるシーンだけで妙に反射屈折してる、みたいなことでもいい。

基礎研と称して製品に入れずに実験していてもさして意味はないので、

稚拙でもなんでも「使えなくもない用途」を無理矢理見つけだして

製品につっこんでしまいたいところだ。それが足がかりになって

用途を拡大していける。

とりあえず、スマホでもコンピュートシェーダ開かないかなあ。

 

なお、「簡単にできる」とセッション名についているが、

実装は結構大変そうだった。楽になるのはデザインだけかもしれない。

最後に関係者の名前が並んでいるスライドがあったが、

数十人だった。「一人で半年で作りました」ですら

こうしてゲームを運用している状況ではしんどいわけで、

あれを自分でやるのはキツいなあ。やりたいけど。

 

https://2018.cedec.cesa.or.jp/session/detail/s5af14318930d4

 

ブレインマシンインターフェイス。すぐにどうこうなる話じゃないだろうと

思いつつ聞きに行った。

そして、すぐにどうこうなる話じゃないなとわかった。

 

脳波はとにかくノイズが乗るし、信号が広がってしまって空間解像度が悪い。

細かいことはできない、ということだ。ただし、時間解像度はいい。

そして、器具が他に比べれば小さく安い。実質娯楽に応用するなら

これしかないので、何かやるならこれについて考えることになる。

 

MRIなら信号の空間解像度はいいが、時間解像度が最悪だ。リアルタイム性がない。

そして、数年以内にMRIが帽子くらいのサイズになって10万円とかになる

ことはありえない。しかし、研究という意味ではこれが一番脳のことがわかっていい。

 

脳に電極刺すアプローチは空間解像度も時間解像度も申し分ないのだが、

いや、脳に電極刺せないでしょ普通、という話になって終わる。

ただし、医学的な応用としてはたぶんこれが一番強力で、

失明しちゃった人をどうにかするとか、聴力を失った人をどうにかするとか、

腕がなくなった人の義手を脳直結で動かすとか、

そういう時には手術して何か埋め込むアプローチもアリだ。

私ももし右聴力を失ったら手術でも何でもしてもらうと思う。

左聴力を失ったプチ障害者である私としては、

この手の技術には結構興味があるのだ。死ぬ前にそういう手術を受けて

「おお、ステレオってのはこういう感じだったのか」とか言いたい。

そして、別にうちはゲーム専業会社ではないので、

そういう医学的な仕事ともコラボできる可能性はなくもない。

私がプログラムを書くことでそういう分野に貢献できるなら、是非ともしたい。

 

https://2018.cedec.cesa.or.jp/session/detail/s5abe4f0cee5c0

 

またまた機械学習。あれ?この人サイゲじゃなかったっけ?

人の移動が激しい業界だなと思う。

 

ドラゴンボールスマホゲームで、ゲームが面白い状況が保てているか

検査する話。単に「この編成でこのステージクリアできるのか?」

みたいな検査よりも高度だ。

「明らかに強い編成が一つあってみんなそれ使う」

みたいな状況に陥るとゲームが死ぬわけで、そうなっていないかを検査する。

流行りの編成をいくつか選んだり、

新キャラを投入する前であれば、それを含んだ編成をゲームデザイナーが

いろいろ用意したりして、総当たり戦をする。

「この編成はこの編成に強い」というようなことをゲームデザイナーは

意識しているわけだが、それがその通りになっているかを検証し、

あからさまに強すぎる編成がないかも検証する。

またこの際、類似の編成というものがあるので、

編成をグループ化しないといけない。似たキャラにはラベルをつけて

同じものとして扱ってグループ化するらしい。

想定される編成や想定されてない編成の使用比率、勝率みたいなものを

監視してるっぽいのだが、何せ素人なのでよくわからない。

 

で、実際の対戦部分のAI化。

人がやると1試合に分単位で時間がかかるし、使える人数にも限度がある。

ここを自動化、高速化することがコストダウンに一番効く。

モンテカルロニューラルネットワークらしい。詳細はよくわからないが、

一対一で行動選択肢が少ないカードゲームであれば、

将棋とおおよそ似た感じに作れるのだろう。

1試合が1秒になったそうだ。

なにせカードゲームはそれぞれのカードに

やけに複雑な効果があるのが常なので、人に匹敵する強さにするのは

大変なのだろうが、ある程度の強さであっても十分役に立つ、

ということなのだろう。

 

対戦環境が健全かをAIで判定する、というのは面白いアイディアだと感じる。

「面白いゲームであるための条件」を数字で評価できる条件に変換するわけだ。

じゃんけんと同様、おおまかには3すくみになるくらいがいいらしい。

ABCと編成があって、AはBに強いので流行り、Aに強いCが発見されて徐々に

移行し、Cに強いBが再評価されてまた流行る、みたいな緩い循環があるといい、

みたいな話をしていた。循環せずどんどん移っていくと古いキャラがゴミになる

わけで、循環してくれた方が開発も助かる。

 

https://2018.cedec.cesa.or.jp/session/detail/s5abc831635896

 

画像認識でリアルのTCGカードを取り込む話。

なんでデータ化するのかは聞きそびれた。

電子化のことなんて何も考えていない時代から蓄積された

9000枚のカードを正しく識別する、という結構大変な話だった。

結構年上っぽい方々で、昔は現場にいたが今は技術サポート部門、

という感じだろうか。

 

テカってたり、色褪せてたり、傷ついてたり、

バーのビニールに入ったままだったりと、

条件はすごく悪い。

それをニューラルネットワークにどうにかさせる。

 

128x128を入力として、VGGというネットワークにつっこむ。

中身的には、128x128x3次元を4096次元に圧縮し、

その空間を9000の領域に分画する問題、と言える。

 

教師データはCGをいじったもので、2枚半透明で合成したら

学習しすぎなくていい感じになったらしい。

説明はいろいろ考えられるが、

やってみたらそうなった、ということなのだろう。

 

さすがに画像認識となるとGPUがないとどうしようもなくて、

最初は収束に3週間とかかかったそうだ。

半透明合成を入れてからは4.5日に短縮したらしい。

画像の処理をする場合は高いGPUを積んだ機械を

何台か並べるのは必須なのだろう。

 

今のところ私が考えているAI利用はゲームの中のAIなので、

たぶんそこまでしなくてもある程度はできるんじゃないかと思うのだが。

 

https://2018.cedec.cesa.or.jp/session/detail/s5aab4104066ad

 

後で追記予定