DNN_前編 2 (確認テストの考察)

<font color="Blue">『
連鎖律の原理を使い、dz/dxを求めよ。
(5分)
z=t2
t=x+y
』</font>
→
#####回答例：
dz/dx=2t=2(x+y)

#####【考察】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/3768b549-37f3-b972-42e5-96f7608f8e5c.png)
左側の式は、連鎖律を使った場合の結果。
右側の式は、検算として、連鎖律を使わないで、微分を行った。
最終的に出てきた答えを確認してみると、実際に連鎖律を使った場合と同じ結果(2t=2(x+y))になっている事が確認出来る。


#Section1:勾配消失問題について
<font color="Blue">『
シグモイド関数を微分した時、入力値が0の時に最大値を取る。その値として正しいものを選択肢から選べ。
(3分)
(1) 0.15
(2) 0.25
(3) 0.35
(4) 0.45
』</font>
→
#####回答例：
(2)

#####【考察】
シグモイド関数の微分は、f(x)’=(1 - f(x))f(x)の式であらわされる。
シグモイド関数は、f(x)=1/(1+e^(-x))なので、f(0)=0.5となる。
これから、f(0)’=(1-0.5)*0.5=0.25になる。


<font color="Blue">『
重みの初期値に0を設定すると、どのような問題が発生するか。簡潔に説明せよ。
(3分)
』</font>
→
#####回答例：
全ての値が同じ値で伝わるため、パラメータのチューニングが行われなくなる。

#####【考察】
重みが全てｾﾞﾛになると、学習前は、入力値と重みの総和uがゼロになり、どのノードも活性化しない事になる(全てのノードが均一に活性化しない)。
そのためノード数が多くても、同じ層にある全てのノードが同じ活性化具合になる。そのため、学習時にノードごとにパラメータのチューニングが行われなくなる（学習後も、全ての同じ階層にあるノードが、常に同じ値を出力し続ける）。


<font color="Blue">『
一般的に考えられるバッチ正規化の効果を2点挙げよ。
(5分)
』</font>
→
#####回答例：
・計算の高速化
・勾配消失が起きづらくなる

#####【考察】
正規化を行う事で、データに対するばらつきが抑制されるため、計算がコンパクトで済む。

#Section2: 学習率最適化手法について
<font color="Blue">『
モメンタム・AdaGrad・RMSPropの特徴を
それぞれ簡潔に説明せよ。
(3分)
』</font>
→
#####回答例：
モメンタム：谷間に陥ってから、収束するまでの時間が早い。
AdaGrad：緩やかな斜面に対して、最適値に近づきやすい。
RMSProp：パラメータの調整が少なくて済む。

#####【考察】
モメンタムは、パラメータの更新時に、前回のパラメータの更新量を加味する。
AdaGradは、頻出する勾配の成分よりも、稀に現れる成分を、より重視する。
RMSPropは、AdaGradを改良した方法。急な斜面対しても対応出来る。

#Section3:過学習について
<font color="Blue">『
機械学習で使われる線形モデル（線形回帰、主成分分析…etc）の正則化は、
モデルの重みを制限する事で可能になる。
前述の線形モデルの正則化手法の中にリッジ回帰という手法があり、
その特徴として、正しいものを選択しなさい。</font>
<font color="Blue">
(a) ハイパーパラメータを大きな値に設定すると、すべての重みが限りなく0に近づく
(b) ハイパーパラメータを0に設定すると、非線形回帰となる
(c) バイアス項についても、正則化される
(d) リッジ回帰の場合、隠れ層に対して正則化項を加える
』</font>
→
#####回答例：
(a)

#####【考察】
aについては、リッジ回帰の特徴になるため正解。限りなく0に近づくが、0にはならない。
bについては、もともとが線形回帰に対するアプローチなので、非線形回帰になる事はない。
cについては、バイアスに対しては、正則化は一切行われない。
dについては、隠れ層ではなく、誤差関数に対して、正則化項が加えられる。

