今日参加してきた Deep Learning Acceleration勉強会 - connpass が非常に面白かった. 一度聞いただけでは全然理解できなかったので、後から読み返すように公開された資料や論文などをメモをまとめた。 私自身は仕事で一度tensorflowでCNN触ってみたくらいで、超初心者なので、 おかしな書き方をしているところがあるかもしれませんヾ(´゚Д゚;) [2017/09/04 11:00 追記] 間違いの修正/情報追記 目次 モデルアーキテクチャ観点からのDeep Neural Network高速化 by Yusuke Uchida(@yu4u)さん 資料 よくある高速化の方法 Factorization conv(5 x 5) => conv(3 x 3) - conv(3 x 3) conv(3 x 3) -> conv(1 x 3) - conv (3 x
https://connpass.com/event/64632/ すごく面白かった。最近こういう会に行って感心することは多いのだけど、しかしなんか書きたいと思うレベルになかなか来ない、まあそれなりに年喰ったしな、とか思ってたんですが。低レイヤとか、自分がある程度既に知ってるところの話を聞くのも楽しいけど、自分が最近勉強してて理解しはじめたことの話を見聞きする方が楽しいよねえということかと思いました。まさににわかほど語りたがる現象で、実際懇親会とかで間違ってること結構言ってそうな気がする。 ジャンルとして、他のCSのジャンルとかと違って、深層学習はとにかく論理的に確定できない話が多くて、あの論文はあやしいなあ、あれは説得力あるなあ、というような、口コミベースの情報が回してる面が、良くも悪くもあるのかなあ、という印象を持っています。 つーわけで口コミレベルの適当なことを、以下、書きます。(定
はじめに Kerasの作者@fcholletさんのCVPR'17論文XceptionとGoogleのMobileNets論文を読んだにて紹介したdepthwise (separable) convolutionとpointwise convolutionは、畳み込みのカーネルを空間方向とチャネル方向に分離することで、パラメータ数と計算時間を削減していた。 似たようなアプローチとして、Inception V31では空間方向の畳み込みを縦方向と横方向の畳み込みに分離し、畳み込みの受容野を維持しながら、パラメータを削減を行っている。具体的には1x7と7x1の畳み込みを利用して7x7の畳み込みを近似している。Inception V72では1x3と3x1の畳み込みが使われている。 ここでは、いくつかの種類の畳み込みの実際の処理時間を比較する。コードは下記にあります。 https://github.c
はじめに 前回の記事 では,multi layer perceptron(MLP)のサンプルコードを走らせてみました.今回は畳み込みニューラルネットワーク(CNN)です. サンプルコード データセット・ネットワーク構造 データセットは前回と同じくMNISTの手書き文字データセットを使います($28 \times 28$の画像). CNNの説明及びネットワーク構造について次の図を作ってみました. 畳み込み層 畳み込みのフィルタサイズは$5 \times 5$で,ゼロパディングをしているので出力画像は入力画像と同じサイズになります.このパディングの操作,いまいち何のためにやっているか(やっていいのか)が説明できませんでした. サイズが途中で変わらないので次元の計算が簡単になる? 画像端の部分の特徴量抽出ができる? という感じなのでしょうか? プーリング プーリング層ではマックス・プーリングを使
ざっくりいうと Chainerで畳み込みニューラルネット(CNN)を書いた AlexNetというILSVRC2012のトップのCNNを模倣した 実際に画像分類をしてみた AlexNetとは ↓の論文で提案されているニューラルネット。ILSVRC2012で性能トップ。その後、AlexNetを深化させた、オックスフォード大のVGGというネットワークが登場し性能向上。(2016年現在、さらに性能を上回るGoogLeNetとかもある。人間より精度が良いらしい。) ImageNet Classification with Deep Convolutional Neural Networks(原文) ↓Chainerのサンプルもある。 Chainer Example AlexNet 今回は、このAlexNetの劣化版のネットワークを書いて実際に画像分類をさせてみた。劣化の理由は、単にメモリ不足を解消す
Deep Learningの各階層の入力データの分布は、学習の過程において、下位層のパラメータが更新されることにより変化する。各階層の勾配は、ミニバッチ内で平均をとることにより推定しているが、この分布の変化により推定に、ミニバッチごとに異なるバイアスが乗りやすくなる。そのため、学習が不安定になるという問題がある。この問題は、internal convariance shiftと呼ばれている。この問題を解決するために、下記の論文では各階層の入力分布をミニバッチごとに平均=0と分散=1とに正規化するbatch normalizationという方法が提案されている。 http://arxiv.org/pdf/1502.03167v3.pdf 今回は、chainerにてBatch normalizationを、各CNNに2つの方法で適用してみた。 1)下記のようにconvと非線形な活性化関数ReL
Convolutional Neural Network (CNN) とは 画像に特化したニューラルネット。通常の多層パーセプトロンが入力層、中間層、出力層から成るのに対して、CNNはそれに加えて畳み込み層、プーリング層、局所正規化層(LRN層)をもつ。 Chainer ExampleにあったAlexNet (ILSVRC2012のトップ) を見てみると、以下のようになっている。 ImageNet Classification with Deep Convolutional Neural Networks(原文) Chainer Example AlexNet # …(略) class AlexBN(chainer.Chain): """Single-GPU AlexNet with LRN layers replaced by BatchNormalization.""" insize
cuDNNはNVIDIAが公開しているDeep Learning用のライブラリである。このライブラリを使うとCaffeやChainerなどのDeep Learning用のソフトウェアの速度が向上する。 この速度向上に寄与している最も大きな部分がConvolutionの高速化である。 個人的には、CPUでどこまで高速にConvolutionが実現できるのかに興味がある。本記事は、その準備段階として、どういう高速化戦略がありえるのかを調べたものである。 ConvolutionとはConvolutionは、日本語では畳み込みと呼ばれる操作である。畳み込み操作自体は何次元のデータ構造に対しても定義できるが、以下では、画像処理でよく使われる、二次元のConvolutionのみを考える。 何も考えずに普通にConvolutionを実装すると、以下の擬似コードのようになるだろう。ただし、簡単のため、境界
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く