カテゴリー

アナリティクス

ニューラルネットの新しい正規化手法 Group Normalization の高速な実装と学習実験

今年 1 月に ALBERT に入社した清水です。深層学習プログラマとして自社プロダクト開発をしております。このブログを書くのは始めてなのですが、今日はちょっとプログラミング寄りの記事を。残暑厳しい折ですが、実装の詳細にまで立ち入りつつアツく Yuxin Wu および Kaiming He の考案した手法 Group NormalizationECCV 2018 採択済)について語ります。Kaiming He 氏は ResNet を筆頭に優れた convolutional neural networks (CNN) の設計で知られていることもあり、みなさんも注目している手法ではないでしょうか?

Chainer v5.0.0b4 を用いて、Chainer に入っている実装と弊社の独自実装での速度比較、また Batch Normalization との速度・精度比較を行いました。その上で、速度差が生じる原因の調査や CUDA を使った高速化の工夫について詳しく記します。ソースコードは MIT ライセンスで GitHub に公開していますので、ぜひご覧ください。

Group Normalization って?

Group Normalization の発想はシンプルです。早速ですが、Group Normalization を端的に表す図(論文 Figure 2 より引用)を見てみましょう。

Batch Normalization, Layer Normalization, Instance Normalization, Group Normalization の図示

(N, C, HW) の 3 次元からなる多次元配列が出てきましたが、これは CNN の中間層の出力だと考えると想像しやすいかと思います。バッチサイズ N, チャンネル数 C, 画像の縦幅 H, 画像の横幅 W です。

図に示された Batch Normalization, Layer Normalization, Instance Normalization およびこの記事の本題 Group Normalization の 4 つの手法は、いずれも青色で示された領域ごとに算出される平均・分散によって入力を正規化 (normalize) します。Batch Normalization が各チャンネルごとに平均・分散を求めることは有名ですね。精度・収束性を劇的に向上させる Batch Normalization は今や CNN のデファクトスタンダードですが、しかし

  • 画像の解像度が大きくてメモリが不足するなどの理由でバッチサイズが小さくなる場合に、平均・分散の推定が不安定になり学習ができなくなる
  • 複数 GPU にまたがって平均・分散を推定することで実質的なバッチサイズを増やすことは可能だが、高価なハードウェアが必要になる上に実装や最適化が複雑
  • ビデオの隣接フレームといった相関がある画像をミニバッチとして入力する場合も平均・分散の推定が不安定になる
  • 学習時に平均・分散の移動平均を覚えておいて推論時に用いるといった処理が煩雑
  • Finetune 時に移動平均をどう扱うべきかよくわからない

といった難点も併せ持っており、いつでも使えるわけではありません。このためミニバッチに依存しない正規化手法が待ち望まれていました。

そのような手法として、全チャンネルにまたがって平均・分散を取る Layer Normalization と、各チャンネル独立に画像の縦横方向についてのみ平均・分散を取る Instance Normalization が考案されました。とはいえ十分にバッチサイズが確保されている条件下での精度は Batch Normalization に比べてかなり劣っており、主流とはなっていません。

そこで登場したのが Group Normalization です。チャンネルを G 個にグルーピングして Layer Normalization と Instance Normalization の中間的な処理を行うことで、画像分類などのタスクで Batch Normalization に匹敵する精度を実現しました。グループ数 G を 32 にした場合がベストだったと論文に述べられていますが、それほど G の値に対して敏感ではないようです。Group Normalization の論文では、Instance Normalization には複数のチャンネルの組み合わせによって表現される特徴を歪めてしまう問題があると考察されています。その対極になるのが Layer Normalization ですが、こちらは大域的すぎて、特に重要ではないチャンネルが画像全体にわたって高い値を示した場合に他の全てのチャンネルが抑制されてしまいます。中間的な Group Normalization は良いとこ取りをできるというわけです。

なんだか素晴らしそうですね。Chainer では v5.0.0b3 から Group Normalization がサポートされているのでお手軽に使えます。しかし、本当に Batch Normalization をドロップインで置き換えて精度低下は起きないのでしょうか? Batch Normalization と同等の速度で動作するのでしょうか? この疑問を検証します。