<font color="Blue">『
下図について、L1正則化を表しているグラフは
どちらか答えよ。
（3分）</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/78e73c2c-c451-0e01-206a-cc0c7a73432b.png)
<font color="Blue">』</font>
→
#####回答例：
右側のLasso推定量

#####【考察】
L1（右側）については、スパース化の解決策になる。L1の場合、L2と違い、値としてゼロを取る事が出来るので、計算のリソースを無駄にしないのでスパース化の解決につながる。

L2（左側）については、値としてゼロにはならないため、計算リソースは使われるが、製造工場において成果を発揮している。計算リソースを気にしないでいい場合は、L2を使う価値はある。


<font color="Blue">『
5. L2パラメータ正則化
深層学習において、過学習の抑制・汎化性能の向上のために正則化が用いられる。そのひとつに、L2
ノルム正則化（Ridge, Weigh Decay）がある。以下は、L2正則化を適用した場合に、パラメータの更新を
行うプログラムである。あるパラメータparamと正則化が無い時に、そのパラメータに伝播される誤差
の勾配gradが与えられたとする。
最終的な勾配を計算する（え）にあてはまるのはどれか。ただしrateはL2正則化の係数を表すとす
る。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9151b6e3-cf2d-f104-7007-426171144612.png)
<font color="Blue">』</font>
→
#####回答例：
（4）

#####【考察】
L2ノルムは、param2なので、勾配計算のため微分を行うと、2 x paramになる。
最初の2は定数なので、正則化の係数rateに吸収されても本質は変わらないので、paramが正解になる。


<font color="Blue">『
6.L1パラメータ正則化
以下はL1ノルム正則化（Lasso）を適用した場合に、パラメータの更新を行うプログラムである。ある
パラメータparamと正則化がないときにそのパラメータに伝播される誤差の勾配gradが与えられたと
する。
最終的な勾配を計算する（お）に当てはまるのはどれか、ただしrateはL1正則化の係数を表すとす
る。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/850d7641-f136-2ccb-94d7-56e8068306c4.png)
<font color="Blue">』</font>
→
#####回答例：
（3）

#####【考察】
L1ノルムは、paramなので、勾配計算のため微分を行うと、定数になる。
係数は定数なので、定数の部分はL2同様、正則化の係数rateに吸収されても本質は変わらない。
つまり、np.sign(param)が正解になる(マイナスの場合は、プラスにする必要があるため)。


<font color="Blue">『
7.データ集合の拡張
画像認識などにおいて、精度向上や汎化性能の向上のためにデータ拡張が行られることが多い。デー
タ拡張には、画像を回転・反転させるなど様々な種類がある。以下は画像をランダムに切り取る処理
を行うプログラムである。これは画像中の物体の位置を移動させるなどの意味がある。
（か）にあてはまるのはどれか。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/1ec941cd-3512-23a2-060c-068a331a3ea1.png)
<font color="Blue">』</font>
→
#####回答例：
（4）

#####【考察】
まずは、imageの配列の並びが[縦幅, 横幅, チャンネル]でのあるものを探すと(3), (4)のどちらかかが分かる（並びについては、コード中の h, w, _ = image.shape で確認する事も出来る）。
あとは取り出す順番が、top->bottom, left->rightになっているものになるので、正解は（4）になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/35bfe595-aad6-0ffe-843f-edccdcd07131.png)


#Section4: 畳み込みニューラルネットワークの概念
#

<font color="Blue">『
サイズ6x6の入力画像を、サイズ2x2のフィルタで
畳み込んだ時の出力画像のサイズを答えよ。
なおストライドとパディングは1とする。
(3分)
』</font>
→
#####回答例：
7ｘ7

#####【考察】
$OutputHeight = \dfrac{Height + 2 * Padding - FilterHeight}{Stride} + 1 = \dfrac{6+2*1-2}{1} +1 = 7$
$OutputWidth = \dfrac{Width + 2 * Padding - FilterWidth}{Stride} + 1 = \dfrac{6+2*1-2}{1} +1 = 7$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/7b9b39a2-83ee-0e68-b9f9-aa0930147dc1.png)