tsujimotterの下書きノート

このブログは「tsujimotterのノートブック」の下書きです。数学の勉強過程や日々思ったことなどをゆるーくメモしていきます。下書きなので適当です。

記事一覧はこちらです。このブログの趣旨はこちら

メインブログである「tsujimotterのノートブログ」はこちら

数学語

「数学語」と私が勝手に呼んでいるものがある.

一般に用いられる日本語ではあるものの,数学の議論の中でしか使わない用法をする言葉のことである.ある意味テクニカルタームなのだけれど,独学だとなかなか気づきにくい.

その中の一つとして「~によって特徴付けられる」というものがある.

「AはBによって特徴付けられる」というとき,Aにはある数学的な対象が,BにはAだけが満たす性質が入る.Aは既に何かしらの方法で定義されていて,BはAに同値な命題になっているような状況である.

ちょっと分かりにくいから例を挙げる.

 A を環とし, M A-加群とする.このとき以下の (1), (2) は同値.
(1)  M はネーター加群である.
(2)  M の任意の部分加群が有限生成.

このようなとき

ネーター加群は「任意の部分加群が有限生成」という性質によって特徴付けられる

というのである.

誤差逆伝播法の計算

昔計算したんだけど、また忘れたので計算してみた。

誤差逆伝播法は、多層のニューラルネットワークを考えたときに、その重みを学習するための方法の一つである。バックプロパゲーション(Backpropagation)とも言う。やってみるとわかるが、出力の誤差を計算し、出力側の方から順に誤差の情報を伝播させていくことで、入力に近いほうの重みを更新させることができる。だから逆伝播法という。

順伝播の計算

簡単化するために、3層の一番シンプルなモデルを用いる。

f:id:tsujimotter:20180531142304p:plain:w400

入力層には  (x_i) が入る。 入力の個数は変数がもったいないので書かない。中間層が  (y_i) で、出力層が  z_1 とする。

入力が与えられたときの出力の計算は、入力から順にだんだんと行われる。

 \displaystyle y_j = f\left(\sum_{i} w_{ij} x_i\right)
 \displaystyle z_1 = f\left(\sum_{j} u_{j1} y_j\right)

 f(X)活性化関数と呼ばれる。この関数はいろいろなタイプがある。層ごとに違うものを選んでもいいが、簡単化のため、今回はすべての層で共通のものを用いる。

ところで

 \displaystyle y_j = f\left(\sum_{i} w_{ij} x_i - h_i\right)

という形の計算式をみたことがある人もいるかもしれない。つまり、閾値  h_i が設定されていて、それを超えるような  \sum_{i} w_{ij} x_i が入ってきたときにニューロンが発火する、みたいな話だ。もちろんそんな風にモデリングしてもいいが、 w_{ij}, h_i を別々の式で更新する必要があってめんどくさい。そこで、 w_{i0} = h_i としておき、 w_{i0} に相当する入力  x_0 には常に  -1 が入るとしておくのだ。こうしておくと上のような簡潔な形でかけて大変都合が良い。


 w_{ij}, u_{j1} は重み係数であり、これを変化させることで、同じ入力に対しても異なる出力を与えるように出来る。狙った出力が出るように、重み係数を更新する操作のことを学習というわけだ。

余談になるが、重み係数の学習させ方は任意の方法でよい。神様が現れて「このニューラルネットワークの重みはこれじゃ!」といって与えてもいい。神係数である。

逆伝播の計算

今回は、経験上うまくいくとされる誤差逆伝播法に基づいて計算する。

まず「入力に対してこんな出力になってほしい」という願いをこめた教師データを用意する。入力の組  \boldsymbol{x}^{(d)} = (x_i^{(d)}) に対して出力  z^{(d)} を対応付ける二項関係を考えればよい。 d 番目の教師データを

 (\boldsymbol{x}^{(d)}, z^{(d)})

これが何個かある。