結論から言えば、Batch Normalization を単に Group Normalization に置き換えるだけでは精度がかなり落ちてしまいました。なので Group Normalization を使う場合は精度の確認やパラメータチューニングをきちんとやるべきでしょう。また、Chainer v5.0.0b3 に追加された Group Normalization の実装はあまり効率的ではなく、CNN 全体の実行速度を大きく下げてしまうことがわかりました。この原因や、より効率のいい実装方法についても詳述します。

続きを読む ニューラルネットの新しい正規化手法 Group Normalization の高速な実装と学習実験

データサイエンティスト新卒研修レポート

こんにちは。
2018年4月に新卒としてALBERTに入社した、データソリューション部の羽山です。

入社式から、早3ヶ月が経ちました。
ALBERTでは入社式のブログでお伝えしたように、ALBERTに在籍している100人のデータサイエンティストのノウハウを活用した2ヶ月のデータサイエンティスト技術研修が新卒社員に対して行われます。

本記事では入社後2ヶ月間に渡って受講したデータサイエンティスト研修の内容についてご紹介します。

続きを読む データサイエンティスト新卒研修レポート

ベイズ統計によるアイオワ・ギャンブリング課題のモデリング方法

こんにちは。データ分析部の長尾です。

今回は心理学において有名な実験である「アイオワ・ギャンブリング課題」を題材として,ベイズ統計によるモデリング方法を紹介します。

突然ですが、パチンコのホールを思い浮かべてください。パチンコではまず,出玉の多そうな台を野生の勘で選び,その台でしばらく様子を見ます。出玉が少ないようであれば,他の台に移り,またしばらく打ちます。個人差はありますが,上述の探索行動を繰り返し,最終的には,一番期待できそうな台に落ち着いて,利益を最大化するよう努めます。このような意思決定のプロセスを模倣した実験のひとつにアイオワ・ギャンブリング課題(Iowa Gambling Tasks, IGT; Bechara, Damasio, Damasio & Anderson, 1994)があります。

続きを読む ベイズ統計によるアイオワ・ギャンブリング課題のモデリング方法

Semi-Supervised Learning

はじめまして、データ分析部のシャオです。今回は半教師あり学習(Semi-supervised Learning)を英語で紹介します。

This blog introduces representative methods in section 2, including Generative Model, Support Vector Machines, Graph-Based Model and co-training. In section 3, the demonstration of text classification by R is presented. The co-training exmaple is in section 3.2.1 and generative model is in section 3.2.2.

続きを読む Semi-Supervised Learning

バンディットアルゴリズム 基本編

データ分析部の中村、中野です。
今回から2回に分けてバンディットアルゴリズムをご紹介いたします。

今回は基本編ということで「バンディットアルゴリズム」の基本的な思想と代表的な方策について簡単にご説明します。

バンディットアルゴリズムはWEB広告配信やレコメンドシステム、はたまたトップ棋士に勝ち越したことで有名なアルファ碁にもその技術が応用されたことで注目を集めています。

そもそも、バンディットアルゴリズムとはどういったものでしょうか。まずは少しややこしいその問題設定を丁寧に見ていきます。

続きを読む バンディットアルゴリズム 基本編

DeepLearningがなぜうまく学習出来るのか

データ分析部の島田です。今回はDeepLearningがなぜうまく学習出来ているのか、についてサーベイしてみました(簡単なコード付きです)。

記事アウトライン

ベイズ情報量規準及びその発展 ~概説編~

今井です。今回より数回にわたってベイズ情報量規準及びその発展について書きたいと思います。

情報量規準と聞くとAIC(Akaike, 1973)やBIC(Schwarz, 1978)が真っ先に思い浮かぶ人が多いかと思います。情報量規準を勉強したことのある人であれば、予測精度を上げるためにモデル選択をするのであればAIC、データが生成されている構造を知ろうとするのであればBICを用いるという使い分けをすることもご存知だと思います。以下ではベイズ情報量規準(BIC)に絞って説明をしていきます。

