機械学習ぼっち論文読み

一人ぼっちで論文の読み会をするブログ

数値微分と自動微分

この記事で,

その計算さえ面倒なら数値微分(今風に呼ぶと自動微分?)しても良いです.良しなにやってください.

 と書いたんですが,怖いおじさんから自動微分と数値微分は違うとのご指摘をいただきここに訂正させていただきます・・・.ご指摘ありがとうございます.ニワカなのがバレていく・・・.

先ほどググっていくつか記事を読みましたが,自動微分バックプロパゲーション(BP)を包含する上位概念で,数値微分とは別物です.数値微分微分係数を求めることを目的としますが,自動微分はネットワーク構造を持つモデルでチェインルールを使うことで,出力側の微分係数を使って入力側の微分係数を構成します(フィードフォーワードのNNの状況だとBPと同値).

雑なことを書いてすみませんでした・・・.

ニューラルネットの算数: 第2回

(勢いで第1回を書いたけど早速書くのが面倒になってきた….)

第1回の記事で書きましたが,入力 \boldsymbol x_i \in \mathbb{R}^{p} \boldsymbol \theta \in \boldsymbol \Thetaについて

 f(\boldsymbol x;\boldsymbol \theta):=\sigma(\boldsymbol \theta_3 \boldsymbol \sigma( \boldsymbol \theta_2 \boldsymbol \sigma(\boldsymbol \theta_1 \boldsymbol x + \boldsymbol \theta_1') + \boldsymbol \theta_2' )+\theta_3') \in \mathbb{R}

を出力値とするのがニューラルネットワークでした.ニューラルネットワークの使い道はいろいろありますが,典型的なものでは,線形回帰などと同様に,説明変数\boldsymbol x_iと目的変数 y_i \in \mathbb{R}の組(\boldsymbol x_i,y_i)が与えられているとき

 y_i \approx  f(\boldsymbol x_i;\boldsymbol \theta)

となるような\boldsymbol \theta=\hat{\boldsymbol \theta}を探すことで,未知の\boldsymbol xについての yの予測値

 \hat{y}=f(\boldsymbol x;\hat{\boldsymbol \theta})

を得る,というものがあります.第1回で紹介した表現定理は,この予測関数 f(\boldsymbol x; \boldsymbol \theta)が(パラメータの次元を上げれば) 任意の連続関数g(\boldsymbol x) : \mathbb{R}^{p} \to \mathbb{R}を近似できるというものでした.なので,ニューラルネットは(パラメータ数さえ十分大きくとれば)\boldsymbol xyの間にあるどんな関係性も表現することができるといえます.したがって,ニューラルネットワークを用いる際の問題はただ一つで,

どうやって,良いパラメータ \hat{\boldsymbol \theta} \in \boldsymbol \Thetaを見つけるか?

に尽きます.パラメータを推定するためには,良いパラメータの基準となる「損失関数」と,損失関数を最小化する「最適化アルゴリズム」の2つを適切に決定する必要があります.

損失関数は例えば2乗損失 E(\boldsymbol \theta):=\sum_{i=1}^{n}(y_i-f(\boldsymbol x_i;\boldsymbol \theta))^2やCross-entropy \sum_{i=1}^{n} (y_i \log f(\boldsymbol x_i;\boldsymbol \theta) + (1-y_i)\log (1-f(\boldsymbol x_i;\boldsymbol \theta)))などが使われます.どのような損失を使うかによって,推定されるNNの性質が変わるので,どのような損失を使うか真剣に検討する必要はありますが,この記事では一番簡単な2乗損失E(\boldsymbol \theta)を使うことにしましょう.

最適化アルゴリズムは例えば勾配法ニュートン法といった,関数E(\boldsymbol \theta)を最小にする解\hat{\boldsymbol \theta}を探す手続きのことを指します.損失関数の選択は推定されるNNの性質に影響を与えましたが,アルゴリズムの選択は,どのくらいの時間をかければパラメータを推定できるか,という「計算の速度」に影響を与えます*1.最近のNNの学習では確率的勾配法を利用しますが*2,この記事では勾配法を利用することにします.

勾配法は,パラメータを逐次的に更新するアルゴリズムの一つで,適当な初期値\boldsymbol \theta^{(0)} \in \boldsymbol \Thetaを与えた後,

\boldsymbol \theta^{(t+1)} \leftarrow \boldsymbol \theta^{(t)}-\eta \frac{\partial E(\boldsymbol \theta)}{\partial \boldsymbol \theta} \bigg|_{\boldsymbol \theta^{(t)}}

(t=1,2,\ldots,)によってパラメータを更新していきます.\eta \geq 0は学習率と呼ばれるパラメータで,小さすぎると学習が進まず,大きすぎると不安定になるので適切な値を設定する必要があります.理屈の上では\eta=1とか適当においておけば極小点の周りで勝手に勾配\partial E(\boldsymbol \theta)/\partial \boldsymbol \theta\boldsymbol 0に近づくなるはずですが,実際にはそんなにうまくいかないので,反復が進むに連れて\etaを徐々に小さくする,などの戦法が取られます.なので結局のところ勾配\partial E(\boldsymbol \theta)/\partial \boldsymbol \thetaだけ計算できればパラメータ更新ができて,E(\boldsymbol \theta)の勾配は

 \frac{\partial E(\boldsymbol \theta)}{\partial \boldsymbol \theta} \bigg|_{\boldsymbol \theta^{(t)}} = -2\sum_{i=1}^{n}(y_i-f(\boldsymbol x_i;\boldsymbol \theta^{(t)}))\frac{\partial f(\boldsymbol x_i;\boldsymbol \theta)}{\partial \boldsymbol \theta} \bigg|_{\boldsymbol \theta^{(t)}}

となります.だんだん面倒になってきたので詳細は省きますが,NNモデルf(\boldsymbol x_i;\boldsymbol \theta)の勾配を計算するときには誤差逆伝播法(バックプロパゲーション法)というテクニックがよく用いられます.詳細は省くので気になる人はこの手のサイトを読んで下さい.

実際,NNの学習には勾配さえ求まれば良いので必ずしもバックプロパゲーションを理解する必要はありません.愚直に合成関数の微分を書き下していってもよいですし*3,その計算さえ面倒なら数値微分(今風に呼ぶと自動微分?)しても良いです.良しなにやってください.

追記: 数値微分と自動微分は違うというご指摘を受けて訂正記事を書きました・・・.

aokyotojp.hatenablog.jp

*1:というと実は語弊があって,NNの最適化は非凸問題でアルゴリズムが謎の挙動をしたりするので,アルゴリズムの選択もNNの性質に影響を与えることはあります.今後紹介することは有るかと思いますが,例えばKeskar, Nitish Shirish, et al. “On large-batch training for deep learning: Generalization gap and sharp minima.” ICLR (2017). などに書いてあります

*2:もっと最近は近似で計算量減らした2次の最適化を用いるのがジャスティスとか論文のイントロで書かれてましたけど,本当??

*3:バックプロパゲーションは,愚直な微分を上手くきれいに書き下したみたいな感じ

論文読んだ記録の記録 2

Manifold regularization *1は,説明変数\boldsymbol x_i \in \mathbb{R}^{p}と応答変数y_i \in \{0,1\}からなるデータ列\{(\boldsymbol x_i,y_i)\}_{i=1}^{n}と,データの"relation"\boldsymbol W=(w_{ij}) \in \{0,1\}^{n \times n}が得られているときに損失

\sum_i \ell(f(\boldsymbol x_i),y_i) + \sum_{i,j} w_{ij}\|f(\boldsymbol x_i)-f(\boldsymbol x_j)\|^2

を最小化することで関数f(\cdot)を学習する. Belkin et al. (2006)ではf(\cdot)カーネルを利用したが,Weston et al. (2008)ではDeep neural networkが利用された.Westonらの論文はICML(2008)で発表されたあと,2012にジャーナルになっている.もともとのmanifold regularizationが引用3,000回超,Westonらの方法が引用500回程度と考えればやっぱり常識として知っておくべき手法ではあると思う.

https://aokn-kytjp.tumblr.com/post/168816084737/weston-jason-et-al-deep-learning-via

manifold learningは2010年に入る前にやり尽くされたという印象ですが,AS2017でLLEの理論解析がでてるっぽかったりして未だに理論解析が続けられているのと,ディープを取り込んでパワーアップしたものを研究してる人がちらほらいるという印象です.

https://aokn-kytjp.tumblr.com/post/168745964827/basri-ronen-and-david-jacobs-efficient

これはDeep learningの浅い層はデータの多様体の構造を捉えているというようなことを綴ったarXivで,まぁそうだろうな,という気持ちにはなりました.

まぁでも,多様体学習は流行が終わった分野という実感があって,盛り返すこともなさそうだし今後どういう感じで発展していくのか興味はあります.

*1:Belkin, Mikhail, Partha Niyogi, and Vikas Sindhwani. "Manifold regularization: A geometric framework for learning from labeled and unlabeled examples." Journal of machine learning research 7.Nov (2006): 2399-2434.