プロクラシスト

今日の寄り道 明日の近道

【ブログ運営報告】前月比3倍!得意領域に力を入れた、やってて良かった7ヶ月目。

こんにちは、ほけきよです!

運営報告の時間です。 キリのいい所で運営報告をしようと思っていたのですが、 先月のPVが初めての減少(激減)だったので、今月まで待たねばなりませんでした。

私がキリのいいと思い目標にしていた数値は50000PVです。 今月は超えることが出来ました!やったね!

というわけで、運営報告を(先月分も兼ねて)していきたいと思います。

2月 3月 4月 差分(3⇨4)
PV 40365 22885 61643 約3倍
PV(検索流入) 7525 14483 28028 約2倍
読者 180 199 217 +18人
twitter 280 300 367 +67人
収益(単位:諭吉) 0.9 0.7 2.8 +2.1

数値的には上出来で満足の行く4月となりましたー!

【検索流入】3月が一見ヤバそうだが…

これを見ると、「あれ?3月のPV下がり過ぎでは?」 と思うかもしれません。ですが、検索流入をみると

2から3、3から4と、堅調に倍々と増加しています。

バズ記事はギャンブル、検索流入記事は資産。

2月はバズで稼いだのでで、こうなることは目に見えていました。 3月は結果こそ奮っていないですが、割と検索上位に載ってくるワードをいくつか拾えたという点では、収穫アリでした。

ここをもっと補強していくことが今後の課題ですね。

【理系ネタ多数】そして4月

とはいえ、さすがに3月の結果は悔しかった!

なので、4月は結構気合を入れました!かける時は記事を書きました。

他の月と違ったのは「理系ネタ」を多めに取り入れたこと。 他の人に書けないアイデンティティを出すなら、ここだろうなと。

自分で書いていても、楽しいのでついつい熱が入っちゃいます。 ここで4月の自信アリな理系ネタを2つ

収入の分布を分析してみた話

トンデモデータと思いきや、実にスッキリしたデータで美しい結果に終わった話。 初学者でも雰囲気つかめるような書き方になっていると思いますので、

「勝ち組の貯金っていくらぐらいだろう」

と気になる人は是非読んでみてください。

www.procrasist.com

風呂場のドアパカパカ問題

かなり自信作アリな自作問題です。 強烈なインフルエンサーにシェアされたおかげで、拡散の海に放り出され、今も順調に航海しています。 設定から解き方まで、一貫して楽しいものになっています。

この記事に関しては、拡散したおかげで嬉しいこともあったので、それは後述。

大学受験数学に対して腕に覚えがある方は特に、挑んでみてください!

www.procrasist.com

他にも↓あたりは、割と興味深い記事に仕上がったと思います!結構自信作( ^ω^ )

発信者をやっててよかったと思ったこと、今後の目標

嬉しかったこと

今月は、自分の好きなことを好きなだけ書けた月でした。

思うように伸びなかった記事もいくつかはありますが、だいたいの記事がよく拡散されて、読んでもらえたのかなと思います。特に最後のお風呂のドア記事は、強烈なインフルエンサーに拾ってもらったこともあり、私のブログの中では出世頭です。

嬉しかったのは、

かつての独り言が共有され、新たな価値を産んだ

ということ。 高校の頃から、「これ面白いなー」と、色々問題を考えるタイプの人間だったのですが、残念ながら 相手にしてくれるのはほんの数人でした。限られたコミュニティの中での発信は、影響力などそれほど多くありません。ほとんど独り言のようなものです。でも、発信者になって、ある程度色々な人に見ていただけるようになったことで、

「数学って面白い、美しい」

と、多くの方に言ってもらえたことや、

「この問題、こんな背景がありますよ」

と生産的な指摘をくださる方がいたことが、本当に嬉しかったです。 月並みですが、新たな価値を与えることができて、また新たな価値を得ることもできた。まさにWin-Winだなと思いました。

正直、この価値って定量化しづらいものです。「収益○○円!!」っていう訳ではないですし。 私はこういうのを、教養の貯金だと思っています。

「こんな考え方、見方ができるんだ。」

と思い、感銘を受けることが、将来のどこかで役に立つ(かもしれない)。 なので、目標としては、もっともっと発信者としての実力をつけて、多くの人の目に触れられるようにしていきたい。そして 記事で心を動かせたらなあ。と思います。

特に自分も好きな、 「理系ネタを全力で」カテゴリの記事はこれからも熱を持って書いていきます!

とはいえ!!!

お金も欲しいです^^(ゲス顔)

正直、「お風呂 面積」なんてワードで検索かける人なんていない訳です。 この記事も拡散の海から戻ってくると、ほぼ永年停泊しっぱなしの置物記事になっちゃう訳です。

なので、やはり検索流入を増やす!!ことが重要。

過去記事を見返してみると、グーグル様に対して不遜な態度のタイトルばかりじゃないですかー。やだー。

なので、過去記事中心にリライトを進めていきたいと思います!

次の目標は10万PV/月!がんばるぞい!

【ゆるぼ】記事ネタ、募集します。

最後にゆる募でーす!

理系ネタ、一人じゃ視野に限界があるので、

ほけきよに考えてもらいたい面白いネタがあれば是非twitterでもなんでも、連絡ください!

おもしそうなものは記事にしたいなと思っています。よろしくお願いします!ではではっ

お風呂場のパカパカドアが通る面積を計算したら感動的に綺麗だった【美しい回答追記】

こんにちは、ほけきよです!!

みなさんのお家にあるお風呂場で、こんなドアはないでしょうか??

f:id:imslotter:20170416191920j:plain

そう、通称『パカパカドア』ですね!!私の家もこのドアです。

ある日、シャワーを浴びている時、このドアをパカパカしていました。全裸で。

すると、このパカパカドア、なかなか複雑な動きをしているな、と気づきました。全裸で。

「これは、求めなければならない…!!」

使命感にかられ、すぐさまお風呂を飛び出して計算に取り掛かりました。

高校数学で解けますが、なかなか色々考えることがたくさんあって難しい問題になってます。 数学に自身のある諸氏はぜひともチャレンジしてみてください。

問題

問題文は以下の通り f:id:imslotter:20170416195128p:plain

どんな形になるの?

解く前に軽いヒントを。 このドア、どんな図形を描くか想像できますか?

せっかくなので今回はアニメーションにしてみました。

f:id:imslotter:20170426223237g:plain

これを重ね合わせると、↓のようになります

f:id:imslotter:20170426223343p:plain

美しい…

こう言うので囲まれる図形を包絡線といいます。

つまり今回のお題は、この包絡線で囲まれる面積を求めるってことです。

回答と解説

ここからは回答と解説です。解きたい人は押さないでくださいな。 (雑な字ですみません。数式や図を描く元気がなかったですw)

続きを読む

美しすぎる青の絨毯、ひたち海浜公園の『ネモフィラ』はGWに超絶おすすめ!

f:id:imslotter:20170426051040p:plain

こんにちは!ほけきよです

皆さんGWの予定はお決まりでしょうか。 まだ決まっていない方、「お花畑」に行ってみるのはいかがですか?

「え?お花畑?子供じゃあるまいし…」

と思う方も多いかもしれません。けれど、この「ひたち海浜公園」のお花畑は ほかのそれと全然違います。世にも珍しい、一面青いお花畑が広がっているのです!!

ひたち海浜公園とは

茨城県の東部にある国営の公園

Rock in Japanの開催地としても有名です。

しかし、何と言っても見所は四季折々のお花 珍しいお花畑が有名です。 とくに、5月のネモフィラ9月のコキアは 他に例を見ない美しさで例年多くの観光客で賑わいます。

f:id:imslotter:20170426044145j:plain
コキアとコスモス(ひたち海浜公園HPより引用)

激レアな花、ネモフィラって?

その中でも、近年超有名になりつつあるのが4月下旬から5月上旬のほんのわずかな期間にだけ花を咲かせるネモフィラ。本当に美しい青いお花です。

f:id:imslotter:20170426044454j:plain

最近ではひたち海浜公園ネモフィラ人生で一度は見ておきたい絶景として世界中から注目されるほど有名になりました。

時期がちょうどGWドンピシャにしか咲かないので、これを逃すとまた来年を待つことになります.

f:id:imslotter:20170426050221p:plain

ネモフィラ写真館

「世界の絶景といえども、世間が勝手に囃し立てているだけで、実はがっかり…」

みたいなものも多くあったりします。しかし,ここのネモフィラ畑は本当にすごい…! 以前わたしが行ったときの写真を参考に、どうぞ行きたみを深めてください( ^ω^ )

f:id:imslotter:20170426044754j:plain
遠くに見える海、空、ネモフィラ。青の三重奏!

