xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

コンピュータビジョン最先端ガイド6 第4章ディープラーニングの予習

第4章ディープラーニングの内容に関する個人的ノートです。
詳しくは

を読んでください。

5/25(日)に勉強会が開催されます。
第23回 コンピュータビジョン勉強会@関東

以下が内容です。後半はしょってしまってるところが多いです。


コンピュータビジョンに関する本なのでConvolutional Neural net(CNN)について特に詳しく説明されています。

はじめに

ディープラーニングの隆盛

ニューラルネットの逆襲がより詳しい。

現在に至る研究の経緯

ニューラルネットアーキテクチャ

多層ニューラルネット

基本構造
  • k番目の隠れ層への入力

 b_i+\sum w_{ij} h_j^{k-1}
h_j 入力
b_i バイアス
w_ij 重み

  • 出力\(h_i=f(b_i^k+w_i^{kT}h) \)

(kは層の番号、Tは転置)

tanh,sigmoid,max関数
多クラス分類にたいしてはsoftmax関数を用いる

学習:勾配降下法と誤差逆伝搬

\( C=-\sum_i d_i log p_i \)
d_iは正解のクラスに対しては1、ほかは0となるもの。
重みの更新
\( \delta w_{ij}=-\epsilon \frac{\partial C}{\partial w_{ij}} = -\epsilon (p_i -d_i)h_j \)*1

  • 誤差逆伝搬法(の数式での表現)

\( x_i \equiv \sum_j w_{ij}h_j \)
として
\( \frac{\partial C}{\partial w_{ij}} =\frac{\partial C}{\partial x_i} \frac{\partial x_i}{\partial w_{ij}} \)
\( \delta_i \equiv \frac{\partial C}{\partial x_i} = \sum_l \frac{\partial C}{\partial x_l}\frac{\partial x_l}{\partial x_i} \)
\( =\sum_l \delta_l \frac{\partial x_l}{\partial x_i} \)
(x_iとx_lは別の層の素子を表していることに注意)
δが誤差でそれを下位(入力に近い)層から上位(入力から遠い)層へ伝搬させていく。

  • 確率的勾配降下法
    • オンラインでwを更新する。
    • パラメータ momentumと正則化(\( -\epsilon \lambda w_{ij} \) )
    • dropout 最近(2012年くらい?)に提案された結合を間引く方法
多層NNの学習の困難さ
  • 過学習
    • 上位層になるほど多くの入力に影響を受けるため誤差に相当する部分を学習してしまう。
  • 出力(上位の層)の誤差が入力側へ伝わらない。

Convolutional Neural Network(CNN)

  • (ネコの)初期視覚野(V1)の構造に発想のルーツがある。
  • 並進不変性

基本構造

convolutionとpoolingの繰り返し,convolutionが単純細胞、poolingが複雑細胞に相当するらしい。
画像では基本的に1pixelが1要素

  • convolution

例:Lenet-5
フィルタの係数wが学習対象になる。
フィルタサイズ、ネットワークの構造は手で最適化する必要がある。

多層CNNの学習が可能な理由(予想)

結合が疎であり、学習結果が拡散しないから?

pooling(subsampling)

情報を捨てる。
確率降下法(SGD),教師あり学習

平均プーリング、max(L^¥infty)プーリング、L^pプーリング

局所コントラスト正規化

フィルタ出力の正規化、神経細胞の出力電圧の非線形性を模倣したもの。

多層NNの教師なし学習

pretraining

Hinton et al.

AutoEncoder

