カテゴリー
技術

名刺の裏にニューラルネットワークプログラム

Card Network は、名刺の裏に印刷されたコンパクトなニューラルネットワークのソースコードです。

名刺の裏にソースコード、という他の人のアイデアを見たアイルランドの大学で計算機科学を学ぶ修士生の Oisin さんが選んだのは、小さなニューラルネットワークを作る 878文字のC++のコード。

#include <bits/stdc++.h>

typedef float f;typedef std::vector<f> v;f K=0.01,R=0.01;struct L{int w,h,i;v W,x,z;L(int i,int o){W.resize(i*o);for(f&a:W)a=(rand()/(1.1-(1<<31))-0.5)/sqrt(i+o+0.);w=i;h=o;}v F(v X){x=X;v a(h);i=h*w;while(i--)a[i/w]+=W[i]*x[i%w];z=a;for(f&i:a)i=K>i?K:i;return a;}v B(v Y){v (w);i=w*h;while(i--){f Z=Y[i/w]*(z[i/w]>0?1:K);X[i%w]+=Z*W[i];W[i]-=R*Z*x[i%w];}return X;}};int main(){L n[]{L(40,50),L(50,50),L(50,1)};int l,z,k,i=500337;while(i--){z=242-i%243;k=40;v x(k),y;while(k--)x[k]=sin((k%2?z/27/3.:z%27/5.)+6.14*k/20);y=x;for(l=0;l<3;l++)y=n[l].F(y);v Y{2*(y[0]-("\x1e\0(0ドル)\\0(0ドル)\b\x01\0(0ドル)@H\374(3ドル)\377(3ドル)B\x12@\x18\x12G\302(3ドル)\\x10@\x12\372(3ドル)\377(3ドル)\221(2ドル)\x10\0(0ドル)\0(0ドル)\200(2ドル)\0(0ドル)\0(0ドル)\0(0ドル)\\x02"[z/8]>>z%8&1))};while(l--)Y=n[l].B(Y);putchar(" .,-*oO##"[(int)(y[0]*8)%9]);if(i%27<1)puts(i?i%243?"":"\033(0.3ドル)[9A":"\r\   --- Oisin Carroll ---\n\ gh:Oisincar  web:imois.in");}}

ここではCのstructで3層のニューラルネットワークを作り、Oisin という名前の図形を表示できるように学習させています。

エンジニアのスキルアピール、カンファレンスでの話題作り等に、自分の得意分野のコードをミニマムに名刺裏に掲載するアイデア、どうでしょうか。

カテゴリー
技術

メールの返信をプログラムが「提案」する機能をグーグルが開発

本日、グーグルのリサーチブログで、メールの返答を勝手に考えてくれる機能 Smart Reply ができた、という発表がありました。smart reply = 賢い返答、ですね。

まだこの Smart Reply を試せるところは無いようですが、Gmailブログに出ているアニメーションGIFで、どんな感じの機能かが見て取れます。

(credit: Gmail Blog)
(credit: Gmail Blog)

「来月休暇を取ろうと思うんだけど、あなたの休暇予定は決まってるか? 決まってたら教えてほしい」という、社内での休暇取得を調整するメールに対して、アプリの下部に3種類の回答案が表示されます。

「まだ計画してません」「ちょうどあなたに送ったところです」「今それについて検討していたところです」の3つの案が表示され、このユーザーは3つめの案を選び、そこに続けて自分の言葉でメールを続けていきます。

今回ブログで報告しているグーグルの研究者Greg Corradoさんは、モバイルでメールの返事を書くことのたいへんさから、もしメールの内容が簡単な返答で済むようなものかどうか判定できて、ワンクリックで選べる雛形が出てきたらどうだろう、という同僚のアイデアを聞いて、挑戦してみようと思ったとのこと。

6月に発表された論文では、大量の既存の会話データを使い、しかし英語についての知識は内蔵していないプログラムによって、人生の意味について人間とチャットするプログラムを作っていますが、今回の成果はその研究の延長にあるということ。

このスマートリプライシステムでは、時系列データ(この場合は単語-単語のつながり)を扱うリカレントニューラルネットワーク(RNN)二組の一方で受け取ったメールをエンコードしていき、他方で可能な返答を予測していくそうですが、この時に伝わるベクトルが、「あなたは明日フリーですか?」という文章と「明日は都合の良い日ですか?」という文章でちゃんと似たものになるそうです。

また、3つの提案がどれも似たものになってしまう、というプロトタイプの問題点は、3つの回答の意味がそれぞれ離れたものになるように調整したのだとか。あと何にでも「愛してるよ」と返してしまう癖があって困った、みたいな話もあって興味深いです。感謝の気持ちを表すのにそういう言葉も多々含まれるからだろう、ということで、そのへんは出にくくなるように調整したのだとか。

今週後半には、AndroidiOS の Inbox アプリで、この Smart Reply が使えるようになるということです。残念ながら英語のみですが、アプリの対応版が出たらぜひ試してみたいところです。

こういう研究がさらに進んでいけば、提案から選ぶ、どころではなく、単純なものや定期的なものについては、プログラムが勝手に応答してしまうような未来も来るのかもしれないですね。

カテゴリー
技術

MarI/O – ニューラルネットワークと遺伝的アルゴリズムでマリオの早解き

ニューラルネットワークと遺伝的アルゴリズムの組み合わせにより、ゲーム「スーパーマリオブラザーズ」の一面を教師無し学習で解かせている動画です。

mario-neural-network

最初に学習が十分済んだ状態のプレイが実演されますが、1面を46秒で解いています。世の中には41秒で解いてる動画もあるようですが、かなり早い部類と言えるでしょう。

0:46 からは、今回の解法についての解説です。マリオを含む画面上の地形やキャラクターのスプライトを入力に、どのボタンを押すかを出力としたニューラルネットワークをランダムに作り、うまくいったネットワークを組み合わせて次の世代のネットワークを作り試行させます。これを繰り返し、この例では34世代目でマリオが46秒でゴールに到達する組み合わせが出来ています。

luaのソースコードがPastebinで公開されているので、追試も可能かもしれません。NESエミュレーター(Bizhawk Emulator)とマリオ本体が必要だと思いますが。

SethBling さんは、マインクラフトなどゲームを扱った多数のヒット動画を持つ人気ユーチューバーでもあり、今は抜かれました(この記事執筆次点で歴代9位)がスーパーマリオの早解きで世界一を取ったこともあります。もしかすると早解きのルートはこのようなプログラムの解析を参考にしたのかもしれません。

# あるいはその早解きプレイ動画自体がこうしたプログラムによるものだった可能性もあるのかも

via TNW