何事にも屈しない強じんな心こそが、最強の武器なのだから。カドカワ、最近は元気がないようですが頑張って。陰ながら、応援しています。[↩]バッグに入れてイヤホンつないで音楽聞きながらちゃりんこ乗ってたぜ。OpenGLに疲れた最近OpenGLに疲れはて、Vulkanに乗り換えようかと思っています。メインスレッドからしか叩け無い制限。bindというグローバル変数より邪悪な概念。関数を呼び出した後にglGetError()を毎回叩かなけばならない苦痛(叩き忘れるといつエラーになったのか、わからん)。シェーダーへ変数へ渡すためのあの無限の関数群。OpenGLのバージョンによって今では利用が必須だったり、逆に使えなかったりする「拡張機能」。IndexBufferObjectだのElementArrayBufferだのVertexArrayObjectという意味不明な命名(これ...何だと思う?)。同じ関数でもOpenGLバージョンによってたまに意味が違ったりするあのややこしさ。出てきた情報の「今では使えなさ」(だいたいそのままコピペしても動かない)GLSLのバージョンごとの気まぐれさ。結局何が起こるのかよくわからん関数のドキュメント。Profileだの...ぼくもう疲れたよパトラッシュ。そんな感じで最近Vulkanでなんとかする方向でやってこうと思ってまして、で最近引っかかった問題の解放を備忘録代わりにメモっておきます。VulkanにはLayerなるものがあるらしいVulkanではある種の拡張機能を「Layer」といいます1。標準ではこんなLayerがあるんだってさ(LunarGのサイトから引用。presentedVK_LAYER_KHRONOS_validation、便利そうだなー使いたいなー。環境によってはこれ以外のLayerも使えるらしく、実際にどんなレイヤーが使えるか列挙して調べるためのvkEnumerateInstanceLayerPropertiesという関数があります。これを使って実際に列挙してみました。std::move(props);}が、これを動かしても空配列しか返ってこない。エラーではなく、成功した上で0個です。呼ぶタイミングを間違ったりはしてない。さっきの6つのレイヤーは、Vulkanの仕様上必ず入っているはずなのです。19.04ではLayerは入りません。vulkan-validationlayers-devしろ。Layerあれ、ちょっとまって、名前全然ちがくない?GOOGLEってなんや??今日のところはVK_LAYER_LUNARG_standard_validation使って勘弁しといたるわ。Vulkan難しいVulkanとの対話は続く...。Fujisakimake.girls.moeは、ブラウザ上のニューラルネットワークを使って美少女を生成してくれるサービスです。内部に立ち入ると、このネットワークは、162次元の実数ベクトルを受け取って、128×128の「美少女」の画像を返すことに気がつきます。今回は、そのベクトルの「ゼロ点(全要素がゼロ)」からちょっとずつランダムに動かしながら生成し続けた、40人の「美少女」の動画を作りました。repomake.girls.moeで10回ぐらい「美少女ガチャ」を回してみると、いわゆる「絵を描く」という行為とはすこし雰囲気が違うと感じました。それを言葉で説明するのはまぁ置いておくとして、「機械が美少女を生成する行為」と「人間が絵を描く行為」が違うとして、機械ででしか出来ないことはなんだろうか、と考えてみました。このニューラルネットワークの上では、「美少女」は162次元のベクトルです。ベクトルであるということは、ある「美少女」AとBが与えられた時に、それらを使っていろいろな演算が出来るということです。(1-α)Bとすれば、美少女AとBをα:1-αで「混ぜ」た新しい美少女Cができますね1。これはαを変数として見ると美少女AとBの間に直線を引いて、その間にいる無数の「美少女」を「生成」する、あるいは美少女を「連続的に変化させる2」式ですが、直線じゃなくても、色々な曲線を引いて、その間にある美少女を「連続的に変化」させて「生成」することもできるでしょう。「美少女を混ぜる」ことだったら人間でも出来ます。「ベクトル空間上の美少女」を混ぜるための方法が直線だけではなくたくさんあるのと同じように、例えば「髪は涼風青葉だけど目と口は八神コウ」とか。「数学的に混ぜている」わけではありませんが、描こうと思えば色々な「混ぜ方」で描けそうな気がします。「人間は出来ないけど、機械なら出来る」という感じはあんまりしません。こんなのはどうでしょう。遠くはなれた他の点だけでなく、ベクトル空間では、ある点のすぐ近くに、無数の他の点が存在します。美少女の世界で言えば、ある美少女の近くに、無数の、よく似た、しかし相異なる3「美少女」が存在すると言うことになるでしょう。以前、犬吠埼樹ちゃんを50人描いた事がありましたが、同じ樹ちゃんではあるものの、描かれた樹ちゃんは間違いなく全員異なる姿をしていました。なんか近い感じがします。ランダムウォークはどうでしょうか。ランダムウォークは、ある点のすぐ近くの点に、きまぐれな散歩のようにどんどん移動する運動です。一次元空間と二次元空間では、ランダムウォークには再帰性があって、「いつかは元居た所に帰ってくる」らしいです。「いつか」だから、「一億年後」かもしれないけど。これは、全然意味は違いますが、人間のやっていることに近い感じがします。様々な試行錯誤をして異なる美少女の絵を描きながらも、「樹ちゃん」という目標はあり、そこの近くをぐるぐる行ったり来たりしている。そんな感じがしました。三次元以上のランダムウォークには、再帰性はないそうなのです。運が良ければ元のところに戻ってくるかもしれないけど、普通はもう二度と戻ってきません。その行き先は、まったくのランダム。これは人間には、たぶん難しい。オリジナルのキャラクターを描くとしても、何回も試行錯誤しながら描いてる最中に「こっちがよさそう」と思いながらなんとなく方向転換をしていくわけで、まったくのランダムな方角へ進みながら、よく似た、でもまったく別の絵を描き続けることは、たぶん難しい。コンピュータなら簡単です。いうわけで、冒頭の動画では全く同じところから出発した、40人の「美少女」を並べました。@0枚目これがmake.girls.moeが定義する「美少女」の「ゼロ点」です。なんとなく「無個性」な感じするかな。そうそう、162次元中、いわゆる「属性」34次元で、残りは「ノイズ」らしいよ。それぞれの美少女はすぐに異なる美少女へ「変化」していきますが、そこでとどまることなく、常に変化をし続けていきます。@36000枚目@60000枚目@72000枚目まぁ、雲みたいな感じかな。眺めていると同じだけど、気がつくと変わってる。FAQ有用性は?知るか。新規性は?お前が新しいと思った所があればあるし、なければない。ところで「新規性のある美少女」は、居るとすればこのニューラルネットワークの中と外、どっちに居ると思いますか。FujisakiSATソルバーを使ってBrainfuckのプログラムを実行するというネタのLTです。[全画面/表示されない場合]詳しくはgithubのリポジトリへ。Fujisakiがっこうぐらし!のOPのフレーズ「ここには夢がちゃんとある」の時に起こる弾幕、「※希望はありません」がどういうふうに生まれてきたのか、観察してみました。動画の弾幕は歌詞の内容を元にした「空耳」であることが多く、歌詞には直接出てこないフレーズであるこの弾幕は面白い存在だと思います。これは今日やったハッカソンでやったことのまとめで、使ったソースコードとデータ一式はこちらにあります。正規化されたレーベンシュタイン距離を使って適当にクラスタリング似ているコメント同士でも1000コメント以上離れたコメントは別グループに分け、グループ同士をエッジで接続しました。書かれているコメントを真似して書くコメントと、独立に思いついて偶然にたコメントを区別するためです。「※希望はありません」は最初からヒットした訳ではなく、一回目はそのままフォロワが無く消滅。2万コメント後に復活して細々続き、4日目にしてなぜか大ヒット。少なくなるタイミングもあるコメントは1000件のキューであることを考えると、待ち行列的な混雑の揺らぎみたいなものだと考えていいのだろうか?初期は「夢がちゃんとある(〜とは言ってない)」のような従来的な歌詞に基づいたコメントが多いその後も継続的に出現するが、「※希望はありません」と比べると相対的に弱くなる「※ただし希望は無い」などの派生系コメントは本家のヒット後に出現しかしフォロワーはなく消え、暫くたつとまた似たような「※(希望と救いは)ないです」みたいなのが発生してくる。独立に何度も発生してる。おなじ「まんがタイムきらら」作品が元ネタの「夢もキボーもありゃしない」系コメントも独立に散発的に出現しているなぜ4日目に大ヒットしたのか?よく見ると4日目、07/12はGoogleTrendでの最大ピークと一致している。大ヒットの原因であるという憶測はできるが、これだけでは証拠が弱すぎる。単なる偶然かもしれない。2話こちらです一話の流行を受けて「※希望はありません」は最初から大人気おまけ「わかば*ガール」1話わかば*ガールの今季一番アレな弾幕「TNP鳴らして」も調べました。al.[2011])論文を発見して、面白そうだなぁと思ったので(小学生並みの感想)、ニコニコデータセットに適応してやってみました。明日、日曜日(4/26)に「ニコニコ超会議」内の「ニコつく」でサークルの一つとして展示します。この虫野郎」みたいな感じで相互に関連するタグが付けられますよね。このタグ同士の関連をネットワークとして可視化したら、ニコニコ動画の中でどんな概念同士がリンクしてるのかなー、とか、詳しくないジャンル2でどんなワードが流行っているのかなー、とかが一目で把握できそうです。「同じ動画に付けられている回数(共起回数)」としたグラフ(ネットワーク図)を作り、可視化してみました。graph(髪の毛もじゃもじゃグラフ)」になってしまいます。ノードが1万4000のグラフを可視化した結果がこんな感じだそうです。うーむ、とてもじゃないけど、人間には読めない図です。今回は15万タグを対象としたので、この10倍ほどの頂点とエッジがあります。この問題に対処するために、可視化する前にタグを階層的にまとめるクラスタリングを行います。「ぽいぽい教」や「金剛」タグをまとめて「艦隊これくしょん」クラスタを作り、さらに「艦隊これくしょん」と「ご注文はうさぎですか?」や「きんいろモザイク」とまとめて「アニメ」クラスタを作るわけです。その状態で可視化を行えば、先ほどの図のように「ゲーム」「音楽」「アニメ」みたいなざっくりとした関係の図が出来上がります。その纏めた「アニメ」クラスターの中身もダブルクリックすれば見ることができます。データセットはそこまで最近のデータはないので、例として2011年データから「IS(インフィニットストラトス)」のクラスタを持ってきました。わたし自身はこのアニメを見てないのであまり詳しくないのですが、一時期エースコンバットとのMADが流行っていたのと、(キャラ名)党っていうタグでお気に入りのキャラクタを示す文化があるのがわかります。今回の売りは、この集計を「その場」で行っていることです。[2009]など可視化は行われているのですが、基本的には「事前に」集計しておいて、それを可視化しています。今回のシステムでは、表示するたびに毎回、15万ノード+200万エッジの大規模なグラフを、クラスタリングしつつその場で可視化してしまいます。かかる時間はさくらのVPS2Gのような非力なマシン1台でも2秒以下です。今回これをやった本心としては「データの分析をして知識をマイニングしたい!」とかよりは「この超高速なクラスタリングアルゴリズムを使ってみたかった」という感じなので、実際にこのソフトウェアから有益な知識が得られるかどうかは微妙です。客観的評価とかもとくにしてないし、まぁそのへんはご愛嬌。今回のシステムのもう一つの売りは、高速性を活かしてインタラクティブに集計期間を変更して好きな時期のデータをその場で可視化できることです。上のバーを左右に動かすことで、時間を行き来しながらネットワークの様子を可視化できます3。初音ミクの居ない頃のニコニコ動画たとえば、初音ミクはニコニコ動画文化を象徴するものだと言っていいと思うのですが、できた当時の2007年すぐには初音ミクはありません。2007年の最初期のデータで可視化すると初音ミクがなかったころのニコニコ動画が見えます。最近はもう見なくなったものもちらほらありますが4、今でも人気な作品も多いですね。「涼宮ハルヒの憂鬱」はアニメなのにアニメクラスタに入っていませんが、このような人気な作品はそれ自体が大きなコミュニティを形成しているので、独立して一個のクラスタになることがよくあります。「ヘタリア」みたいな腐女子向け作品がちょくちょく独立してますが、腐女子向け作品は「アニメ」「ゲーム」タグと同時につかない動画が多いのが原因みたいです。時間を行き来しながら見ると、時事ニュースによるその時の流行タグも自然と浮上してきます。2011年4月の画面を見てみましょう。一ヶ月弱前にあった地震を扱った動画がたくさん投稿されていたことがわかります。ちなみに中はほとんど政治的な動画で、みんな大好き「あいさつの魔法。」は「エンターテインメント」の中に入ってます。昔の流行の思い出に浸るもよし、新規ジャンル開拓に使うもよし、まぁなんか暇つぶしにご活用ください。彼らはバイオインフォマティクスで日々生まれる膨大なデータを素早く可視化するために使っていますが、これをニコニコ動画に適応したらどうなるかなーと考えた所、こんな感じになりました。ソースコードソースコードはこちらに置いてあります。ledyba/NicoGraph結果を再現するためのプログラムが全部置いてあるので、あなたも自分のサーバで動かすことができます。データはNIIのサイトからダウンロードしてきてください。Methodの実装はゼロから書き起こした物を使っています。元の実装よりも少し制限がキツい(エッジの重みがintのみ)いのですが、その分だけ頑張って高速化して、だいたい3倍ぐらい速いです。多くのタグを一度にまとめてしまって、部分的に一部のクラスタ以下がHair-ballになって破綻することが稀によくあります。実装がマルチスレッドになってないので本当に何人も同時にアクセスするとサーバが沈黙します。優しくしてあげてください。!データがいまいち古い!ドワンゴ氏〜〜〜〜最新のデータくだされ〜〜〜〜〜〜〜〜〜他のデータでもやってみたい?もしも、「ニコニコデータセットじゃなくてウチのデータセットでもやってみたいんだけど...」という方が居た場合はご相談ください。本当に有益な情報をマイニングしようとするとここから更に何段階か努力しないといけないとおもいますが...。