f:id:imslotter:20170426044803j:plain
ネモフィラ畑の隣にある菜の花も素敵.

f:id:imslotter:20170426044812j:plain
アップ。一輪一輪も上品

f:id:imslotter:20170426044819j:plain
菜の花との共演

f:id:imslotter:20170426045821j:plain
ネモフィラ色のアイスも美味しい!

色々絶景ハントしてきましたが、ここの景色はなかなか見られるものではないので、GW予定がない方、ぜひ足を運んでみてはいかがでしょうか。 見頃のネモフィラ畑は、間違いなく息をのむほどの絶景です。

ではではっ!!

【技術メモ】python matplotlibで見栄えの良い色, グラフを作るTips

matplotlibでも割と綺麗な図を作ることができる。 図示の時に色々と使うテクニックを列挙。

どうぞ皆さんもお使いください

基本の体裁

まずこのグラフ

import numpy as np
import matplotlib.pyplot.plt
x = np.arange(-np.pi,np.pi,np.pi/50)
plt.axvspan(-0.5*np.pi,0.5*np.pi,color="red")
plt.plot(x,np.sin(x))
plt.show()

f:id:imslotter:20170423210018p:plain

どぎついし、端が切れているし、イマイチ。この辺の体裁を整えていく

関数で調整

変えたい 関数 選択肢
x,yの範囲 plt.xlim(a,b)
plt.ylim(a,b)
範囲を実数値で
タイトル plt.title("hoge") タイトルをstr型で

plt.legend(loc=2)

などとするとタイトルやラベルが表示される。locオプションはラベルの場所を決める。グラフの第一から第四象限と場所が対応。loc="lower right"などという書き方も可能

plt()内の基本オプションで調整

変えたい オプション 選択肢
色(デフォルト) color="red"など red, green, blue, cyan, magenta, yellow, black
色(自分で) color="#010101"など Materialui : 最近はやりのマテリアルデザイン
などのカラーコード載っている。
クリックしてctrl+Cでコピーする。
色選びの参考に。
太さ lw 整数値(大きいほど太い)
マーカー marker “o"や"x"などだけではなく、
様々なマーカーが用意されている。
このサイトが詳しい
マーカーサイズ markersize 整数値(大きいほど大きい)
ラベル label グラフを表すラベル。$$で囲むと数式もOK
透過度 alpha 0≦alpha≦1, 大きいほど透明度が高い
x = np.arange(-np.pi,np.pi,np.pi/50)
plt.axvspan(-0.5*np.pi,0.5*np.pi,alpha=1.0,color="#ffcdd2",label="$(-\pi/2, \pi/2)$")
plt.plot(x,np.sin(x),lw=3,color="#03A9F4", label="$y = \sin{x}$")
plt.xlim(-np.pi,np.pi)
plt.ylim(-1,1)
plt.title("modification")
plt.legend(loc="lower right")
plt.savefig("graph_modifcation.png")

こんな感じになる

f:id:imslotter:20170423210039p:plain

透過度をあげる

線が重なったり、点が密集した時は、先述のalphaオプションを使って透明度をあげてやると分布もわかりやすく見やすい図になる。 例えば、x,yに正規分布で乱数を発生させたものを散布図でプロットする

x = np.random.normal(0,1,1000)
y = np.random.normal(0,1,1000)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.scatter(x, y,marker="o")
plt.subplot(122)
plt.scatter(x, y, marker="o",alpha=0.2)
plt.show()

f:id:imslotter:20170423213934p:plain

左のほうが綺麗で見やすい(はず)

漫画風にする

import matplotlib.pyplot as plt
plt.xkcd()

とすればOK 詳しくはこちら

棒グラフに柄を載せる

これもちょっとしたテクニック。 棒グラフを書くplt.bar()のオプションhatchを使う

t = range(10)
y1 = [x for x in  range(len(t))]
y2 = [1.0*x**2/9 for x in  range(len(t))]
w = 0.4 # 棒の幅
tick_interval = 2 #目盛りの間隔
left1 = [x-w/2 for x in range(len(t))]
left2 = [x+w/2 for x in range(len(t))] # 棒の幅分ずらす
labels = [year for i,year in enumerate(t) if i%tick_interval == 0] #目盛りの設定

plt.figure(figsize=(16,8))
plt.subplot(121)
plt.bar(left1, y1 , align='center',width=w)
plt.bar(left2, y2, align='center',width=w)
plt.xticks(range(0,len(t),tick_interval),labels)
plt.legend(loc=2)
plt.subplot(221)
plt.bar(left1, y1 , align='center',width=w)
plt.bar(left2, y2, align='center',width=w)
plt.subplot(222)
plt.bar(left1, y1 , align='center',width=w,color="#404040")
plt.bar(left2, y2, align='center',width=w,color="#808080",hatch="/")
plt.subplot(223)
# 数を増やすと密になる
# "//"以外にも色々な模様が用意されている
plt.bar(left1, y1 , align='center',width=w,color="#808080",hatch="////")
plt.bar(left2, y2, align='center',width=w,color="#909090",hatch="xx")
plt.subplot(224)
plt.bar(left1, y1 , align='center',width=w,color="#808080",hatch = "--")
plt.bar(left2, y2, align='center',width=w,color="#909090",hatch="oo")
plt.xticks(range(0,len(t),tick_interval),labels)
plt.legend(loc=2)

f:id:imslotter:20170423213847p:plain

グラデーション用の色を作る

グラデーションの作り方

  • いちいち変えるの面倒だけどパラメータが多い
  • グラデーション的に変えたい

そういう時はimport matplotlib.cm as cmを使う

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
x =np.linspace(0,2*np.pi,100)
for i in range(30):   
    plt.plot(x,i*np.sin(x),color=cm.hsv(i/30.0))
plt.xlim(0,2*np.pi)
plt.show()

色の参考にcmリスト

  • さっきのcm.hogeの所を色々変えてみたものを図示
  • [0,1]のグラデーションになっていて,一番平らなのが0,盛り上がっているのが1

可視化の参考にどうぞ

王道カラフル系

  • hsv
  • jet
  • spectral f:id:imslotter:20170423213408p:plain

単色濃淡(っぽい)

  • bone
  • gray
  • pink
  • copper

f:id:imslotter:20170423213526p:plain

温度系

  • cool
  • hot

f:id:imslotter:20170423213543p:plain

季節の色たち

  • spring
  • summer
  • autumn
  • winter

f:id:imslotter:20170423213600p:plain

グラデーションにならない系

  • flag
  • prism

f:id:imslotter:20170423213616p:plain

その他

公式HP

はてブの理不尽にむせび泣きながら色々な記事の行く末を分析すると、野球選手の人生にそっくりだった

こんにちは!ほけきよです。

二つ前の私の記事は、バズをめちゃくちゃ狙った記事でした。

www.procrasist.com

  • トレンドニュースから派生したネタ
  • 適度な専門性の付与
  • わかりやすさ

個人的には自信を持って三拍子揃った記事だったんです。

おかげさまで、記事をアップして順調にはてブが伸びていきました。 しかしある時、急に伸び悩みました

これが、昨日記事をUPしてからおよそ1日のはてブ数の推移です。 (このグラフの作り方は、こちらの記事をご覧ください)

f:id:imslotter:20170421032146p:plain

みて、この謎の失速!ひどい!無慈悲だ!!理不尽だ!!! まるで翼をもがれたイカロスの様。

理由は単純明快、新着エントリからキックされたことにあります。 将来を期待されすぎて、人気エントリの補欠に入れられた結果こうなりました。

なんかこのままじゃやるせないので、今日ははてブ新着エントリに入った将来有望な記事たちが どの様にして成長し、またどの様にして犠牲になっていくのかを追いたいと思います。

対象データ

今回分析に用いるデータは、 2017年4月20日の午前9時から午後5時までのITカテゴリはてブ新着エントリです。*1 ただし、無限に入れ替わるそれらを全部追っていたら、怒られちゃうので、今回は 初めの20番個の記事+入れ替わった新規30記事の計50記事からデータを集めます。

データの収集は10分おき。その度に下記のデータを収集します。

【収集するデータ】
 ・ はてブの数
 ・ カテゴリ別新着エントリランキング
 ・ カテゴリ別ホッテントリランキング
 ・ 総合新着エントリランキング
 ・ 総合ホッテントリランキング

これらの情報は、↓記事の関数をちょっといじれば簡単に取れるので、チャレンジしてみてください!(宣伝)

www.procrasist.com

導入 : はてブプロ野球

私の中で、収集したデータ5つはそれぞれ、こんな感じの対応があると思っています。

