レポート1
- 8. レポート:機械学習
要点
線形回帰
(1) 線形回帰モデル
・教師あり学習の一種で、ある入力から出力を予測するモデル
・線形回帰モデルは下記のように、入力と未知パラメータの内積により表現される
y� = 𝒘𝒘𝑻𝑻
𝒙𝒙 + 𝑤𝑤0 = � 𝑤𝑤𝑗𝑗 𝑥𝑥𝑗𝑗 + 𝑤𝑤0
𝑚𝑚
𝑗𝑗=1
・未知パラメータ wT , wo を最小二乗法により、算出する
平均二乗誤差
MSEtrain =
1
𝑛𝑛𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑡𝑡
� �𝑦𝑦�𝑖𝑖
(𝑡𝑡𝑡𝑡 𝑡𝑡𝑡𝑡 𝑡𝑡)
− 𝑦𝑦𝑖𝑖
(𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑡𝑡)
�
2
𝑛𝑛𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑡𝑡
𝑖𝑖=1
平均二乗誤差が最小になるように、w に関して偏微分したものが 0 になるような w を求
める。
𝜕𝜕MSE𝑡𝑡𝑡𝑡 𝑡𝑡𝑡𝑡 𝑡𝑡
𝜕𝜕𝒘𝒘
= 0
(2) データ分割とモデル汎化性能測定
・モデルの汎化性能を測定するため(未知のデータに対して精度は高いかを判定する)
に学習用データと検証用データに分割する
・学習用データと検証用のデータの割合は 4:1 程度にするのが一般的
非線形回帰
(1) 非線形回帰モデル
・入力 xi を非線形関数φ(xi)に写像し、非線形関数φ(xi)と未知パラメータの内積により、
非線形回帰モデルを実現する。
・非線形関数は多項式関数、ガウス型基底関数が使用される。
多項式関数:φ𝑗𝑗 = 𝑥𝑥 𝑗𝑗
ガウス型基底関数:φ𝑗𝑗(x) = exp�
�𝑥𝑥−𝜇𝜇𝑗𝑗�
2
2ℎ𝑗𝑗
�
・未知パラメータは線形回帰同様に、最小二乗法や最尤法により算出
(2) 正則化法
・学習データに対して小さな誤差を得られたが、テスト誤差が大きいままである⇒過学習
- 9. 過学習を解消する方法として正則化法があげられる。
正則化法:学習の誤差に正規項を追加することにより、とりうる重みの値の範囲を制限し、
過度の重みが訓練データに対してのみ調整することを防ぐ。
𝑆𝑆𝛾𝛾 = (𝒚𝒚 − 𝝋𝝋𝝋𝝋)𝑇𝑇(𝒚𝒚 − 𝝋𝝋𝝋𝝋) + 𝛾𝛾𝛾𝛾(𝒘𝒘)
よく使用される正規化は下記の 2 つ。
・L1 正規化(ラッソ回帰)
一部のパラメータの値をゼロにすることで、特徴選択を行う
・L2 正規化(リッジ回帰)
パラメータの大きさに応じてゼロに近づけることで、汎化された滑らかなモデルを得る
ことができる。
(3) 汎化性能
・ホールドアウト法
学習用データと検証用データに分割し、モデルの汎化性能を測定。
ただし、データ少数の場合、性能評価の精度は低い。
・クロスバリデーション(交差検証)
学習用データと検証用データの分割を複数回行い、それぞれ学習・検証を行うことで、
性能評価の精度が高くなる。
ロジスティック回帰
(1) ロジスティック回帰モデル
・分類問題を解くための教師あり学習
・m 次元のベクトルに対して、出力(2 値問題):0 or 1 を判定する
・2 値の分類問題ではシグモイド関数が使用される。
特徴としては 0~1 の範囲をとる
σ(x) =
1
1+exp(−𝑎𝑎𝑎𝑎)
・P(𝑌𝑌 = 1|𝑥𝑥) = 𝜎𝜎(𝒘𝒘𝑻𝑻
𝒙𝒙 + 𝑤𝑤0)において、データ Y は確率 0.5 以上:1、0.5 未満:0
(2) 最尤推定
・最尤推定
データを固定し、パラメータを変化させたとき、尤度関数を最大化するようなパラメータ
を選ぶ推定方法
・尤度関数の最大となるパラメータを推定する際、最小二乗法の最小化とあわせるために、
尤度関数にマイナスをかけて最小化するのが一般的である。
計算を容易にするために対数をとる。
- 10. (3) 勾配降下法
・対数尤度関数をパラメータで微分して 0 になる値を計算するのは困難のため、反復学習
によりパラメータを逐次的に更新する方法
𝒘𝒘(k + 1) = 𝒘𝒘𝒌𝒌
− 𝜂𝜂
𝜕𝜕𝜕𝜕(𝒘𝒘)
𝜕𝜕𝒘𝒘
・更新料≒0 になったとき、勾配が 0 になったときである
𝜕𝜕𝜕𝜕(𝒘𝒘)
𝜕𝜕𝒘𝒘
≓ 𝟎𝟎
・パラメータを更新する際、すべてのデータに対する和を取る必要がある
(4) 確率的勾配降下法(SGD)
・勾配降下法とは異なり、データを 1 つずつランダムに選んでパラメータを更新
⇒計算時間が短縮され、効率よく最適な解を探索可能
(5) 分類の評価方法
・混同行列により評価される
・評価指標
(1) 正解率:全データの中、どれだけ予測が当たったかの割合
(2) 再現率:実際に正であるものの中で、正だと予測できた割合
(3) 適合率:予測が正の中で、実際に正であったものの割合
(4) F 値:適合率と再現率の調和平均
主成分分析
・教師なし学習の1つで、データを低次元に圧縮する手法
・情報量を保ちつつ、次元を圧縮する。
・特異値分解より、固有値を算出し、固有値の大きさ(分散の大きさ)が大きいほど、その成
分の寄与率が大きいことを示す。つまり、次元削減の際は固有値の大きい成分を残すよう
にしていく。
- 11. アルゴリズム
(1) k 近傍法(kNN)
・分類問題の解決するための教師あり学習
・最近傍のデータを k 個取ってきて、それらがもっとも多くの所属するクラスに識別
・k の値によって結果も変わる
(2)k-平均法(k-NN)
・教師なし学習の 1 つ、クラスタリング手法
・与えられたデータを k 個にのクラスタに分解する
・各クラスタの中心の初期値を変えるとクラスタの結果も変わる
サポートベクトルマシン
・教師あり学習の 1 つで、2 値分類を解決する手法
・マージンが最大となる線形判別関数を算出することにより、2 値分類を行う
マージン:線形判別にもっとも近いデータ点との距離
・線形判別関数に影響するデータは最大マージン上の○のみ
・過学習を抑制するために、SVM の目的関数にヒンジ損失などの誤差ペナルティが加算さ
れる
・非線形分離の際は特徴量を非線形関数に写像し、その空間を線形に分類する
・非線形関数に写像する際に、カーネル関数が用いられる
カーネル関数 𝑘𝑘�𝑥𝑥𝑖𝑖, 𝑥𝑥𝑗𝑗� = 𝜑𝜑(𝒙𝒙𝒊𝒊)𝑇𝑇
φ(𝒙𝒙𝒋𝒋)
- 29. -10 -8 -6 -4 -2 0 2 4 6 8 10
0
0.05
0.1
0.15
0.2
0.25
レポート:深層学習(前編 1)
要点
Section1:入力層~中間層
・入力:x=[x1,x2,・・・・・・xm]
入力層から中間層からの重みを w とする
𝒘𝒘 = �
𝑤𝑤11 ⋯ 𝑤𝑤𝟏𝟏𝟏𝟏
⋮ ⋱ ⋮
𝑤𝑤𝑚𝑚1 ⋯ 𝑤𝑤𝑚𝑚𝑚𝑚
�
さらに、バイアス b=[b(1),・・・・・・, b(1)]とするとき、
中間層 u1 は下記の行列計算で表現できる。
𝒖𝒖1 = 𝒙𝒙𝒘𝒘𝑻𝑻
+ 𝒃𝒃 (1×n 行列)
Section2:活性化関数
(1)活性化関数の概要
・前層と重みの行列計算結果を写像することに非線形関数化する。
・非線形化により、NN の層を深くする効果が表れる。
(2)活性化関数の種類
(2)-1 シグモイド関数
・下記の式で表現される
𝑓𝑓(u) =
1
1 + exp(−𝑢𝑢)
・シグモイド関数は 0~1 の値をとる。
・出力変化が微小のため、勾配消失問題を引き起こしやすい
シグモイド関数の微分
- 30. ・微分の最大値が 0.25、u の絶対値が 6 以上ではほぼ 0 になることより、勾配消失問題は
起こりやすくなる。
(2)-2 Relu 関数
・下記の式で表現される。
f(u) = �
u, (u > 0)
0, (u ≤ 0)
・最近では最も使用されている関数
・勾配消失問題の回避とスパース化に貢献
(スパース化は u≤0 のとき f(u)=0 になることにより、演算量が減る)
Relu 関数の微分
・u>0 のときに 1 より、勾配は減衰されない
Section3:出力層
(1) 誤差関数
・訓練データの入力データによる出力と正解データの差がどれくらいあるかを表現するた
めの関数
・回帰問題では二乗誤差が用いられる
二乗誤差:𝐸𝐸𝑛𝑛(𝐰𝐰) =
1
2
∑ (𝑦𝑦𝑗𝑗 − 𝑑𝑑𝑗𝑗)2𝑙𝑙
𝑗𝑗=1 =
1
2
‖(𝒚𝒚 − 𝒅𝒅)‖2
・分類問題では交差エントロピーが用いられる
交差エントロピー:𝐸𝐸𝑛𝑛(𝐰𝐰) = − ∑ 𝑑𝑑𝑗𝑗 𝑙𝑙𝑙𝑙 𝑙𝑙𝑦𝑦𝑗𝑗
𝑙𝑙
𝑗𝑗=1
-10 -8 -6 -4 -2 0 2 4 6 8 10
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
- 31. (2)出力層の活性化関数
・出力層と中間層で利用される活性化関数は異なる
・回帰:そのままの大きさを出力するため、恒等写像 f(u)=u を用いる
・分類:出力層の出力は 0~1 の範囲に限定し、総和を 1 にする必要あり
2 値分類:シグモイド関数
𝑓𝑓(u) =
1
1 + exp(−𝑢𝑢)
多値分類:ソフトマックス関数
𝑓𝑓(𝐮𝐮, 𝐢𝐢) =
𝑒𝑒 𝑢𝑢𝑖𝑖
∑ 𝑒𝑒 𝑢𝑢𝑘𝑘𝑘𝑘=𝐾𝐾
𝑘𝑘=1
Section4:勾配降下法
(1) 目的
誤差関数が 0 になるように w を最適化する
(2) 勾配降下法
・パラメータ更新にすべての訓練データを利用する
・下記の計算により、w が更新される
𝒘𝒘(𝒕𝒕+ 𝟏𝟏)
= 𝒘𝒘𝒕𝒕
− 𝜖𝜖𝛻𝛻𝐸𝐸
・εにより、パラメータ更新が変わる
大きすぎる:最適な w に収束せず、発散する
小さすぎる:学習が遅く、最適な w に収束しない
(3) 確率的勾配降下法(SGD)
・ランダムに抽出したサンプルの誤差を利用する
・下記の計算により、w が更新される
𝒘𝒘(𝒕𝒕+ 𝟏𝟏)
= 𝒘𝒘𝒕𝒕
− 𝜖𝜖𝛻𝛻𝐸𝐸𝑛𝑛
・望まない局所極小解に収束するリスクを軽減
・逐次更新可能のため、オンライン学習可能
(4) ミニバッチ勾配降下法
・ランダムに分割したデータの集合(ミニバッチ)に属するサンプルの平均誤差を利用する
・下記の計算により、w が更新される
𝒘𝒘(𝒕𝒕+𝟏𝟏)
= 𝒘𝒘𝒕𝒕
− 𝜖𝜖𝛻𝛻𝐸𝐸𝑡𝑡
E𝑡𝑡 =
1
𝑁𝑁𝑡𝑡
∑ 𝐸𝐸𝑛𝑛𝑛𝑛∈𝐷𝐷𝑡𝑡
N𝑡𝑡 = |𝐷𝐷𝑡𝑡|
- 33. 演習問題
(1) ディープラニングは。結局何をやろうとしているのか 2 行以内で述べよ。
また、次の中のどの値の最適化が最終目的か。全て選べ。
【解答】
誤差関数が 0 に近づくように、重みを最適化する。
最終目的・・・③重み[W]の最適化
重みの最適化の際、汎化性持たせるもしくは、過学習にならないように誤差関数にノルムを
加算するなどの処理が必要となる
(2) 次のネットワークを紙にかけ。
入力層:2 ノード 1 層
中間層:3 ノード 2 層
出力層:1 ノード 1 層
線形の場合、ニューラルネットワークを多層化する必要性がない。
多層化することにより、性能向上することが知られているため、各ニューロンの出力は
活性化関数により、非線形化する必要がある。
(3) 動物分類の実例を入れてみよう
(4) u = 𝑤𝑤1 𝑥𝑥1 + 𝑤𝑤2 𝑥𝑥2 + 𝑤𝑤3 𝑥𝑥3 + 𝑤𝑤4 𝑥𝑥4 + 𝑏𝑏 の数式を python で書け。
u1=np.dot(x,W1)+b
np.dot()は行列計算を表す。掛け合わせる行列の次元に誤りがあると、エラーとなるの
で注意が必要。
- 35. ・差分の絶対値を取った場合、微分不可能のため 2 乗をとる必要がある。
・誤差関数を微分すると係数 2 がかけられて、微分後に 1/2 が消去され、計算が容易にな
る。
(9)①~③の数式に該当するソースコードを示し、一行づつ処理を説明せよ。
f(𝑖𝑖, 𝑢𝑢) =
𝑒𝑒 𝑢𝑢𝑖𝑖
∑ 𝑒𝑒 𝑢𝑢𝑘𝑘𝐾𝐾
𝑘𝑘=1
① def softmax(x):
関数定義
② np.exp(x)
③ np.sum(np.exp(x), axis=0) と np.sum(np.exp(x))
正規化するために exp(x)の加算を実施している
(10) ①~②の数式に該当するソースコードを示し、一行づつ処理を説明せよ。
𝐸𝐸𝑛𝑛(𝒘𝒘) = − � 𝑑𝑑𝑖𝑖
𝑙𝑙
𝑖𝑖=1
𝑙𝑙𝑙𝑙 𝑙𝑙𝑦𝑦𝑖𝑖
① def cross_entropy_error(d,y):
関数定義
② -np.sum(np.log(y[np.arange(batch_size),d]+1e-7))
正解ラベルの確率を取り出し、損失関数を計算している
(11)該当するソースコードを抜き出せ。
①𝒘𝒘(𝒕𝒕+ 𝟏𝟏)
= 𝒘𝒘(𝒕𝒕)
− 𝜖𝜖∇𝐸𝐸
network[key] -= learming_rate*grad[key]
③ ∇𝐸𝐸 =
𝜕𝜕𝜕𝜕
𝜕𝜕𝒘𝒘
= �
𝜕𝜕𝜕𝜕
𝜕𝜕𝑤𝑤1
∙∙∙∙
𝜕𝜕𝜕𝜕
𝜕𝜕𝑤𝑤 𝑀𝑀
�
grad=backward(x,d,z1,y)
(12)オンライン学習とは何か。2 行でまとめよ
リアルタイムで取得したデータを逐次確率的勾配法により、ネットワークのパラメータ
を逐次更新していくこと。
③ ①
②
②
①
- 36. (13)この式の意味を図に書いて説明せよ。
𝒘𝒘(𝒕𝒕+𝟏𝟏)
= 𝒘𝒘𝒕𝒕
− 𝜖𝜖𝛻𝛻𝐸𝐸𝑡𝑡
適切な学習値を設定しない場合、最終目的地(E の最小値)に収束しない。
(14)誤差逆伝播では不要な再帰的処理を避けることができる。
既に行った計算結果を保持しているソースコードを抽出せよ。
(15)2 つの空欄に該当するソースコードを探せ
𝜕𝜕𝜕𝜕
𝜕𝜕𝒚𝒚
𝜕𝜕𝒚𝒚
𝜕𝜕𝒖𝒖
delta2=functions.d_sigmoid_with_loss(d,y)
𝜕𝜕𝜕𝜕
𝜕𝜕𝒚𝒚
𝜕𝜕𝒚𝒚
𝜕𝜕𝒖𝒖
𝜕𝜕𝒖𝒖
𝜕𝜕𝑤𝑤𝑗𝑗𝑗𝑗
(2)
grad[‘W2’]=np.dot(z1.T,delta2)
同様に delta2 を保持して、再帰的処理を避けて計算
delta2 を保持して、再帰的処理を避けて計算
同様に delta2 を保持
入力層から中間層は delta1 を保持して計算
同様に delta1 を保持して計算
- 47. 学習回数を変えたとき
学習 1000→5000 回
1000 回まで収束しているので、このモデルでは 1000 回程度の学習回数で十分。
バッチ数を変えたとき
・バッチ数:10 ・バッチ数:500
バッチ数が少ないと、1 つ 1 つのサンプルの影響度が高くなる。そのため、10 個のうちに
特異なデータがあると、学習の更新が大きくなり、正解率の収束性が悪くなる。
対して、500 個の場合は 1 つ 1 つのサンプルの影響度は低いため、正解率が収束しやすい
と考えられる。
学習率を変えたとき
・学習率:0.001 ・学習率:0.5
学習率が低いと学習が進まず、重みが最適化されないため、テスト正解率は 20%程度。
学習率が 0.5 の場合、学習の更新が大きくなり、正解率 90%程度の収束が速くなる。
ただし、モデルによっては学習率を大きくすることで発散する可能性があるため、適切な
学習率を設定する必要がある。