Memorandums?

This blog is written about technical-discovery and daily-event.

「MLP深層学習」の誤植?

はじめに

お久しぶりです!
あまり更新しなくてすみません。

専門書の解説を書こうかな〜とか思ってはいたのですが、毎回ノートにまとめたら満足してしまってました(^_^;)

さて、今回は、MLPの深層学習本を読んでいて、疑問に思った点・誤植と思われる点をまとめていきたいと思います。

合っていても間違っていても、
「それは確かに間違っている!」とか「それは〜だから合ってるわ、何言ってんじゃボケ〜」
などと教えていただけたら幸いです!

まずは、本の紹介。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

第7刷です。
ちなみに第1刷・第2刷の誤植情報は、
http://www.kspub.co.jp/download/1529021a.pdf
に掲載されています。

それでは、いきます。

[5/9]1つ誤植を追加しました。

p37(3.3)とその次の式

元の式:
{\displaystyle
\textbf{w}^{(t+1)}=\textbf{w}^{(t)}-\epsilon\Delta E_t + \mu \Delta \textbf{w}^{(t-1)}
}

Momentumは、過去の重みの修正量を今回の重みの修正量に反映させる方法です。
更新後の重みベクトルを \textbf{w}^{(t+1)}とするならば、
1つ前の重みベクトルは、 \textbf{w}^{(t)}のはずです。
ですので、

{\displaystyle
\textbf{w}^{(t+1)}=\textbf{w}^{(t)}-\epsilon\Delta E_t + \mu \Delta \textbf{w}^{(t)}
}
となると思います。
また、その次のページの式(3.3)の書き換えは、

元の式:

{\displaystyle
\Delta\textbf{w}^{(t)} = \mu \Delta \textbf{w}^{(t-1)}-\epsilon\Delta E_t
}

となっていますが、 \Delta\textbf{w}^{(t-1)}\equiv \textbf{w}^{(t-1)}-\textbf{w}^{(t-2)}
の定義にしたがって、先ほどの式を変形すれば、

{\displaystyle
\Delta\textbf{w}^{(t+1)}=\mu \Delta \textbf{w}^{(t)} - \epsilon \Delta E_t
}
となるはずです。


p42(4.1)の前の文中の式

これは小さな誤植と思われます。

文中抜粋:

{\displaystyle
バイアスb_jをそのユニットと各ユニットjとの結合の重みw_{0j}^{(l)}=b_j^{(l)}と考えることとします。
}

(l-1)層目からl層目への重み行列は、行方向にl層目のユニット、列方向に(l-1)層目のユニットが並びます。
これは、l層目への総入力は、(l-1)層目のユニットの総和で表されるためです。
そして、ここでは、バイアスも(l-1)層目の0番目のユニットの1つと考えてしまおう!としています。
よって、この式は、

{\displaystyle
w_{j0}^{(l)}=b_j^{(l)}
}
でしょう。


p51(4.15)の前の文中の式

元の式:
{\displaystyle
デルタの逆伝播計算は {\Delta}^{(L)}=\textbf{D}-\textbf{Y}とした後,...
}

デルタつまり、 \delta_j^{(l)}=\frac{\partial E_n}{\partial u_j^{(l)}}を成分に持つ行列を求めれば、
逆伝播計算が出来ます。
 \delta^{(l)}を求めるには、\delta^{(l+1)}を求める必要があり、
つまりは、 \delta^{(L)}を最初に求める必要があります。
 \delta^{(L)}は、ErrorFunc.やActivationFunc.によって異なりますが、
回帰やクラス分類において、ErrorFunc.に二乗誤差やCrossEntropy、ActivationFunc.にLogistic関数やSoftmax関数を使用する場合は、
計算式が同じになります。それが、 \delta_j^{(L)}=y_j-d_jです。
よって、デルタ(行列)は、

{\displaystyle
{\Delta}^{(L)}=\textbf{Y}-\textbf{D}
}
となると思います。


p85 特徴マップのサイズの式

元の式:
{\displaystyle
(W-2 \lfloor H/2 \rfloor) \times (W-2 \lfloor H/2 \rfloor)
}

CNNで畳込みを行ったときに、出力される特徴マップのサイズは、元画像のサイズ(画素数)とフィルタのサイズ(画素数)で決まります。
画像内にフィルタ全体が収まる範囲内でフィルタを動かしたとき、単純に考えれば、特徴マップのサイズは、

{\displaystyle
(W-(H-1)) \times (W-(H-1))
}
となる気がします。
元の式の間違いのパターンを示します。
元画像サイズW=10, フィルタサイズH=4のとき、
元の式では、 6\times 6となります。
ですが、実際には、 7\times 7です。

ただ、元の式は、「ふち」の量 \lfloor H/2 \rfloorを計算式に含めるといった意味があるともとれます。
この後にpaddingの話がありますが、この時に「ふち」の分だけ画像をサイズを大きくするという作業があるため、
+1程度は誤差とみなし、 \lfloor H/2 \rfloorの式を使おうという意図があるのかもしれません。(?)

また、paddingやstrideも考慮すると、特徴マップのサイズは、
padding量を P、stride量を Sとすると、

{\displaystyle
\lfloor \frac{W+2P-(H-1)}{S} \rfloor
}
になるのではないかと考えています。


[5/9追記] p92,p93 画素ごとの平均の式

元の式:

{\displaystyle
\tilde{x}_{ijk}=\sum^N_{n=1}x_{ijk}^{(n)}
}

これは明らかに間違っていると思うのですが...
平均なので、1/Nがいるはずです。
よって、正しい式は、

{\displaystyle
\tilde{x}_{ijk}=\frac{1}{N}\sum^N_{n=1}x_{ijk}^{(n)}
}

93ページの文中の式も同じです。
元の式:

{\displaystyle
\bar{x}_{ij}=\sum_{(p,q)\in P_{ij}}x_{i+p,j+q}
}

正しい式:

{\displaystyle
\bar{x}_{ij}=\frac{1}{H^2}\sum_{(p,q)\in P_{ij}}x_{i+p,j+q}
}


おわりに

以上が誤植?と思った箇所です!
本に誤植があると、間違いを見つけるまでにかなり時間がかかりますが、
本の間違いを見つけられるほど、内容を理解し、間違いについて調べるからこそ力がつくのかなとも思います!
ただ、間違いをカンペキに理解するほどの時間がないので困りますが...(汗)

この訂正が合っているのか間違っているのか、詳しいかた、教えていただけると嬉しいです。
ではではー