機械学習×名古屋×Julia

antimon2氏:では始めます。仮で「機械学習と名古屋とJulia」っていう名前で送っていて、「と」が「×」に変わっただけですが、正式に「機械学習×名古屋×Julia」というタイトルで発表を進めていきます。

今日話す内容はだいたいこんな感じです。自分のこと、あと機械学習、実際にどういうふうなのかを順番に話していきます。

まずは私のことなんですけど、「私×Julia」というか「お前誰よ?」って話だと思うので自己紹介から始めます。後藤俊介という名前です。有限会社来栖川電算という、名古屋でAIをやってる会社で、社員として働いてます。

「機械学習名古屋」っていう勉強会を、自分1人じゃないですけど、2人で共同で主催してます。ほかに「Python東海」とか名古屋系のいろんな勉強会には「参加してる」って格好で、あとRubyコミッタのmrknさんいますけど自分もRails Girls Nagoyaに毎回コーチとして参加しています。

mrkn氏:すばらしいです。ありがとうございます。

antimon2氏:言語としては、Rubyを初め昔はいろいろ触ってたんですけど。今仕事ではPython使っていて、あとJuliaをなんとか仕事で使いたいなぁと一生懸命やってるところ、という話もあとでお話します。Twitter、Facebook、GitHub、Qiita、ぜんぶ「antimon2」っていうIDでやってます。

さっきちらっと言ったんですけど、これがうちの会社のWebサイトです。名古屋のAIっていう感じの会社ですけど。キャッチフレーズ「いいソフトウェアを楽に作る技術を追及する企業」って謳っています。機械学習、画像認識系を中心にいろいろとやっています。

あと機械学習名古屋の勉強会を2ヶ月~3ヶ月に1回くらいのペースでやってて、次回は12月1日にやる予定です。TensorFlow HubとかSageMakerとか、そういうのを今回はやる予定です。

この勉強会に出てくるのはPythonの話なんですけど、自分が主催者特権で毎回Juliaの話をしてます、っていうのもあとで話します。

Juliaとの出会い

私とJuliaの話なんですが、JuliaのREPLってみなさんもちろん使っていて、カスタマイズはしてますよね。自分はこんな感じになってます。見て、どこか引っかかるところがありませんか?

そうです、Brainfckが動くようになってます。「~/.julia/config/startup.jl」にいろいろ書くと、いろいろカスタマイズができるんですけど。その1番下に「BFREPL」というのが付いてます。これ自作のパッケージで、と言ってもGitHubには公開してるんですけど、正式登録はしてないです。だから「add http://github.com/antimon2/BFREPL.jl.git」とすればインストールできます。自分のREPLでは、Brainfck動きます。

こんなふうに書くと、「I ♥ Julia」って表示されると。こういう遊びもやってます(笑)。「Juliaでこういうこともできるよ」っていうアピールで、ネタのために作ったんですが。興味あったらインストールして遊んでください。

そもそも自分がJuliaと出会った頃とか、そのへんの話をちょっと…まぁあまりしてもしらけちゃうので、さらっと流すんですけど。最初に出会ったのはたぶんこの本です。

データサイエンティスト養成読本 R活用編 Software Design plus

本全体としてはRの活用術なのですが、いち特集として「Julia入門」というのがあったんですね。

「こんなのできたんだ、新しい言語なんだ」と思って見てたら、bicycle1885さんも参加していたと思いますが、QiitaでJuliaのAdvent Calendarを見つけて。その記事を1ヶ月見て、「Juliaおもしろいな」と思いました。

その1ヶ月後、更新日2月6日なんですが、投稿日は2月2日です。1ヶ月勉強して、それで「充足可能性問題(3-SAT)を解く乱択アルゴリズム」を実装する記事を書きました。これが自分のQiitaの初Julia記事になります。

そこからQiitaにJuliaの記事を書くようになりまして。今QiitaのJuliaタグのユーザーランキングで1位取ってます。2日前で401なんですけど、昨日か今日「いいね」押してくれて、402になってるかと思います。最近だと1週間ちょっと前に、ユニットテストの話をQiitaの記事に書いてます。

ついでに言うと所属会社も、自分が400くらい取ってるんでOrganizationランキングで1位になっちゃいました。

(会場笑)

あたかもJuliaで仕事してる会社みたいに思われちゃうんですけど、Juliaで仕事、もしあったら声かけてください(笑)。なにかできるかもしれないです。

あと「tag:Julia user:antimon2」で検索するとこんな感じで、29件自分が投稿しているらしいです。最初に投稿したのが3年半前、2015年の2月なんですけど。そのときのJuliaはバージョンが0.3だったんですよね。