はてブ 野球
はてブ 打撃(投手)成績
カテゴリ別新着エントリ 日本プロ野球2軍
カテゴリ別ホッテントリ 日本プロ野球1軍
総合新着エントリ メジャーAAA
総合ホッテントリ メジャーリーグ

今回は、それぞれ上からグラフとして出力していきます。なので一例を図示するとこんな感じ。

f:id:imslotter:20170421032502p:plain

はてブ数は単純に大きい方がよく、 下4つのグラフは、ランキングなので、低いほど良いということになります。

結果 : 3タイプに分かれる記事

今回、結果を見ていると記事は3タイプに分かれることがわかりました。それぞれどうぞ。

天才型

ホッテントリ入り10位以内に入る猛者たち

若いうちから才能を発揮し、1軍に上がってもバンバン成績を残す天才。 中には超天才もいて、メジャーでも成果をあげるツワモノも。 典型的な"天才型"がこちら。

f:id:imslotter:20170421032618p:plain

凡才型

新着エントリのランクが下がっていき、消えるタイプ

なんとかプロに入るも、2軍でくすぶり、引退宣言をする人たちです。 典型的な"凡才型"がこちら。

f:id:imslotter:20170421032635p:plain

こうなったら、もう諦めるしかなさそうです。。

期待に潰された型

新着エントリのランクをキープするも、
ホッテントリになると30-50位をウロウロ

二軍で鍛え、着々と実績と力をつけている途中なのに、周りからの期待により 1軍に上げられ、そのまま芽が出ず人知れず引退するタイプ。

典型的な"期待に潰された型"がこちら

f:id:imslotter:20170421032651p:plain

私も記事もこのタイプだった。。くやc。

割合と、24時間たった後のはてブ

今回集計した50記事を比べてみましょう。 これは、3つの型の記事数とはてブの平均の集計結果です。

割合 はてブ数平均
(24h後)
天才型 18% 129.2
凡才型 66% 15.8
期待に潰された型 16% 40.9

f:id:imslotter:20170421182015p:plain

なんか、2割8割の法則に似ていますね

考察 : なぜこんな理不尽が起こるのか

順当にいけば、期待されたものは一軍でもメキメキと力をつけられるはずですよね。 なんでこんなことが起こるのか。大きく3つ原因はあると思います。

1軍は時期尚早であった

理不尽の原因はこれです。 まだ時期尚早の10-15はてブになると、強制的に1軍に上げられます。 せめて3時間くらいは育成期間があってもいいのでは… 10-15なんて、1軍だとゴミじゃないか…

その程度の成績で上げられ、結局芽が出ず、人知れず引退のケースが出てきます。

1軍生活は息が長い

一軍のスター選手はなかなか席を空けてはくれないのです。 鳥谷が連続試合出場記録単独2位になりましたね。 エラーでサヨナラ負けしたって、次の日もスタメンです。

一度スターダムをのし上がれば、ちょっとのミスに甘くなるのは世の常なのです。

FA宣言してくる輩がいる

これ、、、これ、理不尽じゃないですか?!?!? ある時のIT部門のトップ20のエントリを見て見ましょう。

f:id:imslotter:20170421190428p:plain

少しどころじゃなかった…強いページばっかりだ…若い芽の未来を強者が奪っていく決定的証拠です!ひどいわ…!

独立リーグからのオファー、タレント転身

はてブが伸び悩む理由がわかっていただけたでしょうか。 実は、この話には素敵な続きがあります。

先ほどのグラフに、PV数を重ね合わせてみましょう f:id:imslotter:20170421033659p:plain 1軍で鳴かず飛ばずの生活をしていたにもかかわらず、2回バーストしています。 この理由は二つあります

独立リーグ : SmartNewsでの掲載

1軍でくすぶっていた我が記事氏に、ある独立リーグからオファーが来ます

「俺のところで、戦ってみないか??」

それがSmartNewsでした

スマニューアプリのトップに約半日掲載してくれたおかげで、かなりのPVを稼げました

華麗なるタレント転身 : GIGAZINE.net

SmartNewsでの活躍も、そろそろ年齢的な限界がきたようです。 徐々に掲載順位を下げ、いよいよ引退の危機です。 そんな時、思わぬところからのオファーが来ました。

なんと、あのGigazine.netです。

「引退して、タレント活動しな?」

はてブの成績をもう置いておいて、タレント業を持ちかけて来たのです。

掲載されたのはヘッドラインニュースという一つの記事のほんの一部分。 なのに、なんだこの破壊力。これがタレント、これがメディアか…!

爆発的なPVを一瞬にしてかっさらってくれました。

まとめ : ご意見番としての今後は?

野球人生としては、ご意見番としての今後(検索流入)というものが考えられますが、 一点突破のネタ記事だったので、なかなかそれも難しいでしょう。 今は隠居生活に入っています。

でも今回の記事は色々な経験をさせてもらってPVの変動を追うのが楽しかったです。

自信を持って書いた記事は、どこかで拾ってくれる

強い球団(ブログ自体の読者数, 固定ファンがが多い)わけではないので、しばらくはこれを信じて書き続けるしかないですね。 あ、ちなみに、自分の記事の行く末を知りたいという方、依頼承りますよ!笑

この記事が、素晴らしい人生を送れるといいな。ではではっ!

*1:少し期間が短い気もします。ちょっと家を離れないといけない都合上ここまでしか取れませんでした。今後ちゃんと取ってちゃんと分析したいと思います。

工学・理学・情報と研究分野を転々とした今だからわかる、大学の授業の大切さと大学での生き方(理系)

f:id:imslotter:20170419213221p:plain こんにちは!ほけきよです。

新学期が始まってもう1週間ですね。そろそろ4月病*1が完治し 5月病を発症する人も多いのではないでしょうか。

今日は、そんな大学生(特に理系大学生)に送る、大学での勉強の仕方についてです。 後悔しない大学生活を送るためにも、読んでみてください!

2回も研究分野が変わってる人

私は大学時代から研究分野を2回変えています。 初めはものを作ったり、実験をどんどんしたりの工学系、次が紙とペンの理学系、最後がパソコンパチパチ情報系。 さらに細かく言うと、3年に上がるまでは材料系に行こうと思って勉強していました。

生来の飽き性で「あれが面白い!」と思ったらそっちになびいちゃう。 このおかげで、得たものもたくさんあるし、得られなかったものもたくさんあります。

こんな経験から私が思うことをつらつらと書いていきますね。

大学の授業はリファレンスを集める場所

私が情報系に携わるようになって、一番感じることが「用語がわからない」と言うことです。それまで、 ターミナル*2はおろか、Linux*3の存在すら知らなかったですから。

用語がわからないのはググれ???と思うじゃないですか。辛いのは調べ方がわからないことです。 謎のバグを踏んだとしても、なんでバグったのか勘所もわからない。どこがエラーの文章なのかもわからない。全コピペするとよくわからない専門用語が学ぶ。初めの頃は毎日発狂していました。

そんな日々を送っていたある日、私に友人がメールで聞いてきました。

ラグランジアンって何?」

物理系じゃなければ、馴染みがない用語かも知れません。 物理から離れて数年も経っていましたから、スラスラと答えることなんてできません。けど、なぜか調べられるんですよ。

「本のこの辺に書いてあるな」とか「このサイトが良さそうだ」とか。

それで、返信がすぐにできました。 その時、思ったんです。

「大学の授業って、役に立っているんだなあ」

私は真面目な学生ではなかったので、歯抜けの知識だったりします。 と言うか、今ではほとんど覚えていません。けれど、 何回か授業に顔を出したり、テスト問題を解いているうちに、どこに何があるかを覚えているんですね。不思議!

高校までの理系科目って、頑張れば全部覚えられます。 でも、大学の勉強は違う。人類数千年の英知を全て知ろうとすること自体不可能です。 だから、調べられる材料、リファレンスを集めましょう

大学の授業は、それを半ば強制的にしてくれます。 ちょっとだるくても、たまに授業に顔を出したり、少しテスト勉強頑張ってみたりするだけでいいです。 *4

「あ、なんか言っていた気がする!!」「どこかでみた気がする」

この体験を、どこかですることになったら、その価値があったということです。 だから、肩の力を抜いて授業を受ければいいんです。 何気なく見聞きした事柄が、後になって大きな力になったりします。 暗記したテストの点がどうとかより、何気なく集めたリファレンスの方が、よっぽど力になります。

要領よく生きよう、ただしギブアンドテイク

けれど、単位を落としたり、成績が低空飛行の中途半端じゃダメですよ。就職に響くらしいので。 全て要領よくやるか、一点特化型を目指しましょう。私は前者なので、要領よく生きてきました。

包み隠さず言えば、

代返してもらう&ノートをとってもらう