encoder
\( h=f(W*x+b) \)
decoder
\( y=f'(W'*h+b') \)
yがxに近くなるようにW,b,W',b'を選ぶ
\( argmin_{W,b,W',b'} \sum_i |x_i-f'(W' f(Wx_i+b)+b')|^2 \)
(二乗誤差)非線形最適化問題
スパース正則化

  1. 各層のpretrainingを行う
  2. pretrainingの結果を初期値として全体で教師あり学習を行う

スパース表現

sparse coding
\( min_{D,h_i} \sum_i J(x,h,D) \)
where
\( J(x,h,D)=||x-DH||^2_2+\lambda g(h) \)

sparse coding

正則化項の関数gは要素が少ないほど値が小さくなるようなものを用いる(圧縮センシング)
画像のdenoising、復元などに用いられる。

Topographical ICA

並進不変性以外の画像の持つ不変性を学習したいというのが動機
入力-第1層間は全結合、第1-第2層間は局所的結合

sparse autoencoder
  • 簡単なもの*2

\( argmin_{W,b,W',b'} \frac{\lambda}{m} \sum_i || |x_i-f'(W' f(Wx_i+b)+b')|_2^2 + \sum_i g(f(Wx_i+b)) \)*3
W'=W^Tの条件は学習された係数にorthonormality(正規直交性)を課するものである。

  • Ranzatoらの研究

\( \alpha_e||h-(Wx+b)||^2+||x-(Wf(h)+b)||^2 +\alpha_s g(f(h))+\alpha_r|W| \)

Encode出力,Decode出力が分離した式といえる。
Efficient Learning of Sparse Representations with an Energy-Based Modelのもの。

生成モデルに対するディープラーニング

  • 入力値以外は確率変数
  • MCMC的手法

Boltzmann Machine

Ising model, Hopfiled model(離散2値)を発展させたようなグラフィカルモデル
\( p(v,h;\theta)=\frac{exp(-E(v,h;\theta))}{Z(\theta)} \)
h hidden variables, v visible variables, Eはエネルギー、Zは分配関数
パラメータθの最尤推定を行いたい。
\( \theta^* = argmin_{\theta} D ( p_0(v) || p(v;\theta) ) \)
KL情報量 \( D(p||q)= \sum_x p(x) \ln \frac{p(x)}{q(x)} \)
\( \frac{\partial D}{\partial\theta} \)
\(=\sum_v \sum_h \frac{\partial E}{\partial \theta} p(h|v;\theta) p_0(v)- \sum_v \sum_h \frac{\partial E}{\partial \theta} p(v,h;\theta) \)

\( \equiv \langle \frac{\partial E}{\partial \theta} \rangle_{data} -\langle \frac{\partial E}{\partial \theta} \rangle_{model} \)

Restricted Boltzmann Machine (RBM)

\( E(v,h;\theta)=-\sum_i b_i v_i - \sum_j c_j h_j - \sum_{i,j} v_i W_{ij} h_j \)
条件付き確率
\( p(v_i=1|h;\theta) = sigmoid(b_i+\sum_j W_{ij}h_j) \)
\( p(h_j=1|v;\theta) = sigmoid(c_j+\sum_i v_i W_{ij} ) \)

各パラメータについて勾配(微分)を計算できる(省略)

ギブスサンプリング

1stepに1個の変数だけの値を変える。膨大なサンプリングを繰り返さなければならない。
パラメータθの分布関数を求めたいときにはほぼ必須の方法

Constrastive Divergence

KL divergence Dの代わりに
\( D ( p_0(v) || p(v;\theta) ) -D( p_T(v)||p(v;\theta) ) \)
を計算する。少ない反復(1回!)で十分な収束が得られる。
参考文献

sparse RBM

\( -L(\theta)+\lambda\sum_j (\rho \langle h_j \rangle_{p_0(v)p(h_j|v)} )^2 \)
*4

連続値の場合

数式省略
v_iの分布の分散はCDでは求めることは難しいらしくHintonらは固定値を用いている。

Deep Belief Network(DBN)

有向二部グラフに無向二部グラフ(RBM)を積み重ねたもの
\( p(v,h;\theta)|=(\prod_l p(h^l|h^{l+1}))p(h^{L-1},h^L ) \)
lはlayer index

推論

p(h|v)を
\( q(h_j^l=1|h^{l-1} )=sigmoid(c_j^l+ \sum_i h_i^{l-1} W_{ij}^l ) \)
と近似する。

pretraining

各RBM層に対して行う。

Deep Boltzmann Machine

RBMを積み重ねたもの
\( E(v,h|\theta)= -\sum_i b_i v_i - \sum_j c_j^1 h_j^1 -\sum_{i,j}W_{ij}^1 h_j^1 -\sum_k c_k^2 h_k^2 - \sum_{j,k} h_j^1 W_{jk} h_k^2 \cdots \)

推論

相関の隠れ変数hが相互に依存しているので、反復的推論が出来ない。
平均場近似(hが互いに独立であるという近似)を用いる。
\( q(h|v)=\prod_l \prod_j q_j^l (h_j^l |v ) \)
qは一般には非凸、EMアルゴリズム

pretraining

条件付確率
例 v-h^1間のpretraining
\( p(h_j^1=1|v)=sigmoid(\sum_i v_i W_{ij}^1 + \sum_i v_i W_{ij}^1 ) \)
\( p(v_j=1|h)=sigmoid(\sum_j W_{ij}^1 h_j ) \)

fine tuning

正項(data)は平均場近似に基づきEの各変数に対する微分を計算する。
負項(model)はCD法を用いて計算する。隠れ変数が多いので反復回数を増やす(ノウハウ)。

Convolutional DBN

probablistic max pooling 生成モデル的
\( E(v,h)=-\sum_k \sum_{i,j} (h^k_{i,j} (W^k*v)_{i,j} +c_k h^k_{i,j} -b\sum_{i,j} v_{i,j} \)
\( s.t. \ \sum_{i,j \in B_\alpha} h_{i,j}^k \le 1 \ \forall k,\alpha \)
i,j 素子(pixel)のindex
W フィルタ係数
c バイアス

softwares

  • theano

http://deeplearning.net/software/theano/index.html#
http://deeplearning.net/tutorial/contents.html
C++コードのコンパイル,CUDAを内部で用いており、Lenet,Stacked denoising autoencoder,RBM,DBNが使えるそうです。MCMCではStanと同様Hibrid(Hamilton?) Monte-Carlo Samplingを用いることができる。例では手書き文字dataset MNISTを用いています。

  • EBlearn

http://eblearn.sourceforge.net/

  • cuda-convonet

CNN in C++/CUDA/Python
https://code.google.com/p/cuda-convnet/
https://github.com/dnouri/cuda-convnet
http://fastml.com/object-recognition-in-images-with-cuda-convnet/

Deep networkのCUDA実装を試してみる(日本語)
http://pub.ne.jp/akisato/?entry_id=4673867

おわりに

  • pretrainingとは何か?
    • 次の層のpretrainingに対して観測値が定められる。spinglassのquench(twitterで発言していた人がいる記憶がある[要出典])?, RBMではv同士、異なる層のh同士は結合していないので、そのまま見るとスピンモデルとしては平均場近似にもなってない。
    • fine tuningに対しては初期値である。
  • sparseness
    • 情報量基準との関係
  • dropoutとは何か

実験すべき基本的事項

  • 画像など特定対象に対する性能と要素数、深さの関係
  • 学習過程での結合値の変化、Cは特異な値をとらないのか

*1: 導出 softmax関数 \( p_i=\frac{exp(b_i^k+w_i^{kT}h^{k-1})}{\sum_\alpha exp(b_\alpha^k+w_\alpha^{kT}h^{k-1})} \) \( \equiv exp(x_i)/ \sum_\alpha exp(x_\alpha) \) に対し、 \( \frac{\partial x_i}{\partial w_{ij}}= h_j \) 交差エントロピー \( C=-\sum_i d_i log p_i =-\sum_i d_i (x_i -log \sum_\alpha exp(x_\alpha) ) \) \( \frac{\partial C}{\partial w_{ij}} = -\sum_i d_i ( \frac{\partial x_k}{\partial w_{ij}} - \frac{ \frac{\partial x_i}{\partial w_{ij}} exp(x_i) }{\sum_\alpha exp(x_\alpha)}) = p_ih_i-d_ih_j \)

*2:ICA with Reconstruction Cost for Efficient Overcomplete Feature Learning(RICA)のもの。Sparse autoencoderとは式が異なる。後者の日本語解説として 節操の無いクソイナゴ野郎なのでdeep learningで使われるautoencoder実装したを参照。

*3:変数labmdaは本の式には書いていなかった。勝手に書き足してしまいました。論文にあわせてlabmdaの表記を変えました。

*4:Restricted Boltzmann Machine入門 (1) - じょうよわだけどで触れられているようにこのグラフィカルモデルのFisher行列は非正則になる場合があり、BICをそのまま用いることはできない。WBICのような情報量基準が使えるかもしれない[要出典]