「ラビット・チャレンジ」深層学習day1day2まとめ
<全体の考察等>
深層学習のロジックを一つずつ学ぶことで逆にようやく全体像が理解できてきた気がしている。CNNまで学んだうえで、改めてニューラルネットワークの全体像や活性化関数の意味を振り返ることで、結局、主要な考え方を組み合わせて新たなロジックが産まれてきていることが理解できた。
<修了課題(ステージテスト3)の感想>
最尤推定、主成分分析、サポートベクターマシンなどの機械学習関連の出題が多く、一つ一つの細かい特徴等は理解できてなかったことがテストを通じて改めて認識することができた。ケアレスミス等も含め、E資格取得に向け、まだまだ課題が多いことがわかった。
深層学習Day1
◆Section1:入力層~中間層
●ニューラルネットワークの全体像
・明示的なプログラムの代わりに多数の中間層を持つニューラルネットワークを用いて、入力値から目的とする出力値に変換する数学モデルを構築すること
・重みとバイアスの最適化が最終目的
●ニューラルネットワークでできること
・回帰
連続する実数値をとる関数の近似
・分類
性別や動物の種類など離散的な結果を予想するための分析
●数式とコード
●確認テストの考察
端的に何をやろうとしているかという問いかけは最初に頭を整理するうえで非常によかった。また、動物分類の実例等もイメージが沸いた。数式とコードを確認することで、実際に構築していける実感がでてきたように思う。
●参考図書
『やさしく学ぶ ディープラーニングがわかる数学のきほん』 マイナビ
深層学習を学びながら、以前、さらっと読んだ、本書も再確認。基本を改めて確認することで理解が深まった。
◆Section2:活性化関数
●活性化関数とは
ニューラルネットワークにおいて、次の層への出力の大きさを決める非線形の関数
入力値の値によって、次の層への信号のON/OFFや強弱を定める働きをもつ
●中間層用の活性化関数
・ステップ関数
線形分離可能なものしか学習できない
大きな値では出力の変化が微小で勾配消失問題を引き起こす
・RELU関数
勾配消失問題の回避とスパース化に貢献
●全結合NN 単層・複数ノードの数式
●確認テストの考察
数式はRELUの定義まで部分まで丁寧に解説していただき、構造が理解できた
◆Section3:出力層
●出力層の役割
最後に数値化
●誤差関数
二乗和誤差、残差平方和
・二乗する理由
引き算を行うだけでは、各ラベルでの誤差で正負両方の値が発生し、全体の誤差を正しくあらわすのに都合が悪い。二乗してそれぞれのラベルでの誤差を制の値になるようにする
・1/2にする理由
実際にネットワークを学習するときに行う誤差逆伝搬の計算で、誤差関数の微分を用いるが、その際の計算式を簡単にするため。本質的な意味はない。
●出力層の活性化関数
・ソフトマックス関数
多クラス分類
交差エントロピー
・恒等写像
回帰
二乗誤差
二値分類
交差エントロピー
●確認テストの考察
ソースコードの確認と一行ずつ処理を解説していただいたのは非常にありがたく、理解が進んだ
◆Section4:勾配降下法
●勾配降下法
・勾配降下法を利用してパラメータを最適化
誤差E(w)を最小化するパラメータwを発見する
全サンプルの平均誤差
学習率の値によって学習の効率が大きく異なる
・該当するソースコード
・勾配降下法のアルゴリズム
Momentum
Adagrad
Adadelta
Adam
・ランダムに抽出したサンプルの誤差
・メリット
データが冗長な場合の計算コストの軽減
望まない局所極小解に収束するリスクの軽減
オンライン学習ができる
・オンライン学習とは
学習データが入ってくるたびに都度パラメータを更新し、学習を進めていく方法。一方バッチ学習では一度にすべての学習データを使ってパラメータ更新を行う。
●ミニバッチ勾配降下法
・ランダムに分割したデータの集合Dtに属するサンプルの平均誤差
・確率的勾配降下法のメリットを損なわず、計算機の計算資源を有効活用できる
●確認テストの考察
数式の意味を図に書いて説明するという問題は戸惑ったが、印象深く、記憶に残った
◆Section5:誤差逆伝播法
●誤差逆伝搬法とは
算出された誤差を出力層側から順に微分し、前の層前の層へと伝播
最小限の計算で各パラメータでの微分値を解析的に計算する手法
●確認テストの考察
ソースコードの確認を逆伝播の動作と共に追っていただいたは非常にわかりやすい。微分の連鎖率が数式で再現されていることを確認でき、理解が深まった
深層学習Day2
◆Section1:勾配消失問題
●勾配消失の解決法
・活性化関数の選択
・重みの初期値設定
・バッチ正規化
●活性化関数
RELU関数
微分結果が1か0で必要な重みだけが残る
→効果的な動きを見つけてくれスパース化につながる
●重みの初期値設定
・Xavier
重みの要素を前の層のノード数の平方根で除算した値
・He
RELU関数に設定
重みの要素を前の層のノード数の平方根で除算した値に対し√2をかけあわせた値
・確認テスト
重みの初期値に0を設定するとどのような問題が発生するか
正しい学習を行えない
全ての重みの値が均一に更新されるため多数の重みを持つ意味がなくなる
●バッチ正規化
ミニバッチ単位で入力値のデータの偏りを抑制する手法
活性化関数に値を渡す前後にバッチ正規化の処理をはらんだ層を加える
●確認テストの考察
重みの初期値を0にすることの問題を考えることで初期値設定の重要性が理解できた。
◆Section2:学習率最適化手法
●学習率の決め方
学習率最適化手法を利用して学習率を最適化
●モメンタム
誤差をパラメータで微分したものと学習率の積を減算した後、現在の重みに前回の重みを減算した値と慣性の積を加算する
●Adagrad
誤差をパラメータで微分したものと再定義した学習率の積を減算する
●RMSProp
誤差をパラメータで微分したものと再定義した学習率の積を減算する
●Adam
モメンタム及びRMSPropのメリットをはらんだアルゴリズム
●確認テストの考察
それぞれの学習率最適化手法の特徴と課題がよく理解できた。
欠点を改良しながら徐々にアルゴリズムの最適化が進んでいく過程を実感した。
◆Section3:過学習
●正則化
誤差に対して、正則化項を加算することで重みを抑制する
ランダムにノードを削除して学習させること
データ量を変化させずに異なるモデルを学習させていると解釈できる
●確認テストの考察
L1正則化を表すグラフを実際に見ながらその意味を確認することで正則化の理解を深めることができた。L1正則化は一つの重みに対して0のポイントを探し出してくれるのが特徴であることを理解。
◆Section4:畳み込みニューラルネットワークの概念
●全体像
LeNetの構造図
1024個のインプットから10個へ
●畳み込み層
画像の場合、縦、横、チャンネルの3次元のデータをそのまま学習し、次に伝えることができる
3次元の空間情報も学習できるような層が畳み込み層である
フィルターとバイアス
●パディング
フィルターを通すと画像が小さくなるため、1番近い数字で埋めることができる
フィルタをストライド数にもとづいて動かす
●チャンネル
フィルターをとおしてもチャンネル数は減らない
●全結合層のデメリット
画像の場合、縦、横、チャンネルの3次元データだが、1次元のデータとして処理される
RGBの各チャンネル間の関連性が学習に反映されない
●畳み込み層の実装
●プーリング層
対称領域のMax値または、平均値を取得
●確認テストの考察
サイズ6×6の入力画像の確認テストにより、畳込みの動作を理解することがで、その後、ソースコードを確認することで、CNNの実装について理解できた
◆Section5:最新のCNN
●AlexNet
過学習を防ぐ施策としてサイズ4096の全結合層の出力にドロップアウトを使用している
224×224の画像を11×11のフィルタに
→55×55の画像
→27×27の画像
→13×13の画像
→全結合層へ
●参考図書
『ゼロから作るDeep Learning』オライリー・ジャパン
改めて、深層学習について学んだところで、以前途中で挫折していた
この有名な参考図書を確認
以前はとっつきにくいと感じたが、講座と補完して理解を深めるには非常に良いと感じた