コンピュータビジョン最先端ガイド6 第4章ディープラーニングの予習
第4章ディープラーニングの内容に関する個人的ノートです。
詳しくは
5/25(日)に勉強会が開催されます。
第23回 コンピュータビジョン勉強会@関東
以下が内容です。後半はしょってしまってるところが多いです。
コンピュータビジョンに関する本なのでConvolutional Neural net(CNN)について特に詳しく説明されています。
はじめに
ディープラーニングの隆盛
- 2012年ICMLの猫認識の研究
- 一般物体認識のコンテストILSVRC(2012(結果, 2013)
- 音声認識(Hinton et al.)
- 化合物の予測(kaggle, 論文?)
- 量子化学的な物質の特性学習(pdf)
ニューラルネットの逆襲がより詳しい。
現在に至る研究の経緯
- ニューラルネット冬の時代
- 多層(3層以上の) パラメータの意味がよくわからない
- Convolutional Neural net(CNN)
- Neogognitron(Fukushima et al.(論文pdf,Scholarpedia)にルーツを持つ
- Deep Belief Network(DBN, Hinton et al.)
- pretraining+微調整(fine tune)
ニューラルネットのアーキテクチャ
多層ニューラルネット
基本構造
- k番目の隠れ層への入力
h_j 入力
b_i バイアス
w_ij 重み
- 出力\(h_i=f(b_i^k+w_i^{kT}h) \)
(kは層の番号、Tは転置)
- 非線形関数f
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は別の層の素子を表していることに注意)
δが誤差でそれを下位(入力に近い)層から上位(入力から遠い)層へ伝搬させていく。
多層NNの学習の困難さ
- 過学習
- 上位層になるほど多くの入力に影響を受けるため誤差に相当する部分を学習してしまう。
- 出力(上位の層)の誤差が入力側へ伝わらない。
Convolutional Neural Network(CNN)
- (ネコの)初期視覚野(V1)の構造に発想のルーツがある。
- 並進不変性
基本構造
convolutionとpoolingの繰り返し,convolutionが単純細胞、poolingが複雑細胞に相当するらしい。
画像では基本的に1pixelが1要素
- convolution
例:Lenet-5
フィルタの係数wが学習対象になる。
フィルタサイズ、ネットワークの構造は手で最適化する必要がある。
多層CNNの学習が可能な理由(予想)
結合が疎であり、学習結果が拡散しないから?
多層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 \)
(二乗誤差)非線形最適化問題
スパース正則化
- 各層のpretrainingを行う
- 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
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
おわりに
実験すべき基本的事項
- 画像など特定対象に対する性能と要素数、深さの関係
- 学習過程での結合値の変化、Cは特異な値をとらないのか
Reference
5章がニューラルネットです。*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のような情報量基準が使えるかもしれない[要出典]