最初は0.3.1、そのあとすぐ0.4が出て、今0.5、0.6、0.7、1.0まできてるんですけど、その0.5のdev版が出るときにGeneratorが初めて出てきました。Generatorって、PythonにもあるGeneratorなんですけど、「これおもしろそう」「これ欲しかった」ってのを実際に触ってみて記事にしたり。

あと0.6が出るときに型システムに変更があったのですが、その時bicycle1885さんもその変更をブログの記事にしているのですが私も「これ自分の欲しかった型システムの変更だな」っていうのでそれを記事にしたり。0.7-devでIterationのプロトコル変更があったので、それもちょっと記事にしてみたり。

そういう感じで、古いバージョンから順に新しくなるにつれてどう変わっていったのかっていうキャッチアップをしています。たぶんQiita上でJulia普及に貢献してるんじゃないかなと思っています(笑)。

数学界隈でのJulia普及に貢献

ついでに、MastodonってTwitterの代わりになるという噂もあるんですが、「s」じゃなくて「th」のMathtodon、数学者・数学徒が集まるMastodonインスタンスがあります。ここでこんな話題が出まして、こういうの調べてみたらこういう組み合わせがありました。

これ数論的にどうなのって聞いたら、数論じゃなくてMathematicaに投げて返してもらっただけですということでした。そこで、それをJuliaでやってみたらこんな感じで、5秒で返ってきました。5秒ってそんなに速くないと思うかもしれないですけど、その前に誰かがPythonでやってみたら38秒かかった。Python2で38秒、Python3で2分弱かかったって。

そういう投稿があったので、じゃあJuliaでやってみたら5秒で返ってきた。この当時のバージョンが0.5だったかな。それでやって、5秒くらい。その後、0.6.4でやったら2秒ちょっと。最新のバージョン1.0でこの前やったら、0.3秒で返ってきました。「何があった? すごい速いじゃん」っていう(笑)。

これが5月7日なんですけど、この投稿がきっかけでその翌日5月8日に、当時JuliaBoxがもう出てたので試してみた人がいました。この人は今もTwitterやMathtodonで、Juliaで試してみたり。数値計算やってプロットして結果を出したり、それをJupyter Notebook上で実行してnbviewerで見る。リストかどこかに分けてということを積極的にやってくれています。

自分の投稿がきっかけかどうかはともかく、とりあえず自分の投稿よりもあとにMathtodonでJuliaの話が盛り上がってるような気がします。ということで、数学界隈でもJuliaの普及に、たぶん(笑)、貢献してると思います。

名古屋における機械学習勉強会とJulia

時間がないのに自分の話で引っ張っちゃってごめんなさい。自分の話はここまでにして、やっと本題に入ります。「機械学習×Julia」。機械学習の話をする前に、「機械学習×名古屋」、自分の勉強会の紹介をちょっとさせてください。

これは前回の勉強会の様子なんですけど、名古屋にしてはけっこう盛況です。この会場が100人くらい入るところで、80人くらい集まってくれて。次回の12月1日のやつも、まだ定員は決めてないですけど今のところ50名超の申し込みがあります。

東京だと100人の枠があっという間に埋まるとかザラなんですけど、名古屋では50人でも溢れるのいうのはけっこう珍しいことで、盛況な機械学習の勉強会になってありがたい限りです。

<a href="https://machine-learning.connpass.com/"target="_blank">Connpassのページはこんな感じになってます。Facebookでもページを持っていて、動画を配信するときはここを使って配信したり、最近更新が滞っていますが、いろいろ情報提供しています。

「機械学習×名古屋×Julia」の話なんですけど、さっきちらっと言いましたが、自分が主催者という特権を活かしてJuliaの発表を毎回しています。第2回、当時まだバージョン0.4がやっと出るかくらいのときに、Juliaをもう紹介したということです。

このときはとりあえず機械学習の初歩ということで、線形回帰やk-meansみたいな簡単な、ディープラーニングを使わないものを試してみようという話でした。例えばk-means、こんなの作ってプロットして遊んでいました。これを見せて、こんなのできるんだよ、という発表をしました。

その次、すこし期間が空いて2016年4月に第3回の勉強会やったんですけど、そのときにもうTensorFlowも出てきて。ほかにもいろいろディープラーニング系のライブラリが出てきてたので、それでいろいろと試してっていう紹介をしました。

このとき、自分がやったのはMochaとMXNetと、あとPyCall経由でTensorFlowとか。いろいろ触ったんですけど、例えばMXNetだとこんな感じでできますよっていう発表をしています。

その頃はMXNetがこれからはやるんじゃないかって思ったんですね。その次の勉強会、第4回は次の月、2016年5月にやったんですけど、そのときにMNISTっていう手書き文字認識のデモをやりました。こちらもMXNetを利用したものです。