をかなりの頻度で重ねていました。代わりにしてくれた人には感謝感謝です。何もせず単位を失うよりはましだと思ったので。 それなりにテスト前は勉強をして、それなりにいい成績で卒業できました。

正直、それでいいと思っています。おかげでいろんなことを経験・勉強できたので。

ただし、してもらってばっかりはダメです。 得意教科を教えてあげるでもいいし、向こうが休みたいときは代返するでもいいので、 必ず受けてばっかりにならないようにしておきましょうね。

「代返してって言われたけど、あいつまじウゼーから、代返せんとこ。」

とかなったら、嫌すぎますからね。

3つ研究分野を変えたからこそできること

私みたいな生き方を強く推奨はしません。 冒頭にも言ったように、この生き方のせいで得られなかったもの、得られないものはあると思います。 一点特化型の人間にはなることはできません。1ジャンルに対するリファレンスがあまりにも少ないからです。

けれど、刹那的に移りゆく興味の中で、たくさんのジャンルのリファレンスを集めることができました。

すると面白いことに、今では3つの分野をぼんやりリンクさせられるようになっています。 機械学習の話であれば

「あ、ここは統計力学のエネルギー最小化と似ているな」とか、「制御理論と似ているな」とか。

この「似ているな」が、かなりの理解と自信の助けてになります。

私の学問の師匠がこんなことを言っていました。

「一点突破型じゃない人は、螺旋状に山を登っている。登るスピードは遅いかもしれないが、頂上に登った時、四方の景色は格別なものになる」

夢を持たせたがる人もいますが、ただ興味の赴くままに、熱中すればいつか繋がる時もある。 これは、学問に限った話じゃないです。遊びたいときに遊べばいいし、学びたいときに学べばいい。ただし精一杯。

夢や目標がない人は、そう考えたら少しは心が軽くなりませんか?*5

必ず必要になる大事な3つの"言語"

です。どんなに研究分野を転々としても、この3つだけはほぼ必ずと言っていいほど使います。

「数学が言語?」と思う方もいるかもしれませんが、数学はこの世の中を記述できる世界共通の言語です。 少なくとも大学1,2年までの数学が使えれば、いろんな分野の理解を助けてくれるでしょう。

これらは「言語」なので、コツコツやるより他ありません。私もまだまだ勉強中です。 少しでも将来理系の研究、仕事につきたいならば、やっておきましょう。

まとめ

最近ふと感じたことをまとめてみました。 私が大学生に戻ったらどうやって生きるだろう。 まとめると

  • 幅広にリファレンスを要領よく集める
  • 数学/英語/プログラミング言語はコツコツとする
  • 熱中できるときに熱中する(学問に限らず)

これだけで、大学生活が豊かになると思います。 大学生の方は、みんなが羨む大学生活、精一杯楽しんでください。ではではっ

*1:やる気に満ち溢れ、キャパ以上の履修をするさま

*2:コマンドをうつ黒い画面

*3:WindowsでもMacでもないやつ、いや、語弊があるか?

*4:本当に理解したいことはちゃんと勉強しましょうね

*5:この手の話はSteve JobsStanford卒業公演の"connecting the dot" なんかもおすすめです。 Steve Jobs' 2005 Stanford Commencement Address - YouTube

貯金の平均820万なのに何で中央値が20万なの?話題の貯蓄額データを科学者が本気で分析する

f:id:imslotter:20170418192248p:plain

こんにちは、ほけきよです!!

こんなニュースが話題になりましたね。

news.livedoor.com

「平均値820万、中央値20万??」

さらに

一人暮らしの平均貯蓄額は822万円だが、中央値はなんと20万円のみ!実に48.1%の単身世帯が貯金ゼロという状況のようです。 - クレジットカードの読みもの

数年後「1人暮らしの貯蓄額は平均値800万円、中央値0円」 - かきのたねとピーナッツ

「貯蓄0の人が48%????」

なかなか非現実的な数値に「どういうことなんだ?」と思う方もいらっしゃるでしょう。*1

私の専門はSocial science/ Complex scienceだったので、このあたりの話題について少し科学的に触れてみたいと思います。

普通の分布

みなさんが普通に思い浮かべる分布ってどんなものでしょうか。 例えば、コインを100回投げたときの表の数って、何回になると思います?

だいたい50回になると予想がつく方が多いのではないでしょうか。50じゃないにしても、その付近に集まるだろうと。 実際にシミュレーションをしてみましょう(読みやすさのために、実験コードは最後につけています。)

f:id:imslotter:20170418020039p:plain

このように、直感通り50付近がもっとも多くなります。 これは大数の法則(厳密には中心極限定理)と呼ばれていて、一回コインを投げた結果が他に影響を及ぼさない(独立)である事象ならば、成り立つことが知られています。 世の中のものの多くはこの大数の法則に従うとされています。サイコロを降り続けたら、だいたい平均は3.5になるだろう。とか。

ベキ分布の登場

ところが、こんなルールをつけてみるとどうなるでしょう。

  • コインを投げる
  • 表が出るたびに、0.05ずつ表が出る確率を増やす

コインは前のコイントスに影響を受け、確率を変える。どんな分布になるか、想像がつきますか? (こちらも実験コードは最後につけています。)

f:id:imslotter:20170418020328p:plain

面白い形になりました。当たり前ですが、表が出る回数が多いところに偏っています。 さらに面白いのが、この頻度分布に対して、両対数グラフをとってみます。すると

f:id:imslotter:20170418030016p:plain

ほぼほぼ直線が現れました!!このような特徴をもった分布をベキ分布といいます。 実は、人間社会にこのベキ分布は非常に多く現れることが知られています。 年収の分布、 仕事の忙しさと頻度、フェイスブックの友達の数の分布。 このあたりの話は、Albert BarabasiやDuncan Wattsなどの本に詳しく載っています。面白いので興味があればぜひ!

バースト! 人間行動を支配するパターン

偶然の科学

ベキ分布はなぜ現れるのか。

ベキ分布という言葉を聞いたことがなくても、

などの言葉をどこかのポピュラーサイエンスで聞いたことがある人もいるでしょう。 これらは全てベキ分布と関わりが深い言葉なのです。

なぜ起こるのか。これを数理的に考察したのがAlbert BarabasiやDuncan Wattsです。原著

彼らが導き出した理由はかなり単純明快。ざっくりいうと人間の感情がベキ分布を作るのです*2

  • フェイスブックでの人気者とは友達になりたいという気持ちが働く
  • タスク量の多い仕事は嫌なので後に回す
  • お金を持っている人ほど余裕があり、さらに富む

このように、社会の多くは正のフィードバックにより動いているのです。これが根本原因です。

先ほどのコインはこの人間社会の様子を模擬的に表したものです。「富めるものは富む」 その法則から、あのようなベキ分布が生まれるのですね

ベキ分布の平均はあまり意味を持たない。

先ほどのコインのグラフを見ていただけるとわかると思いますが。ベキ分布の平均をとってもあまり意味がないのです。2割8割の法則と呼ばれているように、2割の人間が全体の8割をかっさらっていっているからです。 そのせいで、ほとんどの人が平均未満の収入。。。なんてことが起こるのです。

こういうときに役に立つのが中央値です。 中央値というのは、まさに真ん中の値。1000人いたら、500番目の値です。

正規分布は中央値と平均値がほとんど一緒になります。左右対称のグラフからも想像がつくかと思います。 しかし、ベキ分布では中央値の方がより世相をとらえた量と言えると思います。

f:id:imslotter:20170418022218p:plain

本題 今回のニュースにおけるベキ分布

ここで本題です。今回のニュースにおいて、ベキ分布を作って見て、富裕層と一般庶民の乖離がどの程度まで広がっているか、検証してみましょう。ニュースから抜粋した値はこちら

  • 平均値 820万円
  • 中央値 20万円
  • 最大値 8000万円

これらに大体合うように、ベキ分布のパラメータを調整してみます。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
N = 30000 # サンプル数
dist = np.zeros(N)
for i in range(N):
  dist[i] = 8000*np.random.power(0.12) #0.12はベキ分布のパラメータ
print(dist.mean()) #平均値 855
print(np.median(dist)) #中央値 25
plt.hist(dist,bins=400)

結果はこちら。サンプル数3万人での年収分布です。

f:id:imslotter:20170418022520p:plain

もしこの世の年収がベキ分布に従っているならば、ニュースから判断するにこのような分布になります。 実に恐ろしい分布をしていますね。にわかには信じられません。この模擬的な分布を少し分析して見ましょう

48.5%が貯蓄0-20万円

counts, savings  = np.histogram(dist,bins=400)
print(counts[0]) #14655
print (counts[0]/N*100.0) #48.55%

