はじめに
どうも、来夏です。
明日は超志望度高い企業の面談ということで、眠れないしもう一つ技術アピール的な記事を書いておくことにした。
これは現在私の知る限りでは最もダイレクトに、私の本来の専攻である確率微分方程式を機械学習に活かす方法となるため、気合い入れていこう。
残差学習
CNNの研究では、層を深くするほど複雑で高度な特徴量を抽出できるという考えから、層を深くしていくのが重要視されているらしい。これは積分表現理論信者で「たいていの機械学習問題は3層あればいける!」と主張している私からすれば誠に遺憾なことだけど、まあ世界の潮流に文句をつけても仕方ありません。
しかし、単純に層を厚くしていくとかえって性能が下がります。第二次人工知能ブーム終焉の所以もそこです。そこでヒントンさんが深層でもうまくいく手法を開発し、この第三次人工知能ブームが起こっているわけですけど、それでも100層1000層の学習はうまくいきませんでした。ただ深くしたいだけなんじゃないかという疑念は尽きない。
そこでブレイクスルーを起こしたのが、Microsoftの研究員が2015年に発表したResNetです。ここで重要となるのが、残差学習という新手法。
これは、あるブロックで学習してほしい関数$H(x)$を直接学習させるのではなく、入力との残差$F(x):=H(x)-x$を学習させます。あとから$x$を足し合わせれば、これは$H(x)$を学習させたことと同じになるわけです。$H(x)$を直接学習させるより、勾配の伝播しやすさなどの事情で都合がいい、らしい!
ここで、$n$ブロック目の入力を$x_n$、学習させたい関数を$H_n(x)$、その残差関数を$F_n(x):=H_n(x)-x$と書くことにします。$n$ブロック目の出力は当然$n+1$ブロック目の入力となるわけなので、こう書き下せます。$$x_{n+1}=x_n+F_n(x_n)$$ これまで数学を学んできた方ならもうお気づきでしょうが、これは常微分方程式のオイラー近似に他なりません。
元となる微分方程式はこうなります。$$x_t(t)=F(t,x)$$ ただし$x_t(t):=\frac{\partial x}{\partial t}(t)$
[1]によると、超深層学習の設計は微分方程式の数値計算技法で書き表せるらしく、具体例としては
ResNetなど $x_t=F(t,x)$ オイラー法
PolyNet $x_t=F(t,x)$ 後退オイラー法
FractalNet $x_t=F(t,x)$ 2次ルンゲクッタ法
RevNet $x_t=F_1(t,y),y_t=F_2(t,x)$ オイラー法(連立常微分方程式)
応用数学では大体いつもそうですが、この「数学的に既存手法を書けた」という状況で次に考えるべきなのは「じゃあ別の数学技術(ここでは微分方程式の数値解析技術)を使えばもっと良くなるんじゃないだろうか」という王道パターン。実際、[1]の著者は線形多段法を用いてLM-ResNetという名の深層ニューラルネットの設計をし、高速化に成功しています。
ここまで扱ってきたのは決定論的な超深層学習です。もしここに確率要素を加えると、必然これは確率微分方程式の数値解析技術と繋がってきます。
補足
ちょっとこれだけじゃ味気なさすぎるし、なにより私のオリジナル要素が微塵もないのでちょっとばかし自己解釈をば
残差学習を微分方程式の離散近似とみると、要するに超深層学習とは$$x_t=F(t,x)$$$$(x(0),x(1))=(a_1,b_1),(a_2,b_2),......,(a_n,b_n)$$という常微分方程式の初期値境界値問題を、解析ではなく探索で解く機構であると言えるでしょう。そのために損失関数を定義し、勾配を見て最適化していくわけです。
この側面だけを見ると、層を増やすと精度が上がるのは当然だと言えます。微分方程式の数値計算だって、ステップ数を増やせば精度が上がるわけですから。
しかし、いつだって気にしなければならないのが「過学習」という問題。ただデータへのあてはまりをよくしても、新たなデータに対する予測性能はお察しになるわけです。
私はこれに関しては、むしろ残差学習に関しては、「常微分方程式の初期値を入力すれば境界値が出てくる」という状況を作り上げている以上、そのへんのフィットを強化すれば汎化性能は上がるのではないかと考えています。
もちろん精密な誤差オーダー評価なんかはやってないので、話半分で聞いといてください。
さて、ここでもう一つ問題となるのが、おそらくみなさんも気になってたであろう「解の存在と一意性」です。$$x_t=F(t,x)$$という常微分方程式に対して、常に解が存在し、また一意性が成り立つとは限りません。(余談ですが、微分方程式は往々にして、「解が存在すれば一意」という範囲のほうが広く、その上で「解が存在する」を証明するというパターンが多いです)
解が存在し、かつ一意である十分条件は、みんな大好き「リプシッツ連続性」です。
定義:リプシッツ連続
ある定数$M$が存在し、任意の$(t,x_1)\in U,(t,x_2)\in U$に対して$$\frac{|F(t,x_1)-F(t,x_2)|}{|x_1-x_2|}\leq M$$が成り立つとき、関数$F$は集合$U$上でリプシッツ連続であるという
要するに$x$に対する傾きの絶対値が有限ってことです。
もう少し厳密に解の存在と一意性について書くと、
$(0,x_0)$を含む集合$U$上で$F$がリプシッツ連続になるなら、ある$\epsilon>0$が存在し、区間$t\in(-\epsilon,\epsilon)$において$$x_t=F(t,x)$$$$x(0)=x_0$$という常微分方程式の解$x(t)$は一意に存在する。
さて、じゃあもしも解の存在と一意性が成り立たないような残差関数で無理やり深層学習を構築したらどうなるか。これはちょっと新しい計算環境が手に入ったら試してみたいと思います。
確率的残差学習と確率微分方程式
いよいよ私本来の専門領域である確率微分方程式の話題に入っていきたいと思います。
まずは[1]に載ってる手法について、それが終わったら次の項では自分で新しい手法を試してみようかな。
shakeshakeモデル
しゃけしゃけモデルとは、その名の通りブロックごとに出力をシェイクしていく手法です。
今後の更新
まずは確率的な超深層学習と確率微分方程式の数値解析の関係について書きます。
~~正直、論文著者が確率解析学に無知すぎるせいで、~~まだ読み解き切れていないところもあるけど、なんとか飲み込んで、そこの最後まで書いたらpart.1終わりかな。
自分でも確率微分方程式の数値解析技術を使って新たなる超深層学習を作ったり、本来の専門に近い技術であるマリアヴァン解析などを使って誤差や収束の評価をしていきたい。
SGDとSDEの関係とかの論文をgoogle brainの人が出してたりするし、園田先生の論文で書かれてる深層DAEと輸送写像のやつが明らかにマリアヴァン解析使ったSDEのドリフト推定だし、やっぱり深層学習とSDEはどこかで繋がってる(断言)
参考文献
[1]Yiping Lu,Aoxiao Zhong,Quanzheng Li,BEYOND FINITE LAYER NEURAL NETWORKS:BRIDGING DEEP ARCHITECTURES AND NUMERICAL DIFFERENTIAL EQUATIONS(2017)
[2]BoChang,LiliMeng,EldadHaber,LarsRuthotto,DavidBegert,ElliotHoltham,Reversible Architectures for Arbitrarily Deep Residual Neural Networks(2017)