こんな感じでJupyter Notebook上にHTMLレンダリングして、そこにcanvasで「2」って書いてClassifyのボタンを押すと、裏でJuliaが走っててその結果を返してくれる、というのをデモでやりました。

ちょっと空いてその年の12月に、これQiitaのAdvent Calendarなんですけど、このときちょうどQiitaのスライド機能ができたので「試しに使ってみるか」ってことでスライド機能を利用して。ちょうど12月3日が勉強会の第8回の日だったので、発表資料を兼ねています。

この回は「Deep LearningのためのJulia」という名前で紹介したんですが、このときはライブラリは使いませんでした。。『ゼロから作るDeep Learning』という本が出たときで、それはPythonとnumpyを使った本なんですが、それをJuliaでやってみたという発表です。

勉強会で発表したこと

次へいきますね。また空くんですけど、半年後の第11回、2017年7月です。改めて「Juliaの紹介」という発表にしてるんですが、これは発表大会でみんな発表したい人がたくさん集まって発表した回だったので、「じゃあこの機会にもう一回Juliaを改めて」ということで紹介しました。

「新言語」と言っていますが、もう出て5年は経っているので、そこまで新しいというほどではないかもしれません。でも、みんなからしてみれば新しい言語だろうということで、「新言語」っていう名前でもう一回紹介しました。

このときはもうちょっと実用性とか、そういうのも紹介したほうがいいかなっていうので。内容はここに出てこないんですけど、JuliaとPythonと、GHCi/GHC(Haskell)で同じ動きをするものを組んでみてどうなるかっていうのを試してベンチマークを取ってみました。

ちなみにこのex2が、さっきちらっと見せた組み合わせが何通りあるかを計算するやつ、Julia 0.6で2.63秒だったという話です。Pythonよりももちろん速いんですけど、Haskellにはこの計算に関しては負けてます。でもコンパイルした言語並みの速さは出てるよねっていう話をしました。

先ほどFacebookで動画配信してると言いましたが、このときは発表大会だったので、試しで動画配信しました。本日の発表資料に動画へのリンクは貼ってあるんですけど、流すとちょっと重くなるかもしれないので家に帰ってから流して見てみていただくとありがたいです。

13回目の勉強会では、remote_channelを使ってマルチプロセッシングでデータを取得して、それをバッチプロデュースするっていう実験をした話をしました。

あとそれも利用して、CIFAR-10っていうのは、画像認識の10種類に分類するっていうタスクのサンプルデータなんですが、これを実際に使って学習をしてみてどうなったかっていう実験をしました。この画像を用意して、どっかから引っ張ってきた猫の画像ですけど、それを投げたらちゃんと「cat」って出たと。

たまたまこれちゃんと「cat」って出たんですけど、確信度が0.189だから本当ギリギリなんです(笑)。学習時間が足りなかったんですが学習できますよっていう話をしたり。

その次かな、2018年。もうついこの間ですね。自動運転とかそういうのに応用できる強化学習という機械学習の手法のプラットフォームで、OpenAI Gymというものがあって、それをJuliaから使ってみたっていう話をしました。

こんなデモを見せました。これはブロック崩しですね。ブロック崩しのゲームをJuliaからOpenAI Gym経由で動かして、学習させて、なるべく高い点数を取れるようにと。ネットワークが貧弱だったのでそこまでいかなかったんですけど、動いたしある程度学習してくれました。

今映ってるのはWindowsのキャプチャ画面なんですけど、OpenAI GymってWindowsはサポート外で、そこにWSL入れて、WSL上にいろいろ構築して、X Windowで描画するっていう。こういうふうにするとWindows上でもLinux環境でこういうことができますよっていう紹介も兼ねてやっていますと。

あとついこの間、1ヶ月前にやった勉強会で、Julia v1.0がそのさらに1ヶ月前の8月8日に出ましたっていうことで、その紹介をしました。ここで新しいパッケージマネージャーの話とか、プロジェクトを作るとかユニットテストを追加するっていう話をしました。

違う角度から撮った写真があるんですけど、見にくいですがこれJuliaのREPL立ち上げて、そこでプロジェクト作ってステータス確認してっていうのを見せてるところです。こんな感じで毎回Juliaの発表をしています。

ほかの回でもJuliaの紹介くらいはしてたり、あとほかの勉強会行ってJuliaの紹介をしちゃったりもしてます。Python東海っていう勉強会、Pythonの勉強会なんですけど、ちょっとテーマがゆるくて。「py」が入っていればOKという。だから「Ju『py』terを使ってJuliaで動かす」と。

(会場笑)

そういうのをやってます(笑)。こんな感じで、機械学習名古屋とJuliaのお話でした。