分布から、どの程度の貯蓄を持っているかの分布がわかります。この模擬データによれば、 14565/30000, 実に48.55%の人が貯金ほぼ0という結果になります。 この結果は、冒頭のcardmicsさんの記事かきたろーさんの記事で紹介されている値ともほとんど一致しますね。

約半数が貯金0な訳ですね…

上位層15.8%が全体の富の8割を支配

それでは、この分布で2割8割の法則。つまり全体の2割が8割の富を得ているのかについて分析してみます。

## 全体の貯蓄額
total = np.dot(counts,savings[0:-1])
## 全体の80%を超える頻度分布のライン
i = 96
print(np.dot(counts[i:],savings[i:-1])/total) # 0.803
## その人たちの全体に占める人口
print(counts[i:].sum()/30000) #0.1584

2割より少なくなりました。実に恐ろしい結果です。 2割8割よりももっと貧富の格差は拡大しつつあるのかもしれません。

全体の2割になるための貯蓄額は1200万円

逆に、2割8割の法則の強者側、全体の2割になるにはどの程度の貯蓄額が必要なのでしょうか。

i = 60
print(counts[i:].sum()/30000) #0.2037
print(savings[i]) # 1200

出ました、1200万です! 世の中の勝者になりたければ、とりあえず1000万は貯金しなさいということでしょうか。 なかなか現実と非現実の境目っぽくて、面白いです

まとめ

このデータをとんでもデータだという人もいますが、モデルベース分析してみると、いやはやこのデータなかなか綺麗なデータなのではないか…?とさえ思っちゃいます!

ニュース記事だけをみると、実に反直感的で、にわかには信じられないでしょう。しかし、この非現実的な貧富の分布は、現実に起こっています。というか、分析の結果ここまで現実的な数値がいくつか出てきたのに、私も少し驚いています。初めはなんだ、このトンデモデータはwwwみたいな気分で分析を始めたものですから

まとめると

■ 人間生活ではベキ分布がたくさんある
・ それは人間の感情から引き起こされることが多い
ベキ分布に平均値はほぼ無意味。中央値を使うべき
■ 今回のデータがベキ分布に従うと仮定すると
48%が貯蓄0
・ 全体の16%の人が8割の富を寡占している
・ 全体の2割の勝者になるためには、1200万の貯蓄が必要

ということがわかりました。 今回の結果はサンプル数が少ないので、一概に当てはまるとは言えませんが、目安にはなるのではないでしょうか。結果はなかなかシビアですが、たまにはこういうモデルベースの分析も、楽しいものですね。

貯蓄1200万になるまで、あと1180万...頑張るぞ!!ではではっ

付録

付録1 コイントス

  • コイントスを100回行い、表が出た回数を記録。
  • 30000回繰り返して、どのような結果になるかプロット。
import numpy as np
import matplotlib.pyplot as plt
N = 30000
np.random.seed(1)
def cointoss(iteration=100):
    omote = 0
    for i in range(iteration):
        p = np.random.random()
        if p< 0.5: #確率は半々
            omote +=1 #表ならカウント
    return omote
dist = np.zeros(N)
for i in range(N):
    dist[i] = cointoss()
plt.hist(dist,bins=range(0,100,2))

付録2 公平じゃないコイントス

  • コインを投げる
  • 表が出るたびに、0.05ずつ表が出る確率をあげる

というルールを加えてコイントスを行う

import numpy as np
import matplotlib.pyplot as plt
N = 30000
np.random.seed(1)
def cointoss(iteration=100):
    omote = 0
    omote_prob = 0.5
    for i in range(iteration):
        p = np.random.random()
        if p < omote_prob:
            omote +=1
            omote_prob += 0.05 #表が出たら確率も増やす
    return omote
dist = np.zeros(N)
for i in range(N):
    dist[i] = cointoss()
plt.hist(dist,bins=range(0,100,2))

*1:リンクさせていただきました。都合が悪ければお申し付けください

*2:専門用語で"Preferential attachment"と言います

mastodon(マストドン)を使いこなすための用語(象語)・知識集

f:id:imslotter:20170417225549p:plain

こんにちは、ほけきよです! 週末はmastodon(マストドン)に入り浸っていました。

以前の記事でも言いましたが、黎明期の雰囲気がなかなか楽しいです。 今はアーリーアダプター層が思い思いのことを吠えているジャパリパークなので、 今のうちに参入してその雰囲気を味わってみるのも一手です。

さて、『ジャパリパークの掟は自分の身は自分で守る』です。

独自の発展を遂げつつあり、新規参入者には意味不明な単語が飛び交うこともしばしば そこで、今回はmastodon界隈で生きるための用語や無駄知識をまとめてみました。

マストドンとは

この記事に詳しく書いています

  • オープンソース
  • サーバが一つではなく、分散している
  • フォロー・フォロワーの関係ができると、サーバー同士がつながる

あたりがtwitterとの違いです.

公式用語

とりあえず利用に最低限必要な用語

用語 意味
マストドン ゾウやマンモスに似ている、ゾウ目の何か(wikipediaより)
トゥート! ポストする。twitterでいう「ツイート」
お気に入り twitterと同じファボ。mastodonの場合は♡じゃなく☆
ブースト twitterでいう「リツイート
インスタンス Mastodonのサーバ
pawoo.net pixivが運営するインスタンス。現在人口第1位
mstdn.jp 一度はサーバが落ちてデータ消失の危機だったが見事復活した日本人向けインスタンス。現在人口第2位
mastodon.social 世界中の人が集うインスタンス。現在人口第3位(新規ユーザ停止中)
フォロー/フォロワー twitterと同じ
ホーム twitterでいうホームのタイムライン。流れるのはFFの関係だけ
ローカルタイムライン サーバー内での全トゥートが流れるタイムライン
連合タイムライン 自サーバと、FF関係でつながる他サーバすべてのトゥートが流れるタイムライン
Amaroq iOS用クライアントアプリ
Tusky Android用クライアントアプリ
CW Content Warning 途中からトゥートを隠したいときに使う
f:id:imslotter:20170417225056p:plain
NSFW Not Safe For Work エロ画像など、不適切な画像を貼ったときに使う
f:id:imslotter:20170417225146p:plain

象語

マストドン内(特に日本)では、独自の言語体系(象語)がかなり出てきます。 その中でも良く見かける象語について

用語 意味
パオる マストドンする
ズッパオだよ ずっとぱお仲間だよという意味
マストドン 「寝ます」という意味。○○マストドンで他の動詞も可
寝る象 「寝るぞ」の意味。○○象で他の動詞も可
牙生える 「草生える」
象牙不可避 「大草原不可避」の意味
パクトゥー パクったトゥート。twitterでいう「パクツイ」
ぱおぉぉぉぉん 挨拶。mstdn.jp内でとりあえずこれを言っておけばフォロワーが増える
🐘 象。とりあえず語尾につけておけばふぁぼってくれる
公式(公式じゃない)マーク。多くの人がつけているが全員まとめて非公式

有力インスタンス3つとその雰囲気

今の登録者数ベスト3のインスタンスに入っているので、その雰囲気の比較

pawoo.net

現在第1位の登録数を誇るインスタンス。サーバは企業(pixiv)が立ち上げている。 pixivが立ち上げただけあって絵師が多め。ただし絵のジャンルは二極化している。 普通に楽しんでいる人と、エロ画像貼りまくっている人がいる模様。 現在、不適切画像のフィルタリングに躍起になっている模様。

Mastodon開発者とpixivのPawoo、ロリ絵対策について議論する - ITmedia NEWS

ほとんど日本人しかいない。流速は早め。

mstdn.jp

ツイ廃の上澄みが流れてきているイメージ。 すごい勢いでファボしまくる人や名物キャラ(🐬やリザードン)などがクソリプの応酬をしたりしている。 タイムラインの流速は主要インスタンスのなかで最も早い

内輪で独自の文化を作り上げ、ワイワイ盛り上がっている様子はまさに鎖国中の日本の様。 治安は悪いが、まさに黎明期の文化形成途中という感じでなかなか楽しい

管理人はnulkul氏が運営している。もはや個人で運営できるユーザー数を遥かに凌駕し、一度は落ちるも復活。 現在でもサーバ維持や出会い系の規制など、数々の困難に立ち向かわんとしている。 *1

mastodon.social

管理人Eugen氏はマストドンの生みの親。ここが本家本元のインスタンスといって良いだろう(なぜmstdn.jpのほうが人が多いのだろう)。 一時日本人に蹂躙されるが、新規userの登録を規制。その後日本人がmstdn.jpやpawoo.netなど他のおもちゃを見つけポイ捨て。

その為現在では日本語、英語、スペイン語アラビア語など、国際色豊かなトゥートが並ぶ。 ほかの日本人中心のインスタンスに比べ、平和な世の中である。ここにいる日本人もどこか落ち着きがある。