ベイズ情報量規準の目的である、予測ではなく妥当なモデルの構造を知りたい時とはどういった場合でしょうか。例えば、単なる売上の予測だけではなくMMM(Marketing Mix Modeling)を因果モデル化したモデルによる広告などの施策の効果を知りたい場合や、k-means法でクラスター分析をする時のkを決める時などが上げられます。

後者の方が簡単なので、後者から説明します。先日弊社で行われたデータサイエンティスト養成講座のクラスター分析の岩崎先生による基調講演の中で次のようなお話をされていました。下の3つの混合分布の内、一番右の分布であれば誰でも2つの分布から構成されていることが分かるが、統計を用いて真ん中、さらには一番左の分布も2つの分布から構成されていることが分かるかが問題になる、と。

GMM_distribution

続きを読む ベイズ情報量規準及びその発展 ~概説編~

位相的データ解析(Topological Data Analysis)について

データ分析部の藤本、今井です。今回は共同で位相的データ解析(Topological Data Analysis)についてのご紹介をしようと思います。

位相的データ解析とはデータの集合をトポロジーと呼ばれる「柔らかい」幾何を用いて解析する手法です。幾何学を使った統計学ですと情報幾何学と呼ばれる分野がありますが、こちらはデータの集合ではなく確率分布に対して微分幾何という「硬い」幾何学を用いた分野です。

位相的データ解析は最近ホットな分野で、ビジネス業界でもこの位相的データ解析に注力している会社のAyasdiが総額100億円近く資金調達しており非常に期待されています。位相的データ解析の実データへの応用としては画像認識などがあります。

さて、「柔らかい」幾何、トポロジーとは何でしょうか?通常、私たちは以下の図形は別のものと見なしますが、トポロジーの世界では図形を伸ばしたりなど変形させたものも同じ図形と見なすため、これらの図形を全て同じものだとします。

top1

続きを読む 位相的データ解析(Topological Data Analysis)について

t-SNE を用いた次元圧縮方法のご紹介

こんにちは。データ分析部の越水です。

以前、 弊社ブログ記事
高次元データの可視化の手法をSwiss rollを例に見てみよう
にて、高次元データの可視化手法を複数ご紹介いたしました。
今回は、 Kaggle などのデータコンペで最近注目を集めている可視化手法として、
t-SNE をご紹介したいと思います。

t-SNE は、高次元データの次元を圧縮するアルゴリズムであり、特に高次元データを可視化する際に有用です。
高次元データの関係性をうまく捉えられるという特徴があり、
最近 Kaggle などのデータコンペでよく用いられるようになりました。

t-SNE はどんな仕組みなのか?

まず、 t-SNE のアルゴリズムを紹介したいと思います。
厳密さよりも分かりやすさを重視した説明なので、詳細を知りたい方は原論文をご覧ください。

2点間の「近さ」を確率分布で表現する

このアルゴリズムの一番の特徴は、 2 点間の「近さ」を確率分布で表現するところにあります。

t-sneのイメージ
続きを読む t-SNE を用いた次元圧縮方法のご紹介

TensorFlowの特徴と性能

はじめまして、データ分析部の島田です。今日はGoogleが先日公開したTensorFlowについて書かせていただきます。既に、動かしてみた系の記事は出ていますので、サンプルコードを使ったコードの特徴の説明とChainerとの速度比較を中心に書きました。

記事アウトライン

  • TensorFlowとは
  • TensorFlowで出来ること
  • TensorFlowのコードの特徴
  • TensorFlowとChainerの速度比較
  • まとめ

TensorFlowとは

以下の記事ををご参照ください。
TensorFlow – Google’s latest machine learning system, open sourced for everyone
Googleの内部ツールだったDistBeliefをインフラの依存性を排除しつつ、性能を高めてオープンソース化したものです。自社比較ではDistBeliefの2倍速くなったそうです。

続きを読む TensorFlowの特徴と性能