Ruby脳で実装するCNN

ネイティブアド配信プラットフォーム「UZOU」エンジニアの@hatappiです。
今回は社内で行われたSpeeeKaigiという社内技術プレゼン大会のことを書きます。

SpeeeKaigiは今回で4回目を迎えました🎉

tech.speee.jp

私は「Ruby脳で実装するCNN」というタイトルで発表しました。
発表資料はSpeaker Deckにアップロードしているのでそちらをご覧ください。

speakerdeck.com

CNNはニューラルネットワークの1つで畳み込みを行います。
全結合ではRGB画像のように縦、横、チャネルの3次元のデータを1次元にして処理をするため、チャネル間の関連性などが失われていました。
CNNでは形状を維持しつつ次のデータ層にデータを渡すことが出来ます。
そのため画像識別などに使用されることが多くあります。
また、画像識別だけでなく自然言語処理でも使用されている例もあるようです。
TFUG#3 RettyにおけるDeep Learningの自然言語処理への応用事例 // Speaker Deck

このCNNを今回Rubyでも実現しました。

なぜRubyで実現したのか

それは Rubyをキメると気持ちいい からです。

どのように実現したのか

私はプライベートでRed Data ToolsというRubyのデータ処理を提供することを目的としたOSSプロジェクトに参加しています。
今回はRed Data Toolsで作っているRed ChainerというRubyの深層学習フレームワークを使いました。

github.com

Red ChainerはPython製のChainerをRubyにポーティングした深層学習フレームワークです。
ニューラルネットワークやCNNなどのネットワーク構築をする上で必要なAPIを提供します。

今回はCNNを実現するために畳み込みを行うConvolutionやMaxPooling, DropoutやBatch NormalizationなどのAPIを追加しました。

デモ

当日はCIFAR-10という画像セットを使用して学習を進めていくと識別精度がどのようにあがって行くのかを可視化しました。
※赤枠が識別に失敗したもので、緑が成功したものです。

f:id:hatappi1225:20180404193851p:plain

⬇︎

f:id:hatappi1225:20180404193904p:plain

最後に

今回はSpeeeKaigiでRed ChainerでCNNを構築した話をしました。
近々CNNを構築できるAPIが入ったバージョンをリリースしようと思います。
今回の内容やRed Data Toolsに興味をもってくれた方はぜひ下記のイベントでお会いしましょう!!

speee.connpass.com