ちなみに、日本人の襲来に外国の方々は驚き辟易としていたようだった。

ちなみに、こちらが約5日間のユーザー数の推移である。いかに日本が熱狂しているかがわかる。 f:id:imslotter:20170417223523p:plain

その他のTips

インスタンスランキングをみる

ここから、マストドンインスタンスに関する情報を見ることが出来る。

Mastodon instances

ちなみに現在(2017/4/17)のインスタンスランキングはこちら。

f:id:imslotter:20170417223354p:plain

userランキング見るやつ

ここから、主要ユーザのフォロー、フォロワー関係が見られる。

マストドン ランキング

フォローしまくっている人か、有名な人(サーバ運営者)かに二極化している f:id:imslotter:20170417224031p:plain

終わりに

これだけ知っていれば、快適なマストドンライフを送れるはずです。

みんなで一緒にパオろう!ではではっ

*1:運営のために休学も辞さないと言っていたが、学校は行ったほうがいいぞ!

スマブラ!ダンレボ!人工知能が人間に挑戦しているゲーム事例5選

f:id:imslotter:20170416220734p:plain

こんにちは、ほけきよです!

人工知能ブームも、とどまるところを知りませんね。 異常検知とか、画像識別などいろんな現実のタスクにも使われ始めていて、 ビジネス面での応用も色々と考えられています。まさに今が旬!と言った感じでしょうか。

そんな中で、お金の匂いがあまりせず、興味駆動で研究を行っているクールな例もあります。 その最たるものが、人工知能で既存のゲームをクリアする」というものです。 まさに自分の趣味を研究にしているようなもの。実にCooooolです。

今日は、どこまで人間のゲーム界に侵食して来ているのか、記事や最新の論文を踏まえながらいくつか紹介します。 あなたは人工知能に勝てますか??

ブロック崩し

www.youtube.com

ゲーム関連での技術では、強化学習(Reinforcement Learning)というのがよく使われます。「自分が行動して、その結果の良し悪しで戦略を変えていく」という学習の仕方です。

この分野、囲碁の世界チャンプをぶっ倒した"AlphaGo"の登場により、爆発的に研究が進み始めています。 新しい強化学習のアルゴリズムが現れた時に、評価用のゲームとしてよく使われるのがこのAtari Gamesのブロック崩し。 タスクとしてわかりやすく、性能の評価もしやすいからでしょう。

この動画のアルゴリズムは、Deep Q Network(DQN)と呼ばれる技術を用いています。 詳細は省きますが、動画を見ると

  • はじめはほぼランダムな動きをする
  • 少しすると、ボールを落とさないようになる
  • もっとすると、戦略を学び始める

というのがみて取れます。 ちなみに、現在ではブロック崩しは人の平均の10倍以上の成績を取れるようにまでなっています 他のゲームでも、人を超えているのがかなりありますね。アーケードゲームはもう人工知能の方が優秀なのでしょうか。

f:id:imslotter:20170416202444p:plain
図 : Deep Reinforcement Learning with Double Q-learning

スマブラ

誰もが一度は通る世界的有名ゲーム、「大乱闘スマッシュブラザーズ」にも、人工知能のメスが入っています。

下記映像は、世界ランクに乗るほどのプレイヤーとDQNで学習したAIとの勝負。1Pが人間、2PがAIです。

www.youtube.com

つえええ。絶対勝てねぇ。。。

原論文はこちら
Beating the World’s Best at Super Smash Bros. with Deep Reinforcement Learning

こちらの記事が技術面のめちゃくちゃ詳しい解説をしてくださっている。

DQNとA3Cで実験を行い、振る舞いの変化なども観測しているようだ。 手法の新しさというよりかは、既存のものをうまく実適用に当てはめたという感じでしょうか。

64ならまだしも、GameCube版のスマブラDXでこの性能出されたら、もうだめだ感ありますね。

マリカー

これも誰もが一度は通る道でしょう。マリオカート

Kevin Hughesという方が、全自動で運転するプログラムを作成しました。名付けて“TensorKart”

その試行錯誤の様子は自身のブログで書かれています(in English)

TensorKart: self-driving MarioKart with TensorFlow

どういう風に特徴ベクトルを設計したか、最適化を行ったかなど、細かく書かれていて「ホーー」という感じでした。 MNIST, Autopilot(自動運転用機械学習モジュール)と比較しながら書いているので、それらに比べてどういう差分があるのかもわかりやすいです。

学習した結果がこちら

www.youtube.com

少しコースアウトしたり、壁にぶつかったりしていますが、 概ねきちんとコース取りできている模様。多分私よりは上手。 彼のブログ内のはじめの動きに比べれば、ここまで学習させられるのか…という感じですね。 個人でここまでできるのはすごいなと素直に思います。

これに関する日本語の詳しい記事はこちら

ダンレボ

リズムゲーの原点にして頂点、Dance Dance Revolution. これもハマった人は多いでしょう。

今回の論文は"Dance Dance Convolution"

まず名前がズルい。うますぎる。このキャッチーなネーミングにつられて思わず論文をダウンロードした人は多いだろう。 やっていることは、DDRを実際にプレイするというわけではなく、任意の曲からDDRの譜面を自動生成するというもの。

技術的には、C-LSTMというモデルを使った模様。

f:id:imslotter:20170416211354p:plain

詳細は論文参照だが、ざっっっくり説明すると

  • 音をフーリエ変換して、周波数帯とその強度でマッピング、可視化
  • 可視化したものをCNNにぶち込んで、どこでステップを出すか、特徴抽出
  • どのステップを出すかを、RNN(LSTM)を用いて選択

といった感じである。 また、実際にWebサービスとして展開していて、ここから実際に譜面を作ることが可能。

Dance Dance Convolution

難易度を5段階(Beginner Easy Medium Hard Challenge)となっているが、 LSTMの精度が高密度の方がいいらしく、難易度が高くなる方が高精度で譜面生成してくれる。 皆さんも、好きな曲でChallengeの難易度での譜面生成、してみてはいかがでしょう。

FPS

根強い人気を誇るFPS(First Person Shooter)*1Call Of Dutyとか、バイオハザードとかは、今でも熱烈なファンが多くいますね。そんなFPSを強化学習で強くしようとした論文がこちら

Playing FPS Games with Deep Reinforcement Learning

対象ゲームは"Doom“と呼ばれる、FPSの草分け的なゲーム。 今ではAIでどこまで強くなれるかの、コンペティションの対象になっているようです(VizDoom )

www.youtube.com

普通に殺せている…強い(確信)

技術的なところを少しだけ話すと、この手のゲームで難しいのは1人称視点なので、観測範囲が限られる(partial observation)ところ。つまり、自分の行動の結果としてみられる範囲が自分の視点だけであり、そこから全体を推測しないといけないところが難しい。

この論文では、その問題に対してDRQN(Deep Recurrent Q-Networks)という手法で取り組んでいます。部分観測から、今の状態(hidden state)を推測して、次の行動へと移るといったイメージです。

もう一つ工夫としては、navigationとactionという2フェーズに分けたところ。

  • navigation : 移動の仕方
  • action : 敵の殺し方

これらをまとめて行動とする場合と、別々のネットワークで学習させる場合で、かなり結果が違っています。

f:id:imslotter:20170416214047p:plain

これだけ行うタスクが明確に違うと、分けた方が学習が効率的に進むということですかね?

まとめ

いかがでしたか?

ゲーム下手な私は多分、どのゲームも勝てないと思います。 自分がゲームの練習して勝つより、学習モデル作って勝てるゲームプレーヤーを作るほうがまだ可能性があるのでは?とか思っちゃいます。そんな時代なのですね。

これからどんどんこういう事例が出てくると思います。 ニコ動の「才能の無駄遣い」タグがぴったり当てはまるこの分野、 なかなかに好きなので、今後も注目です!ではではっ!

*1:一人称視点で行うゲーム

【マストドン】人気爆発中、新感覚SNS『Mastodon』の黎明期を味わえるのは今!みんなでパオろう。

こんにちは、ほけきよです!

最近、とある界隈で話題になっている『Mastodon』というのを、ちょっと試してみました。

Mastodonとは

Mastodon は自由でオープンソースソーシャルネットワークです。商用プラットフォームの代替となる分散型を採用し、あなたのやりとりが一つの会社によって独占されるのを防ぎます。信頼できるインスタンスを選択してください — どのインスタンスを選んでも、誰とでもやりとりすることができます。 だれでも自分のMastodon インスタンスを作ることができ、シームレスにソーシャルネットワークに参加できます。 (HPより)

ロゴはこちら

f:id:imslotter:20170414230816p:plain