これを使うと、現在のニューラルネットワークが出した出力に対する誤差が計算できる。

 \displaystyle E(\boldsymbol{W}, \boldsymbol{U}) = \frac{1}{2}\sum_{d} (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) )^2 = \sum_{d} E^{(d)}(\boldsymbol{W}, \boldsymbol{U})

教師データを固定しておけば、誤差は重み  \boldsymbol{W} = (w_{ij}), \boldsymbol{U} = (u_{j1}) の関数と考えてよい。

というわけで、この誤差  E^{(d)}(\boldsymbol{W}, \boldsymbol{U}) を最小化するような、 \boldsymbol{W}, \boldsymbol{U} を計算すればよいとわかる。


シンプルなソリューションは、勾配法を使って誤差が下がる方向に重みを少しずつ更新していけばいい。ここで偏微分が使える。

 \displaystyle u_{j1} \leftarrow u_{j1} - \alpha \frac{\partial E}{\partial u_{j1}}
 \displaystyle w_{ij} \leftarrow w_{ij} - \alpha \frac{\partial E}{\partial w_{ij}}

よって、誤差関数を重みで偏微分する計算さえできればよいとわかる。あとはゴリゴリ計算するのみ。


 u_{j1} について計算する。

 \displaystyle \begin{align} \frac{\partial E^{(d)}}{\partial u_{j1}} &= (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot \frac{\partial z}{\partial u_{j1}} \\
&=  (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{j} u_{j1} y_j\right)  \cdot y_j \end{align}

外の微分、中の微分を計算していくだけなので、見た目ほどゴツイ計算ではない。


 w_{ij} についても計算する。

 \displaystyle \begin{align} \frac{\partial E^{(d)}}{\partial w_{ij}} &= (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot \frac{\partial z}{\partial w_{ij}} \\
&=  (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{j} u_{j1} y_j\right)  \cdot u_{j1} \frac{\partial y_j}{\partial w_{ij}} \end{align}

あーなるほど。かなり似てるなーと気づく。そのまま

 \displaystyle \begin{align} &=  (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{j} u_{j1} y_j\right)  \cdot u_{j1} \cdot f'\left(\sum_{i} w_{ij} x_i\right) \cdot x_i  \end{align}

と計算できる。


少し長かったのだが、これで計算完了だ。

まとめると

 \displaystyle \begin{align} \frac{\partial E^{(d)}}{\partial u_{j}} &=  (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{j} u_{j1} y_j\right)  \cdot y_j \\
 \frac{\partial E^{(d)}}{\partial w_{ij}} &=  (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{j} u_{j1} y_j\right)  \cdot u_{j1} \cdot f'\left(\sum_{i} w_{ij} x_i\right) \cdot x_{i} \end{align}

となる。

そこそこ似通った形の式になっていることに気づくだろう。ここで

 \displaystyle \begin{align} \delta_1^{(3)} &:= f'\left(\sum_{j} u_{j1} y_j\right) (z^{(d)} - z_1(\boldsymbol{x}^{(d)}) )  \\
\delta_{j}^{(2)} &:= f'\left(\sum_{i} w_{ij} x_i\right) u_{j1} \delta_1^{(3)} \end{align}

とおけば、

 \displaystyle \begin{align} \frac{\partial E^{(d)}}{\partial u_{j1}} &=  \delta_1^{(3)} y_j \\
 \frac{\partial E^{(d)}}{\partial w_{ij}} &= \delta_{j}^{(2)} x_i \end{align}

とかけるわけだ。 \delta_1^{(3)} は出力層(第3層)の誤差の情報を表していて、 \delta_{j}^{(2)} は中間層(第2層)の誤差情報(みたいなもの)を表していると言えるかもしれない。 \delta_1^{(3)}, \delta_j^{(2)} が計算できれば、それに  y_j, x_i をかければ勾配が計算できる。

これらを計算する方法だが、上の定義からわかるように漸化式的な定義になっている。

 \displaystyle \delta_j^{(2)} = f'\left( \sum_{i} w_{ij} x_i \right) u_{j1} \delta_1^{(3)}

つまり、出力側の誤差情報  \delta_1^{(3)} から、より入力側に近い情報  \delta_{j}^{(2)} が計算できるのだ。誤差の情報が、出力層から順に伝播して更新されているように見える。だから逆伝播法なのだ。

デルタという記号を使って表すからデルタルールともいわれる。

層を増やしたときの注意

4層に増やしたときは少し注意が必要だ。4層目の出力を  o_1 として、3層目の中間層を  z_k とする。

f:id:tsujimotter:20180531193535p:plain:w400

順伝播の計算はこうなる。

 \displaystyle y_j = f\left(\sum_{i} w_{ij} x_i\right)
 \displaystyle z_k = f\left(\sum_{j} u_{jk} y_j\right)
 \displaystyle o_1 = f\left(\sum_{k} v_{k1} z_k\right)

このとき、逆伝播法の計算は次のように得られる。

 \displaystyle \begin{align}  \frac{\partial E^{(d)}}{\partial v_{k1}} &=  (o^{(d)} - o_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{k} v_{k1} z_k\right)  \cdot z_k \\
 \frac{\partial E^{(d)}}{\partial v_{jk}} &=  (o^{(d)} - o_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{k} v_{k1} z_k\right)  \cdot v_{k1} \cdot f'\left(\sum_{j} u_{jk} y_j\right)  \cdot y_j \\
 \frac{\partial E^{(d)}}{\partial w_{ij}} &=  \sum_{k} \left[ (o^{(d)} - o_1(\boldsymbol{x}^{(d)}) ) \cdot f'\left(\sum_{k} v_{k1} z_k\right)  \cdot v_{k1} \cdot f'\left(\sum_{j} u_{jk} y_j\right)  \cdot u_{jk} \cdot f'\left(\sum_{i} w_{ij} x_i\right) \cdot x_{i} \right] \end{align}

「あれ? w_{ij} の計算に出てくるとこがおかしい」と思うかもしれないが、これが正解だ。


デルタを以下のように定義すると

 \displaystyle \begin{align} \delta_1^{(4)} &:= f'\left(\sum_{k} v_{k1} z_k\right) (o^{(d)} - o_1(\boldsymbol{x}^{(d)}) ) \\
\delta_{k}^{(3)} &:=  f'\left(\sum_{j} u_{jk} y_j\right) v_{k1} \delta^{(4)} \\
\delta_{j}^{(2)} &:=  f'\left(\sum_{i} w_{ij} x_i\right) \sum_{k} u_{jk} \delta_{k}^{(3)} \end{align}

以下のようにかける。

 \displaystyle \begin{align}  \frac{\partial E^{(d)}}{\partial v_{k}} &=  \delta_1^{(4)} z_k \\
 \frac{\partial E^{(d)}}{\partial u_{jk}} &= \delta_k^{(3)} y_j \\
 \frac{\partial E^{(d)}}{\partial w_{ij}} &= \delta_j^{(2)} x_i \end{align}


つまり、こういうことだ。 w_{ij} を計算するために、3層目の  \delta_k^{(3)} の情報が必要になるわけだが、ニューロン  j が接続するニューロン  k は複数ある。 j の更新則を考えるためには、 j に接続するすべての  k の影響を考える必要があるのだ。図にするとこういうことである:

f:id:tsujimotter:20180601090450p:plain:w400

層をさらに増やした場合も同様の注意が必要である。うーんややこしい。


ところで、デルタルールの重要な点に触れておく。

上で観察したように  1 層から  2 層への重みの更新式を計算する際に、 2 層のデルタ  \delta_j^{(2)} を計算する必要があり、漸化式から  3 層のデルタ  \{\delta_k^{(3)}\} が必要となった。これは一般の多層ニューラルネットワークを計算するときも同様である。

つまり、 (l-1) 層から  l 層への重み  w_{ij}^{(l)} の更新式を計算する際に、 l 層のデルタ  \delta_{j}^{(l)} を計算する必要があり、漸化式から  l+1 層のデルタ  \{ \delta_k^{(l+1)} \} が必要となる。これを使うと、デルタルールにより

 \displaystyle \delta_{j}^{(l)} = f'\left(\sum_{i} w_{ij}^{(l)} z_i^{(l-1)}\right) \sum_{k} w_{jk}^{(l+1)} \delta_{k}^{(l+1)}

と得られる。 z_i^{(l-1)} (l-1) 層のニューロンの出力である。これを使うと更新式は

 \displaystyle \frac{\partial E^{(d)}}{\partial w_{ij}^{(l)}} = \delta_j^{(l)} z_i^{(l-1)}

となる。 l = 2 とした結果が上の例である。

 l 層の前後 2 層の情報があれば計算できてしまうのである。これは重要な性質だ。アルゴリズムが簡単になる。


これなら最初から一般的なケースで考えたほうが良かったんじゃないかという気がしてくる。

一方で、一般的なケースで書いたらわけがわからなくて、結局本質的な理解に到達しない気もするのでこれはこれでよい気もしてくる。

今朝見た変な夢4

大学で行う「子供向け実験教室」があり、うちの研究室でも何か企画をすることになった。

その担当を研究室の学生にお任せしたのだけど、

担当の学生が当日の開始直前に
「引越しの荷物を運ばなければならないので」
と言い放って、ほかの学生も引き連れて居なくなってしまった。

すぐ戻ってくるだろうと研究室に一人で待っていると、ぞろぞろと小学生のツアーご一行が先生の引率でやってきた。

「もうそろそろ時間ですが入って大丈夫ですか?」と聞かれ、さすがに廊下で待たせるには行かないので、中に入って待ってもらうことに。

しかし、時間になっても担当の学生が一向に戻ってこない。

担当の学生とは別の院生が一人やってきたので、まずい状況である旨を必死に相談したのだけれど

「あ、そうなんですねー」

とめっちゃめちゃ他人事で対応されてしまった。

焦りながら、漏らしそうになりながら、学生の帰りを待つ。

という夢を見た。


心臓に良くない…

ああ今日の快眠度は50%を切っていることだろう。

「K上の」代数曲線

 I \subset \overline{K}[X] を多項式環のイデアルとする。多項式環なので  I は多項式のイメージ。ちなみに一変数っぽく書いているけど、 \overline{K}[X] := \overline{K}[X_1, \ldots , X_n ] である。

ここで、多項式(イデアル)の  I 零点集合

 V_I = \{ P\in \mathbb{A}^n \mid f(P) = 0, \forall f \in I \}

を考える。多項式の零点を集めた集合のことで、ようするに楕円曲線  Y^2 - X^3 - aX - b = 0 とか円  Y^2 + X^2 - 1 = 0 の解の集合みたいなものを考えたいということだ。

イデアルと零点の立場を逆転させてみよう。 V を適当な代数的集合とする。 V を零点にもつような多項式の集合を考える。

 I(V) = \{ f\in \overline{K}[X] \mid f(P) = 0, \forall P \in V \}

これは  \overline{K}[X] のイデアルとなる。ようするに零点集合として  V を含むような多項式全部のせ。


さて、ここが一番重要だが  I(V) K[X] の元によって生成されるとき、 V K 上定義されるという。このとき  V/K のように表す。「 K 上定義される」というのはここからきていたのだ。

そもそも「生成される」とあるが、 \overline{K}[X] は有限個の基底から生成されるのか?イエスだ。ヒルベルトがいっている。ヒルベルトの基底定理といって、 \overline{K}[X] が有限生成であることが保証されている。これらが全部  K 上の多項式になっていれば  K 上定義されるということだ。

円は  V : X^2 + Y^2 = 1 を満たす  \overline{K} 上の代数的集合だ。 f(X, Y) = X^2 + Y^2 - 1 とすると、 f(X, Y) \in \overline{K}[X] であり、V (f) = f\, \overline{K}[X, Y] の零点集合である。

ここで、 f'(X, Y) = 2X^2 + 2Y^2 - 2 としたとき、 (f') V を零点に持つ多項式イデアルである。よって  I(V) の元。

また、 f''(X, Y) = \sqrt[3]{2} X (X^2 + Y^2 - 1) みたいなやばそうなやつに対しても、 (f'') V を零点に持つ多項式イデアルだ。これも  I(V) の元。しかし明らかに  K[X, Y] の元ではない。

一方で、 f''(X, Y) = \sqrt[3]{2} X \, f(X, Y) ではあり、 \sqrt[3]{2} X \in \overline{K} [X, Y] である。したがって、 f'' f の生成するイデアルの中に入っちゃっているわけだ。

よって、証明はしていないが、ここまで見た例の中でいうと、 I(V) の生成元  f K 上の多項式になっており、 V K 上定義されていそうである。

こんな感じで考えれば良いと思う。


たとえば、楕円曲線を生成する多項式  f(X, Y) = Y^2 - X^3 - aX - b のときも、 f の係数が何になっているか考えれば十分と思う。具体的には  a, b \in K であるような係数体が、楕円曲線の定義体になっていると考えればよさそう。


詳細は [AEC, I. Algebraic Varieties, p.2] あたりを参照。

AECのメモ

不変微分の定義

  • [AEC III.5, The Invariant Differential, p.75]
  • 不変微分はtranslation-by- Q-mapに対して不変であるの証明 [AEC III.5.1, p.76]

C上の楕円曲線と微分形式の線積分

  • [AEC, VI.1, Elliptic Integrals, p.158]

K上定義された代数的集合

  • defined over [AEC, I.1. Affine Variety, p.2]

代数多様体の同型射

  • rational map [AEC, I.3 Maps Between Varieties, p.11]
    • defined over  K
  • morphism [AEC, I.3 Maps Between Varieties, p.12]
    • rational mapかついくつかの条件
  • isomorphic [AEC, I.3 Maps Between Varieties, p.13]
    • morphism  \phi : V_1 \to V_2, \; \psi : V_2 \to V_1 が存在して、 \psi \circ \phi, \; \phi \circ \psi がidentity mapであるとき、 V_1/K, V_2/K K 上同型であるという(単にrational mapだけではだめ)

分数の合同式についての疑問

クンマーの合同式でよく出てくる分数の合同式.あの合同式はうまく定義されているんだろうか.

 \cfrac{p}{q}, \cfrac{r}{s} をそれぞれ既約分数として、 q, s m と素であるとする.

このとき「分数の合同式」

 \cfrac{p}{q} \equiv \cfrac{r}{s} \pmod{m}

 \cfrac{p}{q} - \cfrac{r}{s}

を計算し,既約分数で表示したときの分子が  m で割り切れること,と定義する.


気になるのは上の合同式と,分数を  \bmod{m} に埋め込んだ

 \cfrac{p}{q} \mapsto p q^{-1} \pmod{m}

ときの「整数の合同式」

 p q^{-1} \equiv r s^{-1} \pmod{m}

が同値であるかということだ. q^{-1}, s^{-1} \bmod{m} における  p, q の逆元である.

例:

具体例で考えてみる.

 \bmod{7} とし, \cfrac{8}{3}, \cfrac{3}{2} とする.それぞれ既約分数である.

「分数の合同式」は以下のように成立する:

 \cfrac{8}{3} - \cfrac{3}{2} = \cfrac{16 - 9}{6} = \cfrac{7}{6}

よって,分子が  7 で割り切れるので

 \cfrac{8}{3} \equiv \cfrac{3}{2} \pmod{7}


一方で, \bmod{7} での  3, 2 の逆元はそれぞれ  5, 4 である.よって

 8 \cdot 3^{-1} - 3 \cdot 2^{-1} \equiv 8 \cdot 5 - 3 \cdot 4 \equiv 0 \pmod{7}

として,たしかに普通の合同式の方も成立している.


うーん,今のところうまくいっている気がする.