wikipediaで調べてみると、象やマンモスの仲間らしい (マストドン - Wikipedia)

特徴は

つまり、サーバさえ持っていれば、だれでもtwitterのようなプラットフォームを作ることが出来ます。 サーバごとに人を集めて、twitterのようなSNSを楽しめる。 分散の一番のメリットは、コミュニケーションが単一の企業に独占されるリスクを避けられるところだと開発者は言っています。 広告なども無く、まさに初期のtwitterのように楽しむことが出来ます。

始めるには

まず、自分の好きなサーバを選びます。 実は、現在(2017年4月14日)、公式サーバでの登録ができません

f:id:imslotter:20170414231645p:plain

おそらくしばらくしたら復旧すると思いますが、早く始めたい!というかたは、別サーバで始めることも可能です。

ただ、自由にサーバがたてられることはメリットばかりではありません。保証がどこにもないサーバだと突然サーバが落ちて、データ全消失でもだれも責任を取れません。パスワードが管理人に抜かれる危険性もあるので、気をつけましょう。

実は、ほんのちょっと前、mstdn.jpという個人運営のサーバがあったのですが、日本人が来ておもちゃにしすぎたせいで、サーバがダウンしてしまったようです。*1 涙なしでは語れない記事はこちら

www.itmedia.co.jp

なので、選べるなら信頼度の高いサーバを選んだほうが良いです。あと、個人的にはある程度人が集まっているサーバのほうが楽しいです。 個人的なオススメサーバは、公式サーバか、pixivが運営しているサーバです。

pawoo.net

サーバを選べば、ユーザーネームとメールアドレス、パスワードを入力して、簡単に登録できます

使ってみた

ブラウザ上で使えるので、PCでも携帯でも使うことが可能です。今回はデスクトップ版中心に紹介します。*2

f:id:imslotter:20170414233431p:plain

なかなかオシャレなデザイン。

twitterと似ている所

まず、つぶやくこと自体はtwitterと似ています。 ただ、Mastodonでは"tweet(つぶやく)“ではなく、"toot(吠える)"と言うらしいです。 ちなみに、500文字まで呟けます。写真は1枚50文字換算のようです。 はじめは「トゥート?ツイートのパクリかよw」と思いましたが、Mastodonっぽくていいですね。

また、タイムラインも上からばぁーっと流せます。それはまるでTweetDeckの様な仕様です。

twitterとは違う所

Mastodonには、大きく3つのタイムラインがあります。

※使ってみて、『多分こうじゃないのかなー』と思いながら書いているので、間違えがあるかもしれません。その時はご指摘お願いします。

  • ホーム
  • ローカルタイムライン
  • 連合タイムライン

です。順番にいくと、

ホームは、フォローしている人の情報が流れるものです。twitterのタイムラインと同じイメージを持つと言いと思います。

ローカルタイムラインは、同一サーバ上の全員のアクティブトゥートが見れます。大きなサーバだと、流速が早く、眺めているだけでも面白いです。そして、特徴のあるサーバを選んだのであれば、ここのタイムラインを見ると、その色に特化されたタイムラインが出来上がっているはずです。たとえば、今渡しがいるpixivのサーバだったら、絵師が多くいたりといった感じです。

そして、Mastodonの面白いところはこの「連合タイムライン」というものです。フォロー/フォロワー関係になった、などで連携しているサーバの人たちとつながることができ、連合タイムラインはそこも含めたすべてのトゥートを見られるようになります。つまり、いろいろなサーバの人とつながるとこの連合タイムラインに流れるトゥートはどんどん増えていきます。このような機能により、いろいろな人と繋がれる仕組みを作っているようです!

f:id:imslotter:20170415000349p:plain
(前画像の右端の拡大図)

ちょっとしたTips

ここでは、Mastodonに馴染めるように、Tipsや小技を紹介します

人を検索するときは、@名前@サーバー名とすると良い

サーバーごとにIDを管理しているようなので、ユニークなユーザーネームにアクセスするためには このようにしましょう。メンションとかを飛ばすときも、これでOKです!

また、スマホ(iphone)でのID検索はUIがイケてなくて、一度書き込みボタンを押すと左上に検索マークが現れます。 検索と書き込みは機能が別のはずなので、分けて欲しいですね…

公式っぽく見せるアイテム

例えばこのトゥート

f:id:imslotter:20170414235717p:plain

私の名前の横に公式マークっぽいのがついていますよね。 Mastodonでは、このようにマークをつけることが出来ます。 「✅」をコピペ、もしくは「チェックボックス」と入力して変換すれば、この公式マークを付けることが出来ます。

ぱおぱおうるさいけど何??

タイムラインを眺めていると、 「いいからパオれ??」とか「ぱおぉぉん」とか

謎の言動をしている人たちが多くいます。これは

「Mastadon ⇨ 象みたいなもんやろ ⇨ ぱおぉぉん」

とのことです。ちなみに『ぱおる』は、Mastodonをする。という意味らしく、タイムラインを観ることも包含されていそう。 すこしツイートするとかよりも便利な言葉のようです。語感もいいし、流行りそう!

連合タイムラインを開きっぱだと、重い

当然ですが、連合タイムラインは爆速でトゥートが流れていきます。 PCブラウザでもかくかくになります。スマホだと、1時間で2回ほど完全フリーズで落ちました。

トゥートしたり、何かMastodonで作業するときは、連合タイムラインは隠しておいたほうが良いかもしれないです。

自サーバの情報を見る方法

自分が使っているサーバが今、どのくらい活発なんだろうか。それらの情報を見るには、右端の「サーバー情報」を押せばOKです。

f:id:imslotter:20170415000539p:plain

  • 誰が運営していて
  • 今何人いて
  • どれくらいのツイートをしていて(ローカルタイムラインに関係)
  • 何個のサーバとつながっているか(連合タイムラインに関係)

という情報がわかります。

用語

Mastodon特有の用語集(思いついたら追記します)

  • トゥート! : ツイートのようなもの
  • ブースト : リツイートのようなもの
  • 連合タイムライン : つながっているサーバとか全部含めたタイムライン
  • ローカルタイムライン : 自サーバ内のタイムライン

所感

正直、今めっちゃ楽しいです。 色んな人がおもちゃのように楽しんでいるので、無法地帯な感じも結構好きです。 まだ秩序があんまりなくて、クソみたいなトゥートやクソみたいなリプしかないんですが、 ほぼ100%の日本人が楽しんでツイートしてます*3。悪意とか、策略とかがまだ一切ない感じ。 例えるなら、みんながジャパリパークのフレンズたちのよう。

わたしも使用30分で、脳が溶けました。たのしー!!!

そのうちまた広告や政治の温床になり、めんどくさくなりそうなので、楽しみたいみなさんは今がチャンスですよ! 何も考えなくていい、サファリパークみたいな場所で、『ぱおぉぉぉん』とつぶやきましょう!ではではっ

ぱおぉぉぉん🐘🐘🐘🐘🐘

*1:現在、サーバは復旧しています!

*2:携帯版は、あんまりUIがこなれていなくて、使いにくいところもありました

*3:日本人が楽しみすぎて、外国人がすこし困っているようですが…w

建設的な議論のために。フィンランド小学生の『議論の10のルール』

f:id:imslotter:20170412014844p:plain

こんにちは!ほけきよです。

2010年から使っている、化石のような自家用Macbook、 1年ぶりに充電器が手に入ったので電源を入れてみると、 久しぶりに懐かしい物を目にしました。スティッキーズに残していた自分のメモです。

フィンランドの小学生が定めた議論のルールというモノです。 それがこちら。

議論における10のルール

  1. 他人の発言をさえぎらない
  2. 話すときは、だらだらとしゃべらない
  3. 話すときに、怒ったり泣いたりしない
  4. わからないことがあったら、すぐに質問する
  5. 話を聞くときは、話している人の目を見る
  6. 話を聞くときは、他のことをしない
  7. 最後まで、きちんと話を聞く
  8. 議論が台無しになるようなことを言わない
  9. どのような意見であっても、間違いと決めつけない
  10. 議論が終わったら、議論の内容の話はしない

人の振り見て我が振り直せ

いかがでしょう。本当に小学生が考えたんでしょうか?と思うくらい、含蓄に富んだ内容です。 久しぶりに見返すと、うんうんと頷きが止まりませんでした笑

  • 相手を尊重する
  • 常に建設的であることを意識する
  • 感情に左右されない

できていない人多いですよね。今の会社でも、

  • 中途半端なタイミング(収束フェーズ)でのそもそも論
  • 自己主張が強いくせにまとめる能力はなくとっ散らかる議論
  • だらだらと朝から晩まで延々と続く会議

などがたまに発生します。

正直、議論したい時、真面目に話したいときにこの辺りができていない人と話をすると、 時間を無駄にした気になってしまいます。

こういうとき、いつも

「自分はああなっていないか?客観的に自分を見て、ならないように気をつけよう」

と自戒します。多分気をぬくと惰性でこんな議論してしまうので、日頃からこの10カ条を意識しないとなと改めて思いました。

まとめ

学生の間、とくに団体でプロジェクトを回している時に常に意識しようと思って一番目につくデスクトップに配置していました。

f:id:imslotter:20170412013645p:plain

作成日が"2011年5月20日"なので、実に5年くらいはこれを見ながらいろんなことをやっていたわけです

この1年くらい、見ていなかったので忘れかけていましたが、また思い出すことができてよかったです。

社会人になってこのルールを見返すと、その通りだなと思ってまた味わい深いですね。

皆さんも、議論を有益にするために、この10カ条を意識してみてはいかがでしょうか。ではでは!

DeepMind社謹製の深層学習ライブラリ『Sonnet』の事始め

f:id:imslotter:20170411211409p:plain

こんにちは、ほけきよです。

DeepMindが数日前に、tensorflowを用いたモジュール"sonnet"をオープンソース化しました。

普段Kerasしか使っていないのですが、ちょっとだけ触ったり調べたりしたので

  • インストール方法
  • Exampleについて
  • Kerasとの違い。想定ユーザ

など、所感とともにメモとして残しておきます。

sonnetとは

  • DeepMind(今一番キテるGoogle傘下の研究所)が社内用に使っていた深層学習用ライブラリ
  • tensorflowのラッパー的立ち位置(tensorflowが入っていることが必要)
  • Linux/MacOSXで対応

requirement

  • python2.7 : 3系はまだ対応していないそう
  • tensorflow >= 1.0.1 : Deeplearning用ライブラリ
  • bazel (>= 0.4.5 )  : Google謹製のビルドツール

インストール方法

bazelのインストール

Documentをみる。自分のOSに応じて。(今回は MacOSXのhomebrew)

Installing Bazel - Bazel

brew cask install java #javaのインストール
brew install bazel

sonnetをダウンロード、チェック

  • githubからコードを取ってきて、まずはインストールできるかチェック
git clone --recursive https://github.com/deepmind/sonnet
cd sonnet/tensorflow
./configure

ないものはエラーに従って入れていく。

./configureで色々聞かれる(コンパイラを最適なやつ使うかとか、OpenCL使うかとか、pythonのパスとか) 別にこだわりがない人はEnter連打で(でも一応メッセージはみておこう)

うまくいくとこんなメッセージが。

Extracting Bazel installation...
..............................................................
INFO: Starting clean (this may take a while). Consider using --expunge_async if the clean takes more than several minutes.
.............................................................
INFO: All external dependencies fetched successfully.

ビルド、インストール

sonnetをビルド

mkdir /tmp/sonnet
bazel build --config=opt :install
./bazel-bin/install /tmp/sonnet

/tmp/sonnet以下にpip installできるファイルができるので、

pip install /tmp/sonnet/*.whl

とする。これで完了

チェック

pythonを起動し、以下のコードを打つ

 import sonnet as snt
 import tensorflow as tf
 snt.resampler(tf.constant([0.]), tf.constant([0.]))

下記の表示になればOK

<tf.Tensor 'resampler/Resampler:0' shape=(1,) dtype=float32>

Exampleを試す

タスク

使えるようになったので、exampleを実際に動かしてみる。 普通こういうのはMNISTを使って分類が定番だが、今回のexampleはRNN(多層のLSTM)を使ったもの。まだexampleはそれしか用意されていないよう。

中身のコードを見ながらLSTMをどうやって書くのか眺めるのはいいかもしれない。今回は結果だけ。

データセット

シェークスピア“CORIOLANUS”を使って学習させ、それっぽい文章を生成するRNNを作ろうという感じ。

Coriolanus (The New Cambridge Shakespeare)

Coriolanus (The New Cambridge Shakespeare)

結果

中身は置いておいて、とりあえず実行してみる。*1

python rnn_shakespear.py

はじめにWARNINGがたくさんでた後に、学習が進んだ。WARNINGは

「お前、もっと環境を最適化できるけどしないの?」

というやつ。

結果はたまに文章ぽいのもあるがちゃんとした文章とは程遠い。学習データが少ないから?

INFO:tensorflow:9999: Training loss 78.764648. Validation loss 100.533051. Sample = b_0: 
ht this, and we letter my house of Hereford,|Will reason at wailer, I have by found you.||BENVOLIO:|
No, therefore, none me thy ear, or we were not a|great-father uncle Edward's right divined soul six with his first,|
And then I tear the back of pleasure; and our sword|
To bowly me of preceion dubfil-god:|Go well in Aufidius to year:|
You may not show thy length.|
|PARIS:|
His lady.|
|POLIXENES:|So Margaret.|
|LEONTES:|Hail, sir, too saying!|
|NORTHUMBERLAND:|So parentme: call me wench-for my greatest,|
Twear have a man; twerver it sorrows I lovely curs you,|Gives me, encorst, for his masters did not myself;|
For thy welcome visiting name of your native|hath not all thy desires to run broke us|
Yon me--and Phoebus Derby, be said, hast thou no man all, my oaths,|Break not that maids with this nighuls of your life|
Will grow themselves: both best in earth! had he were no;|
Who adveral with punish made both|To do them, and majesty, Aumelle;|Many to this the coming love marriage|What, lost deny here: h
INFO:tensorflow:Reducing learning rate.
INFO:tensorflow:Test loss 129.366608

また、学習したモデルは /tmp/sonnet以下に保存される。

中身をちょっとだけ見る

sonnetでは、Deeplearningのネットワークをを作る部品がsonnet/python/modulesに色々と揃っている。

sonnet/sonnet/python/modules at master · deepmind/sonnet · GitHub

例えば

  • conv : CNNのconvolution層を作ることができる
  • gated_rnn : LSTMなど、RNNに用いるゲートを作ることができる

また、ここに、いくつかの既製のネットワークがあるようだ。

sonnet/mlp.py at master · deepmind/sonnet · GitHub

  • Alexnet
  • ConvNet
  • Multi Layer Perceptron
  • Dilation

f:id:imslotter:20170411212105p:plain
(例 : AlexNetのアーキテクチャ(Krizhevsky 2012))

例えば、自分でネットワークを作りたければ↓のようにネットワークを構成していく (DeepMindのSonnetを触ったので、TensorFlowやKerasと比較しながら解説してみた より拝借)

def build(inputs):
    outputs = snt.Conv2D(output_channels=32, kernel_shape=4, stride=2)(inputs)
    outputs = snt.BatchNorm()(outputs)
    outputs = tf.nn.relu(outputs)
    outputs = snt.BatchFlatten()(outputs)
    # TensorFlow
    weight = tf.Variable(tf.truncated_normal(shape=[4096,10]))
    bias = tf.Variable(tf.constant(0.1, shape=[1,10]))
    outputs = tf.matmul(outputs, weight) + bias
    outputs = tf.nn.relu(outputs)
    return outputs
model = snt.Module(build)

学習はtensorflowの記法にしたがって行う。

これがKerasだと、以下のような感じで書く

model = Sequential()
model.add(Conv2D(32, kernel_size=(2,2), activation='relu', input_shape=(28,28,1))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(10))
model.compile(loss='mean_squared_error', optimizer=Adam())

学習はmodel.fit(...)を使う。

最も大きな違いは

  • sonnetはtensorflowとコード上で組み合わせて使うことができる
  • Kerasはkerasとして閉じている

ということ。これは一長一短で、Kerasは全てKerasとして使うことができるので、終始一貫して直感的に扱うことができるように構成されている。しかし少し手の込んだネットワークに拡張しようとすると、柔軟性が低いと感じることがある。

一方でsonnetは面倒なところだけをモジュール化して、細かく設定したい時にはtensorflowをそのまま用いることができるので、自分で柔軟性を自由に調節できる。 しかし、tensorflowを使うのは、Kerasに比べて少し敷居が高いように感じられる。

あとは、ドキュメントやtutorialが圧倒的に少ない。そしてもちろん日本語はない。

所感

sonnetは、すでにtensorflowを使っている強い人たち が対象なのかなって思った。 そういう意味ではまさにDeepMindの社員が使うようなイメージに近い。面倒なところをなるべく省いて、本当に大事なところだけ集中するためのツール、というイメージでした。研究者の間では流行るかもしれない。

個人的には、Kerasを使えればまずはいいかな… もうちょっとtensorflowになれる必要があるなと感じました。

*1:ちゃんと勉強したらまたメモとして記事にしようかな…

PROCRASIST